harperdb 4.0.6 → 4.0.8
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 +2 -2
- package/bin/harperdb.js +10 -10
- package/launchServiceScripts/launchCustomFunctions.js +8 -8
- package/launchServiceScripts/launchHarperDB.js +8 -8
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +5 -5
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/package.json +14 -15
- package/server/jobs/jobProcess.js +7 -7
- package/utility/scripts/restartHdb.js +6 -6
package/bin/harperdb.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var Eg=Object.defineProperty;var o=(e,t)=>Eg(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var h=d((pV,pl)=>{"use strict";var be=require("path"),dg=require("fs");function Sg(){let e=__dirname;for(;!dg.existsSync(be.join(e,"package.json"));){let t=be.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(Sg,"getHDBPackageRoot");var Et=Sg(),ul="js",on=ul,Tg="harperdb-config.yaml",fg="defaultConfig.yaml",hg="hdb",ll=`hdbServer.${on}`,El=`customFunctionsServer.${on}`,dl=`hdbIpcServer.${on}`,Rg=`restartHdb.${on}`,s_="HarperDB",Si="Custom Functions",Ti="Clustering Hub",fi="Clustering Leaf",n_="Clustering Ingest Service",i_="Clustering Reply Service",Ag="foreground.pid",r_={HDB:s_,IPC:"IPC",CLUSTERING_HUB:Ti,CLUSTERING_LEAF:fi,CLUSTERING_INGEST_SERVICE:n_,CLUSTERING_REPLY_SERVICE:i_,CUSTOM_FUNCTIONS:Si,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"},mg={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"},gg={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},pg={harperdb:s_,ipc:"IPC","clustering hub":Ti,"clustering leaf":fi,"clustering ingest service":n_,"clustering reply service":i_,"custom functions":Si,custom_functions:Si,"pm2-logrotate":r_.PM2_LOGROTATE,logrotate:r_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Ng={CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_INGEST_PROC_DESCRIPTOR:n_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:i_},di={HDB:be.join(Et,"server/harperdb"),IPC:be.join(Et,"server/ipc"),CUSTOM_FUNCTIONS:be.join(Et,"server/customFunctions"),CLUSTERING_HUB:be.join(Et,"server/nats"),CLUSTERING_LEAF:be.join(Et,"server/nats")},Og={HDB:be.join(di.HDB,ll),IPC:be.join(di.IPC,dl),CUSTOM_FUNCTIONS:be.join(di.CUSTOM_FUNCTIONS,El)},Ig={HDB:be.join(Et,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:be.join(Et,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:be.join(Et,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:be.join(Et,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:be.resolve(Et,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Cg={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Sl="support@harperdb.io",bg="customer-success@harperdb.io",Tl=1,Lg=4141,fl="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",yg="https://www.harperdb.io/product",wg=`For support, please submit a request at ${fl} or contact ${Sl}`,hl=`For license support, please contact ${bg}`,Dg="None of the specified records were found.",Mg="hash attribute not found",Ug=`Your current license only supports ${Tl} role. ${hl}`,Pg="Your current license only supports 3 connections to a node.",Bg="127.0.0.1",Hg=1,vg=/^\.$/,Gg=/^\.\.$/,qg="U+002E",Fg=/\//g,Vg="U+002F",xg=/U\+002F/g,kg=/^U\+002E$/,$g=/^U\+002EU\+002E$/,Yg="d",Kg=999999,Wg="*",Qg="--max-old-space-size=",jg="system",Jg="__hdb_hash",Zg=".harperdb",Xg=".hdb",zg="keys",ep="hdb_boot_properties.file",tp=".updateConfig.json",rp="SIGTSTP",sp=24,np=6e4,ip=448,op="blob",ap="trash",_p="schema",cp="transactions",up=".count",lp="id",Ep="install_log.log",dp="run_log.log",Sp="PROCESS_NAME",Tp={SETTINGS_PATH_KEY:"settings_path"},Rl=require("lodash"),fp={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},hp={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Rp={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ap={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"},mp={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"},Ye="hdb_internal:",gp={CREATE_SCHEMA:Ye+"create_schema",CREATE_TABLE:Ye+"create_table",CREATE_ATTRIBUTE:Ye+"create_attribute",ADD_USER:Ye+"add_user",ALTER_USER:Ye+"alter_user",DROP_USER:Ye+"drop_user",HDB_NODES:Ye+"hdb_nodes",HDB_USERS:Ye+"hdb_users",HDB_WORKERS:Ye+"hdb_workers",CATCHUP:Ye+"catchup",SCHEMA_CATCHUP:Ye+"schema_catchup",WORKER_ROOM:Ye+"cluster_workers"},pp={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"},Np="060493.ks",Op=".license",Ip={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules"},Cp={CSV:".csv",JSON:".json"},bp={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Lp={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ar={};ar[m.CREATE_SCHEMA]=m.CREATE_SCHEMA;ar[m.CREATE_TABLE]=m.CREATE_TABLE;ar[m.CREATE_ATTRIBUTE]=m.CREATE_ATTRIBUTE;ar[m.INSERT]=m.INSERT;ar[m.UPDATE]=m.UPDATE;ar[m.UPSERT]=m.UPSERT;ar[m.DELETE]=m.DELETE;var x=Object.create(null);x[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;x[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;x[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;x[m.READ_LOG]=m.READ_LOG;x[m.ADD_NODE]=m.ADD_NODE;x[m.LIST_USERS]=m.LIST_USERS;x[m.LIST_ROLES]=m.LIST_ROLES;x[m.USER_INFO]=m.USER_INFO;x[m.SQL]=m.SQL;x[m.GET_JOB]=m.GET_JOB;x[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;x[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;x[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;x[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;x[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;x[m.REMOVE_NODE]=m.REMOVE_NODE;x[m.RESTART]=m.RESTART;x[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;x[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;x[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;x[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;x[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;x[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;x[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;x[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;x[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var yp={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},wp={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Al={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"},Dp=Rl.invert(Al),f={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_RETAIN:"logging_rotation_retain",LOGGING_ROTATION_ROTATE:"logging_rotation_rotate",LOGGING_ROTATION_ROTATEINTERVAL:"logging_rotation_rotateInterval",LOGGING_ROTATION_ROTATEMODULE:"logging_rotation_rotateModule",LOGGING_ROTATION_TIMEZONE:"logging_rotation_timezone",LOGGING_ROTATION_WORKERINTERVAL:"logging_rotation_workerInterval",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},Mp={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:f.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Up={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Pp={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"},Bp={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Hp={FILE_SYSTEM:"fs",LMDB:"lmdb"},vp={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Gp={DEVELOPMENT:8192,DEFAULT:512},qp={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"},Fp={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"},Vp={ENOENT:"ENOENT",EACCES:"EACCES"},ml={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xp="__clustering__",kp=Object.values(ml),$p=15984864e5,gl={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Yp=Rl.invert(gl),Kp={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"},Wp=111,Qp=`\r
|
|
3
|
-
`,jp={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jp=["*","%"],Zp="unauthorized_access",Xp="func_val",zp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eN={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tN="hdb_ipc_server",rN="hdb_ipc_client_",sN={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"},nN={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iN={STOPPED:"stopped",ONLINE:"online"},oN="3.x.x";pl.exports={LOCAL_HARPERDB_OPERATIONS:x,HDB_SUPPORT_ADDRESS:Sl,HDB_SUPPORT_URL:fl,HDB_PRICING_URL:yg,SUPPORT_HELP_MSG:wg,LICENSE_HELP_MSG:hl,HDB_PROC_NAME:ll,HDB_PROC_DESCRIPTOR:s_,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,SYSTEM_SCHEMA_NAME:jg,HASH_FOLDER_NAME:Jg,HDB_HOME_DIR_NAME:Zg,UPDATE_FILE_NAME:tp,LICENSE_KEY_DIR_NAME:zg,BOOT_PROPS_FILE_NAME:ep,JOB_TYPE_ENUM:Up,JOB_STATUS_ENUM:Ip,SYSTEM_TABLE_NAMES:Ap,SYSTEM_TABLE_HASH_ATTRIBUTES:mp,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Cp,S3_BUCKET_AUTH_KEYS:bp,VALID_SQL_OPS_ENUM:Lp,GEO_CONVERSION_ENUM:wp,HDB_SETTINGS_NAMES:Al,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dp,SERVICE_ACTIONS_ENUM:yp,CLUSTER_MESSAGE_TYPE_ENUM:Pp,CLUSTER_CONNECTION_DIRECTION_ENUM:Bp,CLUSTER_EVENTS_DEFS_ENUM:qp,PERIOD_REGEX:vg,DOUBLE_PERIOD_REGEX:Gg,UNICODE_PERIOD:qg,FORWARD_SLASH_REGEX:Fg,UNICODE_FORWARD_SLASH:Vg,ESCAPED_FORWARD_SLASH_REGEX:xg,ESCAPED_PERIOD_REGEX:kg,ESCAPED_DOUBLE_PERIOD_REGEX:$g,REG_KEY_FILE_NAME:Np,RESTART_TIMEOUT_MS:np,HDB_FILE_PERMISSIONS:ip,SCHEMA_DIR_NAME:_p,TRANSACTIONS_DIR_NAME:cp,LIMIT_COUNT_NAME:up,ID_ATTRIBUTE_STRING:lp,INSERT_MODULE_ENUM:hp,UPGRADE_JSON_FIELD_NAMES_ENUM:Rp,RESTART_CODE:rp,RESTART_CODE_NUM:sp,CLUSTER_OPERATIONS:ar,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:pp,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ye,INTERNAL_SC_CHANNELS:gp,CLUSTERING_MESSAGE_TYPES:Kp,HDB_FILE_SUFFIX:Xg,BLOB_FOLDER_NAME:op,HDB_TRASH_DIR:ap,ORIGINATOR_SET_VALUE:Wp,LICENSE_VALUES:vp,RAM_ALLOCATION_ENUM:Gp,STORAGE_TYPES_ENUM:Hp,TIME_STAMP_NAMES_ENUM:ml,TIME_STAMP_NAMES:kp,PERMS_UPDATE_RELEASE_TIMESTAMP:$p,SEARCH_NOT_FOUND_MESSAGE:Dg,SEARCH_ATTRIBUTE_NOT_FOUND:Mg,LICENSE_ROLE_DENIED_RESPONSE:Ug,LICENSE_MAX_CONNS_REACHED:Pg,BASIC_LICENSE_MAX_NON_CU_ROLES:Tl,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Lg,VALUE_SEARCH_COMPARATORS:gl,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Yp,LICENSE_FILE_NAME:Op,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Fp,NEW_LINE:Qp,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Hg,MOMENT_DAYS_TAG:Yg,API_TURNOVER_SEC:Kg,LOOPBACK:Bg,CODE_EXTENSION:on,WILDCARD_SEARCH_VALUE:Wg,NODE_ERROR_CODES:Vp,JAVASCRIPT_EXTENSION:ul,PERMS_CRUD_ENUM:jp,UNAUTHORIZED_PERMISSION_NAME:Zp,SEARCH_WILDCARDS:Jp,FUNC_VAL:Xp,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:zp,JWT_ENUM:eN,CLUSTERING_FLAG:xp,RUN_LOG:dp,INSTALL_LOG:Ep,IPC_SERVER_MODULE:dl,HDB_IPC_SERVER:tN,IPC_EVENT_TYPES:sN,HDB_IPC_CLIENT_PREFIX:rN,CUSTOM_FUNCTION_PROC_NAME:El,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Si,SERVICES:nN,MEM_SETTING_KEY:Qg,HDB_RESTART_SCRIPT:Rg,PROCESS_DESCRIPTORS:r_,SERVICE_SERVERS:Og,SERVICE_SERVERS_CWD:di,PROCESS_DESCRIPTORS_VALIDATE:pg,LAUNCH_SERVICE_SCRIPTS:Ig,LOG_LEVELS:gg,PROCESS_NAME_ENV_PROP:Sp,PROCESS_LOG_NAMES:mg,PM2_PROCESS_STATUSES:iN,CONFIG_PARAM_MAP:Mp,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Tg,HDB_DEFAULT_CONFIG_FILE:fg,ROLE_TYPES_ENUM:Cg,BOOT_PROP_PARAMS:Tp,INSTALL_PROMPTS:fp,HDB_ROOT_DIR_NAME:hg,CLUSTERING_PROCESSES:Ng,FOREGROUND_PID_FILE:Ag,PACKAGE_ROOT:Et,PRE_4_0_0_VERSION:oN}});var vr=d((
|
|
4
|
-
`}o(Fr,"createLogRecord");function wl(e){Es===void 0&&(c_=_e.PROCESS_DESCRIPTORS.INSTALL,Gr.ensureDirSync(hi),Es=qr.join(hi,_e.PROCESS_LOG_NAMES.INSTALL),Gr.ensureFileSync(Es)),Gr.appendFileSync(Es,e)}o(wl,"writeToLogFile");function Ri(e){It&&wl(e),xt&&process.stdout.write(e)}o(Ri,"nonPm2LogStdOut");function u_(e){It&&wl(e),xt&&process.stderr.write(e)}o(u_,"nonPm2LogStdErr");function EN(...e){if(Be[Pe]<=Be.info){let t=Fr("info",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(EN,"info");function Dl(...e){if(Be[Pe]<=Be.trace){let t=Fr("trace",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(Dl,"trace");function a_(...e){if(Be[Pe]<=Be.error){let t=Fr("error",e);if(_r){u_(t);return}process.stderr.write(t)}}o(a_,"error");function dN(...e){if(Be[Pe]<=Be.debug){let t=Fr("debug",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(dN,"debug");function SN(...e){if(Be[Pe]<=Be.notify){let t=Fr("notify",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(SN,"notify");function TN(...e){if(Be[Pe]<=Be.fatal){let t=Fr("fatal",e);if(_r){u_(t);return}process.stderr.write(t)}}o(TN,"fatal");function fN(...e){if(Be[Pe]<=Be.warn){let t=Fr("warn",e);if(_r){u_(t);return}process.stderr.write(t)}}o(fN,"warn");function hN(){let e;try{e=cN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Gr.existsSync(t)||(t=qr.join(__,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function RN(e){Pe=e}o(RN,"setLogLevel");function Cl(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Cl,"autoCastBoolean");function AN(e){try{if(e.includes("config/settings.js")){let a=Ll(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=bl.parseDocument(Gr.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(AN,"getLogConfig");function mN(){try{let e=bl.parseDocument(Gr.readFileSync(uN,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(mN,"getDefaultConfig")});var an=d((IV,gN)=>{gN.exports={name:"harperdb",version:"4.0.6",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.5",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"},lmdb:{msgpackr:"1.8.5"},"newman-reporter-html":{newman:"5.2.3"}}}});var Vr=d((LV,Ul)=>{"use strict";var CV=require("fs-extra"),bV=O();Ul.exports={version:pN,printVersion:ON,nodeVersion:NN};var cr=an();function pN(){if(cr)return cr.version}o(pN,"version");function NN(){if(cr&&cr.engines&&cr.engines["preferred-node"])return cr.engines["preferred-node"]}o(NN,"nodeVersion");function ON(){cr&&console.log(`HarperDB Version ${cr.version}`)}o(ON,"printVersion")});var vl=d((yV,Hl)=>{"use strict";var Pl=require("semver/functions/major"),IN=require("semver/functions/satisfies"),Bl=an(),_n=process.versions&&process.versions.node?process.versions.node:void 0;Hl.exports=CN;function CN(){let e=Bl.engines.node,t=Bl.engines["preferred-node"];if(_n){if(e&&!IN(_n,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${_n}. Please install a version of Node.js that is withing the defined range.`};if(t&&Pl(_n)!==Pl(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${_n}. Some issues may occur with untested versions of Node.js.`}}}o(CN,"checkNodeVersion")});var l_=d((wV,Gl)=>{"use strict";var bN=require("util"),LN=require("path"),yN=require("child_process"),wN=bN.promisify(yN.execFile),DN=1e3*1e3*10;Gl.exports={findPs:MN};async function MN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await wN("ps",["wwxo",`pid,${r}`],{maxBuffer:DN});for(let n of s.trim().split(`
|
|
5
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:LN.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}o(MN,"findPs")});var he=d((DV,Fl)=>{"use strict";var UN="__dbis__",PN="__environment_name__",BN="__dbi_defintion__",HN={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"},vN=["__createdtime__","__updatedtime__"],GN="\uFFFF",ql={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qN=Object.values(ql);Fl.exports={INTERNAL_DBIS_NAME:UN,DBI_DEFINITION_NAME:BN,SEARCH_TYPES:HN,TIMESTAMP_NAMES:vN,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PN,TRANSACTIONS_DBI_NAMES_ENUM:ql,TRANSACTIONS_DBIS:qN,OVERFLOW_MARKER:GN}});var et=d((MV,jl)=>{"use strict";var Vl=h(),xl=he(),kl={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},$l=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Yl={500:$l("There was an error processing your request."),400:"Invalid request"},FN=Yl[kl.INTERNAL_SERVER_ERROR],VN={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.`},xN={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},kN={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"},$N={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 ${xl.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${xl.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"},YN={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Vl.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 ${Vl.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"},Kl={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"},KN={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."},WN={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`},QN={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"},jN={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JN={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`},Wl={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.`},Ql={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}`},ZN={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."},XN={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},zN={...Kl,...kN,...VN,...KN,...WN,...QN,...jN,...JN,...YN,...Wl,...Ql,...ZN,...XN,...xN};jl.exports={CHECK_LOGS_WRAPPER:$l,HDB_ERROR_MSGS:zN,DEFAULT_ERROR_MSGS:Yl,DEFAULT_ERROR_RESP:FN,HTTP_STATUS_CODES:kl,LMDB_ERRORS_ENUM:$N,AUTHENTICATION_ERROR_MSGS:Kl,VALIDATION_ERROR_MSGS:Wl,IPC_ERRORS:Ql}});var J=d((UV,Xl)=>{"use strict";var Ss=et(),eO=O(),tO=h(),cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Jl),this.http_resp_code=s||Ss.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ss.DEFAULT_ERROR_MSGS[s]?Ss.DEFAULT_ERROR_MSGS[s]:Ss.DEFAULT_ERROR_MSGS[Ss.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&&eO[n](i)}};o(cn,"HdbError");function Jl(e,t,r,s=tO.LOG_LEVELS.ERROR,n=null,i=!1){if(Zl(e))return e;let a=new cn(e,t,r,s,n);return i&&delete a.stack,a}o(Jl,"handleHDBError");function Zl(e){return e.__proto__.constructor.name===cn.name}o(Zl,"isHDBError");Xl.exports={isHDBError:Zl,handleHDBError:Jl,hdb_errors:Ss}});var I=d((BV,dE)=>{"use strict";var xr=require("path"),rO=require("fs-extra"),Se=O(),zl=require("fs-extra"),sO=require("truncate-utf8-bytes"),un=require("os"),nO=require("net"),iO=require("recursive-iterator"),Re=h(),nE=l_(),eE=require("papaparse"),Ai=require("moment"),{inspect:oO}=require("util"),tE=require("is-number"),PV=require("lodash"),{hdb_errors:mi}=J(),iE=require("util").promisify(setTimeout),aO=100,_O=5,cO="",uO=4,rE=255,sE={true:!0,false:!1,undefined:null,null:null,NaN:NaN};dE.exports={isEmpty:Ke,isEmptyOrZeroLength:Ct,arrayHasEmptyValues:dO,arrayHasEmptyOrZeroLengthValues:SO,buildFolderPath:TO,isBoolean:oE,errorizeMessage:lO,stripFileExtension:hO,autoCast:RO,autoCastJSONDeep:E_,removeDir:mO,compareVersions:gO,isCompatibleDataVersion:pO,escapeRawValue:_E,unescapeValue:NO,stringifyProps:OO,valueConverter:IO,timeoutPromise:bO,isClusterOperation:yO,getClusterUser:MO,sendTransactionToSocketCluster:wO,checkGlobalSchemaTable:DO,getHomeDir:cE,getPropsFilePath:CO,promisifyPapaParse:UO,removeBOM:uE,createEventPromise:PO,checkProcessRunning:BO,checkSchemaTableExist:HO,checkSchemaExists:lE,checkTableExists:EE,getStartOfTomorrowInSeconds:vO,getLimitKey:GO,isObject:fO,isNotEmptyAndHasValue:EO,autoCasterIsNumberCheck:aE,backtickASTSchemaItems:qO,isPortTaken:LO,stopProcess:FO,createForkArgs:VO,autoCastBoolean:xO,async_set_timeout:iE,getTableHashAttribute:kO,doesSchemaExist:$O,doesTableExist:YO,stringifyObj:KO,ms_to_time:WO,changeExtension:QO,PACKAGE_ROOT:Re.PACKAGE_ROOT};function lO(e){return e instanceof Error?e:new Error(e)}o(lO,"errorizeMessage");function Ke(e){return e==null}o(Ke,"isEmpty");function EO(e){return!Ke(e)&&(e||e===0||e===""||oE(e))}o(EO,"isNotEmptyAndHasValue");function Ct(e){return Ke(e)||e.length===0||e.size===0}o(Ct,"isEmptyOrZeroLength");function dO(e){if(Ke(e))return!0;for(let t=0;t<e.length;t++)if(Ke(e[t]))return!0;return!1}o(dO,"arrayHasEmptyValues");function SO(e){if(Ct(e))return!0;for(let t=0;t<e.length;t++)if(Ct(e[t]))return!0;return!1}o(SO,"arrayHasEmptyOrZeroLengthValues");function TO(...e){try{return e.join(xr.sep)}catch{console.error(e)}}o(TO,"buildFolderPath");function oE(e){return Ke(e)?!1:e===!0||e===!1}o(oE,"isBoolean");function fO(e){return Ke(e)?!1:typeof e=="object"}o(fO,"isObject");function hO(e){return Ct(e)?cO:e.slice(0,-uO)}o(hO,"stripFileExtension");function RO(e){return Ke(e)||e===""||typeof e!="string"?e:sE[e]!==void 0?sE[e]:aE(e)===!0?Number(e):e}o(RO,"autoCast");function AO(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(AO,"autoCastJSON");function E_(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=E_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=E_(r);s!==r&&(e[t]=s)}return e}else return AO(e)}o(E_,"autoCastJSONDeep");function aE(e){if(e.startsWith("0.")&&tE(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tE(e))}o(aE,"autoCasterIsNumberCheck");async function mO(e){if(Ct(e))throw new Error(`Directory path: ${e} does not exist`);try{await zl.emptyDir(e),await zl.remove(e)}catch(t){throw Se.error(`Error removing files in ${e} -- ${t}`),t}}o(mO,"removeDir");function gO(e,t){if(Ct(e)){Se.info("Invalid current version sent as parameter.");return}if(Ct(t)){Se.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(gO,"compareVersions");function pO(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(pO,"isCompatibleDataVersion");function _E(e){if(Ke(e))return e;let t=String(e);return t==="."?Re.UNICODE_PERIOD:t===".."?Re.UNICODE_PERIOD+Re.UNICODE_PERIOD:t.replace(Re.FORWARD_SLASH_REGEX,Re.UNICODE_FORWARD_SLASH)}o(_E,"escapeRawValue");function NO(e){if(Ke(e))return e;let t=String(e);return t===Re.UNICODE_PERIOD?".":t===Re.UNICODE_PERIOD+Re.UNICODE_PERIOD?"..":String(e).replace(Re.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(NO,"unescapeValue");function OO(e,t){if(Ke(e))return Se.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+un.EOL}!Ct(s)&&s[0]===";"?r+=" "+s+n+un.EOL:Ct(s)||(r+=s+"="+n+un.EOL)}catch{Se.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(OO,"stringifyProps");function IO(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Se.error(n),t=e}let r=String(_E(t)),s=Buffer.byteLength(r)>rE?sO(r,rE)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}o(IO,"valueConverter");function cE(){let e;try{e=un.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(cE,"getHomeDir");function CO(){let e=xr.join(cE(),Re.HDB_HOME_DIR_NAME,Re.BOOT_PROPS_FILE_NAME);return rO.existsSync(e)||(e=xr.join(__dirname,"../","hdb_boot_properties.file")),e}o(CO,"getPropsFilePath");function bO(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(bO,"timeoutPromise");async function LO(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=nO.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(LO,"isPortTaken");function yO(e){try{return Re.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Se.error(`Error checking operation against cluster ops ${t}`)}return!1}o(yO,"isClusterOperation");function wO(e,t,r){if(global.hdb_socket_client!==void 0){Se.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Re.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}o(wO,"sendTransactionToSocketCluster");function DO(e,t){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(DO,"checkGlobalSchemaTable");function MO(e,t){if(Ke(t)){Se.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ke(e)||Ct(e)){Se.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Se.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Se.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(MO,"getClusterUser");function UO(){eE.parsePromise=function(e,t){return new Promise(function(r,s){eE.parse(e,{header:!0,transformHeader:uE,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(UO,"promisifyPapaParse");function uE(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(uE,"removeBOM");function PO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Se.info(`Got cluster status event response: ${oO(n)}`);try{i.cancel()}catch{Se.error("Error trying to cancel timeout.")}s(n)})})}o(PO,"createEventPromise");async function BO(e){let t=!0,r=0;do await iE(aO*r++),(await nE.findPs(e)).length>0&&(t=!1);while(t&&r<_O);if(t)throw new Error(`process ${e} was not started`)}o(BO,"checkProcessRunning");function HO(e,t){let r=lE(e);if(r)return r;let s=EE(e,t);if(s)return s}o(HO,"checkSchemaTableExist");function lE(e){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(lE,"checkSchemaExists");function EE(e,t){if(!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(EE,"checkTableExists");function vO(){let e=Ai().utc().add(1,Re.MOMENT_DAYS_TAG).startOf(Re.MOMENT_DAYS_TAG).unix(),t=Ai().utc().unix();return e-t}o(vO,"getStartOfTomorrowInSeconds");function GO(){return Ai().utc().format("DD-MM-YYYY")}o(GO,"getLimitKey");function qO(e){try{let t=new iO(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Se.error("Got an error back ticking items."),Se.error(t)}}o(qO,"backtickASTSchemaItems");async function FO(e){let t=un.userInfo();(await nE.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Se.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(FO,"stopProcess");function VO(e){return[e]}o(VO,"createForkArgs");function xO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(xO,"autoCastBoolean");function kO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(kO,"getTableHashAttribute");function $O(e){return global?.hdb_schema?.[e]!==void 0}o($O,"doesSchemaExist");function YO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(YO,"doesTableExist");function KO(e){try{return JSON.stringify(e)}catch{return e}}o(KO,"stringifyObj");function WO(e){let t=Ai.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}o(WO,"ms_to_time");function QO(e,t){let r=xr.basename(e,xr.extname(e));return xr.join(xr.dirname(e),r+t)}o(QO,"changeExtension")});var tt=d((HV,SE)=>{"use strict";var He=require("validate.js");He.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||He.validators.type.checks[t](e)?null:` must be a '${t}' value`};He.validators.type.checks={Object:function(e){return He.isObject(e)&&!He.isArray(e)},Array:He.isArray,Integer:He.isInteger,Number:He.isNumber,String:He.isString,Date:He.isDate,Boolean:function(e){return typeof e=="boolean"}};He.validators.hasValidFileExt=function(e,t){return!He.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};SE.exports={validateObject:jO,validateObjectAsync:JO,validateBySchema:ZO};function jO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=He(e,t,{format:"flat"});return r?new Error(r):null}o(jO,"validateObject");async function JO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await He.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(JO,"validateObjectAsync");function ZO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(ZO,"validateBySchema")});var S_=d((vV,fE)=>{"use strict";var XO=require("fs-extra"),H=require("joi"),zO=require("os"),{boolean:Ae,string:kt,number:bt,array:d_}=H.types(),TE=require("path"),eI=O(),gi=I(),tI=tt(),rI="log",sI="custom_functions",nI="Invalid logging.rotation.maxSize unit. Available units are G, M or K",iI="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oI="rootPath config parameter is undefined",aI="clustering.enabled config parameter is undefined",ur=bt.min(0).required(),pi=d_.items({host:kt.required(),port:ur}).empty(null),ln;fE.exports={configValidator:_I,routesValidator:SI,route_constraints:pi};function _I(e){if(ln=e.rootPath,gi.isEmpty(ln))throw oI;let t=Ae.required(),r=H.valid("production","development").required(),s=bt.min(1).max(1e3).empty(null).default(EI),n=kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dI),i=H.custom(uI).messages({"any.custom":"{:#label} {:#error}"}),a=kt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(gi.isEmpty(_))throw aI;let c;return _===!0?c=H.object({enabled:t,hubServer:H.object({cluster:H.object({name:H.required().empty(null),network:H.object({port:ur,routes:pi}).required()}).required(),leafNodes:H.object({network:H.object({port:ur}).required()}).required(),network:H.object({port:ur}).required()}).required(),leafServer:H.object({network:H.object({port:ur,routes:pi}).required()}).required(),nodeName:a,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()}),user:H.string().required()}).required():c=H.object({enabled:t,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()})}).required(),H.object({clustering:c,customFunctions:H.object({enabled:t,network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}),nodeEnv:r,root:n,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:H.object({network:H.object({port:ur})}).required(),localStudio:H.object({enabled:t}).required(),logging:H.object({file:Ae.required(),level:H.valid("notify","fatal","error","warn","info","debug","trace"),rotation:H.object({compress:Ae.required(),dateFormat:kt.required(),maxSize:kt.custom(lI).required(),retain:bt.min(0).required(),rotate:Ae.required(),rotateInterval:kt.required(),rotateModule:Ae.required(),timezone:kt.required(),workerInterval:bt.min(1).required()}).required(),root:n,stdStreams:Ae.required(),auditLog:Ae.required()}).required(),operationsApi:H.object({authentication:H.object({operationTokenTimeout:H.required(),refreshTokenTimeout:H.required()}).required(),foreground:Ae.required(),network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}).required(),nodeEnv:r,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:H.object({threads:s}).required(),storage:H.object({writeAsync:Ae.required(),overlappingSync:Ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(_I,"configValidator");function cI(e){return XO.existsSync(e)?null:`Specified path ${e} does not exist.`}o(cI,"doesPathExist");function uI(e,t){if(e===null)return;H.assert(e,kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=cI(e);return r?t.message(r):e}o(uI,"validatePemFile");function lI(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nI);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(iI)}o(lI,"validateRotationMaxSize");function EI(e,t){let r=t.state.path.join("."),s=zO.cpus().length,n=s-1;return n<=2&&(n=2),eI.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(EI,"setDefaultThreads");function dI(e,t){if(!gi.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(gi.isEmpty(ln))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return TE.join(ln,sI);case"logging.root":return TE.join(ln,rI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(dI,"setDefaultRoot");function SI(e){let t=H.object({routes:pi});return tI.validateBySchema({routes:e},t)}o(SI,"routesValidator")});var We=d((GV,NE)=>{"use strict";var X=h(),rt=I(),Le=O(),{configValidator:TI,routesValidator:hE}=S_(),dt=require("fs-extra"),fI=require("yaml"),Ts=require("path"),hI=require("is-number"),Ii=require("properties-reader"),RI=require("lodash"),{handleHDBError:AI}=J(),{HTTP_STATUS_CODES:mI,HDB_ERROR_MSGS:Ni}=et(),{PACKAGE_ROOT:gI}=h(),pI="Unable to get config value because config is uninitialized",NI="Config successfully initialized",OI="Error backing up config file",II="Empty parameter sent to getConfigValue",RE=Ts.join(gI,"config","yaml",X.HDB_DEFAULT_CONFIG_FILE),CI="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Oi,ve;NE.exports={createConfigFile:bI,getDefaultConfig:LI,getConfigValue:AE,initConfig:mE,flattenConfig:kr,updateConfigValue:gE,updateConfigObject:yI,getConfiguration:wI,setConfiguration:DI,readConfigFile:h_,getClusteringRoutes:MI,initOldConfig:pE,getConfigFromFile:UI};function bI(e){let t=fs(RE);Oi=kr(t.toJSON());for(let i in e){let a=X.CONFIG_PARAM_MAP[i.toLowerCase()];if(a!==void 0){let _=a.split("_"),c=T_(a,e[i]);try{t.setIn([..._],c)}catch(u){Le.error(u)}}}f_(t);let r=t.toJSON();ve=kr(r);let s=t.getIn(["rootPath"]),n=Ts.join(s,X.HDB_CONFIG_FILE);dt.createFileSync(n),dt.writeFileSync(n,String(t)),Le.trace(`Config file written to ${n}`)}o(bI,"createConfigFile");function LI(e){if(Oi===void 0){let r=fs(RE);Oi=kr(r.toJSON())}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oi[t.toLowerCase()]}o(LI,"getDefaultConfig");function AE(e){if(rt.isEmpty(e)){Le.error(II);return}if(ve===void 0){Le.trace(pI);return}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ve[t.toLowerCase()]}o(AE,"getConfigValue");function mE(e=!1){if(ve===void 0||e){let t=rt.getPropsFilePath();try{dt.accessSync(t,dt.constants.F_OK|dt.constants.R_OK)}catch(a){throw Le.error(a),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ii(t).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{pE(s);return}catch(a){if(a.code!==X.NODE_ERROR_CODES.ENOENT)throw a}try{n=fs(s)}catch(a){if(a.code===X.NODE_ERROR_CODES.ENOENT){Le.trace(`HarperDB config file not found at ${s}.
|
|
6
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Le.error(a),new Error(`Error reading HarperDB config file at ${s}`)}f_(n);let i=n.toJSON();ve=kr(i),Le.trace(NI)}}o(mE,"initConfig");function f_(e){let t=e.toJSON(),r=TI(t);if(r.error)throw Ni.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}o(f_,"validateConfig");function yI(e,t){ve===void 0&&(ve={});let r=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Le.trace(`Unable to update config object because config param '${e}' does not exist`);return}ve[r.toLowerCase()]=t}o(yI,"updateConfigObject");function gE(e,t,r=void 0,s=!1,n=!1){ve===void 0&&mE();let i=AE(X.CONFIG_PARAM_MAP.hdb_root),a=Ts.join(i,X.HDB_CONFIG_FILE),_=fs(a);if(r===void 0){let l=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),T=T_(l,t);_.setIn([...E],T)}else for(let l in r){let E=X.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let T=E.split("_"),S=T_(E,r[l]);try{_.setIn([...T],S)}catch(A){Le.error(A)}}}f_(_);let c=_.getIn(["rootPath"]),u=Ts.join(c,X.HDB_CONFIG_FILE);if(s===!0)try{let l=Ts.join(c,"backup",`${X.HDB_CONFIG_FILE}.bak`);dt.copySync(a,l),Le.trace(`Config file: ${a} backed up to: ${l}`)}catch(l){Le.error(OI),Le.error(l)}dt.writeFileSync(u,String(_)),n&&(ve=kr(_.toJSON())),Le.trace(`Config parameter: ${e} updated with value: ${t}`)}o(gE,"updateConfigValue");function kr(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=kr(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(kr,"flattenConfig");function T_(e,t){if(e===X.CONFIG_PARAMS.CLUSTERING_NODENAME||e===X.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(hI(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||rt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return rt.autoCast(t)}o(T_,"castConfigValue");function wI(){let e=rt.getPropsFilePath(),r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(wI,"getConfiguration");async function DI(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return gE(void 0,void 0,n,!0),CI}catch(i){throw typeof i=="string"||i instanceof String?AI(i,i,mI.BAD_REQUEST,void 0,void 0,!0):i}}o(DI,"setConfiguration");function h_(){let e=rt.getPropsFilePath();try{dt.accessSync(e,dt.constants.F_OK|dt.constants.R_OK)}catch(n){throw Le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(h_,"readConfigFile");function fs(e){return fI.parseDocument(dt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(fs,"parseYamlDoc");function MI(){let e=h_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=rt.isEmptyOrZeroLength(t)?[]:t;let r=hE(t);if(r)throw Ni.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=rt.isEmptyOrZeroLength(s)?[]:s;let n=hE(s);if(n)throw Ni.CONFIG_VALIDATION(n.message);if(!rt.isEmptyOrZeroLength(s)&&!rt.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!rt.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ni.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(MI,"getClusteringRoutes");function pE(e){let t=Ii(e);ve={};for(let r in X.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=X.CONFIG_PARAM_MAP[r].toLowerCase();n===X.CONFIG_PARAMS.LOGGING_ROOT?ve[n]=Ts.dirname(s):ve[n]=s}return ve}o(pE,"initOldConfig");function UI(e){let t=h_();return RI.get(t,e.replaceAll("_","."))}o(UI,"getConfigFromFile")});var Y=d((qV,IE)=>{"use strict";var R_=require("fs-extra"),Lt=require("path"),PI=require("os"),BI=require("properties-reader"),En=O(),hs=I(),w=h(),Ci=We(),HI="Error initializing environment manager",bi="BOOT_PROPS_FILE_PATH",OE=!1,vI={[w.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},$t={};IE.exports={BOOT_PROPS_FILE_PATH:bi,getHdbBasePath:GI,setHdbBasePath:qI,get:FI,initSync:xI,setProperty:q,initTestEnvironment:kI};function GI(){return $t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(GI,"getHdbBasePath");function qI(e){$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(qI,"setHdbBasePath");function FI(e){let t=Ci.getConfigValue(e);return t===void 0?$t[e]:t}o(FI,"get");function q(e,t){vI[e]&&($t[e]=t),Ci.updateConfigObject(e,t)}o(q,"setProperty");function VI(){let e;try{e=hs.getPropsFilePath(),R_.accessSync(e,R_.constants.F_OK|R_.constants.R_OK),OE=!0;let t=BI(e);return $t[w.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(w.HDB_SETTINGS_NAMES.INSTALL_USER),$t[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),$t[bi]=e,!0}catch{return En.trace(`Environment manager found no properties file at ${e}`),!1}}o(VI,"doesPropFileExist");function xI(e=!1){try{(OE||VI())&&(Ci.initConfig(e),$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ci.getConfigValue(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){En.error(HI),En.error(t),console.error(t),process.exit(1)}}o(xI,"initSync");function kI(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=Lt.join(__dirname,"../../","unitTests");$t[bi]=Lt.join(c,"hdb_boot_properties.file"),q(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Lt.join(c,"settings.test")),q(w.HDB_SETTINGS_NAMES.INSTALL_USER,PI.userInfo().username),q(w.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.HDB_SETTINGS_NAMES.CERT_KEY,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),q(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Lt.join(c,"envDir","log")),q(w.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),q(w.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),q(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Lt.join(c,"envDir")),q(w.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,hs.isEmpty(n)?!0:n),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,hs.isEmpty(n)?!0:n),q(w.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),q(w.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,hs.isEmpty(i)?!1:i),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,hs.isEmpty(i)?!1:i),q(w.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),q(w.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),q(w.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Lt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),q(w.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,hs.isEmpty(_)?!1:_),a&&(q("CORS_ACCESSLIST",a),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(q(w.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(q(w.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(q(w.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bi}. Please check your boot props and settings files`;En.fatal(r),En.error(t)}}o(kI,"initTestEnvironment")});var m_=d((FV,CE)=>{"use strict";var dn=Y();dn.initSync();var Rs=require("fs-extra"),A_=require("path"),As=h(),$I=require("crypto"),YI=require("uuid").v4;CE.exports=KI;function KI(){if(dn.getHdbBasePath()!==void 0){let e=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Rs.accessSync(r),Rs.accessSync(e),Rs.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=YI(),i=$I.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Rs.writeFileSync(r,n),Rs.writeFileSync(e,i.privateKey),Rs.writeFileSync(t,i.publicKey)}else throw s}}}o(KI,"checkJWTTokenExist")});var ms=d((VV,yE)=>{"use strict";var LE=I(),bE=h(),yi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,g_=require("joi"),Li={schema_format:{pattern:yi,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},WI=g_.alternatives(g_.string().min(1).max(Li.schema_length.maximum).pattern(yi).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),g_.number()).required();function QI(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:yi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(QI,"checkValidTable");function jI(e,t){return LE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(jI,"validateSchemaExists");function JI(e,t){let r=t.state.ancestors[0].schema;return LE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(JI,"validateTableExists");function ZI(e,t){return e.toLowerCase()===bE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${bE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(ZI,"validateSchemaName");yE.exports={common_validators:Li,schema_regex:yi,hdb_schema_table:WI,validateSchemaExists:jI,validateTableExists:JI,validateSchemaName:ZI,checkValidTable:QI}});var N_=d((xV,DE)=>{var{hdb_schema_table:wE}=ms(),XI=tt(),p_=require("joi"),zI={undefined:"undefined",null:"null"},eC=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||zI[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),tC=p_.object({schema:wE,table:wE,records:p_.array().items(p_.object().custom(eC)).required()});DE.exports=function(e){return XI.validateBySchema(e,tC)}});var O_=d((kV,ME)=>{"use strict";var wi=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};o(wi,"BridgeMethods");ME.exports=wi});var lr=d((KV,HE)=>{"use strict";var UE=et().LMDB_ERRORS_ENUM,$V=require("lmdb"),rC=he(),YV=require("buffer").Buffer,sC=require("microtime"),{OVERFLOW_MARKER:PE,MAX_SEARCH_KEY_LENGTH:Di}=rC,BE=["number","string","symbol","boolean","bigint"];function nC(e){if(!e)throw new Error(UE.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(UE.INVALID_ENVIRONMENT)}o(nC,"validateEnv");function iC(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(iC,"stringifyData");function oC(e){return e instanceof Date?e.valueOf():e}o(oC,"convertKeyValueToWrite");function aC(e){if(e==null)return;if(BE.includes(typeof e))return e.length>Di?[e.slice(0,Di)+PE]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];BE.includes(typeof n)&&(n.length>Di?t.push(n.slice(0,Di)+PE):t.push(n))}}return t}o(aC,"getIndexedValues");function _C(){let e=sC.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}o(_C,"getMicroTime");HE.exports={validateEnv:nC,stringifyData:iC,convertKeyValueToWrite:oC,getMicroTime:_C,getIndexedValues:aC}});var GE=d((WV,vE)=>{"use strict";var Mi=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Mi,"DBIDefinition");vE.exports=Mi});var FE=d((QV,qE)=>{"use strict";var Ui=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Ui,"OpenDBIObject");qE.exports=Ui});var xE=d((jV,VE)=>{"use strict";var Pi=class{constructor(t,r,s,n,i=!1,a=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=a,_!==void 0&&(this.overlappingSync=_)}};o(Pi,"OpenEnvironmentObject");VE.exports=Pi});var $=d((ZV,ed)=>{"use strict";var I_=require("lmdb"),st=require("fs-extra"),St=require("path"),Hi=lr(),kE=O(),me=et().LMDB_ERRORS_ENUM,vi=GE(),C_=FE(),$E=xE(),Er=he(),JV=h(),Sn=Y();Sn.initSync();var YE=Sn.get("STORAGE_WRITEASYNC")===!0||Sn.get("STORAGE_WRITEASYNC")==="true"||Sn.get("STORAGE_WRITEASYNC")==="TRUE",KE=Sn.get("STORAGE_OVERLAPPINGSYNC"),WE=1024*1024*1024,QE=1e4,jE=1e3,Tt=Er.INTERNAL_DBIS_NAME,JE=Er.DBI_DEFINITION_NAME,cC="data.mdb",uC="lock.mdb",Tn=".mdb",lC="-lock",Bi=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[Er.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Er.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new I_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(Bi,"TransactionCursor");function b_(e,t){if(e===void 0)throw new Error(me.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(me.ENV_NAME_REQUIRED)}o(b_,"pathEnvNameValidation");async function L_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(me.INVALID_BASE_PATH):s}try{let s=St.join(e,t+Tn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(St.join(e,t,cC),st.constants.R_OK|st.constants.F_OK),St.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(me.INVALID_ENVIRONMENT)}else throw new Error(me.INVALID_ENVIRONMENT);throw s}}o(L_,"validateEnvironmentPath");function Gi(e,t){if(Hi.validateEnv(e),t===void 0)throw new Error(me.DBI_NAME_REQUIRED)}o(Gi,"validateEnvDBIName");async function EC(e,t,r=!1,s=!1){b_(e,t),t=t.toString();try{return await L_(e,t,s),y_(e,t,r)}catch(n){if(n.message===me.INVALID_ENVIRONMENT){let i=St.join(e,t);await st.mkdirp(s?i:e);let a=new $E(s?i:i+Tn,WE,QE,jE,!1,YE,KE),_=I_.open(a);_.dbis=Object.create(null);let c=new C_(!1);_.openDB(Tt,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=w_(e,t,r);return _[Er.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(EC,"createEnvironment");async function dC(e,t,r,s=!0){let n=await y_(e,t);if(r===void 0)throw new Error(me.DESTINATION_PATH_REQUIRED);try{await st.access(St.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(me.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(dC,"copyEnvironment");async function y_(e,t,r=!1){b_(e,t),t=t.toString();let s=w_(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await L_(e,t),i=St.join(e,t+Tn),a=n!=i,_=new $E(n,WE,QE,jE,a,YE,KE),c=I_.open(_);c.dbis=Object.create(null);let u=XE(c);for(let l=0;l<u.length;l++)nt(c,u[l]);return c[Er.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(y_,"openEnvironment");async function SC(e,t,r=!1){b_(e,t),t=t.toString();let s=St.join(e,t+Tn),n=await L_(e,t);if(global.lmdb_map!==void 0){let i=w_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await ZE(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+lC:St.join(St.dirname(n),uC))}o(SC,"deleteEnvironment");async function ZE(e){Hi.validateEnv(e);let t=e[Er.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(ZE,"closeEnvironment");function w_(e,t,r=!1){let n=`${St.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(w_,"getCachedEnvironmentName");function TC(e){Hi.validateEnv(e);let t=Object.create(null),r=nt(e,Tt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Tt)try{t[s]=Object.assign(new vi,n)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(TC,"listDBIDefinitions");function XE(e){Hi.validateEnv(e);let t=[],r=nt(e,Tt);for(let{key:s}of r.getRange({start:!1}))s!==Tt&&t.push(s);return t}o(XE,"listDBIs");function fC(e,t){let s=nt(e,Tt).getEntry(t),n=new vi;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(fC,"getDBIDefinition");function zE(e,t,r,s=!1){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===me.DBI_DOES_NOT_EXIST){let i=new C_(r,s===!0),a=e.openDB(t,i),_=new vi(r===!0,s);return a[JE]=_,nt(e,Tt).putSync(t,_),e.dbis[t]=a,a}throw n}}o(zE,"createDBI");function nt(e,t){if(Gi(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Tt?r=fC(e,t):r=new vi,r===void 0)throw new Error(me.DBI_DOES_NOT_EXIST);let s;try{let n=new C_(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(me.DBI_DOES_NOT_EXIST):n}return s[JE]=r,e.dbis[t]=s,s}o(nt,"openDBI");function hC(e,t){Gi(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[Er.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(hC,"statDBI");async function RC(e,t){try{let r=St.join(e,t+Tn);return(await st.stat(r)).size}catch{throw new Error(me.INVALID_ENVIRONMENT)}}o(RC,"environmentDataSize");function AC(e,t){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Tt).removeSync(t)}o(AC,"dropDBI");function mC(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===me.DBI_DOES_NOT_EXIST)zE(e,n,n!==t,n===t);else throw i}}}o(mC,"initializeDBIs");ed.exports={openDBI:nt,openEnvironment:y_,createEnvironment:EC,listDBIs:XE,listDBIDefinitions:TC,createDBI:zE,dropDBI:AC,statDBI:hC,deleteEnvironment:SC,initializeDBIs:mC,TransactionCursor:Bi,environmentDataSize:RC,copyEnvironment:dC,closeEnvironment:ZE}});var rd=d((XV,td)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(qi,"InsertRecordsResponseObject");td.exports=qi});var nd=d((zV,sd)=>{"use strict";var Fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Fi,"UpdateRecordsResponseObject");sd.exports=Fi});var od=d((e0,id)=>{"use strict";var Vi=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Vi,"UpsertRecordsResponseObject");id.exports=Vi});var Yr=d((n0,_d)=>{"use strict";var gC=$(),pC=rd(),NC=nd(),OC=od(),hn=lr(),fn=et().LMDB_ERRORS_ENUM,IC=he(),dr=h(),CC=I(),bC=require("uuid"),t0=require("lmdb"),{handleHDBError:LC,hdb_errors:yC}=J(),{OVERFLOW_MARKER:r0,MAX_SEARCH_KEY_LENGTH:s0}=IC,D_=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$r=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new pC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];ad(u,!0,n);let l=DC(e,t,r,u),E=u[t];a.push(l),_.push(E)}return U_(a,_,s,i)}o(wC,"insertRecords");function DC(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][dr.FUNC_VAL],s[a]=_)}let c=hn.getIndexedValues(_);if(c)for(let u=0,l=c.length;u<l;u++)e.dbis[a].put(c[u],n)}e.dbis[t].put(n,s,s[$r])})}o(DC,"insertRecord");function MC(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(MC,"removeSkippedRecords");function ad(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$r]))&&(e[$r]=s),t===!0?(r===!0||!Number.isInteger(e[D_]))&&(e[D_]=s):delete e[D_]}o(ad,"setTimestamps");function M_(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gC.initializeDBIs(e,t,r)}o(M_,"initializeTransaction");async function UC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new NC,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],T;try{T=P_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(T),c.push(E)}return U_(_,c,s,i,a)}o(UC,"updateRecords");async function PC(e,t,r,s,n=!0){try{B_(e,t,r,s)}catch(c){throw LC(c,c.message,yC.HTTP_STATUS_CODES.BAD_REQUEST)}M_(e,t,r);let i=new OC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;CC.isEmpty(u[t])?(l=bC.v4(),u[t]=l):l=u[t];let E=P_(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return U_(a,_,s,i)}o(PC,"upsertRecords");async function U_(e,t,r,s,n=[]){let i=await Promise.all(e);for(let a=0,_=i.length;a<_;a++)i[a]===!0?s.written_hashes.push(t[a]):(s.skipped_hashes.push(t[a]),n.push(a));return s.txn_time=hn.getMicroTime(),MC(r,n),s}o(U_,"finalizeWrite");function P_(e,t,r,s,n,i=!1,a=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(ad(r,!l,a),Number.isInteger(r[$r])&&u[$r]>r[$r])return!1;l&&n.original_records.push(u);let E,T=o(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],L=e.dbis[A];if(L===void 0)continue;let de=u[A];if(typeof R=="function"){let k=R([[u]]);Array.isArray(k)&&(R=k[0][dr.FUNC_VAL],r[A]=R)}if(R===de)continue;let p=hn.getIndexedValues(de);if(p)for(let k=0,Ie=p.length;k<Ie;k++)L.remove(p[k],s);if(p=hn.getIndexedValues(R),p)for(let k=0,Ie=p.length;k<Ie;k++)L.put(p[k],s)}let S=Object.assign({},u,r);_.put(s,S,S[$r])},"do_put");return c?E=_.ifVersion(s,c.version,T):E=_.ifNoExists(s,T),E.then(S=>S?!0:P_(e,t,r,s,n,i,a))}o(P_,"updateUpsertRecord");function BC(e,t,r){if(hn.validateEnv(e),t===void 0)throw new Error(fn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fn.WRITE_ATTRIBUTES_REQUIRED):new Error(fn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(BC,"validateBasic");function B_(e,t,r,s){if(BC(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fn.RECORDS_REQUIRED):new Error(fn.RECORDS_MUST_BE_ARRAY)}o(B_,"validateWrite");_d.exports={insertRecords:wC,updateRecords:UC,upsertRecords:PC}});var Z=d((i0,ud)=>{"use strict";var H_=h(),gs=Y(),v_=require("path");gs.initSync();var xi,ki,$i;function cd(){if(xi!==void 0)return xi;if(gs.getHdbBasePath()!==void 0)return xi=v_.join(gs.getHdbBasePath(),H_.SCHEMA_DIR_NAME),xi}o(cd,"getBaseSchemaPath");function HC(){if(ki!==void 0)return ki;if(gs.getHdbBasePath()!==void 0)return ki=v_.join(cd(),H_.SYSTEM_SCHEMA_NAME),ki}o(HC,"getSystemSchemaPath");function vC(){if($i!==void 0)return $i;if(gs.getHdbBasePath()!==void 0)return $i=v_.join(gs.getHdbBasePath(),H_.TRANSACTIONS_DIR_NAME),$i}o(vC,"getTransactionAuditStorePath");ud.exports={getBaseSchemaPath:cd,getSystemSchemaPath:HC,getTransactionAuditStorePath:vC}});var Yt=d((o0,GC)=>{GC.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var G_=d((a0,ld)=>{var{common_validators:Sr}=ms(),Rn=tt(),ft="is required",K={schema:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},table:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},hash_attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length}};function An(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(An,"makeAttributesStrings");function qC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence=!1,K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(qC,"schema_object");function FC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(FC,"table_object");function VC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence={message:ft},Rn.validateObject(e,K)}o(VC,"create_table_object");function xC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence={message:ft},K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(xC,"attribute_object");function kC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(kC,"describe_table");function $C(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}o($C,"validateTableResidence");ld.exports={schema_object:qC,create_table_object:VC,table_object:FC,attribute_object:xC,describe_table:kC,validateTableResidence:$C}});var dd=d((_0,Ed)=>{"use strict";var YC=require("uuid"),Yi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||YC.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(Yi,"CreateAttributeObject");Ed.exports=Yi});var Wi=d((c0,Sd)=>{"use strict";var KC=dd(),Ki=class extends KC{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Ki,"LMDBCreateAttributeObject");Sd.exports=Ki});var fd=d((u0,Td)=>{"use strict";Td.exports=QC;var WC="inserted";function QC(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===WC?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(QC,"returnObject")});var Qi=d((l0,Rd)=>{"use strict";var jC=h(),q_=$(),JC=Yr(),{getSystemSchemaPath:ZC,getBaseSchemaPath:XC}=Z(),zC=require("path"),eb=Yt(),tb=G_(),rb=Wi(),sb=fd(),{handleHDBError:nb,hdb_errors:ib}=J(),ob=I(),F_=eb.hdb_attribute,hd=[];for(let e=0;e<F_.attributes.length;e++)hd.push(F_.attributes[e].attribute);var ab="inserted";Rd.exports=_b;async function _b(e){let t=tb.attribute_object(e);if(t)throw nb(new Error,t.message,ib.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ob.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 rb(e.schema,e.table,e.attribute,e.id);try{let n=await q_.openEnvironment(zC.join(XC(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);q_.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await q_.openEnvironment(ZC(),jC.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:a,skipped_hashes:_}=await JC.insertRecords(i,F_.hash_attribute,hd,[s]);return sb(ab,a,{records:[s]},_)}catch(n){throw n}}o(_b,"lmdbCreateAttribute")});var ji=d((d0,md)=>{"use strict";var Kt=I(),Ad=O(),E0=N_();md.exports=cb;function cb(e){if(Kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Kt.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(Kt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Kt.isEmptyOrZeroLength(a[r]))throw Ad.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Kt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Ad.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Kt.isEmpty(a[r])&&a[r]!==""&&s.has(Kt.autoCast(a[r]))&&(a.skip=!0),s.add(Kt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(cb,"insertUpdateValidate")});var Zi=d((S0,gd)=>{"use strict";var ub=h().OPERATIONS_ENUM,Ji=class{constructor(t,r,s,n,i=void 0){this.operation=ub.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Ji,"InsertObject");gd.exports=Ji});var zi=d((f0,pd)=>{"use strict";var T0=Zi(),Xi=h(),x_=I(),V_=O(),lb=require("uuid"),{handleHDBError:mn,hdb_errors:Eb}=J(),{HDB_ERROR_MSGS:gn,HTTP_STATUS_CODES:pn}=Eb;pd.exports=db;function db(e,t,r){for(let n=0;n<t.length;n++)Sb(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Tb(i,r,e.operation)}}o(db,"processRows");function Sb(e){if(Buffer.byteLength(String(e))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mn(new Error,gn.ATTR_NAME_LENGTH_ERR(e),pn.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(e)||x_.isEmpty(e.trim()))throw mn(new Error,gn.ATTR_NAME_NULLISH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Sb,"validateAttribute");function Tb(e,t,r){if(!e.hasOwnProperty(t)||x_.isEmptyOrZeroLength(e[t])){if(r===Xi.OPERATIONS_ENUM.INSERT||r===Xi.OPERATIONS_ENUM.UPSERT){e[t]=lb.v4();return}throw V_.error("Update transaction aborted due to record with no hash value:",e),mn(new Error,gn.RECORD_MISSING_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw V_.error(e),mn(new Error,gn.HASH_VAL_LENGTH_ERR,pn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw V_.error(e),mn(new Error,gn.INVALID_FORWARD_SLASH_IN_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Tb,"validateHash")});var Od=d((h0,Nd)=>{"use strict";var eo=class{constructor(t,r){this.type=t,this.message=r}};o(eo,"IPCEventObject");Nd.exports=eo});var ps=d((R0,Id)=>{"use strict";var fb=O(),k_=I(),hb=h(),{IPC_ERRORS:Nn}=et();Id.exports={sendIpcEvent:Rb,validateEvent:Ab,SchemaEventMsg:mb,UserEventMsg:gb};function Rb(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):fb.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}o(Rb,"sendIpcEvent");function Ab(e){if(typeof e!="object")return Nn.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||k_.isEmpty(e.type))return Nn.MISSING_TYPE;if(!e.hasOwnProperty("message")||k_.isEmpty(e.message))return Nn.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||k_.isEmpty(e.message.originator))return Nn.MISSING_ORIGIN;if(hb.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nn.INVALID_EVENT(e.type)}o(Ab,"validateEvent");function mb(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(mb,"SchemaEventMsg");function gb(e){this.originator=e}o(gb,"UserEventMsg")});var On=d((m0,yd)=>{"use strict";var Cd=h(),A0=I(),to=O(),bd=Od(),{sendIpcEvent:Ld}=ps();function pb(e){try{to.trace("signalSchemaChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.SCHEMA,e);Ld(t)}catch(t){to.error(t)}}o(pb,"signalSchemaChange");function Nb(e){try{to.trace("signalUserChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.USER,e);Ld(t)}catch(t){to.error(t)}}o(Nb,"signalUserChange");yd.exports={signalSchemaChange:pb,signalUserChange:Nb}});var ro=d((g0,Dd)=>{"use strict";var wd=I(),Ob=h(),Ib=O(),Cb=Qi(),bb=Wi(),Lb=On(),{SchemaEventMsg:yb}=ps(),wb="already exists in";Dd.exports=Db;async function Db(e,t,r){try{if(wd.isEmptyOrZeroLength(r))return r;let s=[];wd.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 Mb(e,t.schema,t.name,i)})),n}catch(s){throw s}}o(Db,"lmdbCheckForNewAttributes");async function Mb(e,t,r,s){let n=new bb(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Ub(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wb))Ib.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(Mb,"createNewAttribute");async function Ub(e){let t;try{return t=await Cb(e),Lb.signalSchemaChange(new yb(process.pid,Ob.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}o(Ub,"createAttribute")});var Ns=d((p0,Md)=>{"use strict";var so=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};o(so,"LMDBTransactionObject");Md.exports=so});var Pd=d((N0,Ud)=>{"use strict";var Pb=Ns(),Bb=h().OPERATIONS_ENUM,no=class extends Pb{constructor(t,r,s,n,i=void 0){super(Bb.INSERT,r,s,n,i),this.records=t}};o(no,"LMDBInsertTransactionObject");Ud.exports=no});var Hd=d((O0,Bd)=>{"use strict";var Hb=Ns(),vb=h().OPERATIONS_ENUM,io=class extends Hb{constructor(t,r,s,n,i,a=void 0){super(vb.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(io,"LMDBUpdateTransactionObject");Bd.exports=io});var Gd=d((I0,vd)=>{"use strict";var Gb=Ns(),qb=h().OPERATIONS_ENUM,oo=class extends Gb{constructor(t,r,s,n,i,a=void 0){super(qb.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(oo,"LMDBUpsertTransactionObject");vd.exports=oo});var Fd=d((C0,qd)=>{"use strict";var Fb=Ns(),Vb=h().OPERATIONS_ENUM,ao=class extends Fb{constructor(t,r,s,n,i=void 0){super(Vb.DELETE,s,n,t,i),this.original_records=r}};o(ao,"LMDBDeleteTransactionObject");qd.exports=ao});var In=d((b0,$d)=>{"use strict";var xb=require("path"),Vd=$(),kb=Pd(),$b=Hd(),Yb=Gd(),Kb=Fd(),Os=he(),xd=I(),{CONFIG_PARAMS:Wb}=h(),kd=Y();kd.initSync();var _o=h().OPERATIONS_ENUM,{getTransactionAuditStorePath:Qb}=Z();$d.exports=jb;async function jb(e,t){if(kd.get(Wb.LOGGING_AUDITLOG)===!1)return;let r=xb.join(Qb(),e.schema.toString()),s=await Vd.openEnvironment(r,e.table,!0),n=Jb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Vd.initializeDBIs(s,Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Os.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xd.isEmpty(n.user_name)||s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}catch(i){throw i}}}o(jb,"writeTransaction");function Jb(e,t){let r=xd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new kb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new $b(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new Yb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new Kb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(Jb,"createTransactionObject")});var $_=d((y0,Yd)=>{"use strict";var Zb=ji(),L0=Zi(),Is=h(),Xb=zi(),zb=Yr().insertRecords,eL=$(),tL=require("path"),rL=O(),sL=ro(),{getBaseSchemaPath:nL}=Z(),iL=In();Yd.exports=oL;async function oL(e){try{let{schema_table:t,attributes:r}=Zb(e);Xb(e,r,t.hash_attribute),e.schema!==Is.SYSTEM_SCHEMA_NAME&&(r.includes(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await sL(e.hdb_auth_header,t,r),n=tL.join(nL(),e.schema.toString()),i=await eL.openEnvironment(n,e.table),a=await zb(i,t.hash_attribute,r,e.records,e[Is.CLUSTERING_FLAG]!==!0);try{await iL(e,a)}catch(_){rL.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(oL,"lmdbCreateRecords")});var Qd=d((w0,Wd)=>{"use strict";var Kd=h(),aL=$_(),_L=Zi(),cL=require("fs-extra"),uL=require("path"),{getBaseSchemaPath:lL}=Z();Wd.exports=EL;async function EL(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _L(Kd.SYSTEM_SCHEMA_NAME,Kd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await aL(r),await cL.mkdirp(uL.join(lL(),e.schema.toString()))}o(EL,"lmdbCreateSchema")});var Jd=d((D0,jd)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(co,"DeleteRecordsResponseObject");jd.exports=co});var W_=d((B0,zd)=>{"use strict";var Zd=$(),Y_=lr(),K_=et().LMDB_ERRORS_ENUM,dL=he(),Xd=O(),M0=I(),SL=require("lmdb"),TL=Jd(),{OVERFLOW_MARKER:U0,MAX_SEARCH_KEY_LENGTH:P0}=dL;async function fL(e,t,r){if(Y_.validateEnv(e),t===void 0)throw new Error(K_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(K_.IDS_REQUIRED):new Error(K_.IDS_MUST_BE_ARRAY);try{let s=Zd.listDBIs(e);Zd.initializeDBIs(e,t,s);let n=new TL,i,a=[],_=[];for(let E=0,T=r.length;E<T;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,SL.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let L=s[R];if(!S.hasOwnProperty(L)||L===t)continue;let de=e.dbis[L],p=S[L];if(p!=null)try{let k=Y_.getIndexedValues(p);if(k)for(let Ie=0,Ce=k.length;Ie<Ce;Ie++)de.remove(k[Ie],i)}catch{Xd.warn(`cannot delete from attribute: ${L}, ${p}:${i}`)}}});a.push(A),_.push(i),n.original_records.push(S)}catch(S){Xd.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(a);for(let E=0,T=u.length;E<T;E++)u[E]===!0?n.deleted.push(_[E]):(n.skipped.push(_[E]),c.push(E));let l=0;for(let E=0;E<c.length;E++){let T=c[E];n.original_records.splice(T-l,1),l++}return n.txn_time=Y_.getMicroTime(),n}catch(s){throw s}}o(fL,"deleteRecords");zd.exports={deleteRecords:fL}});var Cn=d((H0,tS)=>{"use strict";var Cs=I(),hL=W_(),RL=$(),AL=require("path"),{getBaseSchemaPath:mL}=Z(),gL=In(),pL=O();tS.exports=NL;async function NL(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cs.isEmptyOrZeroLength(e.hash_values)&&!Cs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cs.isEmpty(c)||e.hash_values.push(c)}}if(Cs.isEmptyOrZeroLength(e.hash_values))return eS([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cs.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=AL.join(mL(),e.schema.toString()),i=await RL.openEnvironment(n,e.table),a=await hL.deleteRecords(i,s,e.hash_values);try{t===!0&&await gL(e,a)}catch(_){pL.error(`unable to write transaction due to ${_.message}`)}return eS(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(NL,"lmdbDeleteRecords");function eS(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(eS,"createDeleteResponse")});var j_=d((G0,rS)=>{"use strict";var OL=h(),v0=lr();function Q_(e,t){let r=Object.create(null);if(t.length===1&&OL.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}o(Q_,"parseRow");function IL(e,t,r,s){let n=Q_(r,e);s.push(n)}o(IL,"searchAll");function CL(e,t,r,s){let n=Q_(r,e);s[t]=n}o(CL,"searchAllToMap");function bL(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(bL,"iterateDBI");function Kr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Kr,"pushResults");function LL(e,t,r,s,n,i){t.toString().endsWith(e)&&Kr(t,r,s,n,i)}o(LL,"endsWith");function yL(e,t,r,s,n,i){t.toString().includes(e)&&Kr(t,r,s,n,i)}o(yL,"contains");function wL(e,t,r,s,n,i){t>e&&Kr(t,r,s,n,i)}o(wL,"greaterThanCompare");function DL(e,t,r,s,n,i){t>=e&&Kr(t,r,s,n,i)}o(DL,"greaterThanEqualCompare");function ML(e,t,r,s,n,i){t<e&&Kr(t,r,s,n,i)}o(ML,"lessThanCompare");function UL(e,t,r,s,n,i){t<=e&&Kr(t,r,s,n,i)}o(UL,"lessThanEqualCompare");rS.exports={parseRow:Q_,searchAll:IL,searchAllToMap:CL,iterateDBI:bL,endsWith:LL,contains:yL,greaterThanCompare:wL,greaterThanEqualCompare:DL,lessThanCompare:ML,lessThanEqualCompare:UL,pushResults:Kr}});var bs=d((V0,_S)=>{"use strict";var it=$(),PL=O(),Qe=lr(),Tr=he(),re=et().LMDB_ERRORS_ENUM,q0=I(),BL=h(),ht=j_(),F0=require("lmdb"),{OVERFLOW_MARKER:sS,MAX_SEARCH_KEY_LENGTH:HL}=Tr,bn={lazy:!0};function nS(e,t,r,s,n=!1,i=void 0,a=void 0){let _=Object.create(null),c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=J_(e,t,r);for(let{key:l,value:E}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:a,reverse:n}))s(u(l,E),E,_,t,r);return _}o(nS,"iterateFullIndex");function Ln(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){let l=[[],[]],E=it.openDBI(e,r),T=J_(e,t,r);E[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,R=i===!0?!c:!u,L=i===!0?u:c;for(let{key:de,value:p}of E.getRange({start:A,end:S,reverse:i,limit:a,offset:_,inclusiveEnd:R,exclusiveStart:L}))ht.pushResults(T(de,p),p,l,t,r);return l}o(Ln,"iterateRangeBetween");function J_(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(sS)){if(!s)if(t)s=it.openDBI(e,t);else{let _=it.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=it.openDBI(e,_[c]),!s[Tr.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,bn)[r]}return n}}o(J_,"getOverflowCheck");function vL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);uo(r),r=yn(e,r);let a=[],_=it.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}))ht.searchAll(r,c,u,a);return a}o(vL,"searchAll");function GL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return uo(r),r=yn(e,r),nS(e,t,t,ht.searchAllToMap.bind(null,r),s,n,i)}o(GL,"searchAllToMap");function qL(e,t,r=!1,s=void 0,n=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);return nS(e,void 0,t,ht.iterateDBI,r,s,n)}o(qL,"iterateDBI");function FL(e,t){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return it.statDBI(e,t).entryCount}o(FL,"countAll");function VL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=it.openDBI(e,r);s=Qe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Tr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,bn);u!==void 0&&ht.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:a}))ht.pushResults(s,u,c,t,r);return c}o(VL,"equals");function xL(e,t,r){return fr(e,t,r),it.openDBI(e,t).getValuesCount(r)}o(xL,"count");function kL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=[[],[]],c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Qe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of c.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(a)?a++:i++);for(let{key:E,value:T}of c.getRange({start:l,end:void 0,reverse:n,limit:i,offset:a}))if(E!==l){if(E.toString().startsWith(s))ht.pushResults(E,T,_,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of c.getRange({start:s,reverse:n,limit:i,offset:a}))if(l.toString().startsWith(s))ht.pushResults(l,E,_,t,r);else if(u===!0)break;return _}o(kL,"startsWith");function $L(e,t,r,s,n=!1,i=void 0,a=void 0){return iS(e,t,r,s,n,i,a,!0)}o($L,"endsWith");function iS(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){fr(e,r,s);let c=[[],[]],u=it.openDBI(e,r);u[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=J_(e,t,r);a=Number.isInteger(a)?a:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=T.toString();if(S.endsWith(sS))for(let A of u.getValues(T)){let R=l(T,A);(_?R.endsWith(s):R.includes(s))&&E(R,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Tr.DBI_DEFINITION_NAME].is_hash_attribute)E(T,T);else for(let A of u.getValues(T))E(T,A)}function E(T,S){if(a>0){a--;return}i!==0&&(ht.pushResults(T,S,c,t,r),i--)}return o(E,"found_match"),c}o(iS,"contains");function YL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!0,!1)}o(YL,"greaterThan");function KL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!1,!1)}o(KL,"greaterThanEqual");function WL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!0)}o(WL,"lessThan");function QL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!1)}o(QL,"lessThanEqual");function jL(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(Qe.validateEnv(e),r===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(re.START_VALUE_REQUIRED);if(n===void 0)throw new Error(re.END_VALUE_REQUIRED);if(s=Qe.convertKeyValueToWrite(s),n=Qe.convertKeyValueToWrite(n),s>n)throw new Error(re.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ln(e,t,r,s,n,i,a,_)}o(jL,"between");function JL(e,t,r,s){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),r=yn(e,r),s===void 0)throw new Error(re.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?bn:void 0);return i&&(n=ht.parseRow(i,r)),n}o(JL,"searchByHash");function ZL(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,bn)===void 0&&(s=!1),s}o(ZL,"checkHashExists");function XL(e,t,r,s,n=[]){aS(e,t,r,s,n);let i=oS(e,t,r,s,n);return Object.values(i)}o(XL,"batchSearchByHash");function zL(e,t,r,s,n=[]){return aS(e,t,r,s,n),oS(e,t,r,s,n)}o(zL,"batchSearchByHashToMap");function oS(e,t,r,s,n=[]){r=yn(e,r);let i=Object.create(null),a=r.length<3?bn:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,a);if(u){let l=ht.parseRow(u,r);i[c]=l}else n.push(c)}catch(u){throw PL.warn(u),u}}return i}o(oS,"batchHashSearch");function aS(e,t,r,s,n){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),!Array.isArray(s))throw s===void 0?new Error(re.IDS_REQUIRED):new Error(re.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}o(aS,"initializeBatchSearchByHash");function uo(e){if(!Array.isArray(e))throw e===void 0?new Error(re.FETCH_ATTRIBUTES_REQUIRED):new Error(re.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(uo,"validateFetchAttributes");function fr(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.SEARCH_VALUE_REQUIRED);if(r?.length>HL)throw new Error(re.SEARCH_VALUE_TOO_LARGE)}o(fr,"validateComparisonFunctions");function yn(e,t){return t.length===1&&BL.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=it.listDBIs(e)),t}o(yn,"setGetWholeRowAttributes");_S.exports={searchAll:vL,searchAllToMap:GL,count:xL,countAll:FL,equals:VL,startsWith:kL,endsWith:$L,contains:iS,searchByHash:JL,setGetWholeRowAttributes:yn,batchSearchByHash:XL,batchSearchByHashToMap:zL,checkHashExists:ZL,iterateDBI:qL,greaterThan:YL,greaterThanEqual:KL,lessThan:WL,lessThanEqual:QL,between:jL}});var wn=d((k0,ES)=>{var cS=require("lodash"),uS=tt(),V=require("joi"),ey=I(),{hdb_schema_table:Rt,checkValidTable:lS}=ms(),{handleHDBError:ty,hdb_errors:ry}=J(),{HTTP_STATUS_CODES:sy}=ry,x0=V.object({schema:Rt,table:Rt,hash_values:V.array().min(1).items(V.alternatives(V.string(),V.number())).required(),get_attributes:V.array().min(1).items(Rt).required()}),ny=V.object({schema:Rt,table:Rt,search_attribute:Rt,search_value:V.any().required(),get_attributes:V.array().min(1).items(Rt).required(),desc:V.bool(),limit:V.number().integer().min(1),offset:V.number().integer().min(0)}),iy=V.object({schema:Rt,table:Rt,operator:V.string().valid("and","or").default("and").lowercase(),offset:V.number().integer().min(0),limit:V.number().integer().min(1),get_attributes:V.array().min(1).items(Rt).required(),conditions:V.array().min(1).items(V.object({search_attribute:Rt,search_type:V.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:V.when("search_type",{switch:[{is:"equals",then:V.any()},{is:"between",then:V.array().items(V.alternatives([V.string(),V.number()])).length(2)}],otherwise:V.alternatives(V.string(),V.number())}).required()})).required()});ES.exports=function(e,t){let r=null;switch(t){case"value":r=uS.validateBySchema(e,ny);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(lS("schema",e.schema)),i(lS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=uS.validateBySchema(e,iy);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ey.checkGlobalSchemaTable(e.schema,e.table);if(n)return ty(new Error,n,sy.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=cS.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!cS.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Z_=d(($0,dS)=>{"use strict";var oy=$(),ay=wn(),_y=require("path"),{getBaseSchemaPath:cy}=Z();dS.exports=uy;function uy(e){let t=ay(e,"hashes");if(t)throw t;let r=_y.join(cy(),e.schema.toString());return oy.openEnvironment(r,e.table)}o(uy,"initialize")});var X_=d((Y0,SS)=>{"use strict";var ly=bs(),Ey=Z_();SS.exports=dy;async function dy(e){try{let t=await Ey(e),r=global.hdb_schema[e.schema][e.table];return ly.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(dy,"lmdbGetDataByHash")});var Ls=d((K0,TS)=>{"use strict";var lo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(lo,"SearchByHashObject");TS.exports=lo});var hS=d((Q0,fS)=>{"use strict";var W0=Ls(),Sy=bs(),Ty=Z_();fS.exports=fy;async function fy(e){try{let t=await Ty(e),r=global.hdb_schema[e.schema][e.table];return Sy.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(fy,"lmdbSearchByHash")});var At=d((j0,RS)=>{"use strict";var Eo=class{constructor(t,r,s,n,i,a,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(Eo,"SearchObject");RS.exports=Eo});var So=d((J0,NS)=>{"use strict";var ye=bs(),hy=$(),Ry=require("path"),Ay=I(),C=he(),Wr=h(),{getBaseSchemaPath:my}=Z(),gy=Yt(),AS=et().LMDB_ERRORS_ENUM,{compareKeys:ys}=require("ordered-binary"),Wt=Wr.SEARCH_WILDCARDS;async function py(e,t,r){let s;e.schema===Wr.SYSTEM_SCHEMA_NAME?s=gy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=pS(e,s.hash_attribute,r,t);return mS(e,n,s.hash_attribute,r)}o(py,"prepSearch");async function mS(e,t,r,s){let n=Ry.join(my(),e.schema.toString()),i=await hy.openEnvironment(n,e.table),a=gS(i,e,t,r);if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Iy(e,r)===!1)return s===!0?Oy(a):a[1];let c=a[0];return s===!0?ye.batchSearchByHashToMap(i,r,e.get_attributes,c):ye.batchSearchByHash(i,r,e.get_attributes,c)}o(mS,"executeSearch");function gS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ye.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.CONTAINS:n=ye.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ye.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ye.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ye.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ye.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ye.searchAll(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ye.searchAllToMap(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.BETWEEN:n=ye.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ye.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ye.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ye.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ye.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(gS,"searchByType");function Ny(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ys(i,s[0])>=0&&ys(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ys(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ys(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ys(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ys(n[r],s)<=0;default:return Object.create(null)}}o(Ny,"filterByType");function Oy(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}o(Oy,"createMapFromArrays");function Iy(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}o(Iy,"checkToFetchMore");function pS(e,t,r,s){if(Ay.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Wt.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Wt[0])<0&&n.indexOf(Wt[1])<0)return _===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Wt.indexOf(i)>=0&&Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Wt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Wt[0])||n.includes(Wt[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AS.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wr.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wr.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Wr.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AS.UNKNOWN_SEARCH_TYPE)}}o(pS,"createSearchTypeFromSearchObject");NS.exports={executeSearch:mS,createSearchTypeFromSearchObject:pS,prepSearch:py,searchByType:gS,filterByType:Ny}});var IS=d((X0,OS)=>{"use strict";var Z0=At(),Cy=wn(),by=I(),Ly=h(),yy=So();OS.exports=wy;async function wy(e,t){if(!by.isEmpty(t)&&Ly.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Cy(e,"value");if(s)throw s;let n=!0;try{return await yy.prepSearch(e,t,n)}catch(i){throw i}}o(wy,"lmdbGetDataByValue")});var ws=d((ex,CS)=>{"use strict";var z0=At(),Dy=wn(),My=I(),Uy=h(),Py=So();CS.exports=By;async function By(e,t){if(!My.isEmpty(t)&&Uy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Dy(e,"value");if(s)throw s;let n=!1;try{return await Py.prepSearch(e,t,n)}catch(i){throw i}}o(By,"lmdbSearchByValue")});var LS=d((rx,bS)=>{"use strict";var tx=he(),To=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(To,"SearchByConditionsObject");var fo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(fo,"SearchCondition");var ho=class{constructor(t,r){this.attribute=t,this.desc=r}};o(ho,"SortAttribute");bS.exports={SearchByConditionsObject:To,SearchCondition:fo,SortAttribute:ho}});var PS=d((nx,US)=>{"use strict";var sx=LS().SearchByConditionsObject,Hy=At(),vy=wn(),z_=bs(),Ro=he(),MS=So(),Gy=j_(),yS=require("lodash"),{getBaseSchemaPath:qy}=Z(),Fy=require("path"),Vy=$(),{handleHDBError:wS,hdb_errors:xy}=J(),{HTTP_STATUS_CODES:ky}=xy,$y=1e8,Yy={lazy:!0};US.exports=Ky;async function Ky(e){try{let t=vy(e,"conditions");if(t)throw wS(t,t.message,ky.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=Fy.join(qy(),e.schema.toString()),s=await Vy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=yS.sortBy(e.conditions,a=>{if(a.estimated_count===void 0){let _=a.search_type;_===Ro.SEARCH_TYPES.EQUALS?a.estimated_count=z_.count(s,a.search_attribute,a.search_value):_===Ro.SEARCH_TYPES.CONTAINS||_===Ro.SEARCH_TYPES.ENDS_WITH?a.estimated_count=1/0:a.estimated_count=$y}return a.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[a]=await DS(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(MS.filterByType),u=c.length,l=[],E=z_.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of a){let R=_.get(A,Yy);for(let L=0;L<u;L++)if(!c[L](R))continue e;if(T>0){T--;continue}if(S<=0)break;S--,l.push(Gy.parseRow(R,E))}return l}else{let a=[],_=[];for(let c of i){let[u]=await DS(s,e,c,n.hash_attribute);_.push(u)}if(a=yS.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:a.length;a=a.splice(e.offset,c)}return z_.batchSearchByHash(s,n.hash_attribute,e.get_attributes,a)}}catch(t){throw wS(t)}}o(Ky,"lmdbSearchByConditions");async function DS(e,t,r,s){let n=new Hy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MS.searchByType(e,n,i,s)}o(DS,"executeConditionSearch")});var mo=d((ix,BS)=>{"use strict";var Wy=h().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=Wy.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ao,"DeleteObject");BS.exports=Ao});var ec=d((ox,HS)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(go,"DropAttributeObject");HS.exports=go});var rc=d((_x,vS)=>{"use strict";var Qy=At(),jy=mo(),ax=ec(),yt=h(),Jy=I(),tc=$(),Zy=Yt(),Xy=ws(),zy=Cn(),{getBaseSchemaPath:ew}=Z(),tw=require("path");vS.exports=rw;async function rw(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=Zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nw(e),n=tw.join(ew(),e.schema.toString()),i=await tc.openEnvironment(n,e.table);return t===!0&&await sw(e,i,r.hash_attribute),tc.dropDBI(i,e.attribute),s}o(rw,"lmdbDropAttribute");async function sw(e,t,r){let s=tc.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(sw,"removeAttributeFromAllObjects");async function nw(e){let t=new Qy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await Xy(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Jy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return zy(i)}o(nw,"dropAttributeFromSystem")});var VS=d((cx,FS)=>{"use strict";var iw=rc(),ow=ec(),GS=I(),qS=O(),aw=et().LMDB_ERRORS_ENUM;FS.exports=_w;async function _w(e){if(GS.isEmpty(global.hdb_schema[e.schema])||GS.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 ow(e.schema,e.table,r);try{await iw(n,!1)}catch(i){i.message!==aw.DBI_DOES_NOT_EXIST&&qS.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw qS.error(`Error dropping attribute ${r}`),s}}o(_w,"lmdbDropAllAttributes")});var sc=d((lx,JS)=>{"use strict";var KS=At(),WS=mo(),QS=ws(),jS=Cn(),ux=VS(),Ge=h(),xS=I(),kS=$(),{getBaseSchemaPath:cw,getTransactionAuditStorePath:uw}=Z(),$S=require("path"),YS=O();JS.exports=lw;async function lw(e){try{if(xS.isEmpty(global.hdb_schema[e.schema])||xS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Ew(e),await dw(e);let t=$S.join(cw(),e.schema.toString());try{await kS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$S.join(uw(),e.schema.toString());await kS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lw,"lmdbDropTable");async function Ew(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await QS(t),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jS(n)}o(Ew,"deleteAttributesFromSystem");async function dw(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await QS(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jS(n)}catch(i){throw i}}o(dw,"dropTableFromSystem")});var XS=d((dx,ZS)=>{"use strict";var Sw=require("fs-extra"),Tw=At(),fw=Ls(),hw=mo(),Rw=sc(),Aw=Cn(),mw=X_(),gw=ws(),Qt=h(),Ex=I(),pw=require("path"),{getBaseSchemaPath:Nw}=Z(),{handleHDBError:Ow,hdb_errors:Iw}=J(),{HDB_ERROR_MSGS:Cw,HTTP_STATUS_CODES:bw}=Iw;ZS.exports=Lw;async function Lw(e){let t;try{t=await yw(e.schema);let r=new Tw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gw(r);for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await Rw(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new hw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Aw(n);let i=pw.join(Nw(),t.toString());await Sw.remove(i)}catch(r){throw r}}o(Lw,"lmdbDropSchema");async function yw(e){let t=new fw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await mw(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Ow(new Error,Cw.SCHEMA_NOT_FOUND(e),bw.NOT_FOUND,void 0,void 0,!0);return s}o(yw,"validateDropSchema")});var No=d((Sx,zS)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(po,"CreateTableObject");zS.exports=po});var ic=d((fx,eT)=>{"use strict";var ww=require("path"),Dw=require("fs-extra"),Oo=$(),{getTransactionAuditStorePath:Mw}=Z(),nc=he(),Tx=No();eT.exports=Uw;async function Uw(e){let t;try{let r=ww.join(Mw(),e.schema.toString());await Dw.mkdirp(r),t=await Oo.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{Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Uw,"createTransactionsAuditEnvironment")});var uc=d((hx,sT)=>{"use strict";var oc=h(),tT=$(),Pw=Yr(),Bw=require("path"),{getSystemSchemaPath:Hw,getBaseSchemaPath:vw}=Z(),Gw=Yt(),qw=Qi(),ac=Wi(),Fw=O(),Vw=ic(),cc=Gw.hdb_table,rT=[];for(let e=0;e<cc.attributes.length;e++)rT.push(cc.attributes[e].attribute);sT.exports=xw;async function xw(e,t){let r=Bw.join(vw(),t.schema.toString()),s=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ac(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tT.createEnvironment(r,t.table),e!==void 0){let a=await tT.openEnvironment(Hw(),oc.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pw.insertRecords(a,cc.hash_attribute,rT,[e]),await _c(s),await _c(n),await _c(i)}await Vw(t)}catch(a){throw a}}o(xw,"lmdbCreateTable");async function _c(e){try{await qw(e)}catch(t){Fw.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(_c,"createAttribute")});var iT=d((Rx,nT)=>{"use strict";var kw=ji(),$w=zi(),Yw=ro(),Ds=h(),Kw=Yr().updateRecords,Ww=$(),Qw=require("path"),{getBaseSchemaPath:jw}=Z(),Jw=In(),Zw=O();nT.exports=Xw;async function Xw(e){try{let{schema_table:t,attributes:r}=kw(e);$w(e,r,t.hash_attribute),e.schema!==Ds.SYSTEM_SCHEMA_NAME&&(r.includes(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Yw(e.hdb_auth_header,t,r),n=Qw.join(jw(),e.schema.toString()),i=await Ww.openEnvironment(n,e.table),a=await Kw(i,t.hash_attribute,r,e.records,e[Ds.CLUSTERING_FLAG]!==!0);try{await Jw(e,a)}catch(_){Zw.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(Xw,"lmdbUpdateRecords")});var aT=d((Ax,oT)=>{"use strict";var zw=h().OPERATIONS_ENUM,Io=class{constructor(t,r,s,n=void 0){this.operation=zw.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Io,"UpsertObject");oT.exports=Io});var cT=d((gx,_T)=>{"use strict";var mx=aT(),eD=ji(),tD=zi(),rD=ro(),Ms=h(),sD=Yr().upsertRecords,nD=$(),iD=require("path"),{getBaseSchemaPath:oD}=Z(),aD=In(),_D=O(),{handleHDBError:cD,hdb_errors:uD}=J();_T.exports=lD;async function lD(e){let t;try{t=eD(e)}catch(c){throw cD(c,c.message,uD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;tD(e,s,r.hash_attribute),e.schema!==Ms.SYSTEM_SCHEMA_NAME&&(s.includes(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await rD(e.hdb_auth_header,r,s),i=iD.join(oD(),e.schema.toString()),a=await nD.openEnvironment(i,e.table),_=await sD(a,r.hash_attribute,s,e.records,e[Ms.CLUSTERING_FLAG]!==!0);try{await aD(e,_)}catch(c){_D.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}o(lD,"lmdbUpsertRecords")});var TT=d((px,ST)=>{"use strict";var ED=At(),uT=I(),lT=O(),dD=ws(),ET=h(),SD=W_().deleteRecords,TD=$(),fD=require("path"),{getBaseSchemaPath:hD}=Z(),{promisify:RD}=require("util"),AD=RD(setTimeout),dT=1e4,mD=10;ST.exports=gD;async function gD(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(uT.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 ED(e.schema,e.table,ET.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await dD(n,ET.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw lT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return uT.isEmptyOrZeroLength(s)?(lT.trace("No records found to delete"),{message:"No records found to delete"}):await pD(e,s,t)}o(gD,"lmdbDeleteRecordsBefore");async function pD(e,t,r){let s=fD.join(hD(),e.schema.toString()),n=await TD.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=dT){let c=t.slice(a,a+dT),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await SD(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await AD(mD)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(pD,"chunkDeletes")});var hT=d((Nx,fT)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Co,"DeleteBeforeObject");fT.exports=Co});var AT=d((Ox,RT)=>{"use strict";var bo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(bo,"DeleteAuditLogsBeforeResults");RT.exports=bo});var pT=d((Cx,gT)=>{"use strict";var lc=$(),{getTransactionAuditStorePath:ND}=Z(),Ix=hT(),OD=require("path"),Dn=he(),ID=I(),mT=AT(),CD=require("util").promisify,bD=CD(setTimeout),LD=1e4,yD=100;gT.exports=wD;async function wD(e){let t=OD.join(ND(),e.schema),r=await lc.openEnvironment(t,e.table,!0),s=lc.listDBIs(r);lc.initializeDBIs(r,Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new mT;do n=await DD(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 bD(yD);while(n.transactions_deleted>0);return i}o(wD,"deleteAuditLogsBefore");async function DD(e,t){let r=new mT;try{let s=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ID.isEmpty(_)||(n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LD)break}return await n,r}catch(s){throw s}}o(DD,"deleteTransactions")});var yT=d((bx,LT)=>{"use strict";var Ec=$(),Us=he(),NT=lr(),dc=h(),OT=I(),{getTransactionAuditStorePath:MD}=Z(),UD=require("path"),PD=bs(),Lo=Ns(),BD=O();LT.exports=HD;async function HD(e){let t=UD.join(MD(),e.schema),r=await Ec.openEnvironment(t,e.table,!0),s=Ec.listDBIs(r);Ec.initializeDBIs(r,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return IT(r,e.search_values);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,GD(r,e.search_values,n);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vD(r,e.search_values);default:return IT(r)}}o(HD,"readAuditLog");function IT(e,t=[0,NT.getMicroTime()]){OT.isEmpty(t[0])&&(t[0]=0),OT.isEmpty(t[1])&&(t[1]=NT.getMicroTime());let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let a=Object.assign(new Lo,i);r.push(a)}return r}catch(s){throw s}}o(IT,"searchTransactionsByTimestamp");function vD(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,bT(e,i))}return Object.fromEntries(r)}o(vD,"searchTransactionsByUsername");function GD(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=PD.equals(e,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Us.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,T=l[0].length;E<T;E++){let S=l[0][E],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=bT(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);CT(c,"records",r,l,a),CT(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(GD,"searchTransactionsByHashValues");function CT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(CT,"loopRecords");function bT(e,t){let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Lo,i);r.push(a)}}catch(i){BD.warn(i)}return r}catch(s){throw s}}o(bT,"batchSearchTransactions")});var DT=d((Lx,wT)=>{"use strict";var qD=require("path"),{getBaseSchemaPath:FD}=Z(),VD=$();wT.exports={writeTransaction:xD};async function xD(e,t,r){let s=qD.join(FD(),e);return(await VD.openEnvironment(s,t)).transaction(r)}o(xD,"writeTransaction")});var UT=d((yx,MT)=>{"use strict";var kD=require("path"),{getBaseSchemaPath:$D}=Z(),YD=$();MT.exports={flush:KD};async function KD(e,t){let r=kD.join($D(),e.toString());return(await YD.openEnvironment(r,t.toString())).flushed}o(KD,"flush")});var BT=d((wx,PT)=>{"use strict";var ce=O(),{handleHDBError:WD}=J(),QD=O_(),jD=Qi(),JD=$_(),ZD=Qd(),XD=Cn(),zD=X_(),eM=hS(),tM=IS(),rM=ws(),sM=PS(),nM=XS(),iM=uc(),oM=iT(),aM=cT(),_M=TT(),cM=pT(),uM=sc(),lM=rc(),EM=yT(),dM=DT(),SM=UT(),yo=class extends QD{async searchByConditions(t){try{return sM(t)}catch(r){throw ce.error(r),r}}async getDataByHash(t){try{return await zD(t)}catch(r){throw ce.error(r),r}}async searchByHash(t){try{return await eM(t)}catch(r){throw ce.error(r),r}}async getDataByValue(t,r){try{return await tM(t,r)}catch(s){throw ce.error(s),s}}async searchByValue(t){try{return await rM(t)}catch(r){throw ce.error(r),r}}async createSchema(t){try{return await ZD(t)}catch(r){throw ce.error(r),r}}async dropSchema(t){try{return await nM(t)}catch(r){throw ce.error(r),r}}async createTable(t,r){try{return await iM(t,r)}catch(s){throw ce.error(s),s}}async dropTable(t){try{return await uM(t)}catch(r){throw ce.error(r),r}}async createAttribute(t){try{return await jD(t)}catch(r){throw ce.error(r),r}}async createRecords(t){try{return await JD(t)}catch(r){throw ce.error(r),r}}async updateRecords(t){try{return await oM(t)}catch(r){throw ce.error(r),r}}async upsertRecords(t){try{return await aM(t)}catch(r){throw WD(r,null,null,ce.ERR,r)}}async deleteRecords(t){try{return await XD(t)}catch(r){throw ce.error(r),r}}async deleteRecordsBefore(t){try{return await _M(t)}catch(r){throw ce.error(r),r}}async dropAttribute(t){try{return await lM(t)}catch(r){throw ce.error(r),r}}async deleteAuditLogsBefore(t){try{return await cM(t)}catch(r){throw ce.error(r),r}}async readAuditLog(t){try{return await EM(t)}catch(r){throw ce.error(r),r}}writeTransaction(t,r,s){return dM.writeTransaction(t,r,s)}flush(t,r){return SM.flush(t,r)}};o(yo,"LMDBBridge");PT.exports=yo});var Ps=d((Dx,vT)=>{"use strict";var TM=BT(),fM=O_(),hM=Y();hM.initSync();var HT;function RM(){return HT instanceof fM?HT:new TM}o(RM,"getBridge");vT.exports=RM()});var JT=d((Ux,jT)=>{"use strict";var Sc=require("recursive-iterator"),AM=require("alasql"),Tc=require("clone"),GT=I(),{handleHDBError:qT,hdb_errors:mM}=J(),{HDB_ERROR_MSGS:FT,HTTP_STATUS_CODES:VT}=mM,gM=["DISTINCT_ARRAY"],xT=Symbol("validateTables"),fc=Symbol("validateTable"),Mx=Symbol("getAllColumns"),kT=Symbol("validateAllColumns"),wo=Symbol("findColumn"),$T=Symbol("validateOrderBy"),Mn=Symbol("validateSegment"),hc=Symbol("validateColumn"),YT=Symbol("setColumnsForTable"),KT=Symbol("checkColumnsForAsterisk"),WT=Symbol("validateGroupBy"),QT=Symbol("hasColumns"),Do=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xT](),this[KT](),this[kT]()}[xT](){if(this[QT]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fc](t.table)})}}[QT](){let t=!1,r=new Sc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qT(new Error,FT.SCHEMA_NOT_FOUND(t.databaseid),VT.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qT(new Error,FT.TABLE_NOT_FOUND(t.databaseid,t.tableid),VT.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Tc(s);n.table=Tc(t),this.attributes.push(n)})}[wo](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)}[KT](){let t=new Sc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[YT](r.tableid)}[YT](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new AM.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kT](){this[Mn](this.statement.columns,!1),this[Mn](this.statement.joins,!1),this[Mn](this.statement.where,!1),this[WT](this.statement.group,!1),this[Mn](this.statement.order,!0)}[Mn](t,r){if(!t)return;let s=new Sc(t),n=[];for(let{node:i,path:a}of s)!GT.isEmpty(i)&&!GT.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$T](i):n.push(this[hc](i)));return n}[WT](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&gM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Tc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[wo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[wo](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$T](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[hc](t)}[hc](t){let r=this[wo](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};o(Do,"SelectValidator");jT.exports=Do});var ef=d((Px,zT)=>{"use strict";var ZT=require("lodash"),Un=require("mathjs"),pM=require("jsonata"),XT=I();zT.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ZT.uniqWith(e,ZT.isEqual):e,searchJSON:NM,mad:Pn.bind(null,Un.mad),mean:Pn.bind(null,Un.mean),mode:Pn.bind(null,Un.mode),prod:Pn.bind(null,Un.prod),median:Pn.bind(null,Un.median)};function Pn(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Pn,"aggregateFunction");function NM(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(XT.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),XT.isEmpty(this.__ala__.res[r])){let s=pM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(NM,"searchJSON")});var rf=d((Bx,tf)=>{"use strict";var ie=require("moment"),Rc="YYYY-MM-DDTHH:mm:ss.SSSZZ";ie.suppressDeprecationWarnings=!0;tf.exports={current_date:()=>ie().utc().format("YYYY-MM-DD"),current_time:()=>ie().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ie(e).utc().format("YYYY");case"month":return ie(e).utc().format("MM");case"day":return ie(e).utc().format("DD");case"hour":return ie(e).utc().format("HH");case"minute":return ie(e).utc().format("mm");case"second":return ie(e).utc().format("ss");case"millisecond":return ie(e).utc().format("SSS");default:break}},date:e=>ie(e).utc().format(Rc),date_format:(e,t)=>ie(e).utc().format(t),date_add:(e,t,r)=>ie(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ie(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ie(e).utc(),n=ie(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ie().utc().valueOf(),get_server_time:()=>ie().format(Rc),offset_utc:(e,t)=>ie(e).utc().utcOffset(t).format(Rc)}});var af=d((Hx,of)=>{"use strict";var OM=require("@turf/area"),IM=require("@turf/length"),CM=require("@turf/circle"),bM=require("@turf/difference"),LM=require("@turf/distance"),yM=require("@turf/boolean-contains"),wM=require("@turf/boolean-equal"),DM=require("@turf/boolean-disjoint"),MM=require("@turf/helpers"),sf=h(),v=I();of.exports={geoArea:UM,geoLength:PM,geoCircle:BM,geoDifference:HM,geoDistance:nf,geoNear:vM,geoContains:GM,geoEqual:qM,geoCrosses:FM,geoConvert:VM};var Ac="geo1 is required",mc="geo2 is required";function UM(e){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),OM.default(e)}o(UM,"geoArea");function PM(e,t){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),IM.default(e,{units:t||"kilometers"})}o(PM,"geoLength");function BM(e,t,r){if(v.isEmpty(e))throw new Error("point is required");if(v.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=v.autoCast(e)),CM.default(e,t,{units:r||"kilometers"})}o(BM,"geoCircle");function HM(e,t){if(v.isEmpty(e))throw new Error("poly1 is required");if(v.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),bM(e,t)}o(HM,"geoDifference");function nf(e,t,r){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),LM.default(e,t,{units:r||"kilometers"})}o(nf,"geoDistance");function vM(e,t,r,s){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");if(v.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return nf(e,t,s)<=r}o(vM,"geoNear");function GM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),yM.default(e,t)}o(GM,"geoContains");function qM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),wM.default(e,t)}o(qM,"geoEqual");function FM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),!DM.default(e,t)}o(FM,"geoCrosses");function VM(e,t,r){if(v.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(v.isEmpty(t))throw new Error("geo_type is required");if(v.isEmpty(sf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sf.GEO_CONVERSION_ENUM).join(",")}`);return MM[t](e,r)}o(VM,"geoConvert")});var cf=d((vx,_f)=>{var Qr=ef(),je=rf(),wt=af();_f.exports=e=>{e.aggr.mad=e.aggr.MAD=Qr.mad,e.aggr.mean=e.aggr.MEAN=Qr.mean,e.aggr.mode=e.aggr.MODE=Qr.mode,e.aggr.prod=e.aggr.PROD=Qr.prod,e.aggr.median=e.aggr.MEDIAN=Qr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=je.current_date,e.fn.current_time=e.fn.CURRENT_TIME=je.current_time,e.fn.extract=e.fn.EXTRACT=je.extract,e.fn.date=e.fn.DATE=je.date,e.fn.date_format=e.fn.DATE_FORMAT=je.date_format,e.fn.date_add=e.fn.DATE_ADD=je.date_add,e.fn.date_sub=e.fn.DATE_SUB=je.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=je.date_diff,e.fn.now=e.fn.NOW=je.now,e.fn.offset_utc=e.fn.OFFSET_UTC=je.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=je.get_server_time,e.fn.getdate=e.fn.GETDATE=je.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=je.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wt.geoNear}});var Ef=d((Gx,lf)=>{"use strict";var Bn=require("lodash"),ge=require("alasql");ge.options.cache=!1;var xM=cf(),uf=require("clone"),Mo=require("recursive-iterator"),M=O(),P=I(),Bs=Ps(),kM=h(),{hdb_errors:$M}=J(),YM="IS NULL",Hn="There was a problem performing this search. Please check the logs and try again.";xM(ge);var Uo=class{constructor(t,r){if(P.isEmpty(t))throw M.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),P.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!P.isEmptyOrZeroLength(s))return M.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw M.error("Error thrown from checkEmptySQL in SQLSearch class method search."),M.error(s),new Error(Hn)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw M.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),M.error(s),new Error(Hn)}if(Object.keys(this.data).length===0)return M.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw M.error("Error thrown from processJoins in SQLSearch class method search."),M.error(s),new Error(Hn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw M.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),M.error(s),new Error(Hn)}try{return t=await this._finalSQL(),t}catch(s){throw M.error("Error thrown from finalSQL in SQLSearch class method search."),M.error(s),new Error(Hn)}}_getColumns(){let t=new Mo(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(uf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bn.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(P.isEmpty(this.statement.where)){M.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!P.isEmpty(r)&&r.right)if(P.isNotEmptyAndHasValue(r.right.value)){let s=P.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ge.yy.LogicValue({value:s}):r.right instanceof ge.yy.StringValue&&!P.isEmpty(s)&&P.autoCasterIsNumberCheck(s.toString())&&(r.right=new ge.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=P.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ge.yy.LogicValue({value:i}):s instanceof ge.yy.StringValue&&P.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ge.yy.NumValue({value:i}))});if(t){M.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!P.isEmpty(kM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(P.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(P.isEmptyOrZeroLength(r.left.columnid)||P.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(P.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!P.isEmpty(r.right.value)||!P.isEmpty(r.left.value)?s.add(P.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from)&&P.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bn.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(P.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);P.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(P.isEmptyOrZeroLength(this.all_table_attributes)&&!P.isEmptyOrZeroLength(this.columns.columns))return t;if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ge.promise(r)}catch(r){throw M.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),M.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(uf(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(P.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(YM)>-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=Bn.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(c=!0),!P.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await Bs.getDataByHash(_);for(let E of _.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){M.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let T=await Bs.getDataByValue(E);for(let S in T)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(S)))}))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else if(!P.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,T=l.length;E<T;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await Bs.getDataByValue(_,S.operation);if(c)for(let R in A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(R)));else for(let R in A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(R)))}}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),M.error(l)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await Bs.getDataByValue(_);if(c)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(E)))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),M.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof ge.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,a=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ge.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ge.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ge.yy.FuncValue:new ge.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${R}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${R}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(S,n);T=await ge.promise(A,t),t=null}catch(S){throw M.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),M.error(S),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let S=0,A=T.length;S<A;S++){let R=T[S];a.forEach(L=>{R[L.key]!==null&&R[L.key]!==void 0&&L.keys.add(R[L.key])})}a.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Bn.difference(A,[...S.keys].map(L=>L.toString()));for(let L=0,de=R.length;L<de;L++){let p=R[L];delete this.data[`${S.schema}_${S.table}`].__merged_data[p]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Mo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=Bn.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){M.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),M.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await Bs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let T=a[l],S=c[T];for(let A=0;A<u;A++){let R=n.columns[A],L=S[R]===void 0?null:S[R];this.data[s].__merged_data[T].push(L)}}}}catch(r){throw M.error("Error thrown from getDataByHash function in SQLSearch class method getData."),M.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();M.trace(`Final SQL: ${n}`),s=await ge.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),M.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw M.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),M.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return M.error($M.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),M.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let a=await Bs.getDataByValue(i);for(let _ in a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=a[_][s.attribute]}catch(a){M.error("There was an error when processing this SQL operation. Check your logs"),M.error(a)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Uo,"SQLSearch");lf.exports=Uo});var hr=d((qx,Sf)=>{"use strict";var KM=JT();Sf.exports={searchByConditions:JM,searchByHash:ZM,searchByValue:XM,search:zM};var gc=Ps(),df=require("util"),WM=df.callbackify(gc.searchByHash),QM=df.callbackify(gc.searchByValue),jM=Ef();async function JM(e){return gc.searchByConditions(e)}o(JM,"searchByConditions");function ZM(e,t){try{WM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(ZM,"searchByHash");function XM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(XM,"searchByValue");function zM(e,t){try{let r=new KM(e);r.validate(),new jM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(zM,"search")});var Gn=d((Fx,Rf)=>{"use strict";var vn=require("crypto"),ff="aes-256-cbc",eU=32,tU=16,pc=64,hf=32,rU=pc+hf,Tf=new Map;Rf.exports={encrypt:sU,decrypt:nU,createNatsTableStreamName:iU};function sU(e){let t=vn.randomBytes(eU),r=vn.randomBytes(tU),s=vn.createCipheriv(ff,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),_=n.toString("hex");return i+a+_}o(sU,"encrypt");function nU(e){let t=e.substr(0,pc),r=e.substr(pc,hf),s=e.substr(rU,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=vn.createDecipheriv(ff,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(nU,"decrypt");function iU(e,t){let r=`${e}.${t}`,s=Tf.get(r);return s||(s=vn.createHash("md5").update(`${e}.${t}`).digest("hex"),Tf.set(r,s)),s}o(iU,"createNatsTableStreamName")});var vo=d((Vx,If)=>{"use strict";var mf=hr(),Rr=O(),gf=G_(),oU=require("lodash"),aU=require("path"),_U=Gn(),Nc=I(),{promisify:pf}=require("util"),Q=h(),{handleHDBError:Po,hdb_errors:cU}=J(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:Nf}=cU,uU=Y();uU.initSync();var Af=$(),lU=Z(),qn=pf(mf.searchByValue),EU=pf(mf.searchByHash),Hs="name",Of="hash_attribute",Oc="schema",dU="schema_table",SU="attribute";If.exports={describeAll:TU,describeTable:Ho,describeSchema:hU};async function TU(e){try{let t=Nc.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Hs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Hs]},i=await qn(n);if(Nc.isEmptyOrZeroLength(i))return{};let a={},_={};for(let T in i)a[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},u=await qn(c),l=[];for(let T of u)try{let S;if(t||s)S=await Ho({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;S=await Ho({schema:T.schema,table:T.name},A)}S&&l.push(S)}catch(S){Rr.error(S)}let E={};for(let T in l)t||s?(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]):_[l[T].schema]&&(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]);for(let T in a)t||s?E[T]={}:_[T]&&(E[T]={});return E}catch(t){return Rr.error("Got an error in describeAll"),Rr.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}o(TU,"describeAll");async function Ho(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},a=gf.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Hs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=await qn(_);if(!c||c.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),Nf.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dU,search_value:r+"."+s,get_attributes:[SU]},E=await qn(l);E=oU.uniqBy(E,T=>T.attribute),n&&n.length>0&&(E=fU(n)),i.attributes=E,i.clustering_stream_name=_U.createNatsTableStreamName(u.schema,u.name);try{let T=aU.join(lU.getBaseSchemaPath(),i.schema.toString()),S=await Af.openEnvironment(T,i.name),A=Af.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(T){Rr.warn(`unable to stat table dbi due to ${T}`)}}catch(l){Rr.error(`There was an error getting attributes for table '${u.name}'`),Rr.error(l)}return i}o(Ho,"descTable");function fU(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(fU,"getAttrsByPerms");async function hU(e){let t=gf.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Oc,search_value:s,hash_values:[],get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},i=await qn(n);if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Hs]},_=await EU(a);if(_&&_.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),Nf.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Nc.isEmpty(c)||c.describe){let u=await Ho({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){Rr.error(`Error describing schema table '${e.schema}.${_}'`),Rr.error(c)}})),a}}o(hU,"describeSchema")});var Gs=d(($x,wf)=>{var xx=require("async"),vs=Yt(),kx=O(),{callbackify:Lf,promisify:RU}=require("util");wf.exports={setSchemaDataToGlobal:Cf,getTableSchema:gU,getSystemSchema:NU,setSchemaDataToGlobalAsync:RU(Cf)};var yf=vo(),AU=Lf(yf.describeAll),mU=Lf(yf.describeTable);function Cf(e){AU(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=vs),global.hdb_schema=r,e(null,null)})}o(Cf,"setSchemaDataToGlobal");function bf(e,t){return e==="system"?vs[t]:global.hdb_schema[e][t]}o(bf,"returnSchema");function gU(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?pU(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,bf(e,t))}):r(null,bf(e,t))}o(gU,"getTableSchema");function pU(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=vs:global.hdb_schema={system:vs},r();return}mU(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:vs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(pU,"setTableDataToGlobal");function NU(){return vs}o(NU,"getSystemSchema")});var Jr=d((Yx,Uf)=>{"use strict";var qo=N_(),ot=I(),OU=require("util"),Fo=Ps(),IU=Gs(),Ic=O(),{handleHDBError:Ar,hdb_errors:CU}=J(),{HTTP_STATUS_CODES:jr}=CU,bU=OU.promisify(IU.getTableSchema),LU="updated",Df="inserted",Mf="upserted";Uf.exports={insert:wU,update:DU,upsert:MU,validation:yU,flush:UU};async function yU(e){if(ot.isEmpty(e))throw new Error("invalid update parameters defined.");if(ot.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ot.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bU(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&ot.isEmptyOrZeroLength(_[s]))throw Ic.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ot.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ic.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ot.isEmpty(_[s])&&_[s]!==""&&n.has(ot.autoCast(_[s]))&&(_.skip=!0),n.add(ot.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(yU,"validation");async function wU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.createRecords(e);return Go(Df,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}o(wU,"insertData");async function DU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.updateRecords(e);return ot.isEmpty(s.existing_rows)?Go(LU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Go(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}o(DU,"updateData");async function MU(e){if(e.operation!=="upsert")throw Ar(new Error,"invalid operation, must be upsert",jr.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Go(Mf,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ar(s,null,null,Ic.ERR,n)}}o(MU,"upsertData");function Go(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Df?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===Mf?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Go,"returnObject");function UU(e){return Fo.flush(e.schema,e.table)}o(UU,"flush")});var Bf=d((Kx,Pf)=>{"use strict";var Vo=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Vo,"HdbInfoInsertObject");Pf.exports={HdbInfoInsertObject:Vo}});var Cc=d((Wx,Hf)=>{"use strict";var xo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(xo,"InsertObject");var ko=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(ko,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o($o,"DeleteResponseObject");Hf.exports={InsertObject:xo,NoSQLSeachObject:ko,DeleteResponseObject:$o}});var qf=d((Qx,Gf)=>{"use strict";var vf=h(),Yo=class{constructor(t,r){this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Yo,"UpgradeObject");Gf.exports={UpgradeObject:Yo}});var Ko=d((jx,Vf)=>{"use strict";var at=require("prompt"),qs=require("chalk"),Ff=O(),mt=require("os"),bc=vr(),Lc=["yes","y"];async function PU(e){let t=`${mt.EOL}`+qs.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=bc(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return Ff.error("There was an error when prompting user about an upgrade."),Ff.error(n),!1}return Lc.includes(s.CONFIRM_UPGRADE)}o(PU,"forceUpdatePrompt");async function BU(e){let t=`${mt.EOL}`+qs.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=bc(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Lc.includes(s.CONFIRM_DOWNGRADE)}o(BU,"forceDowngradePrompt");async function HU(){let e=`${mt.EOL}`+qs.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=bc(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:qs.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Lc.includes(r.GENERATE_CERTS)}o(HU,"upgradeCertsPrompt");Vf.exports={forceUpdatePrompt:PU,forceDowngradePrompt:BU,upgradeCertsPrompt:HU}});var yc=d((Jx,xf)=>{"use strict";var Wo=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Wo,"UpgradeDirective");xf.exports=Wo});var $f=d((tk,kf)=>{"use strict";var vU=I(),GU=We(),Zx=O(),Xx=require("path"),zx=require("fs"),ek=h();kf.exports={getOldPropsValue:qU};function qU(e,t,r=!1){let s=t.getRaw(e);return vU.isNotEmptyAndHasValue(s)?s:r?GU.getDefaultConfig(e):""}o(qU,"getOldPropsValue")});var Qf=d((rk,Wf)=>{"use strict";var mr=require("path"),gr=require("fs-extra"),FU=require("properties-reader"),VU=yc(),oe=O(),{getOldPropsValue:W}=$f(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:Zr}=h(),Xr=We(),Qo=Y(),Yf=I(),Dt=h(),wc=new VU("3.1.0"),Kf=[];function xU(){let e=FU(Qo.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),oe.info(t);let r=` ;Settings for the HarperDB process.
|
|
2
|
+
"use strict";var Eg=Object.defineProperty;var o=(e,t)=>Eg(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var h=d((p0,pl)=>{"use strict";var be=require("path"),dg=require("fs");function Sg(){let e=__dirname;for(;!dg.existsSync(be.join(e,"package.json"));){let t=be.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(Sg,"getHDBPackageRoot");var Et=Sg(),ul="js",on=ul,Tg="harperdb-config.yaml",fg="defaultConfig.yaml",hg="hdb",ll=`hdbServer.${on}`,El=`customFunctionsServer.${on}`,dl=`hdbIpcServer.${on}`,Rg=`restartHdb.${on}`,s_="HarperDB",Si="Custom Functions",Ti="Clustering Hub",fi="Clustering Leaf",n_="Clustering Ingest Service",i_="Clustering Reply Service",Ag="foreground.pid",r_={HDB:s_,IPC:"IPC",CLUSTERING_HUB:Ti,CLUSTERING_LEAF:fi,CLUSTERING_INGEST_SERVICE:n_,CLUSTERING_REPLY_SERVICE:i_,CUSTOM_FUNCTIONS:Si,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"},mg={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"},gg={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},pg={harperdb:s_,ipc:"IPC","clustering hub":Ti,"clustering leaf":fi,"clustering ingest service":n_,"clustering reply service":i_,"custom functions":Si,custom_functions:Si,"pm2-logrotate":r_.PM2_LOGROTATE,logrotate:r_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Ng={CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_INGEST_PROC_DESCRIPTOR:n_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:i_},di={HDB:be.join(Et,"server/harperdb"),IPC:be.join(Et,"server/ipc"),CUSTOM_FUNCTIONS:be.join(Et,"server/customFunctions"),CLUSTERING_HUB:be.join(Et,"server/nats"),CLUSTERING_LEAF:be.join(Et,"server/nats")},Og={HDB:be.join(di.HDB,ll),IPC:be.join(di.IPC,dl),CUSTOM_FUNCTIONS:be.join(di.CUSTOM_FUNCTIONS,El)},Ig={HDB:be.join(Et,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:be.join(Et,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:be.join(Et,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:be.join(Et,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:be.resolve(Et,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Cg={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Sl="support@harperdb.io",bg="customer-success@harperdb.io",Tl=1,Lg=4141,fl="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",yg="https://www.harperdb.io/product",wg=`For support, please submit a request at ${fl} or contact ${Sl}`,hl=`For license support, please contact ${bg}`,Dg="None of the specified records were found.",Mg="hash attribute not found",Ug=`Your current license only supports ${Tl} role. ${hl}`,Pg="Your current license only supports 3 connections to a node.",Bg="127.0.0.1",Hg=1,vg=/^\.$/,Gg=/^\.\.$/,qg="U+002E",Fg=/\//g,Vg="U+002F",xg=/U\+002F/g,kg=/^U\+002E$/,$g=/^U\+002EU\+002E$/,Yg="d",Kg=999999,Wg="*",Qg="--max-old-space-size=",jg="system",Jg="__hdb_hash",Zg=".harperdb",Xg=".hdb",zg="keys",ep="hdb_boot_properties.file",tp=".updateConfig.json",rp="SIGTSTP",sp=24,np=6e4,ip=448,op="blob",ap="trash",_p="schema",cp="transactions",up=".count",lp="id",Ep="install_log.log",dp="run_log.log",Sp="PROCESS_NAME",Tp={SETTINGS_PATH_KEY:"settings_path"},Rl=require("lodash"),fp={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},hp={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Rp={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ap={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"},mp={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"},Ye="hdb_internal:",gp={CREATE_SCHEMA:Ye+"create_schema",CREATE_TABLE:Ye+"create_table",CREATE_ATTRIBUTE:Ye+"create_attribute",ADD_USER:Ye+"add_user",ALTER_USER:Ye+"alter_user",DROP_USER:Ye+"drop_user",HDB_NODES:Ye+"hdb_nodes",HDB_USERS:Ye+"hdb_users",HDB_WORKERS:Ye+"hdb_workers",CATCHUP:Ye+"catchup",SCHEMA_CATCHUP:Ye+"schema_catchup",WORKER_ROOM:Ye+"cluster_workers"},pp={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"},Np="060493.ks",Op=".license",Ip={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},m={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules"},Cp={CSV:".csv",JSON:".json"},bp={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Lp={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ar={};ar[m.CREATE_SCHEMA]=m.CREATE_SCHEMA;ar[m.CREATE_TABLE]=m.CREATE_TABLE;ar[m.CREATE_ATTRIBUTE]=m.CREATE_ATTRIBUTE;ar[m.INSERT]=m.INSERT;ar[m.UPDATE]=m.UPDATE;ar[m.UPSERT]=m.UPSERT;ar[m.DELETE]=m.DELETE;var x=Object.create(null);x[m.DESCRIBE_ALL]=m.DESCRIBE_ALL;x[m.DESCRIBE_TABLE]=m.DESCRIBE_TABLE;x[m.DESCRIBE_SCHEMA]=m.DESCRIBE_SCHEMA;x[m.READ_LOG]=m.READ_LOG;x[m.ADD_NODE]=m.ADD_NODE;x[m.LIST_USERS]=m.LIST_USERS;x[m.LIST_ROLES]=m.LIST_ROLES;x[m.USER_INFO]=m.USER_INFO;x[m.SQL]=m.SQL;x[m.GET_JOB]=m.GET_JOB;x[m.SEARCH_JOBS_BY_START_DATE]=m.SEARCH_JOBS_BY_START_DATE;x[m.DELETE_FILES_BEFORE]=m.DELETE_FILES_BEFORE;x[m.EXPORT_LOCAL]=m.EXPORT_LOCAL;x[m.EXPORT_TO_S3]=m.EXPORT_TO_S3;x[m.CLUSTER_STATUS]=m.CLUSTER_STATUS;x[m.REMOVE_NODE]=m.REMOVE_NODE;x[m.RESTART]=m.RESTART;x[m.CUSTOM_FUNCTIONS_STATUS]=m.CUSTOM_FUNCTIONS_STATUS;x[m.GET_CUSTOM_FUNCTIONS]=m.GET_CUSTOM_FUNCTIONS;x[m.GET_CUSTOM_FUNCTION]=m.GET_CUSTOM_FUNCTION;x[m.SET_CUSTOM_FUNCTION]=m.SET_CUSTOM_FUNCTION;x[m.DROP_CUSTOM_FUNCTION]=m.DROP_CUSTOM_FUNCTION;x[m.ADD_CUSTOM_FUNCTION_PROJECT]=m.ADD_CUSTOM_FUNCTION_PROJECT;x[m.DROP_CUSTOM_FUNCTION_PROJECT]=m.DROP_CUSTOM_FUNCTION_PROJECT;x[m.PACKAGE_CUSTOM_FUNCTION_PROJECT]=m.PACKAGE_CUSTOM_FUNCTION_PROJECT;x[m.DEPLOY_CUSTOM_FUNCTION_PROJECT]=m.DEPLOY_CUSTOM_FUNCTION_PROJECT;var yp={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},wp={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Al={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"},Dp=Rl.invert(Al),f={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_RETAIN:"logging_rotation_retain",LOGGING_ROTATION_ROTATE:"logging_rotation_rotate",LOGGING_ROTATION_ROTATEINTERVAL:"logging_rotation_rotateInterval",LOGGING_ROTATION_ROTATEMODULE:"logging_rotation_rotateModule",LOGGING_ROTATION_TIMEZONE:"logging_rotation_timezone",LOGGING_ROTATION_WORKERINTERVAL:"logging_rotation_workerInterval",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},Mp={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:f.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Up={csv_file_load:"csv_file_load",csv_data_load:m.CSV_DATA_LOAD,csv_url_load:m.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Pp={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"},Bp={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Hp={FILE_SYSTEM:"fs",LMDB:"lmdb"},vp={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Gp={DEVELOPMENT:8192,DEFAULT:512},qp={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"},Fp={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"},Vp={ENOENT:"ENOENT",EACCES:"EACCES"},ml={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xp="__clustering__",kp=Object.values(ml),$p=15984864e5,gl={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Yp=Rl.invert(gl),Kp={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"},Wp=111,Qp=`\r
|
|
3
|
+
`,jp={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jp=["*","%"],Zp="unauthorized_access",Xp="func_val",zp={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eN={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tN="hdb_ipc_server",rN="hdb_ipc_client_",sN={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"},nN={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iN={STOPPED:"stopped",ONLINE:"online"},oN="3.x.x";pl.exports={LOCAL_HARPERDB_OPERATIONS:x,HDB_SUPPORT_ADDRESS:Sl,HDB_SUPPORT_URL:fl,HDB_PRICING_URL:yg,SUPPORT_HELP_MSG:wg,LICENSE_HELP_MSG:hl,HDB_PROC_NAME:ll,HDB_PROC_DESCRIPTOR:s_,CLUSTERING_LEAF_PROC_DESCRIPTOR:fi,CLUSTERING_HUB_PROC_DESCRIPTOR:Ti,SYSTEM_SCHEMA_NAME:jg,HASH_FOLDER_NAME:Jg,HDB_HOME_DIR_NAME:Zg,UPDATE_FILE_NAME:tp,LICENSE_KEY_DIR_NAME:zg,BOOT_PROPS_FILE_NAME:ep,JOB_TYPE_ENUM:Up,JOB_STATUS_ENUM:Ip,SYSTEM_TABLE_NAMES:Ap,SYSTEM_TABLE_HASH_ATTRIBUTES:mp,OPERATIONS_ENUM:m,VALID_S3_FILE_TYPES:Cp,S3_BUCKET_AUTH_KEYS:bp,VALID_SQL_OPS_ENUM:Lp,GEO_CONVERSION_ENUM:wp,HDB_SETTINGS_NAMES:Al,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Dp,SERVICE_ACTIONS_ENUM:yp,CLUSTER_MESSAGE_TYPE_ENUM:Pp,CLUSTER_CONNECTION_DIRECTION_ENUM:Bp,CLUSTER_EVENTS_DEFS_ENUM:qp,PERIOD_REGEX:vg,DOUBLE_PERIOD_REGEX:Gg,UNICODE_PERIOD:qg,FORWARD_SLASH_REGEX:Fg,UNICODE_FORWARD_SLASH:Vg,ESCAPED_FORWARD_SLASH_REGEX:xg,ESCAPED_PERIOD_REGEX:kg,ESCAPED_DOUBLE_PERIOD_REGEX:$g,REG_KEY_FILE_NAME:Np,RESTART_TIMEOUT_MS:np,HDB_FILE_PERMISSIONS:ip,SCHEMA_DIR_NAME:_p,TRANSACTIONS_DIR_NAME:cp,LIMIT_COUNT_NAME:up,ID_ATTRIBUTE_STRING:lp,INSERT_MODULE_ENUM:hp,UPGRADE_JSON_FIELD_NAMES_ENUM:Rp,RESTART_CODE:rp,RESTART_CODE_NUM:sp,CLUSTER_OPERATIONS:ar,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:pp,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ye,INTERNAL_SC_CHANNELS:gp,CLUSTERING_MESSAGE_TYPES:Kp,HDB_FILE_SUFFIX:Xg,BLOB_FOLDER_NAME:op,HDB_TRASH_DIR:ap,ORIGINATOR_SET_VALUE:Wp,LICENSE_VALUES:vp,RAM_ALLOCATION_ENUM:Gp,STORAGE_TYPES_ENUM:Hp,TIME_STAMP_NAMES_ENUM:ml,TIME_STAMP_NAMES:kp,PERMS_UPDATE_RELEASE_TIMESTAMP:$p,SEARCH_NOT_FOUND_MESSAGE:Dg,SEARCH_ATTRIBUTE_NOT_FOUND:Mg,LICENSE_ROLE_DENIED_RESPONSE:Ug,LICENSE_MAX_CONNS_REACHED:Pg,BASIC_LICENSE_MAX_NON_CU_ROLES:Tl,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Lg,VALUE_SEARCH_COMPARATORS:gl,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Yp,LICENSE_FILE_NAME:Op,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Fp,NEW_LINE:Qp,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Hg,MOMENT_DAYS_TAG:Yg,API_TURNOVER_SEC:Kg,LOOPBACK:Bg,CODE_EXTENSION:on,WILDCARD_SEARCH_VALUE:Wg,NODE_ERROR_CODES:Vp,JAVASCRIPT_EXTENSION:ul,PERMS_CRUD_ENUM:jp,UNAUTHORIZED_PERMISSION_NAME:Zp,SEARCH_WILDCARDS:Jp,FUNC_VAL:Xp,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:zp,JWT_ENUM:eN,CLUSTERING_FLAG:xp,RUN_LOG:dp,INSTALL_LOG:Ep,IPC_SERVER_MODULE:dl,HDB_IPC_SERVER:tN,IPC_EVENT_TYPES:sN,HDB_IPC_CLIENT_PREFIX:rN,CUSTOM_FUNCTION_PROC_NAME:El,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Si,SERVICES:nN,MEM_SETTING_KEY:Qg,HDB_RESTART_SCRIPT:Rg,PROCESS_DESCRIPTORS:r_,SERVICE_SERVERS:Og,SERVICE_SERVERS_CWD:di,PROCESS_DESCRIPTORS_VALIDATE:pg,LAUNCH_SERVICE_SCRIPTS:Ig,LOG_LEVELS:gg,PROCESS_NAME_ENV_PROP:Sp,PROCESS_LOG_NAMES:mg,PM2_PROCESS_STATUSES:iN,CONFIG_PARAM_MAP:Mp,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Tg,HDB_DEFAULT_CONFIG_FILE:fg,ROLE_TYPES_ENUM:Cg,BOOT_PROP_PARAMS:Tp,INSTALL_PROMPTS:fp,HDB_ROOT_DIR_NAME:hg,CLUSTERING_PROCESSES:Ng,FOREGROUND_PID_FILE:Ag,PACKAGE_ROOT:Et,PRE_4_0_0_VERSION:oN}});var vr=d((N0,Il)=>{"use strict";var Nl=require("minimist");Il.exports=aN;function aN(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Ol(process.env),s=Ol(Nl(process.argv))):(r=process.env,s=Nl(process.argv));let n={};for(let i=0,a=e.length;i<a;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}o(aN,"assignCMDENVVariables");function Ol(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(Ol,"objKeysToLowerCase")});var I=d((O0,Ml)=>{"use strict";var Gr=require("fs-extra"),qr=require("path"),bl=require("yaml"),Ll=require("properties-reader"),_e=h(),_N=vr(),cN=require("os"),{PACKAGE_ROOT:__}=h(),Be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},hi=qr.join(__,"logs"),_r=process.env.pm_id===void 0,uN=qr.join(__,"config/yaml/",_e.HDB_DEFAULT_CONFIG_FILE),c_=process.env.PROCESS_NAME===void 0?_e.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Es,It,xt,Pe,o_,ds;ds===void 0&&yl();Ml.exports={createLogFile:lN,notify:SN,fatal:TN,error:a_,warn:fN,info:EN,debug:dN,trace:Dl,setLogLevel:RN,log_level:Pe};function yl(){try{if(ds===void 0){let e=hN();ds=Ll(e),{level:Pe,config_log_path:o_,to_file:It,to_stream:xt}=AN(ds.get("settings_path"))}}catch(e){if(ds=void 0,e.code===_e.NODE_ERROR_CODES.ENOENT){let t=_N(Object.keys(_e.CONFIG_PARAM_MAP),!0);for(let i in t){let a=_e.CONFIG_PARAM_MAP[i];a&&a.toLowerCase();let _=t[i];if(a===_e.CONFIG_PARAMS.LOGGING_LEVEL){Pe=_;continue}if(a===_e.CONFIG_PARAMS.LOGGING_STDSTREAMS){xt=_;continue}a===_e.CONFIG_PARAMS.LOGGING_FILE&&(It=a)}let{default_level:r,default_to_file:s,default_to_stream:n}=mN();It=It===void 0?s:It,It=Cl(It),xt=xt===void 0?n:xt,xt=Cl(xt),Pe=Pe===void 0?r:Pe,o_=hi;return}throw a_("Error initializing log settings"),a_(e),e}}o(yl,"initLogSettings");function lN(e,t){if(!_r){Dl("createLogFile should only be used if the process is not being managed by pm2");return}ds===void 0&&yl(),c_=t;let r;e===_e.PROCESS_LOG_NAMES.INSTALL?r=hi:r=o_,It&&(Es=qr.join(r,e),Gr.ensureFileSync(Es))}o(lN,"createLogFile");function Fr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let a=0;a<n;a++){let _=t[a];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,a<i&&(s+=" ")}return`{"process_name": "${c_}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
4
|
+
`}o(Fr,"createLogRecord");function wl(e){Es===void 0&&(c_=_e.PROCESS_DESCRIPTORS.INSTALL,Gr.ensureDirSync(hi),Es=qr.join(hi,_e.PROCESS_LOG_NAMES.INSTALL),Gr.ensureFileSync(Es)),Gr.appendFileSync(Es,e)}o(wl,"writeToLogFile");function Ri(e){It&&wl(e),xt&&process.stdout.write(e)}o(Ri,"nonPm2LogStdOut");function u_(e){It&&wl(e),xt&&process.stderr.write(e)}o(u_,"nonPm2LogStdErr");function EN(...e){if(Be[Pe]<=Be.info){let t=Fr("info",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(EN,"info");function Dl(...e){if(Be[Pe]<=Be.trace){let t=Fr("trace",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(Dl,"trace");function a_(...e){if(Be[Pe]<=Be.error){let t=Fr("error",e);if(_r){u_(t);return}process.stderr.write(t)}}o(a_,"error");function dN(...e){if(Be[Pe]<=Be.debug){let t=Fr("debug",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(dN,"debug");function SN(...e){if(Be[Pe]<=Be.notify){let t=Fr("notify",e);if(_r){Ri(t);return}process.stdout.write(t)}}o(SN,"notify");function TN(...e){if(Be[Pe]<=Be.fatal){let t=Fr("fatal",e);if(_r){u_(t);return}process.stderr.write(t)}}o(TN,"fatal");function fN(...e){if(Be[Pe]<=Be.warn){let t=Fr("warn",e);if(_r){u_(t);return}process.stderr.write(t)}}o(fN,"warn");function hN(){let e;try{e=cN.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qr.join(e,_e.HDB_HOME_DIR_NAME,_e.BOOT_PROPS_FILE_NAME);return Gr.existsSync(t)||(t=qr.join(__,"utility/hdb_boot_properties.file")),t}o(hN,"getPropsFilePath");function RN(e){Pe=e}o(RN,"setLogLevel");function Cl(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Cl,"autoCastBoolean");function AN(e){try{if(e.includes("config/settings.js")){let a=Ll(e);return{level:a.get(_e.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qr.dirname(a.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(_e.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=bl.parseDocument(Gr.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===_e.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(AN,"getLogConfig");function mN(){try{let e=bl.parseDocument(Gr.readFileSync(uN,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(mN,"getDefaultConfig")});var an=d((I0,gN)=>{gN.exports={name:"harperdb",version:"4.0.8",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.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.2.0","@fastify/autoload":"5.7.1","@fastify/compress":"6.2.0","@fastify/cors":"8.2.0","@fastify/static":"6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","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.14.1","fastify-plugin":"4.5.0","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:"9.0.0",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.6",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 Vr=d((L0,Ul)=>{"use strict";var C0=require("fs-extra"),b0=I();Ul.exports={version:pN,printVersion:ON,nodeVersion:NN};var cr=an();function pN(){if(cr)return cr.version}o(pN,"version");function NN(){if(cr&&cr.engines&&cr.engines["preferred-node"])return cr.engines["preferred-node"]}o(NN,"nodeVersion");function ON(){cr&&console.log(`HarperDB Version ${cr.version}`)}o(ON,"printVersion")});var vl=d((y0,Hl)=>{"use strict";var Pl=require("semver/functions/major"),IN=require("semver/functions/satisfies"),Bl=an(),_n=process.versions&&process.versions.node?process.versions.node:void 0;Hl.exports=CN;function CN(){let e=Bl.engines.node,t=Bl.engines["preferred-node"];if(_n){if(e&&!IN(_n,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${_n}. Please install a version of Node.js that is withing the defined range.`};if(t&&Pl(_n)!==Pl(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${_n}. Some issues may occur with untested versions of Node.js.`}}}o(CN,"checkNodeVersion")});var l_=d((w0,Gl)=>{"use strict";var bN=require("util"),LN=require("path"),yN=require("child_process"),wN=bN.promisify(yN.execFile),DN=1e3*1e3*10;Gl.exports={findPs:MN};async function MN(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await wN("ps",["wwxo",`pid,${r}`],{maxBuffer:DN});for(let n of s.trim().split(`
|
|
5
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:LN.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}o(MN,"findPs")});var he=d((D0,Fl)=>{"use strict";var UN="__dbis__",PN="__environment_name__",BN="__dbi_defintion__",HN={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"},vN=["__createdtime__","__updatedtime__"],GN="\uFFFF",ql={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qN=Object.values(ql);Fl.exports={INTERNAL_DBIS_NAME:UN,DBI_DEFINITION_NAME:BN,SEARCH_TYPES:HN,TIMESTAMP_NAMES:vN,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PN,TRANSACTIONS_DBI_NAMES_ENUM:ql,TRANSACTIONS_DBIS:qN,OVERFLOW_MARKER:GN}});var et=d((M0,jl)=>{"use strict";var Vl=h(),xl=he(),kl={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},$l=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Yl={500:$l("There was an error processing your request."),400:"Invalid request"},FN=Yl[kl.INTERNAL_SERVER_ERROR],VN={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.`},xN={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},kN={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"},$N={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 ${xl.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${xl.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"},YN={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Vl.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 ${Vl.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"},Kl={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"},KN={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."},WN={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`},QN={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"},jN={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JN={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`},Wl={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.`},Ql={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}`},ZN={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."},XN={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},zN={...Kl,...kN,...VN,...KN,...WN,...QN,...jN,...JN,...YN,...Wl,...Ql,...ZN,...XN,...xN};jl.exports={CHECK_LOGS_WRAPPER:$l,HDB_ERROR_MSGS:zN,DEFAULT_ERROR_MSGS:Yl,DEFAULT_ERROR_RESP:FN,HTTP_STATUS_CODES:kl,LMDB_ERRORS_ENUM:$N,AUTHENTICATION_ERROR_MSGS:Kl,VALIDATION_ERROR_MSGS:Wl,IPC_ERRORS:Ql}});var J=d((U0,Xl)=>{"use strict";var Ss=et(),eO=I(),tO=h(),cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Jl),this.http_resp_code=s||Ss.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ss.DEFAULT_ERROR_MSGS[s]?Ss.DEFAULT_ERROR_MSGS[s]:Ss.DEFAULT_ERROR_MSGS[Ss.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&&eO[n](i)}};o(cn,"HdbError");function Jl(e,t,r,s=tO.LOG_LEVELS.ERROR,n=null,i=!1){if(Zl(e))return e;let a=new cn(e,t,r,s,n);return i&&delete a.stack,a}o(Jl,"handleHDBError");function Zl(e){return e.__proto__.constructor.name===cn.name}o(Zl,"isHDBError");Xl.exports={isHDBError:Zl,handleHDBError:Jl,hdb_errors:Ss}});var O=d((B0,dE)=>{"use strict";var xr=require("path"),rO=require("fs-extra"),Se=I(),zl=require("fs-extra"),sO=require("truncate-utf8-bytes"),un=require("os"),nO=require("net"),iO=require("recursive-iterator"),Re=h(),nE=l_(),eE=require("papaparse"),Ai=require("moment"),{inspect:oO}=require("util"),tE=require("is-number"),P0=require("lodash"),{hdb_errors:mi}=J(),iE=require("util").promisify(setTimeout),aO=100,_O=5,cO="",uO=4,rE=255,sE={true:!0,false:!1,undefined:null,null:null,NaN:NaN};dE.exports={isEmpty:Ke,isEmptyOrZeroLength:Ct,arrayHasEmptyValues:dO,arrayHasEmptyOrZeroLengthValues:SO,buildFolderPath:TO,isBoolean:oE,errorizeMessage:lO,stripFileExtension:hO,autoCast:RO,autoCastJSONDeep:E_,removeDir:mO,compareVersions:gO,isCompatibleDataVersion:pO,escapeRawValue:_E,unescapeValue:NO,stringifyProps:OO,valueConverter:IO,timeoutPromise:bO,isClusterOperation:yO,getClusterUser:MO,sendTransactionToSocketCluster:wO,checkGlobalSchemaTable:DO,getHomeDir:cE,getPropsFilePath:CO,promisifyPapaParse:UO,removeBOM:uE,createEventPromise:PO,checkProcessRunning:BO,checkSchemaTableExist:HO,checkSchemaExists:lE,checkTableExists:EE,getStartOfTomorrowInSeconds:vO,getLimitKey:GO,isObject:fO,isNotEmptyAndHasValue:EO,autoCasterIsNumberCheck:aE,backtickASTSchemaItems:qO,isPortTaken:LO,stopProcess:FO,createForkArgs:VO,autoCastBoolean:xO,async_set_timeout:iE,getTableHashAttribute:kO,doesSchemaExist:$O,doesTableExist:YO,stringifyObj:KO,ms_to_time:WO,changeExtension:QO,PACKAGE_ROOT:Re.PACKAGE_ROOT};function lO(e){return e instanceof Error?e:new Error(e)}o(lO,"errorizeMessage");function Ke(e){return e==null}o(Ke,"isEmpty");function EO(e){return!Ke(e)&&(e||e===0||e===""||oE(e))}o(EO,"isNotEmptyAndHasValue");function Ct(e){return Ke(e)||e.length===0||e.size===0}o(Ct,"isEmptyOrZeroLength");function dO(e){if(Ke(e))return!0;for(let t=0;t<e.length;t++)if(Ke(e[t]))return!0;return!1}o(dO,"arrayHasEmptyValues");function SO(e){if(Ct(e))return!0;for(let t=0;t<e.length;t++)if(Ct(e[t]))return!0;return!1}o(SO,"arrayHasEmptyOrZeroLengthValues");function TO(...e){try{return e.join(xr.sep)}catch{console.error(e)}}o(TO,"buildFolderPath");function oE(e){return Ke(e)?!1:e===!0||e===!1}o(oE,"isBoolean");function fO(e){return Ke(e)?!1:typeof e=="object"}o(fO,"isObject");function hO(e){return Ct(e)?cO:e.slice(0,-uO)}o(hO,"stripFileExtension");function RO(e){return Ke(e)||e===""||typeof e!="string"?e:sE[e]!==void 0?sE[e]:aE(e)===!0?Number(e):e}o(RO,"autoCast");function AO(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(AO,"autoCastJSON");function E_(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=E_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=E_(r);s!==r&&(e[t]=s)}return e}else return AO(e)}o(E_,"autoCastJSONDeep");function aE(e){if(e.startsWith("0.")&&tE(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tE(e))}o(aE,"autoCasterIsNumberCheck");async function mO(e){if(Ct(e))throw new Error(`Directory path: ${e} does not exist`);try{await zl.emptyDir(e),await zl.remove(e)}catch(t){throw Se.error(`Error removing files in ${e} -- ${t}`),t}}o(mO,"removeDir");function gO(e,t){if(Ct(e)){Se.info("Invalid current version sent as parameter.");return}if(Ct(t)){Se.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(gO,"compareVersions");function pO(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(pO,"isCompatibleDataVersion");function _E(e){if(Ke(e))return e;let t=String(e);return t==="."?Re.UNICODE_PERIOD:t===".."?Re.UNICODE_PERIOD+Re.UNICODE_PERIOD:t.replace(Re.FORWARD_SLASH_REGEX,Re.UNICODE_FORWARD_SLASH)}o(_E,"escapeRawValue");function NO(e){if(Ke(e))return e;let t=String(e);return t===Re.UNICODE_PERIOD?".":t===Re.UNICODE_PERIOD+Re.UNICODE_PERIOD?"..":String(e).replace(Re.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(NO,"unescapeValue");function OO(e,t){if(Ke(e))return Se.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+un.EOL}!Ct(s)&&s[0]===";"?r+=" "+s+n+un.EOL:Ct(s)||(r+=s+"="+n+un.EOL)}catch{Se.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(OO,"stringifyProps");function IO(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Se.error(n),t=e}let r=String(_E(t)),s=Buffer.byteLength(r)>rE?sO(r,rE)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}o(IO,"valueConverter");function cE(){let e;try{e=un.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(cE,"getHomeDir");function CO(){let e=xr.join(cE(),Re.HDB_HOME_DIR_NAME,Re.BOOT_PROPS_FILE_NAME);return rO.existsSync(e)||(e=xr.join(__dirname,"../","hdb_boot_properties.file")),e}o(CO,"getPropsFilePath");function bO(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(bO,"timeoutPromise");async function LO(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=nO.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(LO,"isPortTaken");function yO(e){try{return Re.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Se.error(`Error checking operation against cluster ops ${t}`)}return!1}o(yO,"isClusterOperation");function wO(e,t,r){if(global.hdb_socket_client!==void 0){Se.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Re.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}o(wO,"sendTransactionToSocketCluster");function DO(e,t){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(DO,"checkGlobalSchemaTable");function MO(e,t){if(Ke(t)){Se.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ke(e)||Ct(e)){Se.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Se.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Se.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(MO,"getClusterUser");function UO(){eE.parsePromise=function(e,t){return new Promise(function(r,s){eE.parse(e,{header:!0,transformHeader:uE,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(UO,"promisifyPapaParse");function uE(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(uE,"removeBOM");function PO(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Se.info(`Got cluster status event response: ${oO(n)}`);try{i.cancel()}catch{Se.error("Error trying to cancel timeout.")}s(n)})})}o(PO,"createEventPromise");async function BO(e){let t=!0,r=0;do await iE(aO*r++),(await nE.findPs(e)).length>0&&(t=!1);while(t&&r<_O);if(t)throw new Error(`process ${e} was not started`)}o(BO,"checkProcessRunning");function HO(e,t){let r=lE(e);if(r)return r;let s=EE(e,t);if(s)return s}o(HO,"checkSchemaTableExist");function lE(e){if(!global.hdb_schema[e])return mi.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(lE,"checkSchemaExists");function EE(e,t){if(!global.hdb_schema[e][t])return mi.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(EE,"checkTableExists");function vO(){let e=Ai().utc().add(1,Re.MOMENT_DAYS_TAG).startOf(Re.MOMENT_DAYS_TAG).unix(),t=Ai().utc().unix();return e-t}o(vO,"getStartOfTomorrowInSeconds");function GO(){return Ai().utc().format("DD-MM-YYYY")}o(GO,"getLimitKey");function qO(e){try{let t=new iO(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Se.error("Got an error back ticking items."),Se.error(t)}}o(qO,"backtickASTSchemaItems");async function FO(e){let t=un.userInfo();(await nE.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Se.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(FO,"stopProcess");function VO(e){return[e]}o(VO,"createForkArgs");function xO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(xO,"autoCastBoolean");function kO(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(kO,"getTableHashAttribute");function $O(e){return global?.hdb_schema?.[e]!==void 0}o($O,"doesSchemaExist");function YO(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(YO,"doesTableExist");function KO(e){try{return JSON.stringify(e)}catch{return e}}o(KO,"stringifyObj");function WO(e){let t=Ai.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}o(WO,"ms_to_time");function QO(e,t){let r=xr.basename(e,xr.extname(e));return xr.join(xr.dirname(e),r+t)}o(QO,"changeExtension")});var tt=d((H0,SE)=>{"use strict";var He=require("validate.js");He.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||He.validators.type.checks[t](e)?null:` must be a '${t}' value`};He.validators.type.checks={Object:function(e){return He.isObject(e)&&!He.isArray(e)},Array:He.isArray,Integer:He.isInteger,Number:He.isNumber,String:He.isString,Date:He.isDate,Boolean:function(e){return typeof e=="boolean"}};He.validators.hasValidFileExt=function(e,t){return!He.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};SE.exports={validateObject:jO,validateObjectAsync:JO,validateBySchema:ZO};function jO(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=He(e,t,{format:"flat"});return r?new Error(r):null}o(jO,"validateObject");async function JO(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await He.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(JO,"validateObjectAsync");function ZO(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(ZO,"validateBySchema")});var S_=d((v0,fE)=>{"use strict";var XO=require("fs-extra"),H=require("joi"),zO=require("os"),{boolean:Ae,string:kt,number:bt,array:d_}=H.types(),TE=require("path"),eI=I(),gi=O(),tI=tt(),rI="log",sI="custom_functions",nI="Invalid logging.rotation.maxSize unit. Available units are G, M or K",iI="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",oI="rootPath config parameter is undefined",aI="clustering.enabled config parameter is undefined",ur=bt.min(0).required(),pi=d_.items({host:kt.required(),port:ur}).empty(null),ln;fE.exports={configValidator:_I,routesValidator:SI,route_constraints:pi};function _I(e){if(ln=e.rootPath,gi.isEmpty(ln))throw oI;let t=Ae.required(),r=H.valid("production","development").required(),s=bt.min(1).max(1e3).empty(null).default(EI),n=kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dI),i=H.custom(uI).messages({"any.custom":"{:#label} {:#error}"}),a=kt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(gi.isEmpty(_))throw aI;let c;return _===!0?c=H.object({enabled:t,hubServer:H.object({cluster:H.object({name:H.required().empty(null),network:H.object({port:ur,routes:pi}).required()}).required(),leafNodes:H.object({network:H.object({port:ur}).required()}).required(),network:H.object({port:ur}).required()}).required(),leafServer:H.object({network:H.object({port:ur,routes:pi}).required()}).required(),nodeName:a,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()}),user:H.string().required()}).required():c=H.object({enabled:t,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ae.required()})}).required(),H.object({clustering:c,customFunctions:H.object({enabled:t,network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}),nodeEnv:r,root:n,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:H.object({network:H.object({port:ur})}).required(),localStudio:H.object({enabled:t}).required(),logging:H.object({file:Ae.required(),level:H.valid("notify","fatal","error","warn","info","debug","trace"),rotation:H.object({compress:Ae.required(),dateFormat:kt.required(),maxSize:kt.custom(lI).required(),retain:bt.min(0).required(),rotate:Ae.required(),rotateInterval:kt.required(),rotateModule:Ae.required(),timezone:kt.required(),workerInterval:bt.min(1).required()}).required(),root:n,stdStreams:Ae.required(),auditLog:Ae.required()}).required(),operationsApi:H.object({authentication:H.object({operationTokenTimeout:H.required(),refreshTokenTimeout:H.required()}).required(),foreground:Ae.required(),network:H.object({cors:Ae.required(),corsAccessList:d_.required(),headersTimeout:bt.min(1).required(),https:Ae.required(),keepAliveTimeout:bt.min(1).required(),port:ur,timeout:bt.min(1).required()}).required(),nodeEnv:r,tls:H.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:H.object({threads:s}).required(),storage:H.object({writeAsync:Ae.required(),overlappingSync:Ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(_I,"configValidator");function cI(e){return XO.existsSync(e)?null:`Specified path ${e} does not exist.`}o(cI,"doesPathExist");function uI(e,t){if(e===null)return;H.assert(e,kt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=cI(e);return r?t.message(r):e}o(uI,"validatePemFile");function lI(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(nI);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(iI)}o(lI,"validateRotationMaxSize");function EI(e,t){let r=t.state.path.join("."),s=zO.cpus().length,n=s-1;return n<=2&&(n=2),eI.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}o(EI,"setDefaultThreads");function dI(e,t){if(!gi.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(gi.isEmpty(ln))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return TE.join(ln,sI);case"logging.root":return TE.join(ln,rI);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(dI,"setDefaultRoot");function SI(e){let t=H.object({routes:pi});return tI.validateBySchema({routes:e},t)}o(SI,"routesValidator")});var We=d((G0,NE)=>{"use strict";var X=h(),rt=O(),Le=I(),{configValidator:TI,routesValidator:hE}=S_(),dt=require("fs-extra"),fI=require("yaml"),Ts=require("path"),hI=require("is-number"),Ii=require("properties-reader"),RI=require("lodash"),{handleHDBError:AI}=J(),{HTTP_STATUS_CODES:mI,HDB_ERROR_MSGS:Ni}=et(),{PACKAGE_ROOT:gI}=h(),pI="Unable to get config value because config is uninitialized",NI="Config successfully initialized",OI="Error backing up config file",II="Empty parameter sent to getConfigValue",RE=Ts.join(gI,"config","yaml",X.HDB_DEFAULT_CONFIG_FILE),CI="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Oi,ve;NE.exports={createConfigFile:bI,getDefaultConfig:LI,getConfigValue:AE,initConfig:mE,flattenConfig:kr,updateConfigValue:gE,updateConfigObject:yI,getConfiguration:wI,setConfiguration:DI,readConfigFile:h_,getClusteringRoutes:MI,initOldConfig:pE,getConfigFromFile:UI};function bI(e){let t=fs(RE);Oi=kr(t.toJSON());for(let i in e){let a=X.CONFIG_PARAM_MAP[i.toLowerCase()];if(a!==void 0){let _=a.split("_"),c=T_(a,e[i]);try{t.setIn([..._],c)}catch(u){Le.error(u)}}}f_(t);let r=t.toJSON();ve=kr(r);let s=t.getIn(["rootPath"]),n=Ts.join(s,X.HDB_CONFIG_FILE);dt.createFileSync(n),dt.writeFileSync(n,String(t)),Le.trace(`Config file written to ${n}`)}o(bI,"createConfigFile");function LI(e){if(Oi===void 0){let r=fs(RE);Oi=kr(r.toJSON())}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oi[t.toLowerCase()]}o(LI,"getDefaultConfig");function AE(e){if(rt.isEmpty(e)){Le.error(II);return}if(ve===void 0){Le.trace(pI);return}let t=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ve[t.toLowerCase()]}o(AE,"getConfigValue");function mE(e=!1){if(ve===void 0||e){let t=rt.getPropsFilePath();try{dt.accessSync(t,dt.constants.F_OK|dt.constants.R_OK)}catch(a){throw Le.error(a),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ii(t).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{pE(s);return}catch(a){if(a.code!==X.NODE_ERROR_CODES.ENOENT)throw a}try{n=fs(s)}catch(a){if(a.code===X.NODE_ERROR_CODES.ENOENT){Le.trace(`HarperDB config file not found at ${s}.
|
|
6
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Le.error(a),new Error(`Error reading HarperDB config file at ${s}`)}f_(n);let i=n.toJSON();ve=kr(i),Le.trace(NI)}}o(mE,"initConfig");function f_(e){let t=e.toJSON(),r=TI(t);if(r.error)throw Ni.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}o(f_,"validateConfig");function yI(e,t){ve===void 0&&(ve={});let r=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Le.trace(`Unable to update config object because config param '${e}' does not exist`);return}ve[r.toLowerCase()]=t}o(yI,"updateConfigObject");function gE(e,t,r=void 0,s=!1,n=!1){ve===void 0&&mE();let i=AE(X.CONFIG_PARAM_MAP.hdb_root),a=Ts.join(i,X.HDB_CONFIG_FILE),_=fs(a);if(r===void 0){let l=X.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),T=T_(l,t);_.setIn([...E],T)}else for(let l in r){let E=X.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let T=E.split("_"),S=T_(E,r[l]);try{_.setIn([...T],S)}catch(A){Le.error(A)}}}f_(_);let c=_.getIn(["rootPath"]),u=Ts.join(c,X.HDB_CONFIG_FILE);if(s===!0)try{let l=Ts.join(c,"backup",`${X.HDB_CONFIG_FILE}.bak`);dt.copySync(a,l),Le.trace(`Config file: ${a} backed up to: ${l}`)}catch(l){Le.error(OI),Le.error(l)}dt.writeFileSync(u,String(_)),n&&(ve=kr(_.toJSON())),Le.trace(`Config parameter: ${e} updated with value: ${t}`)}o(gE,"updateConfigValue");function kr(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=kr(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(kr,"flattenConfig");function T_(e,t){if(e===X.CONFIG_PARAMS.CLUSTERING_NODENAME||e===X.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(hI(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||rt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return rt.autoCast(t)}o(T_,"castConfigValue");function wI(){let e=rt.getPropsFilePath(),r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(wI,"getConfiguration");async function DI(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return gE(void 0,void 0,n,!0),CI}catch(i){throw typeof i=="string"||i instanceof String?AI(i,i,mI.BAD_REQUEST,void 0,void 0,!0):i}}o(DI,"setConfiguration");function h_(){let e=rt.getPropsFilePath();try{dt.accessSync(e,dt.constants.F_OK|dt.constants.R_OK)}catch(n){throw Le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ii(e).get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return fs(r).toJSON()}o(h_,"readConfigFile");function fs(e){return fI.parseDocument(dt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(fs,"parseYamlDoc");function MI(){let e=h_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=rt.isEmptyOrZeroLength(t)?[]:t;let r=hE(t);if(r)throw Ni.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=rt.isEmptyOrZeroLength(s)?[]:s;let n=hE(s);if(n)throw Ni.CONFIG_VALIDATION(n.message);if(!rt.isEmptyOrZeroLength(s)&&!rt.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!rt.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ni.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(MI,"getClusteringRoutes");function pE(e){let t=Ii(e);ve={};for(let r in X.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(rt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=X.CONFIG_PARAM_MAP[r].toLowerCase();n===X.CONFIG_PARAMS.LOGGING_ROOT?ve[n]=Ts.dirname(s):ve[n]=s}return ve}o(pE,"initOldConfig");function UI(e){let t=h_();return RI.get(t,e.replaceAll("_","."))}o(UI,"getConfigFromFile")});var Y=d((q0,IE)=>{"use strict";var R_=require("fs-extra"),Lt=require("path"),PI=require("os"),BI=require("properties-reader"),En=I(),hs=O(),w=h(),Ci=We(),HI="Error initializing environment manager",bi="BOOT_PROPS_FILE_PATH",OE=!1,vI={[w.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},$t={};IE.exports={BOOT_PROPS_FILE_PATH:bi,getHdbBasePath:GI,setHdbBasePath:qI,get:FI,initSync:xI,setProperty:q,initTestEnvironment:kI};function GI(){return $t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(GI,"getHdbBasePath");function qI(e){$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(qI,"setHdbBasePath");function FI(e){let t=Ci.getConfigValue(e);return t===void 0?$t[e]:t}o(FI,"get");function q(e,t){vI[e]&&($t[e]=t),Ci.updateConfigObject(e,t)}o(q,"setProperty");function VI(){let e;try{e=hs.getPropsFilePath(),R_.accessSync(e,R_.constants.F_OK|R_.constants.R_OK),OE=!0;let t=BI(e);return $t[w.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(w.HDB_SETTINGS_NAMES.INSTALL_USER),$t[w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),$t[bi]=e,!0}catch{return En.trace(`Environment manager found no properties file at ${e}`),!1}}o(VI,"doesPropFileExist");function xI(e=!1){try{(OE||VI())&&(Ci.initConfig(e),$t[w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ci.getConfigValue(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){En.error(HI),En.error(t),console.error(t),process.exit(1)}}o(xI,"initSync");function kI(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=Lt.join(__dirname,"../../","unitTests");$t[bi]=Lt.join(c,"hdb_boot_properties.file"),q(w.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Lt.join(c,"settings.test")),q(w.HDB_SETTINGS_NAMES.INSTALL_USER,PI.userInfo().username),q(w.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.HDB_SETTINGS_NAMES.CERT_KEY,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Lt.join(c,"envDir","utility","keys","privateKey.pem")),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Lt.join(c,"envDir","utility","keys","certificate.pem")),q(w.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),q(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Lt.join(c,"envDir","log")),q(w.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),q(w.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),q(w.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Lt.join(c,"envDir")),q(w.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,hs.isEmpty(n)?!0:n),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,hs.isEmpty(n)?!0:n),q(w.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),q(w.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,hs.isEmpty(i)?!1:i),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,hs.isEmpty(i)?!1:i),q(w.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),q(w.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),q(w.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),q(w.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Lt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),q(w.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,hs.isEmpty(_)?!1:_),a&&(q("CORS_ACCESSLIST",a),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(q(w.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(q(w.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(q(w.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),q(w.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bi}. Please check your boot props and settings files`;En.fatal(r),En.error(t)}}o(kI,"initTestEnvironment")});var m_=d((F0,CE)=>{"use strict";var dn=Y();dn.initSync();var Rs=require("fs-extra"),A_=require("path"),As=h(),$I=require("crypto"),YI=require("uuid").v4;CE.exports=KI;function KI(){if(dn.getHdbBasePath()!==void 0){let e=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=A_.join(dn.getHdbBasePath(),As.LICENSE_KEY_DIR_NAME,As.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Rs.accessSync(r),Rs.accessSync(e),Rs.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=YI(),i=$I.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Rs.writeFileSync(r,n),Rs.writeFileSync(e,i.privateKey),Rs.writeFileSync(t,i.publicKey)}else throw s}}}o(KI,"checkJWTTokenExist")});var ms=d((V0,yE)=>{"use strict";var LE=O(),bE=h(),yi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,g_=require("joi"),Li={schema_format:{pattern:yi,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},WI=g_.alternatives(g_.string().min(1).max(Li.schema_length.maximum).pattern(yi).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),g_.number()).required();function QI(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:yi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(QI,"checkValidTable");function jI(e,t){return LE.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(jI,"validateSchemaExists");function JI(e,t){let r=t.state.ancestors[0].schema;return LE.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(JI,"validateTableExists");function ZI(e,t){return e.toLowerCase()===bE.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${bE.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(ZI,"validateSchemaName");yE.exports={common_validators:Li,schema_regex:yi,hdb_schema_table:WI,validateSchemaExists:jI,validateTableExists:JI,validateSchemaName:ZI,checkValidTable:QI}});var N_=d((x0,DE)=>{var{hdb_schema_table:wE}=ms(),XI=tt(),p_=require("joi"),zI={undefined:"undefined",null:"null"},eC=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||zI[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),tC=p_.object({schema:wE,table:wE,records:p_.array().items(p_.object().custom(eC)).required()});DE.exports=function(e){return XI.validateBySchema(e,tC)}});var O_=d((k0,ME)=>{"use strict";var wi=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};o(wi,"BridgeMethods");ME.exports=wi});var lr=d((K0,HE)=>{"use strict";var UE=et().LMDB_ERRORS_ENUM,$0=require("lmdb"),rC=he(),Y0=require("buffer").Buffer,sC=require("microtime"),{OVERFLOW_MARKER:PE,MAX_SEARCH_KEY_LENGTH:Di}=rC,BE=["number","string","symbol","boolean","bigint"];function nC(e){if(!e)throw new Error(UE.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(UE.INVALID_ENVIRONMENT)}o(nC,"validateEnv");function iC(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(iC,"stringifyData");function oC(e){return e instanceof Date?e.valueOf():e}o(oC,"convertKeyValueToWrite");function aC(e){if(e==null)return;if(BE.includes(typeof e))return e.length>Di?[e.slice(0,Di)+PE]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];BE.includes(typeof n)&&(n.length>Di?t.push(n.slice(0,Di)+PE):t.push(n))}}return t}o(aC,"getIndexedValues");function _C(){let e=sC.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}o(_C,"getMicroTime");HE.exports={validateEnv:nC,stringifyData:iC,convertKeyValueToWrite:oC,getMicroTime:_C,getIndexedValues:aC}});var GE=d((W0,vE)=>{"use strict";var Mi=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Mi,"DBIDefinition");vE.exports=Mi});var FE=d((Q0,qE)=>{"use strict";var Ui=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Ui,"OpenDBIObject");qE.exports=Ui});var xE=d((j0,VE)=>{"use strict";var Pi=class{constructor(t,r,s,n,i=!1,a=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=a,_!==void 0&&(this.overlappingSync=_)}};o(Pi,"OpenEnvironmentObject");VE.exports=Pi});var $=d((Z0,ed)=>{"use strict";var I_=require("lmdb"),st=require("fs-extra"),St=require("path"),Hi=lr(),kE=I(),me=et().LMDB_ERRORS_ENUM,vi=GE(),C_=FE(),$E=xE(),Er=he(),J0=h(),Sn=Y();Sn.initSync();var YE=Sn.get("STORAGE_WRITEASYNC")===!0||Sn.get("STORAGE_WRITEASYNC")==="true"||Sn.get("STORAGE_WRITEASYNC")==="TRUE",KE=Sn.get("STORAGE_OVERLAPPINGSYNC"),WE=1024*1024*1024,QE=1e4,jE=1e3,Tt=Er.INTERNAL_DBIS_NAME,JE=Er.DBI_DEFINITION_NAME,cC="data.mdb",uC="lock.mdb",Tn=".mdb",lC="-lock",Bi=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[Er.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Er.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new I_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(Bi,"TransactionCursor");function b_(e,t){if(e===void 0)throw new Error(me.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(me.ENV_NAME_REQUIRED)}o(b_,"pathEnvNameValidation");async function L_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(me.INVALID_BASE_PATH):s}try{let s=St.join(e,t+Tn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(St.join(e,t,cC),st.constants.R_OK|st.constants.F_OK),St.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(me.INVALID_ENVIRONMENT)}else throw new Error(me.INVALID_ENVIRONMENT);throw s}}o(L_,"validateEnvironmentPath");function Gi(e,t){if(Hi.validateEnv(e),t===void 0)throw new Error(me.DBI_NAME_REQUIRED)}o(Gi,"validateEnvDBIName");async function EC(e,t,r=!1,s=!1){b_(e,t),t=t.toString();try{return await L_(e,t,s),y_(e,t,r)}catch(n){if(n.message===me.INVALID_ENVIRONMENT){let i=St.join(e,t);await st.mkdirp(s?i:e);let a=new $E(s?i:i+Tn,WE,QE,jE,!1,YE,KE),_=I_.open(a);_.dbis=Object.create(null);let c=new C_(!1);_.openDB(Tt,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=w_(e,t,r);return _[Er.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(EC,"createEnvironment");async function dC(e,t,r,s=!0){let n=await y_(e,t);if(r===void 0)throw new Error(me.DESTINATION_PATH_REQUIRED);try{await st.access(St.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(me.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(dC,"copyEnvironment");async function y_(e,t,r=!1){b_(e,t),t=t.toString();let s=w_(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await L_(e,t),i=St.join(e,t+Tn),a=n!=i,_=new $E(n,WE,QE,jE,a,YE,KE),c=I_.open(_);c.dbis=Object.create(null);let u=XE(c);for(let l=0;l<u.length;l++)nt(c,u[l]);return c[Er.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(y_,"openEnvironment");async function SC(e,t,r=!1){b_(e,t),t=t.toString();let s=St.join(e,t+Tn),n=await L_(e,t);if(global.lmdb_map!==void 0){let i=w_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await ZE(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+lC:St.join(St.dirname(n),uC))}o(SC,"deleteEnvironment");async function ZE(e){Hi.validateEnv(e);let t=e[Er.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(ZE,"closeEnvironment");function w_(e,t,r=!1){let n=`${St.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(w_,"getCachedEnvironmentName");function TC(e){Hi.validateEnv(e);let t=Object.create(null),r=nt(e,Tt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Tt)try{t[s]=Object.assign(new vi,n)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(TC,"listDBIDefinitions");function XE(e){Hi.validateEnv(e);let t=[],r=nt(e,Tt);for(let{key:s}of r.getRange({start:!1}))s!==Tt&&t.push(s);return t}o(XE,"listDBIs");function fC(e,t){let s=nt(e,Tt).getEntry(t),n=new vi;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{kE.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(fC,"getDBIDefinition");function zE(e,t,r,s=!1){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===me.DBI_DOES_NOT_EXIST){let i=new C_(r,s===!0),a=e.openDB(t,i),_=new vi(r===!0,s);return a[JE]=_,nt(e,Tt).putSync(t,_),e.dbis[t]=a,a}throw n}}o(zE,"createDBI");function nt(e,t){if(Gi(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Tt?r=fC(e,t):r=new vi,r===void 0)throw new Error(me.DBI_DOES_NOT_EXIST);let s;try{let n=new C_(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(me.DBI_DOES_NOT_EXIST):n}return s[JE]=r,e.dbis[t]=s,s}o(nt,"openDBI");function hC(e,t){Gi(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[Er.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(hC,"statDBI");async function RC(e,t){try{let r=St.join(e,t+Tn);return(await st.stat(r)).size}catch{throw new Error(me.INVALID_ENVIRONMENT)}}o(RC,"environmentDataSize");function AC(e,t){if(Gi(e,t),t=t.toString(),t===Tt)throw new Error(me.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Tt).removeSync(t)}o(AC,"dropDBI");function mC(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===me.DBI_DOES_NOT_EXIST)zE(e,n,n!==t,n===t);else throw i}}}o(mC,"initializeDBIs");ed.exports={openDBI:nt,openEnvironment:y_,createEnvironment:EC,listDBIs:XE,listDBIDefinitions:TC,createDBI:zE,dropDBI:AC,statDBI:hC,deleteEnvironment:SC,initializeDBIs:mC,TransactionCursor:Bi,environmentDataSize:RC,copyEnvironment:dC,closeEnvironment:ZE}});var rd=d((X0,td)=>{"use strict";var qi=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(qi,"InsertRecordsResponseObject");td.exports=qi});var nd=d((z0,sd)=>{"use strict";var Fi=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Fi,"UpdateRecordsResponseObject");sd.exports=Fi});var od=d((eV,id)=>{"use strict";var Vi=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Vi,"UpsertRecordsResponseObject");id.exports=Vi});var Yr=d((nV,_d)=>{"use strict";var gC=$(),pC=rd(),NC=nd(),OC=od(),hn=lr(),fn=et().LMDB_ERRORS_ENUM,IC=he(),dr=h(),CC=O(),bC=require("uuid"),tV=require("lmdb"),{handleHDBError:LC,hdb_errors:yC}=J(),{OVERFLOW_MARKER:rV,MAX_SEARCH_KEY_LENGTH:sV}=IC,D_=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$r=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new pC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];ad(u,!0,n);let l=DC(e,t,r,u),E=u[t];a.push(l),_.push(E)}return U_(a,_,s,i)}o(wC,"insertRecords");function DC(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][dr.FUNC_VAL],s[a]=_)}let c=hn.getIndexedValues(_);if(c)for(let u=0,l=c.length;u<l;u++)e.dbis[a].put(c[u],n)}e.dbis[t].put(n,s,s[$r])})}o(DC,"insertRecord");function MC(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(MC,"removeSkippedRecords");function ad(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[$r]))&&(e[$r]=s),t===!0?(r===!0||!Number.isInteger(e[D_]))&&(e[D_]=s):delete e[D_]}o(ad,"setTimestamps");function M_(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gC.initializeDBIs(e,t,r)}o(M_,"initializeTransaction");async function UC(e,t,r,s,n=!0){B_(e,t,r,s),M_(e,t,r);let i=new NC,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],T;try{T=P_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(T),c.push(E)}return U_(_,c,s,i,a)}o(UC,"updateRecords");async function PC(e,t,r,s,n=!0){try{B_(e,t,r,s)}catch(c){throw LC(c,c.message,yC.HTTP_STATUS_CODES.BAD_REQUEST)}M_(e,t,r);let i=new OC,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;CC.isEmpty(u[t])?(l=bC.v4(),u[t]=l):l=u[t];let E=P_(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return U_(a,_,s,i)}o(PC,"upsertRecords");async function U_(e,t,r,s,n=[]){let i=await Promise.all(e);for(let a=0,_=i.length;a<_;a++)i[a]===!0?s.written_hashes.push(t[a]):(s.skipped_hashes.push(t[a]),n.push(a));return s.txn_time=hn.getMicroTime(),MC(r,n),s}o(U_,"finalizeWrite");function P_(e,t,r,s,n,i=!1,a=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(ad(r,!l,a),Number.isInteger(r[$r])&&u[$r]>r[$r])return!1;l&&n.original_records.push(u);let E,T=o(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let R=r[A],L=e.dbis[A];if(L===void 0)continue;let de=u[A];if(typeof R=="function"){let k=R([[u]]);Array.isArray(k)&&(R=k[0][dr.FUNC_VAL],r[A]=R)}if(R===de)continue;let p=hn.getIndexedValues(de);if(p)for(let k=0,Ie=p.length;k<Ie;k++)L.remove(p[k],s);if(p=hn.getIndexedValues(R),p)for(let k=0,Ie=p.length;k<Ie;k++)L.put(p[k],s)}let S=Object.assign({},u,r);_.put(s,S,S[$r])},"do_put");return c?E=_.ifVersion(s,c.version,T):E=_.ifNoExists(s,T),E.then(S=>S?!0:P_(e,t,r,s,n,i,a))}o(P_,"updateUpsertRecord");function BC(e,t,r){if(hn.validateEnv(e),t===void 0)throw new Error(fn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fn.WRITE_ATTRIBUTES_REQUIRED):new Error(fn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(BC,"validateBasic");function B_(e,t,r,s){if(BC(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fn.RECORDS_REQUIRED):new Error(fn.RECORDS_MUST_BE_ARRAY)}o(B_,"validateWrite");_d.exports={insertRecords:wC,updateRecords:UC,upsertRecords:PC}});var Z=d((iV,ud)=>{"use strict";var H_=h(),gs=Y(),v_=require("path");gs.initSync();var xi,ki,$i;function cd(){if(xi!==void 0)return xi;if(gs.getHdbBasePath()!==void 0)return xi=v_.join(gs.getHdbBasePath(),H_.SCHEMA_DIR_NAME),xi}o(cd,"getBaseSchemaPath");function HC(){if(ki!==void 0)return ki;if(gs.getHdbBasePath()!==void 0)return ki=v_.join(cd(),H_.SYSTEM_SCHEMA_NAME),ki}o(HC,"getSystemSchemaPath");function vC(){if($i!==void 0)return $i;if(gs.getHdbBasePath()!==void 0)return $i=v_.join(gs.getHdbBasePath(),H_.TRANSACTIONS_DIR_NAME),$i}o(vC,"getTransactionAuditStorePath");ud.exports={getBaseSchemaPath:cd,getSystemSchemaPath:HC,getTransactionAuditStorePath:vC}});var Yt=d((oV,GC)=>{GC.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var G_=d((aV,ld)=>{var{common_validators:Sr}=ms(),Rn=tt(),ft="is required",K={schema:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},table:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length},hash_attribute:{presence:!0,format:Sr.schema_format,length:Sr.schema_length}};function An(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(An,"makeAttributesStrings");function qC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence=!1,K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(qC,"schema_object");function FC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(FC,"table_object");function VC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence={message:ft},Rn.validateObject(e,K)}o(VC,"create_table_object");function xC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence={message:ft},K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(xC,"attribute_object");function kC(e){return e=An(e),K.schema.presence={message:ft},K.table.presence={message:ft},K.attribute.presence=!1,K.hash_attribute.presence=!1,Rn.validateObject(e,K)}o(kC,"describe_table");function $C(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}o($C,"validateTableResidence");ld.exports={schema_object:qC,create_table_object:VC,table_object:FC,attribute_object:xC,describe_table:kC,validateTableResidence:$C}});var dd=d((_V,Ed)=>{"use strict";var YC=require("uuid"),Yi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||YC.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(Yi,"CreateAttributeObject");Ed.exports=Yi});var Wi=d((cV,Sd)=>{"use strict";var KC=dd(),Ki=class extends KC{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Ki,"LMDBCreateAttributeObject");Sd.exports=Ki});var fd=d((uV,Td)=>{"use strict";Td.exports=QC;var WC="inserted";function QC(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===WC?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(QC,"returnObject")});var Qi=d((lV,Rd)=>{"use strict";var jC=h(),q_=$(),JC=Yr(),{getSystemSchemaPath:ZC,getBaseSchemaPath:XC}=Z(),zC=require("path"),eb=Yt(),tb=G_(),rb=Wi(),sb=fd(),{handleHDBError:nb,hdb_errors:ib}=J(),ob=O(),F_=eb.hdb_attribute,hd=[];for(let e=0;e<F_.attributes.length;e++)hd.push(F_.attributes[e].attribute);var ab="inserted";Rd.exports=_b;async function _b(e){let t=tb.attribute_object(e);if(t)throw nb(new Error,t.message,ib.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ob.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 rb(e.schema,e.table,e.attribute,e.id);try{let n=await q_.openEnvironment(zC.join(XC(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);q_.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await q_.openEnvironment(ZC(),jC.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:a,skipped_hashes:_}=await JC.insertRecords(i,F_.hash_attribute,hd,[s]);return sb(ab,a,{records:[s]},_)}catch(n){throw n}}o(_b,"lmdbCreateAttribute")});var ji=d((dV,md)=>{"use strict";var Kt=O(),Ad=I(),EV=N_();md.exports=cb;function cb(e){if(Kt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Kt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Kt.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(Kt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Kt.isEmptyOrZeroLength(a[r]))throw Ad.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Kt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Ad.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Kt.isEmpty(a[r])&&a[r]!==""&&s.has(Kt.autoCast(a[r]))&&(a.skip=!0),s.add(Kt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(cb,"insertUpdateValidate")});var Zi=d((SV,gd)=>{"use strict";var ub=h().OPERATIONS_ENUM,Ji=class{constructor(t,r,s,n,i=void 0){this.operation=ub.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Ji,"InsertObject");gd.exports=Ji});var zi=d((fV,pd)=>{"use strict";var TV=Zi(),Xi=h(),x_=O(),V_=I(),lb=require("uuid"),{handleHDBError:mn,hdb_errors:Eb}=J(),{HDB_ERROR_MSGS:gn,HTTP_STATUS_CODES:pn}=Eb;pd.exports=db;function db(e,t,r){for(let n=0;n<t.length;n++)Sb(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Tb(i,r,e.operation)}}o(db,"processRows");function Sb(e){if(Buffer.byteLength(String(e))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw mn(new Error,gn.ATTR_NAME_LENGTH_ERR(e),pn.BAD_REQUEST,void 0,void 0,!0);if(x_.isEmptyOrZeroLength(e)||x_.isEmpty(e.trim()))throw mn(new Error,gn.ATTR_NAME_NULLISH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Sb,"validateAttribute");function Tb(e,t,r){if(!e.hasOwnProperty(t)||x_.isEmptyOrZeroLength(e[t])){if(r===Xi.OPERATIONS_ENUM.INSERT||r===Xi.OPERATIONS_ENUM.UPSERT){e[t]=lb.v4();return}throw V_.error("Update transaction aborted due to record with no hash value:",e),mn(new Error,gn.RECORD_MISSING_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xi.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw V_.error(e),mn(new Error,gn.HASH_VAL_LENGTH_ERR,pn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw V_.error(e),mn(new Error,gn.INVALID_FORWARD_SLASH_IN_HASH_ERR,pn.BAD_REQUEST,void 0,void 0,!0)}o(Tb,"validateHash")});var Od=d((hV,Nd)=>{"use strict";var eo=class{constructor(t,r){this.type=t,this.message=r}};o(eo,"IPCEventObject");Nd.exports=eo});var ps=d((RV,Id)=>{"use strict";var fb=I(),k_=O(),hb=h(),{IPC_ERRORS:Nn}=et();Id.exports={sendIpcEvent:Rb,validateEvent:Ab,SchemaEventMsg:mb,UserEventMsg:gb};function Rb(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):fb.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}o(Rb,"sendIpcEvent");function Ab(e){if(typeof e!="object")return Nn.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||k_.isEmpty(e.type))return Nn.MISSING_TYPE;if(!e.hasOwnProperty("message")||k_.isEmpty(e.message))return Nn.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||k_.isEmpty(e.message.originator))return Nn.MISSING_ORIGIN;if(hb.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Nn.INVALID_EVENT(e.type)}o(Ab,"validateEvent");function mb(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(mb,"SchemaEventMsg");function gb(e){this.originator=e}o(gb,"UserEventMsg")});var On=d((mV,yd)=>{"use strict";var Cd=h(),AV=O(),to=I(),bd=Od(),{sendIpcEvent:Ld}=ps();function pb(e){try{to.trace("signalSchemaChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.SCHEMA,e);Ld(t)}catch(t){to.error(t)}}o(pb,"signalSchemaChange");function Nb(e){try{to.trace("signalUserChange called with message:",e);let t=new bd(Cd.IPC_EVENT_TYPES.USER,e);Ld(t)}catch(t){to.error(t)}}o(Nb,"signalUserChange");yd.exports={signalSchemaChange:pb,signalUserChange:Nb}});var ro=d((gV,Dd)=>{"use strict";var wd=O(),Ob=h(),Ib=I(),Cb=Qi(),bb=Wi(),Lb=On(),{SchemaEventMsg:yb}=ps(),wb="already exists in";Dd.exports=Db;async function Db(e,t,r){try{if(wd.isEmptyOrZeroLength(r))return r;let s=[];wd.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 Mb(e,t.schema,t.name,i)})),n}catch(s){throw s}}o(Db,"lmdbCheckForNewAttributes");async function Mb(e,t,r,s){let n=new bb(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await Ub(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wb))Ib.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(Mb,"createNewAttribute");async function Ub(e){let t;try{return t=await Cb(e),Lb.signalSchemaChange(new yb(process.pid,Ob.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}o(Ub,"createAttribute")});var Ns=d((pV,Md)=>{"use strict";var so=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};o(so,"LMDBTransactionObject");Md.exports=so});var Pd=d((NV,Ud)=>{"use strict";var Pb=Ns(),Bb=h().OPERATIONS_ENUM,no=class extends Pb{constructor(t,r,s,n,i=void 0){super(Bb.INSERT,r,s,n,i),this.records=t}};o(no,"LMDBInsertTransactionObject");Ud.exports=no});var Hd=d((OV,Bd)=>{"use strict";var Hb=Ns(),vb=h().OPERATIONS_ENUM,io=class extends Hb{constructor(t,r,s,n,i,a=void 0){super(vb.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(io,"LMDBUpdateTransactionObject");Bd.exports=io});var Gd=d((IV,vd)=>{"use strict";var Gb=Ns(),qb=h().OPERATIONS_ENUM,oo=class extends Gb{constructor(t,r,s,n,i,a=void 0){super(qb.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(oo,"LMDBUpsertTransactionObject");vd.exports=oo});var Fd=d((CV,qd)=>{"use strict";var Fb=Ns(),Vb=h().OPERATIONS_ENUM,ao=class extends Fb{constructor(t,r,s,n,i=void 0){super(Vb.DELETE,s,n,t,i),this.original_records=r}};o(ao,"LMDBDeleteTransactionObject");qd.exports=ao});var In=d((bV,$d)=>{"use strict";var xb=require("path"),Vd=$(),kb=Pd(),$b=Hd(),Yb=Gd(),Kb=Fd(),Os=he(),xd=O(),{CONFIG_PARAMS:Wb}=h(),kd=Y();kd.initSync();var _o=h().OPERATIONS_ENUM,{getTransactionAuditStorePath:Qb}=Z();$d.exports=jb;async function jb(e,t){if(kd.get(Wb.LOGGING_AUDITLOG)===!1)return;let r=xb.join(Qb(),e.schema.toString()),s=await Vd.openEnvironment(r,e.table,!0),n=Jb(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Vd.initializeDBIs(s,Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Os.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xd.isEmpty(n.user_name)||s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Os.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}catch(i){throw i}}}o(jb,"writeTransaction");function Jb(e,t){let r=xd.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new kb(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new $b(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new Yb(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new Kb(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(Jb,"createTransactionObject")});var $_=d((yV,Yd)=>{"use strict";var Zb=ji(),LV=Zi(),Is=h(),Xb=zi(),zb=Yr().insertRecords,eL=$(),tL=require("path"),rL=I(),sL=ro(),{getBaseSchemaPath:nL}=Z(),iL=In();Yd.exports=oL;async function oL(e){try{let{schema_table:t,attributes:r}=Zb(e);Xb(e,r,t.hash_attribute),e.schema!==Is.SYSTEM_SCHEMA_NAME&&(r.includes(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Is.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await sL(e.hdb_auth_header,t,r),n=tL.join(nL(),e.schema.toString()),i=await eL.openEnvironment(n,e.table),a=await zb(i,t.hash_attribute,r,e.records,e[Is.CLUSTERING_FLAG]!==!0);try{await iL(e,a)}catch(_){rL.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(oL,"lmdbCreateRecords")});var Qd=d((wV,Wd)=>{"use strict";var Kd=h(),aL=$_(),_L=Zi(),cL=require("fs-extra"),uL=require("path"),{getBaseSchemaPath:lL}=Z();Wd.exports=EL;async function EL(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _L(Kd.SYSTEM_SCHEMA_NAME,Kd.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await aL(r),await cL.mkdirp(uL.join(lL(),e.schema.toString()))}o(EL,"lmdbCreateSchema")});var Jd=d((DV,jd)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(co,"DeleteRecordsResponseObject");jd.exports=co});var W_=d((BV,zd)=>{"use strict";var Zd=$(),Y_=lr(),K_=et().LMDB_ERRORS_ENUM,dL=he(),Xd=I(),MV=O(),SL=require("lmdb"),TL=Jd(),{OVERFLOW_MARKER:UV,MAX_SEARCH_KEY_LENGTH:PV}=dL;async function fL(e,t,r){if(Y_.validateEnv(e),t===void 0)throw new Error(K_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(K_.IDS_REQUIRED):new Error(K_.IDS_MUST_BE_ARRAY);try{let s=Zd.listDBIs(e);Zd.initializeDBIs(e,t,s);let n=new TL,i,a=[],_=[];for(let E=0,T=r.length;E<T;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,SL.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let L=s[R];if(!S.hasOwnProperty(L)||L===t)continue;let de=e.dbis[L],p=S[L];if(p!=null)try{let k=Y_.getIndexedValues(p);if(k)for(let Ie=0,Ce=k.length;Ie<Ce;Ie++)de.remove(k[Ie],i)}catch{Xd.warn(`cannot delete from attribute: ${L}, ${p}:${i}`)}}});a.push(A),_.push(i),n.original_records.push(S)}catch(S){Xd.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(a);for(let E=0,T=u.length;E<T;E++)u[E]===!0?n.deleted.push(_[E]):(n.skipped.push(_[E]),c.push(E));let l=0;for(let E=0;E<c.length;E++){let T=c[E];n.original_records.splice(T-l,1),l++}return n.txn_time=Y_.getMicroTime(),n}catch(s){throw s}}o(fL,"deleteRecords");zd.exports={deleteRecords:fL}});var Cn=d((HV,tS)=>{"use strict";var Cs=O(),hL=W_(),RL=$(),AL=require("path"),{getBaseSchemaPath:mL}=Z(),gL=In(),pL=I();tS.exports=NL;async function NL(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Cs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Cs.isEmptyOrZeroLength(e.hash_values)&&!Cs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Cs.isEmpty(c)||e.hash_values.push(c)}}if(Cs.isEmptyOrZeroLength(e.hash_values))return eS([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Cs.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=AL.join(mL(),e.schema.toString()),i=await RL.openEnvironment(n,e.table),a=await hL.deleteRecords(i,s,e.hash_values);try{t===!0&&await gL(e,a)}catch(_){pL.error(`unable to write transaction due to ${_.message}`)}return eS(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(NL,"lmdbDeleteRecords");function eS(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(eS,"createDeleteResponse")});var j_=d((GV,rS)=>{"use strict";var OL=h(),vV=lr();function Q_(e,t){let r=Object.create(null);if(t.length===1&&OL.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}o(Q_,"parseRow");function IL(e,t,r,s){let n=Q_(r,e);s.push(n)}o(IL,"searchAll");function CL(e,t,r,s){let n=Q_(r,e);s[t]=n}o(CL,"searchAllToMap");function bL(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(bL,"iterateDBI");function Kr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Kr,"pushResults");function LL(e,t,r,s,n,i){t.toString().endsWith(e)&&Kr(t,r,s,n,i)}o(LL,"endsWith");function yL(e,t,r,s,n,i){t.toString().includes(e)&&Kr(t,r,s,n,i)}o(yL,"contains");function wL(e,t,r,s,n,i){t>e&&Kr(t,r,s,n,i)}o(wL,"greaterThanCompare");function DL(e,t,r,s,n,i){t>=e&&Kr(t,r,s,n,i)}o(DL,"greaterThanEqualCompare");function ML(e,t,r,s,n,i){t<e&&Kr(t,r,s,n,i)}o(ML,"lessThanCompare");function UL(e,t,r,s,n,i){t<=e&&Kr(t,r,s,n,i)}o(UL,"lessThanEqualCompare");rS.exports={parseRow:Q_,searchAll:IL,searchAllToMap:CL,iterateDBI:bL,endsWith:LL,contains:yL,greaterThanCompare:wL,greaterThanEqualCompare:DL,lessThanCompare:ML,lessThanEqualCompare:UL,pushResults:Kr}});var bs=d((VV,_S)=>{"use strict";var it=$(),PL=I(),Qe=lr(),Tr=he(),re=et().LMDB_ERRORS_ENUM,qV=O(),BL=h(),ht=j_(),FV=require("lmdb"),{OVERFLOW_MARKER:sS,MAX_SEARCH_KEY_LENGTH:HL}=Tr,bn={lazy:!0};function nS(e,t,r,s,n=!1,i=void 0,a=void 0){let _=Object.create(null),c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=J_(e,t,r);for(let{key:l,value:E}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:a,reverse:n}))s(u(l,E),E,_,t,r);return _}o(nS,"iterateFullIndex");function Ln(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){let l=[[],[]],E=it.openDBI(e,r),T=J_(e,t,r);E[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,R=i===!0?!c:!u,L=i===!0?u:c;for(let{key:de,value:p}of E.getRange({start:A,end:S,reverse:i,limit:a,offset:_,inclusiveEnd:R,exclusiveStart:L}))ht.pushResults(T(de,p),p,l,t,r);return l}o(Ln,"iterateRangeBetween");function J_(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(sS)){if(!s)if(t)s=it.openDBI(e,t);else{let _=it.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=it.openDBI(e,_[c]),!s[Tr.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,bn)[r]}return n}}o(J_,"getOverflowCheck");function vL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);uo(r),r=yn(e,r);let a=[],_=it.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}))ht.searchAll(r,c,u,a);return a}o(vL,"searchAll");function GL(e,t,r,s=!1,n=void 0,i=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return uo(r),r=yn(e,r),nS(e,t,t,ht.searchAllToMap.bind(null,r),s,n,i)}o(GL,"searchAllToMap");function qL(e,t,r=!1,s=void 0,n=void 0){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);return nS(e,void 0,t,ht.iterateDBI,r,s,n)}o(qL,"iterateDBI");function FL(e,t){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);return it.statDBI(e,t).entryCount}o(FL,"countAll");function VL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=it.openDBI(e,r);s=Qe.convertKeyValueToWrite(s);let c=[[],[]];if(_[Tr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,bn);u!==void 0&&ht.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:a}))ht.pushResults(s,u,c,t,r);return c}o(VL,"equals");function xL(e,t,r){return fr(e,t,r),it.openDBI(e,t).getValuesCount(r)}o(xL,"count");function kL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=[[],[]],c=it.openDBI(e,r);c[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=Qe.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of c.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(a)?a++:i++);for(let{key:E,value:T}of c.getRange({start:l,end:void 0,reverse:n,limit:i,offset:a}))if(E!==l){if(E.toString().startsWith(s))ht.pushResults(E,T,_,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of c.getRange({start:s,reverse:n,limit:i,offset:a}))if(l.toString().startsWith(s))ht.pushResults(l,E,_,t,r);else if(u===!0)break;return _}o(kL,"startsWith");function $L(e,t,r,s,n=!1,i=void 0,a=void 0){return iS(e,t,r,s,n,i,a,!0)}o($L,"endsWith");function iS(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){fr(e,r,s);let c=[[],[]],u=it.openDBI(e,r);u[Tr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=J_(e,t,r);a=Number.isInteger(a)?a:0;for(let T of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=T.toString();if(S.endsWith(sS))for(let A of u.getValues(T)){let R=l(T,A);(_?R.endsWith(s):R.includes(s))&&E(R,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Tr.DBI_DEFINITION_NAME].is_hash_attribute)E(T,T);else for(let A of u.getValues(T))E(T,A)}function E(T,S){if(a>0){a--;return}i!==0&&(ht.pushResults(T,S,c,t,r),i--)}return o(E,"found_match"),c}o(iS,"contains");function YL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!0,!1)}o(YL,"greaterThan");function KL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Ln(e,t,r,s,c,n,i,a,!1,!1)}o(KL,"greaterThanEqual");function WL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!0)}o(WL,"lessThan");function QL(e,t,r,s,n=!1,i=void 0,a=void 0){fr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Ln(e,t,r,c,s,n,i,a,!1,!1)}o(QL,"lessThanEqual");function jL(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(Qe.validateEnv(e),r===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(re.START_VALUE_REQUIRED);if(n===void 0)throw new Error(re.END_VALUE_REQUIRED);if(s=Qe.convertKeyValueToWrite(s),n=Qe.convertKeyValueToWrite(n),s>n)throw new Error(re.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ln(e,t,r,s,n,i,a,_)}o(jL,"between");function JL(e,t,r,s){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),r=yn(e,r),s===void 0)throw new Error(re.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?bn:void 0);return i&&(n=ht.parseRow(i,r)),n}o(JL,"searchByHash");function ZL(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,bn)===void 0&&(s=!1),s}o(ZL,"checkHashExists");function XL(e,t,r,s,n=[]){aS(e,t,r,s,n);let i=oS(e,t,r,s,n);return Object.values(i)}o(XL,"batchSearchByHash");function zL(e,t,r,s,n=[]){return aS(e,t,r,s,n),oS(e,t,r,s,n)}o(zL,"batchSearchByHashToMap");function oS(e,t,r,s,n=[]){r=yn(e,r);let i=Object.create(null),a=r.length<3?bn:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,a);if(u){let l=ht.parseRow(u,r);i[c]=l}else n.push(c)}catch(u){throw PL.warn(u),u}}return i}o(oS,"batchHashSearch");function aS(e,t,r,s,n){if(Qe.validateEnv(e),t===void 0)throw new Error(re.HASH_ATTRIBUTE_REQUIRED);if(uo(r),!Array.isArray(s))throw s===void 0?new Error(re.IDS_REQUIRED):new Error(re.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}o(aS,"initializeBatchSearchByHash");function uo(e){if(!Array.isArray(e))throw e===void 0?new Error(re.FETCH_ATTRIBUTES_REQUIRED):new Error(re.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(uo,"validateFetchAttributes");function fr(e,t,r){if(Qe.validateEnv(e),t===void 0)throw new Error(re.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(re.SEARCH_VALUE_REQUIRED);if(r?.length>HL)throw new Error(re.SEARCH_VALUE_TOO_LARGE)}o(fr,"validateComparisonFunctions");function yn(e,t){return t.length===1&&BL.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=it.listDBIs(e)),t}o(yn,"setGetWholeRowAttributes");_S.exports={searchAll:vL,searchAllToMap:GL,count:xL,countAll:FL,equals:VL,startsWith:kL,endsWith:$L,contains:iS,searchByHash:JL,setGetWholeRowAttributes:yn,batchSearchByHash:XL,batchSearchByHashToMap:zL,checkHashExists:ZL,iterateDBI:qL,greaterThan:YL,greaterThanEqual:KL,lessThan:WL,lessThanEqual:QL,between:jL}});var wn=d((kV,ES)=>{var cS=require("lodash"),uS=tt(),V=require("joi"),ey=O(),{hdb_schema_table:Rt,checkValidTable:lS}=ms(),{handleHDBError:ty,hdb_errors:ry}=J(),{HTTP_STATUS_CODES:sy}=ry,xV=V.object({schema:Rt,table:Rt,hash_values:V.array().min(1).items(V.alternatives(V.string(),V.number())).required(),get_attributes:V.array().min(1).items(Rt).required()}),ny=V.object({schema:Rt,table:Rt,search_attribute:Rt,search_value:V.any().required(),get_attributes:V.array().min(1).items(Rt).required(),desc:V.bool(),limit:V.number().integer().min(1),offset:V.number().integer().min(0)}),iy=V.object({schema:Rt,table:Rt,operator:V.string().valid("and","or").default("and").lowercase(),offset:V.number().integer().min(0),limit:V.number().integer().min(1),get_attributes:V.array().min(1).items(Rt).required(),conditions:V.array().min(1).items(V.object({search_attribute:Rt,search_type:V.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:V.when("search_type",{switch:[{is:"equals",then:V.any()},{is:"between",then:V.array().items(V.alternatives([V.string(),V.number()])).length(2)}],otherwise:V.alternatives(V.string(),V.number())}).required()})).required()});ES.exports=function(e,t){let r=null;switch(t){case"value":r=uS.validateBySchema(e,ny);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(lS("schema",e.schema)),i(lS("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=uS.validateBySchema(e,iy);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ey.checkGlobalSchemaTable(e.schema,e.table);if(n)return ty(new Error,n,sy.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];_.push(E.search_attribute)}let c=cS.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!cS.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Z_=d(($V,dS)=>{"use strict";var oy=$(),ay=wn(),_y=require("path"),{getBaseSchemaPath:cy}=Z();dS.exports=uy;function uy(e){let t=ay(e,"hashes");if(t)throw t;let r=_y.join(cy(),e.schema.toString());return oy.openEnvironment(r,e.table)}o(uy,"initialize")});var X_=d((YV,SS)=>{"use strict";var ly=bs(),Ey=Z_();SS.exports=dy;async function dy(e){try{let t=await Ey(e),r=global.hdb_schema[e.schema][e.table];return ly.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(dy,"lmdbGetDataByHash")});var Ls=d((KV,TS)=>{"use strict";var lo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(lo,"SearchByHashObject");TS.exports=lo});var hS=d((QV,fS)=>{"use strict";var WV=Ls(),Sy=bs(),Ty=Z_();fS.exports=fy;async function fy(e){try{let t=await Ty(e),r=global.hdb_schema[e.schema][e.table];return Sy.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}o(fy,"lmdbSearchByHash")});var At=d((jV,RS)=>{"use strict";var Eo=class{constructor(t,r,s,n,i,a,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(Eo,"SearchObject");RS.exports=Eo});var So=d((JV,NS)=>{"use strict";var ye=bs(),hy=$(),Ry=require("path"),Ay=O(),C=he(),Wr=h(),{getBaseSchemaPath:my}=Z(),gy=Yt(),AS=et().LMDB_ERRORS_ENUM,{compareKeys:ys}=require("ordered-binary"),Wt=Wr.SEARCH_WILDCARDS;async function py(e,t,r){let s;e.schema===Wr.SYSTEM_SCHEMA_NAME?s=gy[e.table]:s=global.hdb_schema[e.schema][e.table];let n=pS(e,s.hash_attribute,r,t);return mS(e,n,s.hash_attribute,r)}o(py,"prepSearch");async function mS(e,t,r,s){let n=Ry.join(my(),e.schema.toString()),i=await hy.openEnvironment(n,e.table),a=gS(i,e,t,r);if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Iy(e,r)===!1)return s===!0?Oy(a):a[1];let c=a[0];return s===!0?ye.batchSearchByHashToMap(i,r,e.get_attributes,c):ye.batchSearchByHash(i,r,e.get_attributes,c)}o(mS,"executeSearch");function gS(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case C.SEARCH_TYPES.EQUALS:n=ye.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.CONTAINS:n=ye.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=ye.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=ye.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return ye.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return ye.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return ye.searchAll(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return ye.searchAllToMap(e,s,t.get_attributes,a,_,c);case C.SEARCH_TYPES.BETWEEN:n=ye.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=ye.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=ye.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=ye.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=ye.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(gS,"searchByType");function Ny(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return ys(i,s[0])>=0&&ys(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>ys(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>ys(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>ys(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>ys(n[r],s)<=0;default:return Object.create(null)}}o(Ny,"filterByType");function Oy(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}o(Oy,"createMapFromArrays");function Iy(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}o(Iy,"checkToFetchMore");function pS(e,t,r,s){if(Ay.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Wt.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Wt[0])<0&&n.indexOf(Wt[1])<0)return _===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Wt.indexOf(i)>=0&&Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Wt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Wt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Wt[0])||n.includes(Wt[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(AS.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wr.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Wr.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wr.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Wr.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(AS.UNKNOWN_SEARCH_TYPE)}}o(pS,"createSearchTypeFromSearchObject");NS.exports={executeSearch:mS,createSearchTypeFromSearchObject:pS,prepSearch:py,searchByType:gS,filterByType:Ny}});var IS=d((XV,OS)=>{"use strict";var ZV=At(),Cy=wn(),by=O(),Ly=h(),yy=So();OS.exports=wy;async function wy(e,t){if(!by.isEmpty(t)&&Ly.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Cy(e,"value");if(s)throw s;let n=!0;try{return await yy.prepSearch(e,t,n)}catch(i){throw i}}o(wy,"lmdbGetDataByValue")});var ws=d((ex,CS)=>{"use strict";var zV=At(),Dy=wn(),My=O(),Uy=h(),Py=So();CS.exports=By;async function By(e,t){if(!My.isEmpty(t)&&Uy.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Dy(e,"value");if(s)throw s;let n=!1;try{return await Py.prepSearch(e,t,n)}catch(i){throw i}}o(By,"lmdbSearchByValue")});var LS=d((rx,bS)=>{"use strict";var tx=he(),To=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(To,"SearchByConditionsObject");var fo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(fo,"SearchCondition");var ho=class{constructor(t,r){this.attribute=t,this.desc=r}};o(ho,"SortAttribute");bS.exports={SearchByConditionsObject:To,SearchCondition:fo,SortAttribute:ho}});var PS=d((nx,US)=>{"use strict";var sx=LS().SearchByConditionsObject,Hy=At(),vy=wn(),z_=bs(),Ro=he(),MS=So(),Gy=j_(),yS=require("lodash"),{getBaseSchemaPath:qy}=Z(),Fy=require("path"),Vy=$(),{handleHDBError:wS,hdb_errors:xy}=J(),{HTTP_STATUS_CODES:ky}=xy,$y=1e8,Yy={lazy:!0};US.exports=Ky;async function Ky(e){try{let t=vy(e,"conditions");if(t)throw wS(t,t.message,ky.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=Fy.join(qy(),e.schema.toString()),s=await Vy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=yS.sortBy(e.conditions,a=>{if(a.estimated_count===void 0){let _=a.search_type;_===Ro.SEARCH_TYPES.EQUALS?a.estimated_count=z_.count(s,a.search_attribute,a.search_value):_===Ro.SEARCH_TYPES.CONTAINS||_===Ro.SEARCH_TYPES.ENDS_WITH?a.estimated_count=1/0:a.estimated_count=$y}return a.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[a]=await DS(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(MS.filterByType),u=c.length,l=[],E=z_.setGetWholeRowAttributes(s,e.get_attributes),T=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of a){let R=_.get(A,Yy);for(let L=0;L<u;L++)if(!c[L](R))continue e;if(T>0){T--;continue}if(S<=0)break;S--,l.push(Gy.parseRow(R,E))}return l}else{let a=[],_=[];for(let c of i){let[u]=await DS(s,e,c,n.hash_attribute);_.push(u)}if(a=yS.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:a.length;a=a.splice(e.offset,c)}return z_.batchSearchByHash(s,n.hash_attribute,e.get_attributes,a)}}catch(t){throw wS(t)}}o(Ky,"lmdbSearchByConditions");async function DS(e,t,r,s){let n=new Hy(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MS.searchByType(e,n,i,s)}o(DS,"executeConditionSearch")});var mo=d((ix,BS)=>{"use strict";var Wy=h().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=Wy.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ao,"DeleteObject");BS.exports=Ao});var ec=d((ox,HS)=>{"use strict";var go=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(go,"DropAttributeObject");HS.exports=go});var rc=d((_x,vS)=>{"use strict";var Qy=At(),jy=mo(),ax=ec(),yt=h(),Jy=O(),tc=$(),Zy=Yt(),Xy=ws(),zy=Cn(),{getBaseSchemaPath:ew}=Z(),tw=require("path");vS.exports=rw;async function rw(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=Zy[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nw(e),n=tw.join(ew(),e.schema.toString()),i=await tc.openEnvironment(n,e.table);return t===!0&&await sw(e,i,r.hash_attribute),tc.dropDBI(i,e.attribute),s}o(rw,"lmdbDropAttribute");async function sw(e,t,r){let s=tc.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(sw,"removeAttributeFromAllObjects");async function nw(e){let t=new Qy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await Xy(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Jy.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jy(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return zy(i)}o(nw,"dropAttributeFromSystem")});var VS=d((cx,FS)=>{"use strict";var iw=rc(),ow=ec(),GS=O(),qS=I(),aw=et().LMDB_ERRORS_ENUM;FS.exports=_w;async function _w(e){if(GS.isEmpty(global.hdb_schema[e.schema])||GS.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 ow(e.schema,e.table,r);try{await iw(n,!1)}catch(i){i.message!==aw.DBI_DOES_NOT_EXIST&&qS.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw qS.error(`Error dropping attribute ${r}`),s}}o(_w,"lmdbDropAllAttributes")});var sc=d((lx,JS)=>{"use strict";var KS=At(),WS=mo(),QS=ws(),jS=Cn(),ux=VS(),Ge=h(),xS=O(),kS=$(),{getBaseSchemaPath:cw,getTransactionAuditStorePath:uw}=Z(),$S=require("path"),YS=I();JS.exports=lw;async function lw(e){try{if(xS.isEmpty(global.hdb_schema[e.schema])||xS.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Ew(e),await dw(e);let t=$S.join(cw(),e.schema.toString());try{await kS.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$S.join(uw(),e.schema.toString());await kS.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")YS.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lw,"lmdbDropTable");async function Ew(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await QS(t),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jS(n)}o(Ew,"deleteAttributesFromSystem");async function dw(e){let t=new KS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await QS(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new WS(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jS(n)}catch(i){throw i}}o(dw,"dropTableFromSystem")});var XS=d((dx,ZS)=>{"use strict";var Sw=require("fs-extra"),Tw=At(),fw=Ls(),hw=mo(),Rw=sc(),Aw=Cn(),mw=X_(),gw=ws(),Qt=h(),Ex=O(),pw=require("path"),{getBaseSchemaPath:Nw}=Z(),{handleHDBError:Ow,hdb_errors:Iw}=J(),{HDB_ERROR_MSGS:Cw,HTTP_STATUS_CODES:bw}=Iw;ZS.exports=Lw;async function Lw(e){let t;try{t=await yw(e.schema);let r=new Tw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await gw(r);for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await Rw(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new hw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Aw(n);let i=pw.join(Nw(),t.toString());await Sw.remove(i)}catch(r){throw r}}o(Lw,"lmdbDropSchema");async function yw(e){let t=new fw(Qt.SYSTEM_SCHEMA_NAME,Qt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await mw(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Ow(new Error,Cw.SCHEMA_NOT_FOUND(e),bw.NOT_FOUND,void 0,void 0,!0);return s}o(yw,"validateDropSchema")});var No=d((Sx,zS)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(po,"CreateTableObject");zS.exports=po});var ic=d((fx,eT)=>{"use strict";var ww=require("path"),Dw=require("fs-extra"),Oo=$(),{getTransactionAuditStorePath:Mw}=Z(),nc=he(),Tx=No();eT.exports=Uw;async function Uw(e){let t;try{let r=ww.join(Mw(),e.schema.toString());await Dw.mkdirp(r),t=await Oo.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{Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,nc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Uw,"createTransactionsAuditEnvironment")});var uc=d((hx,sT)=>{"use strict";var oc=h(),tT=$(),Pw=Yr(),Bw=require("path"),{getSystemSchemaPath:Hw,getBaseSchemaPath:vw}=Z(),Gw=Yt(),qw=Qi(),ac=Wi(),Fw=I(),Vw=ic(),cc=Gw.hdb_table,rT=[];for(let e=0;e<cc.attributes.length;e++)rT.push(cc.attributes[e].attribute);sT.exports=xw;async function xw(e,t){let r=Bw.join(vw(),t.schema.toString()),s=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new ac(t.schema,t.table,oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ac(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await tT.createEnvironment(r,t.table),e!==void 0){let a=await tT.openEnvironment(Hw(),oc.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pw.insertRecords(a,cc.hash_attribute,rT,[e]),await _c(s),await _c(n),await _c(i)}await Vw(t)}catch(a){throw a}}o(xw,"lmdbCreateTable");async function _c(e){try{await qw(e)}catch(t){Fw.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(_c,"createAttribute")});var iT=d((Rx,nT)=>{"use strict";var kw=ji(),$w=zi(),Yw=ro(),Ds=h(),Kw=Yr().updateRecords,Ww=$(),Qw=require("path"),{getBaseSchemaPath:jw}=Z(),Jw=In(),Zw=I();nT.exports=Xw;async function Xw(e){try{let{schema_table:t,attributes:r}=kw(e);$w(e,r,t.hash_attribute),e.schema!==Ds.SYSTEM_SCHEMA_NAME&&(r.includes(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ds.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Yw(e.hdb_auth_header,t,r),n=Qw.join(jw(),e.schema.toString()),i=await Ww.openEnvironment(n,e.table),a=await Kw(i,t.hash_attribute,r,e.records,e[Ds.CLUSTERING_FLAG]!==!0);try{await Jw(e,a)}catch(_){Zw.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(Xw,"lmdbUpdateRecords")});var aT=d((Ax,oT)=>{"use strict";var zw=h().OPERATIONS_ENUM,Io=class{constructor(t,r,s,n=void 0){this.operation=zw.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Io,"UpsertObject");oT.exports=Io});var cT=d((gx,_T)=>{"use strict";var mx=aT(),eD=ji(),tD=zi(),rD=ro(),Ms=h(),sD=Yr().upsertRecords,nD=$(),iD=require("path"),{getBaseSchemaPath:oD}=Z(),aD=In(),_D=I(),{handleHDBError:cD,hdb_errors:uD}=J();_T.exports=lD;async function lD(e){let t;try{t=eD(e)}catch(c){throw cD(c,c.message,uD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;tD(e,s,r.hash_attribute),e.schema!==Ms.SYSTEM_SCHEMA_NAME&&(s.includes(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await rD(e.hdb_auth_header,r,s),i=iD.join(oD(),e.schema.toString()),a=await nD.openEnvironment(i,e.table),_=await sD(a,r.hash_attribute,s,e.records,e[Ms.CLUSTERING_FLAG]!==!0);try{await aD(e,_)}catch(c){_D.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}o(lD,"lmdbUpsertRecords")});var TT=d((px,ST)=>{"use strict";var ED=At(),uT=O(),lT=I(),dD=ws(),ET=h(),SD=W_().deleteRecords,TD=$(),fD=require("path"),{getBaseSchemaPath:hD}=Z(),{promisify:RD}=require("util"),AD=RD(setTimeout),dT=1e4,mD=10;ST.exports=gD;async function gD(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(uT.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 ED(e.schema,e.table,ET.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await dD(n,ET.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw lT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return uT.isEmptyOrZeroLength(s)?(lT.trace("No records found to delete"),{message:"No records found to delete"}):await pD(e,s,t)}o(gD,"lmdbDeleteRecordsBefore");async function pD(e,t,r){let s=fD.join(hD(),e.schema.toString()),n=await TD.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=dT){let c=t.slice(a,a+dT),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await SD(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await AD(mD)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(pD,"chunkDeletes")});var hT=d((Nx,fT)=>{"use strict";var Co=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Co,"DeleteBeforeObject");fT.exports=Co});var AT=d((Ox,RT)=>{"use strict";var bo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(bo,"DeleteAuditLogsBeforeResults");RT.exports=bo});var pT=d((Cx,gT)=>{"use strict";var lc=$(),{getTransactionAuditStorePath:ND}=Z(),Ix=hT(),OD=require("path"),Dn=he(),ID=O(),mT=AT(),CD=require("util").promisify,bD=CD(setTimeout),LD=1e4,yD=100;gT.exports=wD;async function wD(e){let t=OD.join(ND(),e.schema),r=await lc.openEnvironment(t,e.table,!0),s=lc.listDBIs(r);lc.initializeDBIs(r,Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new mT;do n=await DD(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 bD(yD);while(n.transactions_deleted>0);return i}o(wD,"deleteAuditLogsBefore");async function DD(e,t){let r=new mT;try{let s=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ID.isEmpty(_)||(n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[Dn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LD)break}return await n,r}catch(s){throw s}}o(DD,"deleteTransactions")});var yT=d((bx,LT)=>{"use strict";var Ec=$(),Us=he(),NT=lr(),dc=h(),OT=O(),{getTransactionAuditStorePath:MD}=Z(),UD=require("path"),PD=bs(),Lo=Ns(),BD=I();LT.exports=HD;async function HD(e){let t=UD.join(MD(),e.schema),r=await Ec.openEnvironment(t,e.table,!0),s=Ec.listDBIs(r);Ec.initializeDBIs(r,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return IT(r,e.search_values);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,GD(r,e.search_values,n);case dc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return vD(r,e.search_values);default:return IT(r)}}o(HD,"readAuditLog");function IT(e,t=[0,NT.getMicroTime()]){OT.isEmpty(t[0])&&(t[0]=0),OT.isEmpty(t[1])&&(t[1]=NT.getMicroTime());let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let a=Object.assign(new Lo,i);r.push(a)}return r}catch(s){throw s}}o(IT,"searchTransactionsByTimestamp");function vD(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,bT(e,i))}return Object.fromEntries(r)}o(vD,"searchTransactionsByUsername");function GD(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=PD.equals(e,Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Us.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,T=l[0].length;E<T;E++){let S=l[0][E],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=bT(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);CT(c,"records",r,l,a),CT(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(GD,"searchTransactionsByHashValues");function CT(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new Lo(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new Lo(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(CT,"loopRecords");function bT(e,t){let r=[];try{let s=e.dbis[Us.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Lo,i);r.push(a)}}catch(i){BD.warn(i)}return r}catch(s){throw s}}o(bT,"batchSearchTransactions")});var DT=d((Lx,wT)=>{"use strict";var qD=require("path"),{getBaseSchemaPath:FD}=Z(),VD=$();wT.exports={writeTransaction:xD};async function xD(e,t,r){let s=qD.join(FD(),e);return(await VD.openEnvironment(s,t)).transaction(r)}o(xD,"writeTransaction")});var UT=d((yx,MT)=>{"use strict";var kD=require("path"),{getBaseSchemaPath:$D}=Z(),YD=$();MT.exports={flush:KD};async function KD(e,t){let r=kD.join($D(),e.toString());return(await YD.openEnvironment(r,t.toString())).flushed}o(KD,"flush")});var BT=d((wx,PT)=>{"use strict";var ce=I(),{handleHDBError:WD}=J(),QD=O_(),jD=Qi(),JD=$_(),ZD=Qd(),XD=Cn(),zD=X_(),eM=hS(),tM=IS(),rM=ws(),sM=PS(),nM=XS(),iM=uc(),oM=iT(),aM=cT(),_M=TT(),cM=pT(),uM=sc(),lM=rc(),EM=yT(),dM=DT(),SM=UT(),yo=class extends QD{async searchByConditions(t){try{return sM(t)}catch(r){throw ce.error(r),r}}async getDataByHash(t){try{return await zD(t)}catch(r){throw ce.error(r),r}}async searchByHash(t){try{return await eM(t)}catch(r){throw ce.error(r),r}}async getDataByValue(t,r){try{return await tM(t,r)}catch(s){throw ce.error(s),s}}async searchByValue(t){try{return await rM(t)}catch(r){throw ce.error(r),r}}async createSchema(t){try{return await ZD(t)}catch(r){throw ce.error(r),r}}async dropSchema(t){try{return await nM(t)}catch(r){throw ce.error(r),r}}async createTable(t,r){try{return await iM(t,r)}catch(s){throw ce.error(s),s}}async dropTable(t){try{return await uM(t)}catch(r){throw ce.error(r),r}}async createAttribute(t){try{return await jD(t)}catch(r){throw ce.error(r),r}}async createRecords(t){try{return await JD(t)}catch(r){throw ce.error(r),r}}async updateRecords(t){try{return await oM(t)}catch(r){throw ce.error(r),r}}async upsertRecords(t){try{return await aM(t)}catch(r){throw WD(r,null,null,ce.ERR,r)}}async deleteRecords(t){try{return await XD(t)}catch(r){throw ce.error(r),r}}async deleteRecordsBefore(t){try{return await _M(t)}catch(r){throw ce.error(r),r}}async dropAttribute(t){try{return await lM(t)}catch(r){throw ce.error(r),r}}async deleteAuditLogsBefore(t){try{return await cM(t)}catch(r){throw ce.error(r),r}}async readAuditLog(t){try{return await EM(t)}catch(r){throw ce.error(r),r}}writeTransaction(t,r,s){return dM.writeTransaction(t,r,s)}flush(t,r){return SM.flush(t,r)}};o(yo,"LMDBBridge");PT.exports=yo});var Ps=d((Dx,vT)=>{"use strict";var TM=BT(),fM=O_(),hM=Y();hM.initSync();var HT;function RM(){return HT instanceof fM?HT:new TM}o(RM,"getBridge");vT.exports=RM()});var JT=d((Ux,jT)=>{"use strict";var Sc=require("recursive-iterator"),AM=require("alasql"),Tc=require("clone"),GT=O(),{handleHDBError:qT,hdb_errors:mM}=J(),{HDB_ERROR_MSGS:FT,HTTP_STATUS_CODES:VT}=mM,gM=["DISTINCT_ARRAY"],xT=Symbol("validateTables"),fc=Symbol("validateTable"),Mx=Symbol("getAllColumns"),kT=Symbol("validateAllColumns"),wo=Symbol("findColumn"),$T=Symbol("validateOrderBy"),Mn=Symbol("validateSegment"),hc=Symbol("validateColumn"),YT=Symbol("setColumnsForTable"),KT=Symbol("checkColumnsForAsterisk"),WT=Symbol("validateGroupBy"),QT=Symbol("hasColumns"),Do=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xT](),this[KT](),this[kT]()}[xT](){if(this[QT]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[fc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[fc](t.table)})}}[QT](){let t=!1,r=new Sc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[fc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qT(new Error,FT.SCHEMA_NOT_FOUND(t.databaseid),VT.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qT(new Error,FT.TABLE_NOT_FOUND(t.databaseid,t.tableid),VT.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Tc(s);n.table=Tc(t),this.attributes.push(n)})}[wo](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)}[KT](){let t=new Sc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[YT](r.tableid)}[YT](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new AM.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kT](){this[Mn](this.statement.columns,!1),this[Mn](this.statement.joins,!1),this[Mn](this.statement.where,!1),this[WT](this.statement.group,!1),this[Mn](this.statement.order,!0)}[Mn](t,r){if(!t)return;let s=new Sc(t),n=[];for(let{node:i,path:a}of s)!GT.isEmpty(i)&&!GT.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$T](i):n.push(this[hc](i)));return n}[WT](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&gM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Tc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[wo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[wo](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$T](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[hc](t)}[hc](t){let r=this[wo](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};o(Do,"SelectValidator");jT.exports=Do});var ef=d((Px,zT)=>{"use strict";var ZT=require("lodash"),Un=require("mathjs"),pM=require("jsonata"),XT=O();zT.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?ZT.uniqWith(e,ZT.isEqual):e,searchJSON:NM,mad:Pn.bind(null,Un.mad),mean:Pn.bind(null,Un.mean),mode:Pn.bind(null,Un.mode),prod:Pn.bind(null,Un.prod),median:Pn.bind(null,Un.median)};function Pn(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Pn,"aggregateFunction");function NM(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(XT.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),XT.isEmpty(this.__ala__.res[r])){let s=pM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(NM,"searchJSON")});var rf=d((Bx,tf)=>{"use strict";var ie=require("moment"),Rc="YYYY-MM-DDTHH:mm:ss.SSSZZ";ie.suppressDeprecationWarnings=!0;tf.exports={current_date:()=>ie().utc().format("YYYY-MM-DD"),current_time:()=>ie().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ie(e).utc().format("YYYY");case"month":return ie(e).utc().format("MM");case"day":return ie(e).utc().format("DD");case"hour":return ie(e).utc().format("HH");case"minute":return ie(e).utc().format("mm");case"second":return ie(e).utc().format("ss");case"millisecond":return ie(e).utc().format("SSS");default:break}},date:e=>ie(e).utc().format(Rc),date_format:(e,t)=>ie(e).utc().format(t),date_add:(e,t,r)=>ie(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ie(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ie(e).utc(),n=ie(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ie().utc().valueOf(),get_server_time:()=>ie().format(Rc),offset_utc:(e,t)=>ie(e).utc().utcOffset(t).format(Rc)}});var af=d((Hx,of)=>{"use strict";var OM=require("@turf/area"),IM=require("@turf/length"),CM=require("@turf/circle"),bM=require("@turf/difference"),LM=require("@turf/distance"),yM=require("@turf/boolean-contains"),wM=require("@turf/boolean-equal"),DM=require("@turf/boolean-disjoint"),MM=require("@turf/helpers"),sf=h(),v=O();of.exports={geoArea:UM,geoLength:PM,geoCircle:BM,geoDifference:HM,geoDistance:nf,geoNear:vM,geoContains:GM,geoEqual:qM,geoCrosses:FM,geoConvert:VM};var Ac="geo1 is required",mc="geo2 is required";function UM(e){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),OM.default(e)}o(UM,"geoArea");function PM(e,t){if(v.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=v.autoCast(e)),IM.default(e,{units:t||"kilometers"})}o(PM,"geoLength");function BM(e,t,r){if(v.isEmpty(e))throw new Error("point is required");if(v.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=v.autoCast(e)),CM.default(e,t,{units:r||"kilometers"})}o(BM,"geoCircle");function HM(e,t){if(v.isEmpty(e))throw new Error("poly1 is required");if(v.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),bM(e,t)}o(HM,"geoDifference");function nf(e,t,r){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),LM.default(e,t,{units:r||"kilometers"})}o(nf,"geoDistance");function vM(e,t,r,s){if(v.isEmpty(e))throw new Error("point1 is required");if(v.isEmpty(t))throw new Error("point2 is required");if(v.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return nf(e,t,s)<=r}o(vM,"geoNear");function GM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),yM.default(e,t)}o(GM,"geoContains");function qM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),wM.default(e,t)}o(qM,"geoEqual");function FM(e,t){if(v.isEmpty(e))throw new Error(Ac);if(v.isEmpty(e))throw new Error(mc);return typeof e=="string"&&(e=v.autoCast(e)),typeof t=="string"&&(t=v.autoCast(t)),!DM.default(e,t)}o(FM,"geoCrosses");function VM(e,t,r){if(v.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(v.isEmpty(t))throw new Error("geo_type is required");if(v.isEmpty(sf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(sf.GEO_CONVERSION_ENUM).join(",")}`);return MM[t](e,r)}o(VM,"geoConvert")});var cf=d((vx,_f)=>{var Qr=ef(),je=rf(),wt=af();_f.exports=e=>{e.aggr.mad=e.aggr.MAD=Qr.mad,e.aggr.mean=e.aggr.MEAN=Qr.mean,e.aggr.mode=e.aggr.MODE=Qr.mode,e.aggr.prod=e.aggr.PROD=Qr.prod,e.aggr.median=e.aggr.MEDIAN=Qr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=je.current_date,e.fn.current_time=e.fn.CURRENT_TIME=je.current_time,e.fn.extract=e.fn.EXTRACT=je.extract,e.fn.date=e.fn.DATE=je.date,e.fn.date_format=e.fn.DATE_FORMAT=je.date_format,e.fn.date_add=e.fn.DATE_ADD=je.date_add,e.fn.date_sub=e.fn.DATE_SUB=je.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=je.date_diff,e.fn.now=e.fn.NOW=je.now,e.fn.offset_utc=e.fn.OFFSET_UTC=je.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=je.get_server_time,e.fn.getdate=e.fn.GETDATE=je.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=je.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=wt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=wt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=wt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=wt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=wt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=wt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=wt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=wt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=wt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=wt.geoNear}});var Ef=d((Gx,lf)=>{"use strict";var Bn=require("lodash"),ge=require("alasql");ge.options.cache=!1;var xM=cf(),uf=require("clone"),Mo=require("recursive-iterator"),M=I(),P=O(),Bs=Ps(),kM=h(),{hdb_errors:$M}=J(),YM="IS NULL",Hn="There was a problem performing this search. Please check the logs and try again.";xM(ge);var Uo=class{constructor(t,r){if(P.isEmpty(t))throw M.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),P.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!P.isEmptyOrZeroLength(s))return M.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw M.error("Error thrown from checkEmptySQL in SQLSearch class method search."),M.error(s),new Error(Hn)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw M.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),M.error(s),new Error(Hn)}if(Object.keys(this.data).length===0)return M.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw M.error("Error thrown from processJoins in SQLSearch class method search."),M.error(s),new Error(Hn)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw M.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),M.error(s),new Error(Hn)}try{return t=await this._finalSQL(),t}catch(s){throw M.error("Error thrown from finalSQL in SQLSearch class method search."),M.error(s),new Error(Hn)}}_getColumns(){let t=new Mo(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(uf(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Bn.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(P.isEmpty(this.statement.where)){M.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Mo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!P.isEmpty(r)&&r.right)if(P.isNotEmptyAndHasValue(r.right.value)){let s=P.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ge.yy.LogicValue({value:s}):r.right instanceof ge.yy.StringValue&&!P.isEmpty(s)&&P.autoCasterIsNumberCheck(s.toString())&&(r.right=new ge.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=P.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ge.yy.LogicValue({value:i}):s instanceof ge.yy.StringValue&&P.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ge.yy.NumValue({value:i}))});if(t){M.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Mo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!P.isEmpty(kM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(P.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(P.isEmptyOrZeroLength(r.left.columnid)||P.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(P.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!P.isEmpty(r.right.value)||!P.isEmpty(r.left.value)?s.add(P.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from)&&P.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Bn.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(P.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);P.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(P.isEmptyOrZeroLength(this.all_table_attributes)&&!P.isEmptyOrZeroLength(this.columns.columns))return t;if(P.isEmptyOrZeroLength(this.all_table_attributes)&&P.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ge.promise(r)}catch(r){throw M.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),M.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(uf(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(P.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(YM)>-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=Bn.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(c=!0),!P.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await Bs.getDataByHash(_);for(let E of _.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){M.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let T=await Bs.getDataByValue(E);for(let S in T)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[S][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(S)))}))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),M.error(l)}else if(!P.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!P.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,T=l.length;E<T;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await Bs.getDataByValue(_,S.operation);if(c)for(let R in A)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(R)));else for(let R in A)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,A[R][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(R)))}}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),M.error(l)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await Bs.getDataByValue(_);if(c)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,P.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,P.autoCast(E)))}catch(l){M.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),M.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof ge.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,a=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ge.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ge.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ge.yy.FuncValue:new ge.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${R}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${R}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let T=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,A=this._convertColumnsToIndexes(S,n);T=await ge.promise(A,t),t=null}catch(S){throw M.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),M.error(S),new Error("There was a problem processing the data.")}if(T&&T.length>0){for(let S=0,A=T.length;S<A;S++){let R=T[S];a.forEach(L=>{R[L.key]!==null&&R[L.key]!==void 0&&L.keys.add(R[L.key])})}a.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Bn.difference(A,[...S.keys].map(L=>L.toString()));for(let L=0,de=R.length;L<de;L++){let p=R[L];delete this.data[`${S.schema}_${S.table}`].__merged_data[p]}})}return{existing_attributes:_,joined_length:T?T.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Mo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=Bn.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){M.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),M.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await Bs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let T=a[l],S=c[T];for(let A=0;A<u;A++){let R=n.columns[A],L=S[R]===void 0?null:S[R];this.data[s].__merged_data[T].push(L)}}}}catch(r){throw M.error("Error thrown from getDataByHash function in SQLSearch class method getData."),M.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();M.trace(`Final SQL: ${n}`),s=await ge.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),M.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw M.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),M.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return M.error($M.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),M.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let a=await Bs.getDataByValue(i);for(let _ in a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=a[_][s.attribute]}catch(a){M.error("There was an error when processing this SQL operation. Check your logs"),M.error(a)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Uo,"SQLSearch");lf.exports=Uo});var hr=d((qx,Sf)=>{"use strict";var KM=JT();Sf.exports={searchByConditions:JM,searchByHash:ZM,searchByValue:XM,search:zM};var gc=Ps(),df=require("util"),WM=df.callbackify(gc.searchByHash),QM=df.callbackify(gc.searchByValue),jM=Ef();async function JM(e){return gc.searchByConditions(e)}o(JM,"searchByConditions");function ZM(e,t){try{WM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(ZM,"searchByHash");function XM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),QM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(XM,"searchByValue");function zM(e,t){try{let r=new KM(e);r.validate(),new jM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(zM,"search")});var Gn=d((Fx,Rf)=>{"use strict";var vn=require("crypto"),ff="aes-256-cbc",eU=32,tU=16,pc=64,hf=32,rU=pc+hf,Tf=new Map;Rf.exports={encrypt:sU,decrypt:nU,createNatsTableStreamName:iU};function sU(e){let t=vn.randomBytes(eU),r=vn.randomBytes(tU),s=vn.createCipheriv(ff,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),_=n.toString("hex");return i+a+_}o(sU,"encrypt");function nU(e){let t=e.substr(0,pc),r=e.substr(pc,hf),s=e.substr(rU,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=vn.createDecipheriv(ff,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(nU,"decrypt");function iU(e,t){let r=`${e}.${t}`,s=Tf.get(r);return s||(s=vn.createHash("md5").update(`${e}.${t}`).digest("hex"),Tf.set(r,s)),s}o(iU,"createNatsTableStreamName")});var vo=d((Vx,If)=>{"use strict";var mf=hr(),Rr=I(),gf=G_(),oU=require("lodash"),aU=require("path"),_U=Gn(),Nc=O(),{promisify:pf}=require("util"),Q=h(),{handleHDBError:Po,hdb_errors:cU}=J(),{HDB_ERROR_MSGS:Bo,HTTP_STATUS_CODES:Nf}=cU,uU=Y();uU.initSync();var Af=$(),lU=Z(),qn=pf(mf.searchByValue),EU=pf(mf.searchByHash),Hs="name",Of="hash_attribute",Oc="schema",dU="schema_table",SU="attribute";If.exports={describeAll:TU,describeTable:Ho,describeSchema:hU};async function TU(e){try{let t=Nc.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Hs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Hs]},i=await qn(n);if(Nc.isEmptyOrZeroLength(i))return{};let a={},_={};for(let T in i)a[i[T].name]=!0,!t&&!s&&(_[i[T].name]=r[i[T].name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},u=await qn(c),l=[];for(let T of u)try{let S;if(t||s)S=await Ho({schema:T.schema,table:T.name});else if(r&&r[T.schema].describe&&r[T.schema].tables[T.name].describe){let A=r[T.schema].tables[T.name].attribute_permissions;S=await Ho({schema:T.schema,table:T.name},A)}S&&l.push(S)}catch(S){Rr.error(S)}let E={};for(let T in l)t||s?(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]):_[l[T].schema]&&(E[l[T].schema]==null&&(E[l[T].schema]={}),E[l[T].schema][l[T].name]=l[T],a[l[T].schema]&&delete a[l[T].schema]);for(let T in a)t||s?E[T]={}:_[T]&&(E[T]={});return E}catch(t){return Rr.error("Got an error in describeAll"),Rr.error(t),Po(new Error,Bo.DESCRIBE_ALL_ERR)}}o(TU,"describeAll");async function Ho(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},a=gf.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Hs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=await qn(_);if(!c||c.length===0)throw Po(new Error,Bo.TABLE_NOT_FOUND(e.schema,e.table),Nf.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Po(new Error,Bo.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:dU,search_value:r+"."+s,get_attributes:[SU]},E=await qn(l);E=oU.uniqBy(E,T=>T.attribute),n&&n.length>0&&(E=fU(n)),i.attributes=E,i.clustering_stream_name=_U.createNatsTableStreamName(u.schema,u.name);try{let T=aU.join(lU.getBaseSchemaPath(),i.schema.toString()),S=await Af.openEnvironment(T,i.name),A=Af.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(T){Rr.warn(`unable to stat table dbi due to ${T}`)}}catch(l){Rr.error(`There was an error getting attributes for table '${u.name}'`),Rr.error(l)}return i}o(Ho,"descTable");function fU(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(fU,"getAttrsByPerms");async function hU(e){let t=gf.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Oc,search_value:s,hash_values:[],get_attributes:[Of,Q.ID_ATTRIBUTE_STRING,Hs,Oc]},i=await qn(n);if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Hs]},_=await EU(a);if(_&&_.length<1)throw Po(new Error,Bo.SCHEMA_NOT_FOUND(e.schema),Nf.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),Nc.isEmpty(c)||c.describe){let u=await Ho({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){Rr.error(`Error describing schema table '${e.schema}.${_}'`),Rr.error(c)}})),a}}o(hU,"describeSchema")});var Gs=d((xx,wf)=>{var vs=Yt(),{callbackify:Lf,promisify:RU}=require("util");wf.exports={setSchemaDataToGlobal:Cf,getTableSchema:gU,getSystemSchema:NU,setSchemaDataToGlobalAsync:RU(Cf)};var yf=vo(),AU=Lf(yf.describeAll),mU=Lf(yf.describeTable);function Cf(e){AU(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=vs),global.hdb_schema=r,e(null,null)})}o(Cf,"setSchemaDataToGlobal");function bf(e,t){return e==="system"?vs[t]:global.hdb_schema[e][t]}o(bf,"returnSchema");function gU(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?pU(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,bf(e,t))}):r(null,bf(e,t))}o(gU,"getTableSchema");function pU(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=vs:global.hdb_schema={system:vs},r();return}mU(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:vs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(pU,"setTableDataToGlobal");function NU(){return vs}o(NU,"getSystemSchema")});var Jr=d((kx,Uf)=>{"use strict";var qo=N_(),ot=O(),OU=require("util"),Fo=Ps(),IU=Gs(),Ic=I(),{handleHDBError:Ar,hdb_errors:CU}=J(),{HTTP_STATUS_CODES:jr}=CU,bU=OU.promisify(IU.getTableSchema),LU="updated",Df="inserted",Mf="upserted";Uf.exports={insert:wU,update:DU,upsert:MU,validation:yU,flush:UU};async function yU(e){if(ot.isEmpty(e))throw new Error("invalid update parameters defined.");if(ot.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ot.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bU(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&ot.isEmptyOrZeroLength(_[s]))throw Ic.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ot.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Ic.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ot.isEmpty(_[s])&&_[s]!==""&&n.has(ot.autoCast(_[s]))&&(_.skip=!0),n.add(ot.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(yU,"validation");async function wU(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.createRecords(e);return Go(Df,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}o(wU,"insertData");async function DU(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.updateRecords(e);return ot.isEmpty(s.existing_rows)?Go(LU,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Go(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}o(DU,"updateData");async function MU(e){if(e.operation!=="upsert")throw Ar(new Error,"invalid operation, must be upsert",jr.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Ar(new Error,t.message,jr.BAD_REQUEST);let r=ot.checkSchemaTableExist(e.schema,e.table);if(r)throw Ar(new Error,r,jr.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Go(Mf,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Ar(s,null,null,Ic.ERR,n)}}o(MU,"upsertData");function Go(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Df?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===Mf?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Go,"returnObject");function UU(e){return Fo.flush(e.schema,e.table)}o(UU,"flush")});var Bf=d(($x,Pf)=>{"use strict";var Vo=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Vo,"HdbInfoInsertObject");Pf.exports={HdbInfoInsertObject:Vo}});var Cc=d((Yx,Hf)=>{"use strict";var xo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(xo,"InsertObject");var ko=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(ko,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o($o,"DeleteResponseObject");Hf.exports={InsertObject:xo,NoSQLSeachObject:ko,DeleteResponseObject:$o}});var qf=d((Kx,Gf)=>{"use strict";var vf=h(),Yo=class{constructor(t,r){this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[vf.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Yo,"UpgradeObject");Gf.exports={UpgradeObject:Yo}});var Ko=d((Wx,Vf)=>{"use strict";var at=require("prompt"),qs=require("chalk"),Ff=I(),mt=require("os"),bc=vr(),Lc=["yes","y"];async function PU(e){let t=`${mt.EOL}`+qs.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=bc(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return Ff.error("There was an error when prompting user about an upgrade."),Ff.error(n),!1}return Lc.includes(s.CONFIRM_UPGRADE)}o(PU,"forceUpdatePrompt");async function BU(e){let t=`${mt.EOL}`+qs.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=bc(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:qs.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Lc.includes(s.CONFIRM_DOWNGRADE)}o(BU,"forceDowngradePrompt");async function HU(){let e=`${mt.EOL}`+qs.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=bc(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:qs.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Lc.includes(r.GENERATE_CERTS)}o(HU,"upgradeCertsPrompt");Vf.exports={forceUpdatePrompt:PU,forceDowngradePrompt:BU,upgradeCertsPrompt:HU}});var yc=d((Qx,xf)=>{"use strict";var Wo=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Wo,"UpgradeDirective");xf.exports=Wo});var $f=d((zx,kf)=>{"use strict";var vU=O(),GU=We(),jx=I(),Jx=require("path"),Zx=require("fs"),Xx=h();kf.exports={getOldPropsValue:qU};function qU(e,t,r=!1){let s=t.getRaw(e);return vU.isNotEmptyAndHasValue(s)?s:r?GU.getDefaultConfig(e):""}o(qU,"getOldPropsValue")});var Qf=d((ek,Wf)=>{"use strict";var mr=require("path"),gr=require("fs-extra"),FU=require("properties-reader"),VU=yc(),oe=I(),{getOldPropsValue:W}=$f(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:Zr}=h(),Xr=We(),Qo=Y(),Yf=O(),Dt=h(),wc=new VU("3.1.0"),Kf=[];function xU(){let e=FU(Qo.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),oe.info(t);let r=` ;Settings for the HarperDB process.
|
|
7
7
|
|
|
8
8
|
;The directory selected during install where the database files reside.
|
|
9
9
|
${N.HDB_ROOT_KEY} = ${W(N.HDB_ROOT_KEY,e)}
|
|
@@ -72,10 +72,10 @@ ${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${Xr.getDefaultConfig(Zr.CUSTOMFUNCTIONS_NETWOR
|
|
|
72
72
|
${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${mr.join(W(N.HDB_ROOT_KEY,e),"custom_functions")}
|
|
73
73
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
74
74
|
${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Xr.getDefaultConfig(Zr.HTTP_THREADS)}
|
|
75
|
-
`,s=Qo.get("settings_path"),n=mr.dirname(s),i=mr.join(n,"3_1_0_upgrade_settings.bak");try{oe.info(`Backing up old settings file to: ${i}`),gr.copySync(s,i)}catch(_){throw oe.error(_),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{oe.info("New settings file values for 3.1.0 upgrade:",r),oe.info(`Creating new/upgraded settings file at '${s}'`),gr.writeFileSync(s,r),oe.info("Updating env variables with new settings values")}catch(_){throw console.error("There was a problem writing the new settings file. Please check the log for details."),oe.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),oe.error(_),gr.copySync(i,s),_}Qo.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),oe.info(a),a}o(xU,"updateSettingsFile_3_1_0");function kU(){let e=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),t=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.REG_KEY_FILE_NAME),r=mr.join(Qo.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),s=mr.join(r,Dt.LICENSE_FILE_NAME),n=mr.join(r,Dt.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),oe.info(i);let a="Creating .license directory";console.log(a),oe.info(a),gr.mkdirpSync(r);try{gr.accessSync(e);try{let _="Moving licence file";console.log(_),oe.info(_),gr.moveSync(e,s);let c="License file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving license file failed";console.error(c),oe.error(c)}}catch{let c=`license file '${e}' does not exist.`;console.warn(c),oe.warn(c)}try{gr.accessSync(t);try{let _="Moving registration file";console.log(_),oe.info(_),gr.moveSync(t,n);let c="Registration file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving registration file failed";console.error(c),oe.error(c)}}catch{let c=`registration file '${t}' does not exist.`;console.warn(c),oe.warn(c)}}o(kU,"moveLicenseFiles");wc.sync_functions.push(xU);wc.sync_functions.push(kU);Kf.push(wc);Wf.exports=Kf});var Dc=d((
|
|
75
|
+
`,s=Qo.get("settings_path"),n=mr.dirname(s),i=mr.join(n,"3_1_0_upgrade_settings.bak");try{oe.info(`Backing up old settings file to: ${i}`),gr.copySync(s,i)}catch(_){throw oe.error(_),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{oe.info("New settings file values for 3.1.0 upgrade:",r),oe.info(`Creating new/upgraded settings file at '${s}'`),gr.writeFileSync(s,r),oe.info("Updating env variables with new settings values")}catch(_){throw console.error("There was a problem writing the new settings file. Please check the log for details."),oe.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),oe.error(_),gr.copySync(i,s),_}Qo.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),oe.info(a),a}o(xU,"updateSettingsFile_3_1_0");function kU(){let e=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),t=mr.join(Yf.getHomeDir(),Dt.HDB_HOME_DIR_NAME,Dt.LICENSE_KEY_DIR_NAME,Dt.REG_KEY_FILE_NAME),r=mr.join(Qo.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.LICENSE_FILE_NAME),s=mr.join(r,Dt.LICENSE_FILE_NAME),n=mr.join(r,Dt.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),oe.info(i);let a="Creating .license directory";console.log(a),oe.info(a),gr.mkdirpSync(r);try{gr.accessSync(e);try{let _="Moving licence file";console.log(_),oe.info(_),gr.moveSync(e,s);let c="License file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving license file failed";console.error(c),oe.error(c)}}catch{let c=`license file '${e}' does not exist.`;console.warn(c),oe.warn(c)}try{gr.accessSync(t);try{let _="Moving registration file";console.log(_),oe.info(_),gr.moveSync(t,n);let c="Registration file successfully moved.";console.log(c),oe.info(c)}catch{let c="moving registration file failed";console.error(c),oe.error(c)}}catch{let c=`registration file '${t}' does not exist.`;console.warn(c),oe.warn(c)}}o(kU,"moveLicenseFiles");wc.sync_functions.push(xU);wc.sync_functions.push(kU);Kf.push(wc);Wf.exports=Kf});var Dc=d((tk,jf)=>{"use strict";var $U=h().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=$U.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(jo,"UpdateObject");jf.exports=jo});var zf=d((rk,Xf)=>{"use strict";var Mc=require("joi"),Jf=tt(),{route_constraints:Zf}=S_();Xf.exports={setRoutesValidator:YU,deleteRoutesValidator:KU};function YU(e){let t=Mc.object({server:Mc.valid("hub","leaf").required(),routes:Zf.required()});return Jf.validateBySchema(e,t)}o(YU,"setRoutesValidator");function KU(e){let t=Mc.object({routes:Zf.required()});return Jf.validateBySchema(e,t)}o(KU,"deleteRoutesValidator")});var nh=d((sk,sh)=>{"use strict";var zr=We(),Uc=O(),Jo=h(),eh=zf(),{handleHDBError:th,hdb_errors:WU}=J(),{HTTP_STATUS_CODES:rh}=WU,QU="cluster routes successfully set",jU="cluster routes successfully deleted";sh.exports={setRoutes:JU,getRoutes:ZU,deleteRoutes:XU};function JU(e){let t=eh.setRoutesValidator(e);if(t)throw th(t,t.message,rh.BAD_REQUEST,void 0,void 0,!0);let r=zr.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let _=0,c=e.routes.length;_<c;_++){let u=e.routes[_];u.port=Uc.autoCast(u.port);let l=s.some(T=>T.host===u.host&&T.port===u.port),E=n.some(T=>T.host===u.host&&T.port===u.port);l||E?i.push(u):(s.push(u),a.push(u))}return e.server==="hub"?zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:QU,set:a,skipped:i}}o(JU,"setRoutes");function ZU(){let e=zr.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(ZU,"getRoutes");function XU(e){let t=eh.deleteRoutesValidator(e);if(t)throw th(t,t.message,rh.BAD_REQUEST,void 0,void 0,!0);let r=zr.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],_=!1,c=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],T=!1;for(let S=0,A=s.length;S<A;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),T=!0,_=!0,i.push(E);break}}if(!T){let S=!0;for(let A=0,R=n.length;A<R;A++){let L=n[A];if(E.host===L.host&&E.port===L.port){n.splice(A,1),c=!0,S=!1,i.push(E);break}}S&&a.push(E)}}return _&&(s=Uc.isEmptyOrZeroLength(s)?null:s,zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),c&&(n=Uc.isEmptyOrZeroLength(n)?null:n,zr.updateConfigValue(Jo.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:jU,deleted:i,skipped:a}}o(XU,"deleteRoutes")});var gt=d((ik,oh)=>{"use strict";var{platform:nk}=require("os"),zU="nats-server.zip",Pc="nats-server",eP=process.platform==="win32"?`${Pc}.exe`:Pc,Bc="HDB",tP=/^[^\s.,*>]+$/,ih="__request__",rP=o(e=>`${e}.${ih}`,"REQUEST_SUBJECT"),sP={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},nP={HUB:"hub.pid",LEAF:"leaf.pid"},iP={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},oP={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Bc,deliver_subject:"__HDB__.WORKQUEUE"},aP={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Bc,deliver_subject:"HDB.SCHEMAQUEUE"},_P={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Bc,deliver_subject:"HDB.USERQUEUE"},cP={SUCCESS:"success",ERROR:"error"},uP={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},lP={TXN:"txn",MSGID:"msgid"};oh.exports={NATS_SERVER_ZIP:zU,NATS_SERVER_NAME:Pc,NATS_BINARY_NAME:eP,PID_FILES:nP,NATS_CONFIG_FILES:sP,SERVER_SUFFIX:iP,WORK_QUEUE_CONSUMER_NAMES:oP,SCHEMA_QUEUE_CONSUMER_NAMES:aP,USER_QUEUE_CONSUMER_NAMES:_P,NATS_TERM_CONSTRAINTS_RX:tP,REQUEST_SUFFIX:ih,UPDATE_REMOTE_RESPONSE_STATUSES:cP,CLUSTER_STATUS_STATUSES:uP,REQUEST_SUBJECT:rP,SUBJECT_PREFIXES:lP}});var lh=d((ak,uh)=>{"use strict";var Je=$(),{insertRecords:EP}=Yr(),dP=lr(),pr=he(),SP=O(),{STORAGE_TYPES_ENUM:ok}=h(),jt=I(),TP=O(),Mt=require("fs-extra"),Jt=require("path"),fP=require("cli-progress"),Fn=require("assert"),hP=require("pino"),RP=Y();uh.exports=AP;var Zo,ah,Xo,Hc,we,Vn=!1;async function AP(e=!0){return Zo=RP.getHdbBasePath(),ah=Jt.join(Zo,"schema"),Xo=Jt.join(Zo,"4_0_0_upgrade_tmp"),Hc=Jt.join(Zo,"transactions"),console.info("Reindexing upgrade started for schemas"),jt.notify("Reindexing upgrade started for schemas"),await _h(ah,!1,e),await Mt.pathExists(Hc)&&(console.info(`
|
|
76
76
|
|
|
77
|
-
Reindexing upgrade started for transaction logs`),jt.notify("Reindexing upgrade started for transaction logs"),await _h(Hc,!0,e)),jt.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Vn?", but errors occurred":"")}o(AP,"reindexUpgrade");async function _h(e,t,r){let s=await Mt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=Jt.join(e,a.toString());if(a===".DS_Store")continue;let c=await Mt.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&!!Mt.statSync(Jt.join(_,E)).isDirectory())try{await mP(a,E,t),we.info(`Reindexing started for ${a}.${E}`),jt.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await pP(a,E,_,t,r),we.info(`Reindexing completed for ${a}.${E}`),jt.notify(`Reindexing completed for ${a}.${E}`)}catch(T){Vn=!0,T.schema_path=_,T.table_name=E,jt.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),jt.error(T),we.error(T),console.error(T)}}}if(!Vn)try{await Mt.rm(Xo,{recursive:!0})}catch{}}o(_h,"processTables");async function mP(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Jt.join(Xo,n);await Mt.ensureDir(Xo),await Mt.writeFile(i,""),we=hP({level:"debug",formatters:{bindings(){}}},i)}o(mP,"initPinoLogger");var gP=20;async function pP(e,t,r,s,n){let i;try{i=await Je.openEnvironment(r,t,s)}catch(p){if(p.message==="MDB_INVALID: File is not an LMDB file"){jt.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),we.error(p);return}throw p}let a=IP(i.dbis),_=Je.openDBI(i,a),c=Object.keys(i.dbis),u=Je.statDBI(i,a);we.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new fP.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Je.createEnvironment(r,t,!1);Je.createDBI(E,a,!1,!0);let T=[];try{for(let p of _.getRange({start:!1}))p.value=Object.assign({},p.value),T.push(p),s||e==="system"&&(t==="hdb_schema"&&(p.key=p.key.toString(),p.value.name=p.value.name.toString()),t==="hdb_table"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.name=p.value.name.toString()),t==="hdb_attribute"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.table=p.value.table.toString(),p.value.attribute=p.value.attribute.toString())),T.length>gP&&await S();await S()}catch(p){throw Vn=!0,we.error(p),p}async function S(){let p,k=T.map(({value:Ce})=>Ce);s?p=await Promise.all(k.map(Ce=>NP(E,Ce))):p=await EP(E,a,c.filter(Ce=>Ce!=="__blob__"),k,!1);for(let Ce=0,li=T.length;Ce<li;Ce++){let{key:nn,value:Ei}=T[Ce];we.info(`Record hash value: ${nn} hash: ${a}`);let ir;s?ir=p[Ce]:ir=p.written_hashes.indexOf(nn)>-1,Fn(ir,!0),OP(E,a,Ei[a],s),we.info(`Insert success, written hashes: ${p.written_hashes}`),l.increment()}T=[],l.value/l.total*100%10===0&&jt.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),we.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let A=Je.statDBI(i,a),R=Je.statDBI(E,a);if(we.info(`Old stats entry count: ${A.entryCount}. New stats entry count: ${R.entryCount}`),Fn.deepStrictEqual(A.entryCount,R.entryCount),await Je.closeEnvironment(i),await Je.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let p=Jt.join(r,t),k=Jt.join(p,"data.mdb"),Ie=Jt.join(p,"lock.mdb");await Mt.unlink(k),await Mt.unlink(Ie),await Mt.rmdir(p),we.info(`Deleted old environment files from schema folder: ${k}, ${Ie}`)}let L=await Je.openEnvironment(r,t),de=Je.statDBI(L,a);we.info(`New stats: ${JSON.stringify(R)}. New stats after move: ${JSON.stringify(de)}`),Fn.deepStrictEqual(de.entryCount,R.entryCount),await Je.closeEnvironment(L),delete global.lmdb_map[`${e}.${t}`]}o(pP,"processTable");async function NP(e,t){Je.initializeDBIs(e,pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),TP.isEmpty(t.user_name)||e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(NP,"insertTransaction");function OP(e,t,r,s){let i=e.dbis[t].get(r);Fn.deepStrictEqual(typeof i,"object");let a;if(s){let _={[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!SP.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];ch(e,_,E,r)}else ch(e,_,c,r)}o(OP,"validateIndices");function ch(e,t,r,s){try{let n=!1,i=dP.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||we.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Fn.deepStrictEqual(n,!0)}catch(n){Vn=!0,we.error(n),console.error(n)}}o(ch,"validateIndex");function IP(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(IP,"getHashDBI")});var dh=d((uk,Eh)=>{"use strict";var CP={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))},bP="certificate.pem",LP="privateKey.pem",yP="ca.pem";Eh.exports={CERTIFICATE_VALUES:CP,CERTIFICATE_PEM_NAME:bP,PRIVATEKEY_PEM_NAME:LP,CA_PEM_NAME:yP}});var Fc=d((lk,Th)=>{"use strict";var wP=require("mkcert"),zo=require("path"),vc=require("fs-extra"),Gc=O(),DP=Y(),qc=h(),Fs=dh(),MP=vr(),UP=We();Th.exports={generateKeys:PP,updateConfigCert:Sh};async function PP(){let e=DP.getHdbBasePath(),t=zo.join(e,qc.LICENSE_KEY_DIR_NAME),r=await wP.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Fs.CERTIFICATE_VALUES.key,caCert:Fs.CERTIFICATE_VALUES.cert}),s=zo.join(t,Fs.CERTIFICATE_PEM_NAME),n=zo.join(t,Fs.PRIVATEKEY_PEM_NAME),i=zo.join(t,Fs.CA_PEM_NAME);try{await vc.writeFile(s,r.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await vc.writeFile(n,r.key)}catch(a){throw Gc.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await vc.writeFile(i,Fs.CERTIFICATE_VALUES.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}Sh(s,n,i)}o(PP,"generateKeys");function Sh(e,t,r){let s=MP(Object.keys(qc.CONFIG_PARAM_MAP),!0),n=qc.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};UP.updateConfigValue(void 0,void 0,i,!1,!0)}o(Sh,"updateConfigCert")});var mh=d((Ek,Ah)=>{"use strict";var ea=require("path"),Nr=require("fs-extra"),BP=yc(),es=O(),fh=We(),Vc=Y(),pt=h(),ta=I(),HP=require("properties-reader"),vP=At(),GP=Dc(),qP=hr(),FP=require("util"),VP=FP.promisify(qP.searchByValue),xP=Jr(),kP=nh(),$P=gt(),YP=lh(),hh=Fc(),KP=Ko(),$n=new BP("4.0.0"),Rh=[],xn,kn;async function WP(){try{if(await KP.upgradeCertsPrompt()){if(console.log("Generating new certificates."),xn){let t=ta.changeExtension(xn,".bak");await Nr.move(xn,t)}if(kn){let t=ta.changeExtension(kn,".bak");await Nr.move(kn,t)}await hh.generateKeys()}else console.log("Using existing certificates."),hh.updateConfigCert(xn,kn,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(WP,"generateNewKeys");async function QP(){console.log("Updating HarperDB nodes."),es.info("Updating HarperDB nodes.");let e=[];try{let t=new vP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=await VP(t),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!$P.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let T=_.subscriptions[l],S=T.channel.split(":");u.push({schema:S[0],table:S[1],publish:T.publish,subscribe:T.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:pt.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(ta.isEmptyOrZeroLength(s))return;let n=new GP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await xP.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{kP.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(QP,"updateNodes");async function jP(){let e=Vc.get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ea.join("config","settings.js"))){es.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),es.info(t);let r=ea.dirname(e),s=Vc.get(pt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=ea.join(s,"backup","4_0_0_upgrade_settings.bak"),i=ea.join(s,pt.HDB_CONFIG_FILE);try{es.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Nr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{es.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),es.info("Updating env variables with new settings values");let E=fh.initOldConfig(e);xn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],kn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],fh.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=ta.getPropsFilePath();Nr.accessSync(a,Nr.constants.F_OK|Nr.constants.R_OK);let c=HP(a).get(pt.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
78
|
-
install_user = ${c}`;try{Nr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{Vc.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{Nr.removeSync(r),console.log(l),es.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(jP,"updateSettingsFile_4_0_0");$n.async_functions.push(jP);$n.async_functions.push(WP);$n.async_functions.push(YP);$n.async_functions.push(QP);Rh.push($n);Ah.exports=Rh});var xc=d((dk,Oh)=>{"use strict";var ts=I(),JP=h(),gh=O(),{DATA_VERSION:ZP,UPGRADE_VERSION:XP}=JP.UPGRADE_JSON_FIELD_NAMES_ENUM,ph=Qf(),ra=mh(),rs=new Map;ph&&ph.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});function zP(){return[...rs.keys()].sort(ts.compareVersions)}o(zP,"getSortedVersions");function Nh(e){let t=e[ZP],r=e[XP];return ts.isEmptyOrZeroLength(t)||ts.isEmptyOrZeroLength(r)?(gh.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),gh.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...rs.keys()].sort(ts.compareVersions).filter(function(s){return ts.compareVersions(s,t)>0&&ts.compareVersions(s,r)<=0})}o(Nh,"getVersionsForUpgrade");function eB(e){return Nh(e).length>0}o(eB,"hasUpgradesRequired");function tB(e){return ts.isEmptyOrZeroLength(e)?null:rs.has(e)?rs.get(e):null}o(tB,"getDirectiveByVersion");Oh.exports={getSortedVersions:zP,getDirectiveByVersion:tB,getVersionsForUpgrade:Nh,hasUpgradesRequired:eB}});var na=d((Sk,Dh)=>{"use strict";var Ch=require("util"),kc=require("chalk"),rB=require("os"),bh=Jr(),sB=hr(),Ze=h(),Lh=Bf(),$c=Cc(),{UpgradeObject:Ih}=qf(),{forceDowngradePrompt:nB}=Ko(),iB=Vr(),sa=O(),Yn=I(),oB=Gs(),aB=xc(),_B=Ch.promisify(sB.searchByValue),Yc=Ch.promisify(oB.setSchemaDataToGlobal),cB="info_id",uB="2.9.9",lB="3.0.0";async function EB(e){let t=new Lh.HdbInfoInsertObject(1,e,e),r=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(r)}o(EB,"insertHdbInstallInfo");async function yh(e){let t,r=await wh(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new Lh.HdbInfoInsertObject(i,e,e);let a=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(a)}o(yh,"insertHdbUpgradeInfo");async function wh(){let e=new $c.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,cB,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=await _B(e)}catch(r){sa.info(r)}return t}o(wh,"getAllHdbInfoRecords");async function dB(){let e=await wh();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(dB,"getLatestHdbInfoRecord");async function SB(){sa.info("Checking if HDB software has been updated");try{let e=iB.version(),t=await dB(),r;if(Yn.isEmpty(t))r=uB;else if(r=t.data_version_num,Yn.compareVersions(r.toString(),e.toString())>0){if(!Yn.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kc.yellow(`This instance's data was last run on version ${r}`)),console.error(kc.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${rB.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Yn.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kc.yellow(`This instance's data was last run on version ${r}`)),await nB(new Ih(r,e))?await yh(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Yc(),TB(r),e.toString()===r.toString())return;let s=new Ih(r,e);return aB.hasUpgradesRequired(s)?s:void 0}catch(e){throw sa.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),sa.fatal(e),e}}o(SB,"getVersionUpdateInfo");function TB(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!Yn.isEmpty(e)&&e<lB)throw console.log(t),new Error(t)}o(TB,"checkIfInstallIsSupported");Dh.exports={insertHdbInstallInfo:EB,insertHdbUpgradeInfo:yh,getVersionUpdateInfo:SB}});var Hh=d((Tk,Bh)=>{"use strict";var Kc=require("joi"),{boolean:fB,string:Mh,number:hB}=Kc.types(),Uh=require("fs-extra"),Kn=h(),Ph=require("path"),RB=tt();Bh.exports=AB;function AB(e){let t=Mh.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Kc.object({[Kn.INSTALL_PROMPTS.ROOTPATH]:Kc.custom(mB),[Kn.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:hB.min(0),[Kn.INSTALL_PROMPTS.TC_AGREEMENT]:Mh.valid("yes","YES","Yes"),[Kn.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Kn.INSTALL_PROMPTS.CLUSTERING_ENABLED]:fB});return RB.validateBySchema(e,r)}o(AB,"installValidator");function mB(e,t){if(Uh.existsSync(Ph.join(e,"system/hdb_user/data.mdb"))||Uh.existsSync(Ph.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(mB,"validateRootAvailable")});var Gh=d((fk,vh)=>{"use strict";var gB=require("fs"),qe=require("path"),Zt=h(),oa=O(),ia=$(),Wc=Yt();vh.exports=pB;async function pB(e){oa.trace("Mounting HarperDB");let t=qe.join(e,Zt.SCHEMA_DIR_NAME,Zt.SYSTEM_SCHEMA_NAME);_t(e),_t(qe.join(e,"backup")),_t(qe.join(e,"trash")),_t(qe.join(e,"keys")),_t(qe.join(e,"keys",Zt.LICENSE_FILE_NAME)),_t(qe.join(e,"log")),_t(qe.join(e,"doc")),_t(qe.join(e,"schema")),_t(t),_t(qe.join(e,Zt.TRANSACTIONS_DIR_NAME)),_t(qe.join(e,"clustering")),_t(qe.join(e,"custom_functions")),await NB(t)}o(pB,"mountHdb");async function NB(e){let t=uc(),r=No(),s=Object.keys(Wc);for(let n=0;n<s.length;n++){let i=s[n],a,_=Wc[i].hash_attribute;try{let u=new r(Zt.SYSTEM_SCHEMA_NAME,i,_);await t(void 0,u),a=await ia.openEnvironment(e,i)}catch(u){throw oa.error(`issue creating environment for ${Zt.SYSTEM_SCHEMA_NAME}.${i}: ${u}`),u}let c=Wc[i].attributes;for(let u=0;u<c.length;u++){let l=c[u].attribute;try{Zt.TIME_STAMP_NAMES.indexOf(l)>=0?await ia.createDBI(a,l,!0):l===_?await ia.createDBI(a,l,!1,!0):await ia.createDBI(a,l,!0,!1)}catch(E){throw oa.error(`issue creating dbi for ${Zt.SYSTEM_SCHEMA_NAME}.${i}.${l}: ${E}`),E}}}}o(NB,"createLMDBTables");function _t(e,{isRelativeToScript:t=!1}={}){let r=qe.sep,s=qe.isAbsolute(e)?r:"",n=t?__dirname:".";e.split("/").reduce((i,a)=>{let _=qe.resolve(n,i,a);try{_&&_!=="/"&&(gB.mkdirSync(_,{mode:Zt.HDB_FILE_PERMISSIONS}),oa.info(`Directory ${_} created`))}catch(c){if(c.code!=="EEXIST")throw c}return _},s)}o(_t,"makeDirectory")});var xh=d((hk,Vh)=>{var OB=tt(),Qc=require("joi"),{hdb_schema_table:qh}=ms(),Fh={schema:qh,table:qh},IB={date:Qc.date().iso().required()},CB={timestamp:Qc.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Vh.exports=function(e,t){let r=t==="timestamp"?{...Fh,...CB}:{...Fh,...IB},s=Qc.object(r);return OB.validateBySchema(e,s)}});var Kh=d((Rk,Yh)=>{var bB=tt(),kh=require("joi"),{hdb_schema_table:$h}=ms(),LB=kh.object({schema:$h,table:$h,hash_values:kh.array().required()});Yh.exports=function(e){return bB.validateBySchema(e,LB)}});var Zc=d((Ak,Zh)=>{"use strict";var Qh=xh(),yB=Kh(),aa=I(),Wh=require("moment"),jh=O(),{promisify:wB,callbackify:DB}=require("util"),ss=h(),MB=Gs(),jc=wB(MB.getTableSchema),Jc=Ps(),{DeleteResponseObject:UB}=Cc(),{handleHDBError:Or,hdb_errors:PB}=J(),{HDB_ERROR_MSGS:_a,HTTP_STATUS_CODES:Ir}=PB,BB="records successfully deleted",HB=DB(Jh);Zh.exports={delete:HB,deleteRecord:Jh,deleteFilesBefore:vB,deleteAuditLogsBefore:GB};async function vB(e){let t=Qh(e,"date");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(!Wh(e.date,Wh.ISO_8601).isValid())throw Or(new Error,_a.INVALID_DATE,Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_DATE,!0);let s=aa.checkSchemaTableExist(e.schema,e.table);if(s)throw Or(new Error,s,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,s,!0);try{let n=await Jc.deleteRecordsBefore(e);if(await jc(e.schema,e.table),jh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}o(vB,"deleteFilesBefore");async function GB(e){let t=Qh(e,"timestamp");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Or(new Error,_a.INVALID_VALUE("Timestamp"),Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_VALUE("Timestamp"),!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{let s=await Jc.deleteAuditLogsBefore(e);return await jc(e.schema,e.table),jh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}o(GB,"deleteAuditLogsBefore");async function Jh(e){let t=yB(e);if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{await jc(e.schema,e.table);let s=await Jc.deleteRecords(e);return aa.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BB}`),s}catch(s){if(s.message===ss.SEARCH_NOT_FOUND_MESSAGE){let n=new UB;return n.message=ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(Jh,"deleteRecord")});var ca=d((mk,eR)=>{var qB=require("crypto"),Xh=9;function FB(e){let t=xB(Xh),r=zh(e+t);return t+r}o(FB,"createHash");function VB(e,t){let r=e.substr(0,Xh),s=r+zh(t+r);return e===s}o(VB,"validateHash");function xB(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}o(xB,"generateSalt");function zh(e){return qB.createHash("md5").update(e).digest("hex")}o(zh,"md5");eR.exports={hash:FB,validate:VB}});var rR=d((gk,tR)=>{var Xc=tt(),De={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function kB(e){return De.password.presence=!0,De.username.presence=!0,De.role.presence=!0,De.active.presence=!0,Xc.validateObject(e,De)}o(kB,"addUserValidation");function $B(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o($B,"alterUserValidation");function YB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o(YB,"dropUserValidation");tR.exports={addUserValidation:kB,alterUserValidation:$B,dropUserValidation:YB}});var nR=d((pk,sR)=>{"use strict";var Cr=h(),Wn=class{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(Wn,"BaseLicense");var ua=class extends Wn{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(ua,"ExtendedLicense");sR.exports={BaseLicense:Wn,ExtendedLicense:ua}});var Qn=d((Nk,uR)=>{"use strict";var xs=require("fs-extra"),iR=ca(),oR=require("crypto"),KB=require("moment"),WB=require("uuid").v4,Me=O(),eu=require("path"),QB=I(),Xe=h(),jB=nR().ExtendedLicense,Vs="invalid license key format",JB="061183",ZB="mofi25",XB="aes-256-cbc",zB=16,eH=32,aR=Y();aR.initSync();var zc;uR.exports={validateLicense:_R,generateFingerPrint:rH,licenseSearch:cR,getLicense:iH};function tu(){return eu.join(aR.getHdbBasePath(),Xe.LICENSE_KEY_DIR_NAME,Xe.LICENSE_FILE_NAME)}o(tu,"getLicenseDirPath");function tH(){let e=tu();return eu.join(e,Xe.LICENSE_FILE_NAME)}o(tH,"getLicenseFilePath");function ru(){let e=tu();return eu.join(e,Xe.REG_KEY_FILE_NAME)}o(ru,"getFingerPrintFilePath");async function rH(){let e=ru();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await sH();throw Me.error(`Error writing fingerprint file to ${e}`),Me.error(t),new Error("There was an error generating the fingerprint")}}o(rH,"generateFingerPrint");async function sH(){let e=WB(),t=iR.hash(e),r=ru();try{await xs.mkdirp(tu()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Me.error(`Error writing fingerprint file to ${r}`),Me.error(s),new Error("There was an error generating the fingerprint")}return t}o(sH,"writeFingerprint");function _R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Xe.STORAGE_TYPES_ENUM.LMDB,api_call:Xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Xe.RAM_ALLOCATION_ENUM.DEFAULT,version:Xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Me.error("empty license key passed to validate."),r;let s=ru(),n=!1;try{n=xs.statSync(s)}catch(i){Me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{Me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(ZB),_=a[1];_=Buffer.concat([Buffer.from(_)],zB);let c=Buffer.concat([Buffer.from(i)],eH),u=oR.createDecipheriv(XB,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=nH(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vs),Me.error(Vs),new Error(Vs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Vs),Me.error(Vs),new Error(Vs)}else r.exp_date=l;r.exp_date<KB().valueOf()&&(r.valid_date=!1),iR.validate(a[1],`${JB}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Me.error("Invalid licence"),r}o(_R,"validateLicense");function nH(e,t){try{let r=oR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Me.warn("Check old license failed")}}o(nH,"checkOldLicense");function cR(){let e=new jB;e.api_call=0;let t=[];try{t=xs.readFileSync(tH(),"utf-8").split(Xe.NEW_LINE)}catch(r){r.code==="ENOENT"?Me.info("no license file found"):Me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(QB.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=_R(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Me.error("There was an error parsing the license string."),Me.error(n),e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT),zc=e,e}o(cR,"licenseSearch");async function iH(){return zc||await cR(),zc}o(iH,"getLicense")});var $s=d((Ok,OR)=>{"use strict";var SR="username is required",TR="nothing to update, must supply active, role or password to update",fR="password cannot be an empty string",hR="If role is specified, it cannot be empty.",RR="active must be true or false";OR.exports={addUser:dH,alterUser:SH,dropUser:fH,userInfo:hH,listUsers:Ea,listUsersExternal:RH,setUsersToGlobal:jn,findAndValidateUser:gH,getClusterUser:pH,USERNAME_REQUIRED:SR,ALTERUSER_NOTHING_TO_UPDATE:TR,EMPTY_PASSWORD:fR,EMPTY_ROLE:hR,ACTIVE_BOOLEAN:RR};var AR=Jr(),oH=Zc(),nu=ca(),mR=rR(),gR=hr(),iu=On(),Te=I(),pR=require("validate.js"),U=O(),{promisify:ou}=require("util"),au=Gn(),ns=h(),lR=gt(),aH=We(),_u=Y(),_H=Qn(),cH=Yt(),{handleHDBError:Ut,hdb_errors:uH}=J(),{HTTP_STATUS_CODES:Pt,AUTHENTICATION_ERROR_MSGS:su,HDB_ERROR_MSGS:ks}=uH,{UserEventMsg:cu}=ps(),ER=require("lodash"),NR={username:!0,active:!0,role:!0,password:!0},dR=new Map,la=ou(gR.searchByValue),lH=ou(gR.searchByHash),EH=ou(oH.delete);async function dH(e){let t=pR.cleanAttributes(e,NR),r=mR.addUserValidation(t);if(r)throw Ut(new Error,r.message,Pt.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 la(s)}catch(u){throw U.error("There was an error searching for a role in add user"),U.error(u),u}if(!n||n.length<1)throw Ut(new Error,ks.ROLE_NAME_NOT_FOUND(t.role),Pt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ut(new Error,ks.DUP_ROLES_FOUND(t.role),Pt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await AR.insert(i)}catch(u){throw U.error("There was an error searching for a user."),U.error(u),u}U.debug(a);try{await jn()}catch(u){throw U.error("Got an error setting users to global"),U.error(u),u}if(a.skipped_hashes.length===1)throw Ut(new Error,ks.USER_ALREADY_EXISTS(t.username),Pt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ADD_USER,c,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${_.username} successfully added`}o(dH,"addUser");async function SH(e){let t=pR.cleanAttributes(e,NR);if(Te.isEmptyOrZeroLength(t.username))throw new Error(SR);if(Te.isEmptyOrZeroLength(t.password)&&Te.isEmptyOrZeroLength(t.role)&&Te.isEmptyOrZeroLength(t.active))throw new Error(TR);if(!Te.isEmpty(t.password)&&Te.isEmptyOrZeroLength(t.password.trim()))throw new Error(fR);if(!Te.isEmpty(t.active)&&!Te.isBoolean(t.active))throw new Error(RR);let r=TH(t.username);if(!Te.isEmpty(t.password)&&!Te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password)),t.role==="")throw new Error(hR);if(t.role){let a={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await la(a)}catch(c){throw U.error("Got an error searching for a role."),U.error(c),c}if(!_||_.length===0){let c=ks.ALTER_USER_ROLE_NOT_FOUND(t.role);throw U.error(c),Ut(new Error,c,Pt.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=ks.ALTER_USER_DUP_ROLES(t.role);throw U.error(c),Ut(new Error,c,Pt.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 AR.update(s)}catch(a){throw U.error("Error during update."),U.error(a),a}try{await jn()}catch(a){throw U.error("Got an error setting users to global"),U.error(a),a}let i={user:null};return i.user=t,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ALTER_USER,i,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),n}o(SH,"alterUser");function TH(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(TH,"isClusterUser");async function fH(e){try{let t=mR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Te.isEmpty(global.hdb_users.get(e.username)))throw Ut(new Error,ks.USER_NOT_EXIST(e.username),Pt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await EH(r)}catch(i){throw U.error("Got an error deleting a user."),U.error(i),i}U.debug(s);try{await jn()}catch(i){throw U.error("Got an error setting users to global."),U.error(i),i}let n={user:null};return n.user=e,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.DROP_USER,n,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(fH,"dropUser");async function hH(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 lH(r)}catch(n){throw U.error("Got an error searching for a role."),U.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw U.error(r),r}return t}o(hH,"userInfo");async function RH(){let e;try{e=await Ea()}catch(t){throw U.error("Got an error listing users."),U.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(RH,"listUsersExternal");async function Ea(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ER.cloneDeep(await la(e))}catch(r){throw U.error("Got an error searching for roles."),U.error(r),r}if(!Te.isEmptyOrZeroLength(t)){let r={};for(let a in t)r[t[a].id]=t[a];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=ER.cloneDeep(await la(s))}catch(a){throw U.error("Got an error searching for users."),U.error(a),a}let i=new Map;for(let a in n){let _=n[a];_.role=r[n[a].role],AH(_.role),i.set(_.username,_)}return(await _H.getLicense()).enterprise?i:mH(i)}}catch(e){throw U.error("got an error listing users"),U.error(e),Te.errorizeMessage(e)}return null}o(Ea,"listUsers");function AH(e){try{if(!e){U.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(cH)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){U.error("Got an error trying to set system permissions."),U.error(t)}}o(AH,"appendSystemTablesToRole");function mH(e){try{if(U.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(U.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return U.error("error filtering users."),U.error(t),new Map}}o(mH,"nonEnterpriseFilter");async function jn(){try{let e=await Ea();global.hdb_users=e}catch(e){throw U.error(e),e}}o(jn,"setUsersToGlobal");async function gH(e,t,r=!0){global.hdb_users||await jn();let s=global.hdb_users.get(e);if(!s)throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ut(new Error,su.USER_INACTIVE,Pt.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(dR.get(t)===s.password)return n;if(nu.validate(s.password,t))dR.set(t,s.password);else throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(gH,"findAndValidateUser");async function pH(){let e=await Ea(),t=aH.getConfigFromFile(ns.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Te.isEmpty(r))return r.decrypt_hash=au.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lR.SERVER_SUFFIX.ADMIN,r}o(pH,"getClusterUser")});var wR=d((Ik,yR)=>{var br=require("validate.js"),CR=tt(),Ys=h(),{handleHDBError:NH,hdb_errors:OH}=J(),{HDB_ERROR_MSGS:se,HTTP_STATUS_CODES:IH}=OH,uu=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),CH={STRUCTURE_USER:"structure_user"},IR=Object.values(Ys.ROLE_TYPES_ENUM),bH="attribute_permissions",LH="attribute_name",{PERMS_CRUD_ENUM:Ks}=Ys,yH=[bH,...Object.values(Ks)],bR=[Ks.READ,Ks.INSERT,Ks.UPDATE],wH=[LH,...bR];function DH(e){let t=uu();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,LR(e,t)}o(DH,"addRoleValidation");function MH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,LR(e,t)}o(MH,"alterRoleValidation");function UH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,CR.validateObject(e,t)}o(UH,"dropRoleValidation");var PH=["operation","role","id","permission","hdb_user","hdb_auth_header"];function LR(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)PH.includes(s[a])||n.push(s[a]);n.length>0&&ae(se.INVALID_ROLE_JSON_KEYS(n),r);let i=CR.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ae(a,r)}),e.permission){let a=BH(e);a&&ae(a,r),IR.forEach(_=>{e.permission[_]&&!br.isBoolean(e.permission[_])&&ae(se.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(IR.indexOf(a)<0){if(a===CH.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ae(se.SCHEMA_NOT_FOUND(E),r)}continue}ae(se.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ae(se.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ae(se.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{yH.includes(l)||ae(se.INVALID_PERM_KEY(l),r,a,c)}),Object.values(Ks).forEach(l=>{br.isDefined(u[l])?br.isBoolean(u[l])||ae(se.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ae(se.TABLE_PERM_MISSING(l),r,a,c)}),br.isDefined(u.attribute_permissions)){if(!br.isArray(u.attribute_permissions)){ae(se.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ae(se.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:T})=>T),E={read:!1,insert:!1,update:!1};for(let T in u.attribute_permissions){let S=u.attribute_permissions[T];if(Object.keys(S).forEach(R=>{!wH.includes(R)&&R!==Ks.DELETE&&ae(se.INVALID_ATTR_PERM_KEY(R),r,a,c)}),!br.isDefined(S.attribute_name)){ae(se.ATTR_PERM_MISSING_NAME,r,a,c);continue}let A=S.attribute_name;if(!l.includes(A)){ae(se.INVALID_ATTRIBUTE_IN_PERMS(A),r,a,c);continue}bR.forEach(R=>{br.isDefined(S[R])?br.isBoolean(S[R])||ae(se.ATTR_PERM_NOT_BOOLEAN(R,A),r,a,c):ae(se.ATTR_PERM_MISSING(R,A),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let T=`${a}.${c}`;ae(se.MISMATCHED_TABLE_ATTR_PERMS(T),r,a,c)}}}}return HH(r)}o(LR,"customValidate");yR.exports={addRoleValidation:DH,alterRoleValidation:MH,dropRoleValidation:UH};function BH(e){let{operation:t,permission:r}=e;if(t===Ys.OPERATIONS_ENUM.ADD_ROLE||t===Ys.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return se.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ys.ROLE_TYPES_ENUM.SUPER_USER:Ys.ROLE_TYPES_ENUM.CLUSTER_USER;return se.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(BH,"validateNoSUPerms");function HH(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:se.ROLE_PERMS_ERROR,...e};return NH(new Error,s,IH.BAD_REQUEST)}else return null}o(HH,"generateRolePermResponse");function ae(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ae,"addPermError")});var vR=d((Ck,HR)=>{"use strict";var DR=Jr(),MR=hr(),vH=Zc(),du=wR(),Su=On(),GH=require("uuid").v4,Tu=require("util"),qH=Qn(),Xt=h(),UR=I(),fu=Tu.promisify(MR.searchByValue),FH=Tu.promisify(MR.searchByHash),VH=Tu.promisify(vH.delete),xH=At(),kH=Ls(),{hdb_errors:$H,handleHDBError:Jn}=J(),{HDB_ERROR_MSGS:PR,HTTP_STATUS_CODES:lu}=$H,{UserEventMsg:hu}=ps();HR.exports={addRole:YH,alterRole:WH,dropRole:QH,listRoles:BR};function Eu(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(Eu,"scrubRoleDetails");async function YH(e){let t=du.addRoleValidation(e);if(t)throw t;if(!(await qH.getLicense()).enterprise){let a=await BR();if(KH(e,a))throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Xt.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_NON_CU_ROLES+Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Xt.SUPPORT_HELP_MSG}`)}e=Eu(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await fu(s)}catch(a){throw Jn(a)}if(n&&n.length>0)throw Jn(new Error,PR.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=GH());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await DR.insert(i),Su.signalUserChange(new hu(process.pid)),e=Eu(e),e}o(YH,"addRole");function KH(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!UR.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(KH,"checkClusterUserRole");async function WH(e){let t=du.alterRoleValidation(e);if(t)throw t;e=Eu(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await DR.update(r)}catch(s){throw Jn(s)}return Su.signalUserChange(new hu(process.pid)),e}o(WH,"alterRole");async function QH(e){let t=du.dropRoleValidation(e);if(t)throw Jn(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new kH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await FH(r);if(s.length===0)throw Jn(new Error,PR.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let n=new xH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await fu(n),a=!1;if(UR.isEmptyOrZeroLength(i)===!1){for(let c=0;c<i.length;c++)if(i[c].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let _={table:"hdb_role",schema:"system",hash_values:[e.id]};return await VH(_),Su.signalUserChange(new hu(process.pid)),`${s[0].role} successfully deleted`}o(QH,"dropRole");async function BR(){return fu({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(BR,"listRoles")});var Au=d((bk,KR)=>{"use strict";var Zn=require("os"),xR=require("inquirer"),Pr=require("fs-extra"),jH=require("properties-reader"),is=require("chalk"),Dr=require("path"),JH=require("human-readable-ids").hri,ZH=require("ora"),ue=O(),Mr=Y(),Xn=I(),Ru=vr(),kR=na(),$R=Vr(),y=h(),XH=Hh(),zH=Gh(),ev=We(),tv=$s(),rv=vR(),sv=m_(),nv=Gs(),iv=require("util").promisify,ov=iv(nv.setSchemaDataToGlobal),av=Fc(),Ws=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Ue=o(e=>is.magenta.bold(e),"HDB_PROMPT_MSG"),_v="https://harperdb.io/legal/end-user-license-agreement",Ur=Zn.EOL,Lr="",cv="yes",GR="Starting HarperDB install...",qR="HarperDB installation was successful.",FR="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",uv="An out of date version of HarperDB is already installed.",VR="It appears HarperDB is already installed. Exiting install...",lv="Aborting install",Ev=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),dv=new RegExp(/^[^\s.,*>]+$/),Sv=Zn.homedir(),Tv=Dr.join(Sv,y.HDB_ROOT_DIR_NAME),fv=9925,hv="HDB_ADMIN",Rv="CLUSTER_USER",Fe={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},wr;KR.exports=Av;async function Av(){if(console.log(Ue(Ur+GR+Ur)),ue.notify(GR),Xn.isEmptyOrZeroLength(Zn.userInfo().uid))throw`Installing user: ${Zn.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=gv(),t=XH(e);if(t)throw t.message;await pv(),await Nv(e);let r=await mv(e),s=ZH({prefixText:Ue("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),wr=r[y.INSTALL_PROMPTS.ROOTPATH],Xn.isEmpty(wr))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Mr.setHdbBasePath(wr),process.env.PM2_LOG_FILE_PATH=Dr.join(wr,"log","pm2.log"),await zH(wr),await Ov(),await Iv(r),await bv(r),await Lv(r),await av.generateKeys(),await yv(),sv(),s.stop(),console.log(Ue(Ur+qR+Ur)),ue.notify(qR)}o(Av,"install");async function mv(e){ue.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.ROOTPATH],Fe.DESTINATION),name:y.INSTALL_PROMPTS.ROOTPATH,prefix:Lr,default:Tv,validate:async n=>Bt(n)?Bt(n):await Pr.pathExists(Dr.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Ue(Fe.DESTINATION)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Fe.HDB_PORT),name:y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Lr,default:fv,validate:n=>Ev.test(n)?!0:"Invalid port.",message:Ue(Fe.HDB_PORT)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Fe.HDB_USERNAME),name:y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lr,default:hv,validate:n=>Bt(n)?Bt(n):(t=n,!0),message:Ue(Fe.HDB_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Fe.HDB_PASS),name:y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lr,validate:n=>Bt(n)?Bt(n):!0,message:Ue(Fe.HDB_PASS)}];if(Xn.autoCastBoolean(e[y.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_NODENAME],Fe.NODE_NAME),name:y.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lr,default:JH.random(),validate:i=>dv.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Ue(Fe.NODE_NAME)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_USER],Fe.CLUSTER_USERNAME),name:y.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lr,default:Rv,validate:i=>Bt(i)?Bt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Ue(Fe.CLUSTER_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Fe.CLUSTER_PASS),name:y.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lr,validate:i=>Bt(i)?Bt(i):!0,message:Ue(Fe.CLUSTER_PASS)}];r.push(...n)}let s=await xR.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(mv,"installPrompts");function yr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Ue(t)} ${is.gray("[hidden]")}`),ue.trace(`${Ue(t)} [hidden]`)):(console.log(`${Ue(t)} ${e}`),ue.trace(`${Ue(t)} ${e}`)),!1):!0}o(yr,"displayCmdEnvVar");function Bt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Bt,"checkForEmptyValue");function gv(){let e=Object.keys(y.INSTALL_PROMPTS),t=Ru(e),r=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=y.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(gv,"checkForPromptOverride");async function pv(){ue.trace("Checking for existing install.");let e=Xn.getPropsFilePath(),t=await Pr.pathExists(e),r;if(t){ue.trace(`Install found an existing boot prop file at:${e}`);let n=jH(e).get(y.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Pr.pathExists(n)}if(r){if(ue.trace(`Install found existing HDB config at:${e}`),await kR.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${$R.version()}. Exiting install...`;console.log(Ur+is.magenta.bold(uv)),console.log(is.magenta.bold(n)),ue.error(n)}else console.log(Ur+is.magenta.bold(VR)),ue.error(VR);process.exit(0)}}o(pv,"checkForExistingInstall");async function Nv(e){ue.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${_v}${Ur}and can be viewed by typing or copying and pasting the URL into your web browser.${Ur}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Lr,transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.TC_AGREEMENT],t),name:y.INSTALL_PROMPTS.TC_AGREEMENT,message:Ue(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:is.yellow("Please enter 'yes' or 'no'")},s=await xR.prompt([r]);s[y.INSTALL_PROMPTS.TC_AGREEMENT]&&s[y.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==cv&&(console.log(is.yellow(FR)),ue.error(FR),process.exit(0))}o(Nv,"termsAgreement");async function Ov(){let e=Dr.join(wr,y.HDB_CONFIG_FILE),t;try{t=Zn.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
79
|
-
install_user = ${t}`,s=Xn.getHomeDir(),n=Dr.join(s,y.HDB_HOME_DIR_NAME),i=Dr.join(n,y.LICENSE_KEY_DIR_NAME);try{Pr.mkdirpSync(n,{mode:y.HDB_FILE_PERMISSIONS}),Pr.mkdirpSync(i,{mode:y.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${y.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=Dr.join(n,y.BOOT_PROPS_FILE_NAME);try{await Pr.writeFile(a,r)}catch(_){throw ue.error(`There was an error creating the boot file at path: ${a}`),_}Mr.setProperty(y.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Mr.setProperty(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Mr.setProperty(Mr.BOOT_PROPS_FILE_PATH,a)}o(Ov,"createBootPropertiesFile");async function Iv(e){ue.trace("Creating HarperDB config file");let t=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{ev.createConfigFile(t),Mr.initSync()}catch(r){Cv(r)}}o(Iv,"createConfigFile");function Cv(e){ue.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lv);let t=Dr.resolve(Mr.get(Mr.BOOT_PROPS_FILE_PATH),"../");t&&Pr.removeSync(t),wr&&Pr.removeSync(wr),process.exit(1)}o(Cv,"rollbackInstall");async function YR(e,t){ue.trace("Creating admin user"),await ov();let r;try{r=await rv.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await tv.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(YR,"createAdminUser");async function bv(e){ue.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await YR(t,r),delete e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(bv,"createSuperUser");async function Lv(e){ue.trace("Creating Cluster user.");let t;e[y.INSTALL_PROMPTS.CLUSTERING_USER]&&e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[y.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await YR({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[y.INSTALL_PROMPTS.CLUSTERING_USER],delete e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Lv,"createClusterUser");async function yv(){let e=$R.version();if(e)await kR.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(yv,"insertHdbVersionInfo")});var mu=d((
|
|
77
|
+
Reindexing upgrade started for transaction logs`),jt.notify("Reindexing upgrade started for transaction logs"),await _h(Hc,!0,e)),jt.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Vn?", but errors occurred":"")}o(AP,"reindexUpgrade");async function _h(e,t,r){let s=await Mt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=Jt.join(e,a.toString());if(a===".DS_Store")continue;let c=await Mt.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&!!Mt.statSync(Jt.join(_,E)).isDirectory())try{await mP(a,E,t),we.info(`Reindexing started for ${a}.${E}`),jt.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await pP(a,E,_,t,r),we.info(`Reindexing completed for ${a}.${E}`),jt.notify(`Reindexing completed for ${a}.${E}`)}catch(T){Vn=!0,T.schema_path=_,T.table_name=E,jt.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),jt.error(T),we.error(T),console.error(T)}}}if(!Vn)try{await Mt.rm(Xo,{recursive:!0})}catch{}}o(_h,"processTables");async function mP(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Jt.join(Xo,n);await Mt.ensureDir(Xo),await Mt.writeFile(i,""),we=hP({level:"debug",formatters:{bindings(){}}},i)}o(mP,"initPinoLogger");var gP=20;async function pP(e,t,r,s,n){let i;try{i=await Je.openEnvironment(r,t,s)}catch(p){if(p.message==="MDB_INVALID: File is not an LMDB file"){jt.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),we.error(p);return}throw p}let a=IP(i.dbis),_=Je.openDBI(i,a),c=Object.keys(i.dbis),u=Je.statDBI(i,a);we.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new fP.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Je.createEnvironment(r,t,!1);Je.createDBI(E,a,!1,!0);let T=[];try{for(let p of _.getRange({start:!1}))p.value=Object.assign({},p.value),T.push(p),s||e==="system"&&(t==="hdb_schema"&&(p.key=p.key.toString(),p.value.name=p.value.name.toString()),t==="hdb_table"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.name=p.value.name.toString()),t==="hdb_attribute"&&(p.key=p.key.toString(),p.value.schema=p.value.schema.toString(),p.value.table=p.value.table.toString(),p.value.attribute=p.value.attribute.toString())),T.length>gP&&await S();await S()}catch(p){throw Vn=!0,we.error(p),p}async function S(){let p,k=T.map(({value:Ce})=>Ce);s?p=await Promise.all(k.map(Ce=>NP(E,Ce))):p=await EP(E,a,c.filter(Ce=>Ce!=="__blob__"),k,!1);for(let Ce=0,li=T.length;Ce<li;Ce++){let{key:nn,value:Ei}=T[Ce];we.info(`Record hash value: ${nn} hash: ${a}`);let ir;s?ir=p[Ce]:ir=p.written_hashes.indexOf(nn)>-1,Fn(ir,!0),OP(E,a,Ei[a],s),we.info(`Insert success, written hashes: ${p.written_hashes}`),l.increment()}T=[],l.value/l.total*100%10===0&&jt.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),we.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let A=Je.statDBI(i,a),R=Je.statDBI(E,a);if(we.info(`Old stats entry count: ${A.entryCount}. New stats entry count: ${R.entryCount}`),Fn.deepStrictEqual(A.entryCount,R.entryCount),await Je.closeEnvironment(i),await Je.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let p=Jt.join(r,t),k=Jt.join(p,"data.mdb"),Ie=Jt.join(p,"lock.mdb");await Mt.unlink(k),await Mt.unlink(Ie),await Mt.rmdir(p),we.info(`Deleted old environment files from schema folder: ${k}, ${Ie}`)}let L=await Je.openEnvironment(r,t),de=Je.statDBI(L,a);we.info(`New stats: ${JSON.stringify(R)}. New stats after move: ${JSON.stringify(de)}`),Fn.deepStrictEqual(de.entryCount,R.entryCount),await Je.closeEnvironment(L),delete global.lmdb_map[`${e}.${t}`]}o(pP,"processTable");async function NP(e,t){Je.initializeDBIs(e,pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,pr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),TP.isEmpty(t.user_name)||e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(NP,"insertTransaction");function OP(e,t,r,s){let i=e.dbis[t].get(r);Fn.deepStrictEqual(typeof i,"object");let a;if(s){let _={[pr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[pr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!SP.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];ch(e,_,E,r)}else ch(e,_,c,r)}o(OP,"validateIndices");function ch(e,t,r,s){try{let n=!1,i=dP.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||we.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Fn.deepStrictEqual(n,!0)}catch(n){Vn=!0,we.error(n),console.error(n)}}o(ch,"validateIndex");function IP(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(IP,"getHashDBI")});var dh=d((_k,Eh)=>{"use strict";var CP={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))},bP="certificate.pem",LP="privateKey.pem",yP="ca.pem";Eh.exports={CERTIFICATE_VALUES:CP,CERTIFICATE_PEM_NAME:bP,PRIVATEKEY_PEM_NAME:LP,CA_PEM_NAME:yP}});var Fc=d((ck,Th)=>{"use strict";var wP=require("mkcert"),zo=require("path"),vc=require("fs-extra"),Gc=I(),DP=Y(),qc=h(),Fs=dh(),MP=vr(),UP=We();Th.exports={generateKeys:PP,updateConfigCert:Sh};async function PP(){let e=DP.getHdbBasePath(),t=zo.join(e,qc.LICENSE_KEY_DIR_NAME),r=await wP.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Fs.CERTIFICATE_VALUES.key,caCert:Fs.CERTIFICATE_VALUES.cert}),s=zo.join(t,Fs.CERTIFICATE_PEM_NAME),n=zo.join(t,Fs.PRIVATEKEY_PEM_NAME),i=zo.join(t,Fs.CA_PEM_NAME);try{await vc.writeFile(s,r.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await vc.writeFile(n,r.key)}catch(a){throw Gc.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await vc.writeFile(i,Fs.CERTIFICATE_VALUES.cert)}catch(a){throw Gc.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}Sh(s,n,i)}o(PP,"generateKeys");function Sh(e,t,r){let s=MP(Object.keys(qc.CONFIG_PARAM_MAP),!0),n=qc.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};UP.updateConfigValue(void 0,void 0,i,!1,!0)}o(Sh,"updateConfigCert")});var mh=d((uk,Ah)=>{"use strict";var ea=require("path"),Nr=require("fs-extra"),BP=yc(),es=I(),fh=We(),Vc=Y(),pt=h(),ta=O(),HP=require("properties-reader"),vP=At(),GP=Dc(),qP=hr(),FP=require("util"),VP=FP.promisify(qP.searchByValue),xP=Jr(),kP=nh(),$P=gt(),YP=lh(),hh=Fc(),KP=Ko(),$n=new BP("4.0.0"),Rh=[],xn,kn;async function WP(){try{if(await KP.upgradeCertsPrompt()){if(console.log("Generating new certificates."),xn){let t=ta.changeExtension(xn,".bak");await Nr.move(xn,t)}if(kn){let t=ta.changeExtension(kn,".bak");await Nr.move(kn,t)}await hh.generateKeys()}else console.log("Using existing certificates."),hh.updateConfigCert(xn,kn,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(WP,"generateNewKeys");async function QP(){console.log("Updating HarperDB nodes."),es.info("Updating HarperDB nodes.");let e=[];try{let t=new vP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=await VP(t),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!$P.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let T=_.subscriptions[l],S=T.channel.split(":");u.push({schema:S[0],table:S[1],publish:T.publish,subscribe:T.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:pt.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(ta.isEmptyOrZeroLength(s))return;let n=new GP(pt.SYSTEM_SCHEMA_NAME,pt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await xP.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{kP.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(QP,"updateNodes");async function jP(){let e=Vc.get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ea.join("config","settings.js"))){es.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),es.info(t);let r=ea.dirname(e),s=Vc.get(pt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=ea.join(s,"backup","4_0_0_upgrade_settings.bak"),i=ea.join(s,pt.HDB_CONFIG_FILE);try{es.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Nr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{es.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),es.info("Updating env variables with new settings values");let E=fh.initOldConfig(e);xn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],kn=E[pt.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],fh.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=ta.getPropsFilePath();Nr.accessSync(a,Nr.constants.F_OK|Nr.constants.R_OK);let c=HP(a).get(pt.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
78
|
+
install_user = ${c}`;try{Nr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{Vc.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{Nr.removeSync(r),console.log(l),es.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(jP,"updateSettingsFile_4_0_0");$n.async_functions.push(jP);$n.async_functions.push(WP);$n.async_functions.push(YP);$n.async_functions.push(QP);Rh.push($n);Ah.exports=Rh});var xc=d((lk,Oh)=>{"use strict";var ts=O(),JP=h(),gh=I(),{DATA_VERSION:ZP,UPGRADE_VERSION:XP}=JP.UPGRADE_JSON_FIELD_NAMES_ENUM,ph=Qf(),ra=mh(),rs=new Map;ph&&ph.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});ra&&ra.forEach(e=>{rs.set(e.version,e)});function zP(){return[...rs.keys()].sort(ts.compareVersions)}o(zP,"getSortedVersions");function Nh(e){let t=e[ZP],r=e[XP];return ts.isEmptyOrZeroLength(t)||ts.isEmptyOrZeroLength(r)?(gh.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),gh.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...rs.keys()].sort(ts.compareVersions).filter(function(s){return ts.compareVersions(s,t)>0&&ts.compareVersions(s,r)<=0})}o(Nh,"getVersionsForUpgrade");function eB(e){return Nh(e).length>0}o(eB,"hasUpgradesRequired");function tB(e){return ts.isEmptyOrZeroLength(e)?null:rs.has(e)?rs.get(e):null}o(tB,"getDirectiveByVersion");Oh.exports={getSortedVersions:zP,getDirectiveByVersion:tB,getVersionsForUpgrade:Nh,hasUpgradesRequired:eB}});var na=d((Ek,Dh)=>{"use strict";var Ch=require("util"),kc=require("chalk"),rB=require("os"),bh=Jr(),sB=hr(),Ze=h(),Lh=Bf(),$c=Cc(),{UpgradeObject:Ih}=qf(),{forceDowngradePrompt:nB}=Ko(),iB=Vr(),sa=I(),Yn=O(),oB=Gs(),aB=xc(),_B=Ch.promisify(sB.searchByValue),Yc=Ch.promisify(oB.setSchemaDataToGlobal),cB="info_id",uB="2.9.9",lB="3.0.0";async function EB(e){let t=new Lh.HdbInfoInsertObject(1,e,e),r=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(r)}o(EB,"insertHdbInstallInfo");async function yh(e){let t,r=await wh(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new Lh.HdbInfoInsertObject(i,e,e);let a=new $c.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yc(),bh.insert(a)}o(yh,"insertHdbUpgradeInfo");async function wh(){let e=new $c.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,cB,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=await _B(e)}catch(r){sa.info(r)}return t}o(wh,"getAllHdbInfoRecords");async function dB(){let e=await wh();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(dB,"getLatestHdbInfoRecord");async function SB(){sa.info("Checking if HDB software has been updated");try{let e=iB.version(),t=await dB(),r;if(Yn.isEmpty(t))r=uB;else if(r=t.data_version_num,Yn.compareVersions(r.toString(),e.toString())>0){if(!Yn.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kc.yellow(`This instance's data was last run on version ${r}`)),console.error(kc.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${rB.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Yn.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kc.yellow(`This instance's data was last run on version ${r}`)),await nB(new Ih(r,e))?await yh(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Yc(),TB(r),e.toString()===r.toString())return;let s=new Ih(r,e);return aB.hasUpgradesRequired(s)?s:void 0}catch(e){throw sa.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),sa.fatal(e),e}}o(SB,"getVersionUpdateInfo");function TB(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!Yn.isEmpty(e)&&e<lB)throw console.log(t),new Error(t)}o(TB,"checkIfInstallIsSupported");Dh.exports={insertHdbInstallInfo:EB,insertHdbUpgradeInfo:yh,getVersionUpdateInfo:SB}});var Hh=d((dk,Bh)=>{"use strict";var Kc=require("joi"),{boolean:fB,string:Mh,number:hB}=Kc.types(),Uh=require("fs-extra"),Kn=h(),Ph=require("path"),RB=tt();Bh.exports=AB;function AB(e){let t=Mh.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Kc.object({[Kn.INSTALL_PROMPTS.ROOTPATH]:Kc.custom(mB),[Kn.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:hB.min(0),[Kn.INSTALL_PROMPTS.TC_AGREEMENT]:Mh.valid("yes","YES","Yes"),[Kn.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Kn.INSTALL_PROMPTS.CLUSTERING_ENABLED]:fB});return RB.validateBySchema(e,r)}o(AB,"installValidator");function mB(e,t){if(Uh.existsSync(Ph.join(e,"system/hdb_user/data.mdb"))||Uh.existsSync(Ph.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(mB,"validateRootAvailable")});var Gh=d((Sk,vh)=>{"use strict";var gB=require("fs"),qe=require("path"),Zt=h(),oa=I(),ia=$(),Wc=Yt();vh.exports=pB;async function pB(e){oa.trace("Mounting HarperDB");let t=qe.join(e,Zt.SCHEMA_DIR_NAME,Zt.SYSTEM_SCHEMA_NAME);_t(e),_t(qe.join(e,"backup")),_t(qe.join(e,"trash")),_t(qe.join(e,"keys")),_t(qe.join(e,"keys",Zt.LICENSE_FILE_NAME)),_t(qe.join(e,"log")),_t(qe.join(e,"doc")),_t(qe.join(e,"schema")),_t(t),_t(qe.join(e,Zt.TRANSACTIONS_DIR_NAME)),_t(qe.join(e,"clustering")),_t(qe.join(e,"custom_functions")),await NB(t)}o(pB,"mountHdb");async function NB(e){let t=uc(),r=No(),s=Object.keys(Wc);for(let n=0;n<s.length;n++){let i=s[n],a,_=Wc[i].hash_attribute;try{let u=new r(Zt.SYSTEM_SCHEMA_NAME,i,_);await t(void 0,u),a=await ia.openEnvironment(e,i)}catch(u){throw oa.error(`issue creating environment for ${Zt.SYSTEM_SCHEMA_NAME}.${i}: ${u}`),u}let c=Wc[i].attributes;for(let u=0;u<c.length;u++){let l=c[u].attribute;try{Zt.TIME_STAMP_NAMES.indexOf(l)>=0?await ia.createDBI(a,l,!0):l===_?await ia.createDBI(a,l,!1,!0):await ia.createDBI(a,l,!0,!1)}catch(E){throw oa.error(`issue creating dbi for ${Zt.SYSTEM_SCHEMA_NAME}.${i}.${l}: ${E}`),E}}}}o(NB,"createLMDBTables");function _t(e,{isRelativeToScript:t=!1}={}){let r=qe.sep,s=qe.isAbsolute(e)?r:"",n=t?__dirname:".";e.split("/").reduce((i,a)=>{let _=qe.resolve(n,i,a);try{_&&_!=="/"&&(gB.mkdirSync(_,{mode:Zt.HDB_FILE_PERMISSIONS}),oa.info(`Directory ${_} created`))}catch(c){if(c.code!=="EEXIST")throw c}return _},s)}o(_t,"makeDirectory")});var xh=d((Tk,Vh)=>{var OB=tt(),Qc=require("joi"),{hdb_schema_table:qh}=ms(),Fh={schema:qh,table:qh},IB={date:Qc.date().iso().required()},CB={timestamp:Qc.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Vh.exports=function(e,t){let r=t==="timestamp"?{...Fh,...CB}:{...Fh,...IB},s=Qc.object(r);return OB.validateBySchema(e,s)}});var Kh=d((fk,Yh)=>{var bB=tt(),kh=require("joi"),{hdb_schema_table:$h}=ms(),LB=kh.object({schema:$h,table:$h,hash_values:kh.array().required()});Yh.exports=function(e){return bB.validateBySchema(e,LB)}});var Zc=d((hk,Zh)=>{"use strict";var Qh=xh(),yB=Kh(),aa=O(),Wh=require("moment"),jh=I(),{promisify:wB,callbackify:DB}=require("util"),ss=h(),MB=Gs(),jc=wB(MB.getTableSchema),Jc=Ps(),{DeleteResponseObject:UB}=Cc(),{handleHDBError:Or,hdb_errors:PB}=J(),{HDB_ERROR_MSGS:_a,HTTP_STATUS_CODES:Ir}=PB,BB="records successfully deleted",HB=DB(Jh);Zh.exports={delete:HB,deleteRecord:Jh,deleteFilesBefore:vB,deleteAuditLogsBefore:GB};async function vB(e){let t=Qh(e,"date");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(!Wh(e.date,Wh.ISO_8601).isValid())throw Or(new Error,_a.INVALID_DATE,Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_DATE,!0);let s=aa.checkSchemaTableExist(e.schema,e.table);if(s)throw Or(new Error,s,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,s,!0);try{let n=await Jc.deleteRecordsBefore(e);if(await jc(e.schema,e.table),jh.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}o(vB,"deleteFilesBefore");async function GB(e){let t=Qh(e,"timestamp");if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Or(new Error,_a.INVALID_VALUE("Timestamp"),Ir.BAD_REQUEST,ss.LOG_LEVELS.ERROR,_a.INVALID_VALUE("Timestamp"),!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{let s=await Jc.deleteAuditLogsBefore(e);return await jc(e.schema,e.table),jh.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}o(GB,"deleteAuditLogsBefore");async function Jh(e){let t=yB(e);if(t)throw Or(t,t.message,Ir.BAD_REQUEST,void 0,void 0,!0);let r=aa.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,Ir.NOT_FOUND,ss.LOG_LEVELS.ERROR,r,!0);try{await jc(e.schema,e.table);let s=await Jc.deleteRecords(e);return aa.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${BB}`),s}catch(s){if(s.message===ss.SEARCH_NOT_FOUND_MESSAGE){let n=new UB;return n.message=ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(Jh,"deleteRecord")});var ca=d((Rk,eR)=>{var qB=require("crypto"),Xh=9;function FB(e){let t=xB(Xh),r=zh(e+t);return t+r}o(FB,"createHash");function VB(e,t){let r=e.substr(0,Xh),s=r+zh(t+r);return e===s}o(VB,"validateHash");function xB(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}o(xB,"generateSalt");function zh(e){return qB.createHash("md5").update(e).digest("hex")}o(zh,"md5");eR.exports={hash:FB,validate:VB}});var rR=d((Ak,tR)=>{var Xc=tt(),De={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function kB(e){return De.password.presence=!0,De.username.presence=!0,De.role.presence=!0,De.active.presence=!0,Xc.validateObject(e,De)}o(kB,"addUserValidation");function $B(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o($B,"alterUserValidation");function YB(e){return De.password.presence=!1,De.username.presence=!0,De.role.presence=!1,De.active.presence=!1,Xc.validateObject(e,De)}o(YB,"dropUserValidation");tR.exports={addUserValidation:kB,alterUserValidation:$B,dropUserValidation:YB}});var nR=d((mk,sR)=>{"use strict";var Cr=h(),Wn=class{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(Wn,"BaseLicense");var ua=class extends Wn{constructor(t=0,r=Cr.STORAGE_TYPES_ENUM.LMDB,s=Cr.LICENSE_VALUES.API_CALL_DEFAULT,n=Cr.RAM_ALLOCATION_ENUM.DEFAULT,i=Cr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(ua,"ExtendedLicense");sR.exports={BaseLicense:Wn,ExtendedLicense:ua}});var Qn=d((gk,uR)=>{"use strict";var xs=require("fs-extra"),iR=ca(),oR=require("crypto"),KB=require("moment"),WB=require("uuid").v4,Me=I(),eu=require("path"),QB=O(),Xe=h(),jB=nR().ExtendedLicense,Vs="invalid license key format",JB="061183",ZB="mofi25",XB="aes-256-cbc",zB=16,eH=32,aR=Y();aR.initSync();var zc;uR.exports={validateLicense:_R,generateFingerPrint:rH,licenseSearch:cR,getLicense:iH};function tu(){return eu.join(aR.getHdbBasePath(),Xe.LICENSE_KEY_DIR_NAME,Xe.LICENSE_FILE_NAME)}o(tu,"getLicenseDirPath");function tH(){let e=tu();return eu.join(e,Xe.LICENSE_FILE_NAME)}o(tH,"getLicenseFilePath");function ru(){let e=tu();return eu.join(e,Xe.REG_KEY_FILE_NAME)}o(ru,"getFingerPrintFilePath");async function rH(){let e=ru();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await sH();throw Me.error(`Error writing fingerprint file to ${e}`),Me.error(t),new Error("There was an error generating the fingerprint")}}o(rH,"generateFingerPrint");async function sH(){let e=WB(),t=iR.hash(e),r=ru();try{await xs.mkdirp(tu()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Me.error(`Error writing fingerprint file to ${r}`),Me.error(s),new Error("There was an error generating the fingerprint")}return t}o(sH,"writeFingerprint");function _R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Xe.STORAGE_TYPES_ENUM.LMDB,api_call:Xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Xe.RAM_ALLOCATION_ENUM.DEFAULT,version:Xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Me.error("empty license key passed to validate."),r;let s=ru(),n=!1;try{n=xs.statSync(s)}catch(i){Me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{Me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(ZB),_=a[1];_=Buffer.concat([Buffer.from(_)],zB);let c=Buffer.concat([Buffer.from(i)],eH),u=oR.createDecipheriv(XB,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=nH(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Vs),Me.error(Vs),new Error(Vs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Vs),Me.error(Vs),new Error(Vs)}else r.exp_date=l;r.exp_date<KB().valueOf()&&(r.valid_date=!1),iR.validate(a[1],`${JB}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Me.error("Invalid licence"),r}o(_R,"validateLicense");function nH(e,t){try{let r=oR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Me.warn("Check old license failed")}}o(nH,"checkOldLicense");function cR(){let e=new jB;e.api_call=0;let t=[];try{t=xs.readFileSync(tH(),"utf-8").split(Xe.NEW_LINE)}catch(r){r.code==="ENOENT"?Me.info("no license file found"):Me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(QB.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=_R(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Me.error("There was an error parsing the license string."),Me.error(n),e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Xe.LICENSE_VALUES.API_CALL_DEFAULT),zc=e,e}o(cR,"licenseSearch");async function iH(){return zc||await cR(),zc}o(iH,"getLicense")});var $s=d((pk,OR)=>{"use strict";var SR="username is required",TR="nothing to update, must supply active, role or password to update",fR="password cannot be an empty string",hR="If role is specified, it cannot be empty.",RR="active must be true or false";OR.exports={addUser:dH,alterUser:SH,dropUser:fH,userInfo:hH,listUsers:Ea,listUsersExternal:RH,setUsersToGlobal:jn,findAndValidateUser:gH,getClusterUser:pH,USERNAME_REQUIRED:SR,ALTERUSER_NOTHING_TO_UPDATE:TR,EMPTY_PASSWORD:fR,EMPTY_ROLE:hR,ACTIVE_BOOLEAN:RR};var AR=Jr(),oH=Zc(),nu=ca(),mR=rR(),gR=hr(),iu=On(),Te=O(),pR=require("validate.js"),U=I(),{promisify:ou}=require("util"),au=Gn(),ns=h(),lR=gt(),aH=We(),_u=Y(),_H=Qn(),cH=Yt(),{handleHDBError:Ut,hdb_errors:uH}=J(),{HTTP_STATUS_CODES:Pt,AUTHENTICATION_ERROR_MSGS:su,HDB_ERROR_MSGS:ks}=uH,{UserEventMsg:cu}=ps(),ER=require("lodash"),NR={username:!0,active:!0,role:!0,password:!0},dR=new Map,la=ou(gR.searchByValue),lH=ou(gR.searchByHash),EH=ou(oH.delete);async function dH(e){let t=pR.cleanAttributes(e,NR),r=mR.addUserValidation(t);if(r)throw Ut(new Error,r.message,Pt.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 la(s)}catch(u){throw U.error("There was an error searching for a role in add user"),U.error(u),u}if(!n||n.length<1)throw Ut(new Error,ks.ROLE_NAME_NOT_FOUND(t.role),Pt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ut(new Error,ks.DUP_ROLES_FOUND(t.role),Pt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await AR.insert(i)}catch(u){throw U.error("There was an error searching for a user."),U.error(u),u}U.debug(a);try{await jn()}catch(u){throw U.error("Got an error setting users to global"),U.error(u),u}if(a.skipped_hashes.length===1)throw Ut(new Error,ks.USER_ALREADY_EXISTS(t.username),Pt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ADD_USER,c,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${_.username} successfully added`}o(dH,"addUser");async function SH(e){let t=pR.cleanAttributes(e,NR);if(Te.isEmptyOrZeroLength(t.username))throw new Error(SR);if(Te.isEmptyOrZeroLength(t.password)&&Te.isEmptyOrZeroLength(t.role)&&Te.isEmptyOrZeroLength(t.active))throw new Error(TR);if(!Te.isEmpty(t.password)&&Te.isEmptyOrZeroLength(t.password.trim()))throw new Error(fR);if(!Te.isEmpty(t.active)&&!Te.isBoolean(t.active))throw new Error(RR);let r=TH(t.username);if(!Te.isEmpty(t.password)&&!Te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=au.encrypt(t.password)),t.password=nu.hash(t.password)),t.role==="")throw new Error(hR);if(t.role){let a={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await la(a)}catch(c){throw U.error("Got an error searching for a role."),U.error(c),c}if(!_||_.length===0){let c=ks.ALTER_USER_ROLE_NOT_FOUND(t.role);throw U.error(c),Ut(new Error,c,Pt.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=ks.ALTER_USER_DUP_ROLES(t.role);throw U.error(c),Ut(new Error,c,Pt.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 AR.update(s)}catch(a){throw U.error("Error during update."),U.error(a),a}try{await jn()}catch(a){throw U.error("Got an error setting users to global"),U.error(a),a}let i={user:null};return i.user=t,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.ALTER_USER,i,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),n}o(SH,"alterUser");function TH(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(TH,"isClusterUser");async function fH(e){try{let t=mR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Te.isEmpty(global.hdb_users.get(e.username)))throw Ut(new Error,ks.USER_NOT_EXIST(e.username),Pt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await EH(r)}catch(i){throw U.error("Got an error deleting a user."),U.error(i),i}U.debug(s);try{await jn()}catch(i){throw U.error("Got an error setting users to global."),U.error(i),i}let n={user:null};return n.user=e,Te.sendTransactionToSocketCluster(ns.INTERNAL_SC_CHANNELS.DROP_USER,n,_u.get(ns.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),iu.signalUserChange(new cu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(fH,"dropUser");async function hH(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 lH(r)}catch(n){throw U.error("Got an error searching for a role."),U.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw U.error(r),r}return t}o(hH,"userInfo");async function RH(){let e;try{e=await Ea()}catch(t){throw U.error("Got an error listing users."),U.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(RH,"listUsersExternal");async function Ea(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=ER.cloneDeep(await la(e))}catch(r){throw U.error("Got an error searching for roles."),U.error(r),r}if(!Te.isEmptyOrZeroLength(t)){let r={};for(let a in t)r[t[a].id]=t[a];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=ER.cloneDeep(await la(s))}catch(a){throw U.error("Got an error searching for users."),U.error(a),a}let i=new Map;for(let a in n){let _=n[a];_.role=r[n[a].role],AH(_.role),i.set(_.username,_)}return(await _H.getLicense()).enterprise?i:mH(i)}}catch(e){throw U.error("got an error listing users"),U.error(e),Te.errorizeMessage(e)}return null}o(Ea,"listUsers");function AH(e){try{if(!e){U.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(cH)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){U.error("Got an error trying to set system permissions."),U.error(t)}}o(AH,"appendSystemTablesToRole");function mH(e){try{if(U.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(U.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return U.error("error filtering users."),U.error(t),new Map}}o(mH,"nonEnterpriseFilter");async function jn(){try{let e=await Ea();global.hdb_users=e}catch(e){throw U.error(e),e}}o(jn,"setUsersToGlobal");async function gH(e,t,r=!0){global.hdb_users||await jn();let s=global.hdb_users.get(e);if(!s)throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ut(new Error,su.USER_INACTIVE,Pt.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(dR.get(t)===s.password)return n;if(nu.validate(s.password,t))dR.set(t,s.password);else throw Ut(new Error,su.GENERIC_AUTH_FAIL,Pt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(gH,"findAndValidateUser");async function pH(){let e=await Ea(),t=aH.getConfigFromFile(ns.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Te.isEmpty(r))return r.decrypt_hash=au.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+lR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+lR.SERVER_SUFFIX.ADMIN,r}o(pH,"getClusterUser")});var wR=d((Nk,yR)=>{var br=require("validate.js"),CR=tt(),Ys=h(),{handleHDBError:NH,hdb_errors:OH}=J(),{HDB_ERROR_MSGS:se,HTTP_STATUS_CODES:IH}=OH,uu=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),CH={STRUCTURE_USER:"structure_user"},IR=Object.values(Ys.ROLE_TYPES_ENUM),bH="attribute_permissions",LH="attribute_name",{PERMS_CRUD_ENUM:Ks}=Ys,yH=[bH,...Object.values(Ks)],bR=[Ks.READ,Ks.INSERT,Ks.UPDATE],wH=[LH,...bR];function DH(e){let t=uu();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,LR(e,t)}o(DH,"addRoleValidation");function MH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,LR(e,t)}o(MH,"alterRoleValidation");function UH(e){let t=uu();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,CR.validateObject(e,t)}o(UH,"dropRoleValidation");var PH=["operation","role","id","permission","hdb_user","hdb_auth_header"];function LR(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)PH.includes(s[a])||n.push(s[a]);n.length>0&&ae(se.INVALID_ROLE_JSON_KEYS(n),r);let i=CR.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ae(a,r)}),e.permission){let a=BH(e);a&&ae(a,r),IR.forEach(_=>{e.permission[_]&&!br.isBoolean(e.permission[_])&&ae(se.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(IR.indexOf(a)<0){if(a===CH.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ae(se.SCHEMA_NOT_FOUND(E),r)}continue}ae(se.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ae(se.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ae(se.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{yH.includes(l)||ae(se.INVALID_PERM_KEY(l),r,a,c)}),Object.values(Ks).forEach(l=>{br.isDefined(u[l])?br.isBoolean(u[l])||ae(se.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ae(se.TABLE_PERM_MISSING(l),r,a,c)}),br.isDefined(u.attribute_permissions)){if(!br.isArray(u.attribute_permissions)){ae(se.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ae(se.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:T})=>T),E={read:!1,insert:!1,update:!1};for(let T in u.attribute_permissions){let S=u.attribute_permissions[T];if(Object.keys(S).forEach(R=>{!wH.includes(R)&&R!==Ks.DELETE&&ae(se.INVALID_ATTR_PERM_KEY(R),r,a,c)}),!br.isDefined(S.attribute_name)){ae(se.ATTR_PERM_MISSING_NAME,r,a,c);continue}let A=S.attribute_name;if(!l.includes(A)){ae(se.INVALID_ATTRIBUTE_IN_PERMS(A),r,a,c);continue}bR.forEach(R=>{br.isDefined(S[R])?br.isBoolean(S[R])||ae(se.ATTR_PERM_NOT_BOOLEAN(R,A),r,a,c):ae(se.ATTR_PERM_MISSING(R,A),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let T=`${a}.${c}`;ae(se.MISMATCHED_TABLE_ATTR_PERMS(T),r,a,c)}}}}return HH(r)}o(LR,"customValidate");yR.exports={addRoleValidation:DH,alterRoleValidation:MH,dropRoleValidation:UH};function BH(e){let{operation:t,permission:r}=e;if(t===Ys.OPERATIONS_ENUM.ADD_ROLE||t===Ys.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return se.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?Ys.ROLE_TYPES_ENUM.SUPER_USER:Ys.ROLE_TYPES_ENUM.CLUSTER_USER;return se.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(BH,"validateNoSUPerms");function HH(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:se.ROLE_PERMS_ERROR,...e};return NH(new Error,s,IH.BAD_REQUEST)}else return null}o(HH,"generateRolePermResponse");function ae(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ae,"addPermError")});var vR=d((Ok,HR)=>{"use strict";var DR=Jr(),MR=hr(),vH=Zc(),du=wR(),Su=On(),GH=require("uuid").v4,Tu=require("util"),qH=Qn(),Xt=h(),UR=O(),fu=Tu.promisify(MR.searchByValue),FH=Tu.promisify(MR.searchByHash),VH=Tu.promisify(vH.delete),xH=At(),kH=Ls(),{hdb_errors:$H,handleHDBError:Jn}=J(),{HDB_ERROR_MSGS:PR,HTTP_STATUS_CODES:lu}=$H,{UserEventMsg:hu}=ps();HR.exports={addRole:YH,alterRole:WH,dropRole:QH,listRoles:BR};function Eu(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(Eu,"scrubRoleDetails");async function YH(e){let t=du.addRoleValidation(e);if(t)throw t;if(!(await qH.getLicense()).enterprise){let a=await BR();if(KH(e,a))throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Xt.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${Xt.BASIC_LICENSE_MAX_NON_CU_ROLES+Xt.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Xt.SUPPORT_HELP_MSG}`)}e=Eu(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await fu(s)}catch(a){throw Jn(a)}if(n&&n.length>0)throw Jn(new Error,PR.ROLE_ALREADY_EXISTS(e.role),lu.CONFLICT,void 0,void 0,!0);e.id||(e.id=GH());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await DR.insert(i),Su.signalUserChange(new hu(process.pid)),e=Eu(e),e}o(YH,"addRole");function KH(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!UR.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(KH,"checkClusterUserRole");async function WH(e){let t=du.alterRoleValidation(e);if(t)throw t;e=Eu(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await DR.update(r)}catch(s){throw Jn(s)}return Su.signalUserChange(new hu(process.pid)),e}o(WH,"alterRole");async function QH(e){let t=du.dropRoleValidation(e);if(t)throw Jn(new Error,t,lu.BAD_REQUEST,void 0,void 0,!0);let r=new kH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await FH(r);if(s.length===0)throw Jn(new Error,PR.ROLE_NOT_FOUND,lu.NOT_FOUND,void 0,void 0,!0);let n=new xH(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await fu(n),a=!1;if(UR.isEmptyOrZeroLength(i)===!1){for(let c=0;c<i.length;c++)if(i[c].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let _={table:"hdb_role",schema:"system",hash_values:[e.id]};return await VH(_),Su.signalUserChange(new hu(process.pid)),`${s[0].role} successfully deleted`}o(QH,"dropRole");async function BR(){return fu({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(BR,"listRoles")});var Au=d((Ik,KR)=>{"use strict";var Zn=require("os"),xR=require("inquirer"),Pr=require("fs-extra"),jH=require("properties-reader"),is=require("chalk"),Dr=require("path"),JH=require("human-readable-ids").hri,ZH=require("ora"),ue=I(),Mr=Y(),Xn=O(),Ru=vr(),kR=na(),$R=Vr(),y=h(),XH=Hh(),zH=Gh(),ev=We(),tv=$s(),rv=vR(),sv=m_(),nv=Gs(),iv=require("util").promisify,ov=iv(nv.setSchemaDataToGlobal),av=Fc(),Ws=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Ue=o(e=>is.magenta.bold(e),"HDB_PROMPT_MSG"),_v="https://harperdb.io/legal/end-user-license-agreement",Ur=Zn.EOL,Lr="",cv="yes",GR="Starting HarperDB install...",qR="HarperDB installation was successful.",FR="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",uv="An out of date version of HarperDB is already installed.",VR="It appears HarperDB is already installed. Exiting install...",lv="Aborting install",Ev=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),dv=new RegExp(/^[^\s.,*>]+$/),Sv=Zn.homedir(),Tv=Dr.join(Sv,y.HDB_ROOT_DIR_NAME),fv=9925,hv="HDB_ADMIN",Rv="CLUSTER_USER",Fe={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},wr;KR.exports=Av;async function Av(){if(console.log(Ue(Ur+GR+Ur)),ue.notify(GR),Xn.isEmptyOrZeroLength(Zn.userInfo().uid))throw`Installing user: ${Zn.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=gv(),t=XH(e);if(t)throw t.message;await pv(),await Nv(e);let r=await mv(e),s=ZH({prefixText:Ue("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),wr=r[y.INSTALL_PROMPTS.ROOTPATH],Xn.isEmpty(wr))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Mr.setHdbBasePath(wr),process.env.PM2_LOG_FILE_PATH=Dr.join(wr,"log","pm2.log"),await zH(wr),await Ov(),await Iv(r),await bv(r),await Lv(r),await av.generateKeys(),await yv(),sv(),s.stop(),console.log(Ue(Ur+qR+Ur)),ue.notify(qR)}o(Av,"install");async function mv(e){ue.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.ROOTPATH],Fe.DESTINATION),name:y.INSTALL_PROMPTS.ROOTPATH,prefix:Lr,default:Tv,validate:async n=>Bt(n)?Bt(n):await Pr.pathExists(Dr.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Ue(Fe.DESTINATION)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Fe.HDB_PORT),name:y.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Lr,default:fv,validate:n=>Ev.test(n)?!0:"Invalid port.",message:Ue(Fe.HDB_PORT)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Fe.HDB_USERNAME),name:y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Lr,default:hv,validate:n=>Bt(n)?Bt(n):(t=n,!0),message:Ue(Fe.HDB_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Fe.HDB_PASS),name:y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Lr,validate:n=>Bt(n)?Bt(n):!0,message:Ue(Fe.HDB_PASS)}];if(Xn.autoCastBoolean(e[y.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_NODENAME],Fe.NODE_NAME),name:y.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Lr,default:JH.random(),validate:i=>dv.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Ue(Fe.NODE_NAME)},{type:"input",transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_USER],Fe.CLUSTER_USERNAME),name:y.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Lr,default:Rv,validate:i=>Bt(i)?Bt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Ue(Fe.CLUSTER_USERNAME)},{type:"password",when:yr(e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Fe.CLUSTER_PASS),name:y.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Lr,validate:i=>Bt(i)?Bt(i):!0,message:Ue(Fe.CLUSTER_PASS)}];r.push(...n)}let s=await xR.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(mv,"installPrompts");function yr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Ue(t)} ${is.gray("[hidden]")}`),ue.trace(`${Ue(t)} [hidden]`)):(console.log(`${Ue(t)} ${e}`),ue.trace(`${Ue(t)} ${e}`)),!1):!0}o(yr,"displayCmdEnvVar");function Bt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Bt,"checkForEmptyValue");function gv(){let e=Object.keys(y.INSTALL_PROMPTS),t=Ru(e),r=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=y.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(gv,"checkForPromptOverride");async function pv(){ue.trace("Checking for existing install.");let e=Xn.getPropsFilePath(),t=await Pr.pathExists(e),r;if(t){ue.trace(`Install found an existing boot prop file at:${e}`);let n=jH(e).get(y.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Pr.pathExists(n)}if(r){if(ue.trace(`Install found existing HDB config at:${e}`),await kR.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${$R.version()}. Exiting install...`;console.log(Ur+is.magenta.bold(uv)),console.log(is.magenta.bold(n)),ue.error(n)}else console.log(Ur+is.magenta.bold(VR)),ue.error(VR);process.exit(0)}}o(pv,"checkForExistingInstall");async function Nv(e){ue.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${_v}${Ur}and can be viewed by typing or copying and pasting the URL into your web browser.${Ur}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Lr,transformer:Ws,when:yr(e[y.INSTALL_PROMPTS.TC_AGREEMENT],t),name:y.INSTALL_PROMPTS.TC_AGREEMENT,message:Ue(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:is.yellow("Please enter 'yes' or 'no'")},s=await xR.prompt([r]);s[y.INSTALL_PROMPTS.TC_AGREEMENT]&&s[y.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==cv&&(console.log(is.yellow(FR)),ue.error(FR),process.exit(0))}o(Nv,"termsAgreement");async function Ov(){let e=Dr.join(wr,y.HDB_CONFIG_FILE),t;try{t=Zn.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
79
|
+
install_user = ${t}`,s=Xn.getHomeDir(),n=Dr.join(s,y.HDB_HOME_DIR_NAME),i=Dr.join(n,y.LICENSE_KEY_DIR_NAME);try{Pr.mkdirpSync(n,{mode:y.HDB_FILE_PERMISSIONS}),Pr.mkdirpSync(i,{mode:y.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${y.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=Dr.join(n,y.BOOT_PROPS_FILE_NAME);try{await Pr.writeFile(a,r)}catch(_){throw ue.error(`There was an error creating the boot file at path: ${a}`),_}Mr.setProperty(y.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Mr.setProperty(y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Mr.setProperty(Mr.BOOT_PROPS_FILE_PATH,a)}o(Ov,"createBootPropertiesFile");async function Iv(e){ue.trace("Creating HarperDB config file");let t=Ru(Object.keys(y.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{ev.createConfigFile(t),Mr.initSync()}catch(r){Cv(r)}}o(Iv,"createConfigFile");function Cv(e){ue.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lv);let t=Dr.resolve(Mr.get(Mr.BOOT_PROPS_FILE_PATH),"../");t&&Pr.removeSync(t),wr&&Pr.removeSync(wr),process.exit(1)}o(Cv,"rollbackInstall");async function YR(e,t){ue.trace("Creating admin user"),await ov();let r;try{r=await rv.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await tv.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(YR,"createAdminUser");async function bv(e){ue.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await YR(t,r),delete e[y.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[y.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(bv,"createSuperUser");async function Lv(e){ue.trace("Creating Cluster user.");let t;e[y.INSTALL_PROMPTS.CLUSTERING_USER]&&e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[y.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await YR({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[y.INSTALL_PROMPTS.CLUSTERING_USER],delete e[y.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Lv,"createClusterUser");async function yv(){let e=$R.version();if(e)await kR.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(yv,"insertHdbVersionInfo")});var mu=d((Ck,QR)=>{var wv=require("os"),WR=Y();QR.exports={checkPermission:Dv};function Dv(){if(wv.userInfo().username!==WR.get("install_user"))throw new Error(`Error: Must execute as ${WR.get("install_user")}`)}o(Dv,"checkPermission")});var JR=d((bk,jR)=>{"use strict";var Mv=gt(),da=class{constructor(t,r,s,n,i,a,_,c,u,l,E,T,S){this.port=t,a===null&&(a=void 0),this.server_name=r+Mv.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:a,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.accounts={SYS:{users:T},HDB:{users:S}},this.system_account="SYS"}};o(da,"HubConfigObject");jR.exports=da});var zR=d((Lk,XR)=>{"use strict";var ZR=gt(),Sa=class{constructor(t,r,s,n,i,a,_,c,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+ZR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+ZR.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};o(Sa,"LeafConfigObject");XR.exports=Sa});var tA=d((yk,eA)=>{"use strict";var Ta=class{constructor(t,r){this.user=t,this.password=r}};o(Ta,"HdbUserObject");eA.exports=Ta});var sA=d((wk,rA)=>{"use strict";var Uv=gt(),fa=class{constructor(t,r){this.user=t+Uv.SERVER_SUFFIX.ADMIN,this.password=r}};o(fa,"SysUserObject");rA.exports=fa});var iA=d((Dk,nA)=>{"use strict";var Pv=Ps();nA.exports={writeTransaction:Bv};function Bv(e,t,r){return Pv.writeTransaction(e,t,r)}o(Bv,"writeTransaction")});var ma=d((xk,IA)=>{"use strict";var zt=Y();zt.initSync();var Hv=require("fs-extra"),vv=require("semver"),si=require("path"),{monotonicFactory:Gv}=require("ulidx"),qv=Gv(),aA=require("util"),_A=require("child_process"),Fv=aA.promisify(_A.exec),Vv=_A.spawn,j=gt(),te=h(),Cu=O(),er=I(),ha=Gn(),xv=iA(),zn=We(),{encode:Nu,decode:cA}=require("msgpackr"),{isEmpty:os}=Cu,uA=$s(),Mk=Ls(),kv=hr(),Uk=aA.promisify(kv.searchByHash),{connect:$v,StorageType:lA,RetentionPolicy:EA,AckPolicy:dA,DeliverPolicy:Ou,NatsConnection:Pk,JetStreamManager:Bk,JetStreamClient:Hk,StringCodec:vk,JSONCodec:Yv,createInbox:bu,StreamSource:Gk,headers:Kv,toJsMsg:Wv,nuid:qk,JetStreamOptions:Fk,ErrorCode:oA,nanos:Vk}=require("nats"),{PACKAGE_ROOT:Qv}=h(),jv=an(),SA=Yv(),Jv="clustering",Zv=jv.engines[j.NATS_SERVER_NAME],Xv=si.join(Qv,"dependencies"),Iu=si.join(Xv,`${process.platform}-${process.arch}`,j.NATS_BINARY_NAME),gu,pu,ei,ti,ri,Nt;IA.exports={runCommand:TA,checkNATSServerInstalled:zv,createConnection:Lu,getConnection:Ra,getJetStreamManager:Qs,getJetStream:fA,getNATSReferences:ct,getServerList:tG,createLocalStream:yu,listStreams:hA,deleteLocalStream:rG,getServerConfig:ni,listRemoteStreams:sG,viewStream:nG,publishToStream:iG,createWorkQueueStream:oG,addSourceToWorkStream:RA,request:aG,removeSourceFromWorkStream:mA,reloadNATS:wu,reloadNATSHub:_G,reloadNATSLeaf:cG,extractServerName:AA,requestErrorHandler:uG,updateWorkStream:lG,createLocalTableStream:pA,createTableStreams:EG,purgeTableStream:NA,purgeSchemaTableStreams:dG,getStreamInfo:SG,updateNodeNameLocalStreams:TG,closeConnection:eG};async function TA(e,t=void 0){let{stdout:r,stderr:s}=await Fv(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
80
80
|
`,""));return r.replace(`
|
|
81
|
-
`,"")}o(TA,"runCommand");async function zv(){try{await Hv.access(Iu)}catch{return!1}let e=await TA(`${Iu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return vv.eq(t,Zv)}o(zv,"checkNATSServerInstalled");async function Lu(e,t,r,s=!0,n="127.0.0.1"){return $v({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Lu,"createConnection");async function eG(){Nt&&(await Nt.close(),Nt=void 0)}o(eG,"closeConnection");async function Ra(){if(!Nt){let e=await uA.getClusterUser();if(os(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Nt=await Lu(t,e.username,e.decrypt_hash)}return Nt}o(Ra,"getConnection");async function Qs(){if(ti)return ti;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=await Nt.jetstreamManager({domain:e}),ti}o(Qs,"getJetStreamManager");async function fA(){if(ri)return ri;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ri=Nt.jetstream({domain:e}),ri}o(fA,"getJetStream");async function ct(){let e=Nt||await Ra(),t=ti||await Qs(),r=ri||await fA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function tG(){let e=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await uA.getClusterUser(),s=await Lu(e,t,r),n=bu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(SA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Cu.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(tG,"getServerList");async function yu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:lA.File,retention:EA.Limits,subjects:t})}o(yu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function rG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(rG,"deleteLocalStream");async function sG(e){let{connection:t}=await ct(),r=[],s=bu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(SA.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(sG,"listRemoteStreams");async function nG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=qv(),a=[],_={ack_policy:dA.None,durable_name:i,deliver_subject:i,deliver_policy:Ou.All};t&&(_.deliver_policy=Ou.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=Wv(l),T=cA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:T,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(nG,"viewStream");async function iG(e,t,r=[],s=[]){er.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Aa(),_=`${e}.${a}`,c=Kv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{er.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Nu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")er.trace(`publishToStream creating stream: ${t}`),await yu(t,[_]),await i.publish(_,Nu(r[u]),{headers:c});else throw E}}o(iG,"publishToStream");function ni(e){e=e.toLowerCase();let t=si.join(zt.get(te.CONFIG_PARAMS.ROOTPATH),Jv);if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return os(pu)&&(pu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:si.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),pu;if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return os(gu)&&(gu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:si.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),gu;er.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(ni,"getServerConfig");async function oG(e){let{jsm:t}=await ct(),r=await Aa();try{await t.streams.add({name:e.stream_name,storage:lA.File,retention:EA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:dA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ou.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(oG,"createWorkQueueStream");async function RA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=AA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,T,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],T=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;await gA(_,c,E,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(RA,"addSourceToWorkStream");function AA(e){return e.split(".")[1]}o(AA,"extractServerName");async function mA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=await a.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await a.streams.update(t,_.config),await gA(s,n,u,t)}o(mA,"removeSourceFromWorkStream");async function gA(e,t,r,s){let n=await Qs(),i;try{i=OA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{er.error("Error purging source subject",i,"from work stream",s)}}o(gA,"purgeSourceFromWorkStream");async function aG(e,t,r=2e3,s=bu()){if(!Cu.isObject(t))throw new Error("data param must be an object");let n=Nu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return cA(_.data)}o(aG,"request");function wu(e){return new Promise(async(t,r)=>{let s=Vv(Iu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(wu,"reloadNATS");async function _G(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wu(e)}o(_G,"reloadNATSHub");async function cG(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wu(e)}o(cG,"reloadNATSLeaf");function uG(e,t,r){let s;switch(e.code){case oA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case oA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(uG,"requestErrorHandler");async function lG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await xv.writeTransaction(te.SYSTEM_SCHEMA_NAME,te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await mA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(lG,"updateWorkStream");async function pA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Aa(),n=OA(e,t,s);await yu(r,[n])}o(pA,"createLocalTableStream");async function EG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await pA(s,n)}}o(EG,"createTableStreams");async function NA(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")er.warn(r);else throw r}}o(NA,"purgeTableStream");async function dG(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await NA(e,t[r])}o(dG,"purgeSchemaTableStreams");async function SG(e){return(await Qs()).streams.info(e)}o(SG,"getStreamInfo");function OA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(OA,"createSubjectName");async function Aa(){if(ei)return ei;if(ei=(await Qs())?.nc?.info?.server_name,ei===void 0)throw new Error("Unable to get jetstream manager server name");return ei}o(Aa,"getJsmServerName");async function TG(){let e=await Qs(),t=await Aa(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");er.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(TG,"updateNodeNameLocalStreams")});var La=d((Yk,LA)=>{"use strict";var js=require("path"),Oa=require("fs-extra"),fG=JR(),hG=zR(),RG=tA(),AG=sA(),Du=$s(),Zs=I(),ut=We(),Na=h(),ga=gt(),{CONFIG_PARAMS:fe}=Na,Ia=O(),Ca=Y(),CA=Gn(),Mu=ma(),Js="clustering",mG=1e4,bA=5;LA.exports={generateNatsConfig:gG,removeNatsConfig:pG};async function gG(e=!1,t=void 0){Ca.initSync();let r=Ca.get(fe.ROOTPATH),s=js.join(r,Js,ga.PID_FILES.HUB),n=js.join(r,Js,ga.PID_FILES.LEAF),i=js.join(r,Js,"leaf"),a=js.join(r,Js,ga.NATS_CONFIG_FILES.HUB_SERVER),_=js.join(r,Js,ga.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),T=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Mu.checkNATSServerInstalled()||ba("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await Du.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await Du.getClusterUser();(Zs.isEmpty(L)||L.active!==!0)&&ba(`invalid cluster user '${R}'`),e||(await pa(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await pa(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[ir,or]of A.entries())or.role.role===Na.ROLE_TYPES_ENUM.CLUSTER_USER&&or.active&&(de.push(new AG(or.username,CA.decrypt(or.hash))),p.push(new RG(or.username,CA.decrypt(or.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!Zs.isEmptyOrZeroLength(Ie))for(let ir of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${ir.host}:${ir.port}`);let Ce=new fG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=Zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Oa.writeJson(a,Ce),Ia.trace(`Hub server config written to ${a}`));let li=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,nn=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,Ei=new hG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[li],[nn],de,p,c,u,l,E);(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Oa.writeJson(_,Ei),Ia.trace(`Leaf server config written to ${_}`))}o(gG,"generateNatsConfig");async function pa(e){let t=Ca.get(e);Zs.isEmpty(t)&&ba(`port undefined for '${e}'`),await Zs.isPortTaken(t)&&ba(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`)}o(pa,"isPortAvailable");function ba(e){let t=`Error generating clustering config: ${e}`;Ia.error(t),console.error(t),process.exit(1)}o(ba,"generateNatsConfigError");async function pG(e){let{port:t,config_file:r}=Mu.getServerConfig(e),{username:s,decrypt_hash:n}=await Du.getClusterUser(),i=0,a=500;for(;i<bA;){try{let u=await Mu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ia.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=bA)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Zs.async_set_timeout(a*i)}let _="0".repeat(mG),c=js.join(Ca.get(fe.ROOTPATH),Js,r);await Oa.writeFile(c,_),await Oa.remove(c)}o(pG,"removeNatsConfig")});var Pu=d((Kk,BA)=>{"use strict";var z=Y(),yA=Qn(),g=h(),Uu=gt(),le=require("path"),{PACKAGE_ROOT:ya}=h(),ne="/dev/null",Xs=le.join(ya,"launchServiceScripts"),wA=le.join(ya,"utility/scripts"),NG=le.join(wA,g.HDB_RESTART_SCRIPT),DA=le.resolve(ya,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function MA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(MA,"generateIPCServerConfig");function UA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(UA,"generateHDBServerConfig");function PA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(PA,"generateCFServerConfig");function OG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(OG,"generateNatsHubServerConfig");function IG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(IG,"generateNatsLeafServerConfig");function CG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(CG,"generateNatsIngestServiceConfig");function bG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(bG,"generateNatsReplyServiceConfig");function LG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(LG,"generateClusteringUpgradeV4ServiceConfig");function yG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:wA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:NG}}o(yG,"generateRestart");function wG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ya,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Xs,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(wG,"generateJobConfig");function DG(){return{apps:[MA(),UA(),PA()]}}o(DG,"generateAllServiceConfigs");BA.exports={generateAllServiceConfigs:DG,generateIPCServerConfig:MA,generateHDBServerConfig:UA,generateCFServerConfig:PA,generateRestart:yG,generateNatsHubServerConfig:OG,generateNatsLeafServerConfig:IG,generateNatsIngestServiceConfig:CG,generateNatsReplyServiceConfig:bG,generateClusteringUpgradeV4ServiceConfig:LG,generateJobConfig:wG}});var vA=d((Wk,HA)=>{var MG=tt(),UG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HA.exports=function(e){return MG.validateObject(e,UG)}});var qA=d((Qk,GA)=>{"use strict";var PG={OPERATION:"operation",REFRESH:"refresh"},wa=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(wa,"JWTTokens");var Da=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(Da,"JWTRSAKeys");GA.exports={JWTTokens:wa,TOKEN_TYPE_ENUM:PG,JWTRSAKeys:Da}});var $A=d((jk,kA)=>{"use strict";var oi=require("jsonwebtoken"),Bu=require("fs-extra"),Hu=I(),lt=h(),{handleHDBError:Ve,hdb_errors:BG}=J(),{HTTP_STATUS_CODES:xe,AUTHENTICATION_ERROR_MSGS:ke}=BG,ii=O(),FA=ca(),qu=$s(),HG=Jr().update,vG=Dc(),GG=On(),{UserEventMsg:qG}=ps(),Br=Y();Br.initSync();var vu=require("path"),{JWTTokens:FG,JWTRSAKeys:VG,TOKEN_TYPE_ENUM:Ma}=qA(),xG=Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kG=Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ua="RS256",Gu;kA.exports={createTokens:$G,validateOperationToken:KG,refreshOperationToken:YG,validateRefreshToken:xA};async function $G(e){if(Hu.isEmpty(e)||typeof e!="object")throw Ve(new Error,ke.INVALID_AUTH_OBJECT,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.username))throw Ve(new Error,ke.USERNAME_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.password))throw Ve(new Error,ke.PASSWORD_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qu.findAndValidateUser(e.username,e.password),!t)throw Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ii.error(T),Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Pa(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},a=await VA(i,r.private_key,r.passphrase),_=await oi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kG,algorithm:Ua,subject:Ma.REFRESH}),c=FA.hash(_),u=new vG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await HG(u)}catch(T){ii.error(T),E=T}if(E!==void 0||l.skipped_hashes.length>0)throw Ve(new Error,ke.REFRESH_TOKEN_SAVE_FAILED,xe.INTERNAL_SERVER_ERROR);return GG.signalUserChange(new qG(process.pid)),new FG(a,_)}o($G,"createTokens");async function VA(e,t,r){return await oi.sign(e,{key:t,passphrase:r},{expiresIn:xG,algorithm:Ua,subject:Ma.OPERATION})}o(VA,"signOperationToken");async function Pa(){if(Gu===void 0)try{let e=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bu.readFile(e)).toString(),n=(await Bu.readFile(t)).toString(),i=(await Bu.readFile(r)).toString();Gu=new VG(i,n,s)}catch(e){throw ii.error(e),Ve(new Error,ke.NO_ENCRYPTION_KEYS,xe.INTERNAL_SERVER_ERROR)}return Gu}o(Pa,"getJWTRSAKeys");async function YG(e){if(!e)throw Ve(new Error,ke.INVALID_BODY,xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ve(new Error,ke.REFRESH_TOKEN_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);await xA(e.refresh_token);let t=await Pa(),r=await oi.decode(e.refresh_token);return{operation_token:await VA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(YG,"refreshOperationToken");async function KG(e){try{let t=await Pa(),r=await oi.verify(e,t.public_key,{algorithms:Ua,subject:Ma.OPERATION});return await qu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ii.warn(t),t.name&&t.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}}o(KG,"validateOperationToken");async function xA(e){let t;try{let r=await Pa(),s=await oi.verify(e,r.public_key,{algorithms:Ua,subject:Ma.REFRESH});t=await qu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ii.warn(r),r.name&&r.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}if(!FA.validate(t.refresh_token,e))throw Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED);return t}o(xA,"validateRefreshToken")});var QA=d((Zk,WA)=>{"use strict";var WG=vA(),zs=require("passport"),QG=require("passport-local").Strategy,jG=require("passport-http").BasicStrategy,JG=require("util"),ZG=$s(),KA=JG.callbackify(ZG.findAndValidateUser),Jk=et(),XG=h(),YA=$A();zs.use(new QG(function(e,t,r){KA(e,t,r)}));zs.use(new jG(function(e,t,r){KA(e,t,r)}));zs.serializeUser(function(e,t){t(null,e)});zs.deserializeUser(function(e,t){t(null,e)});function zG(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":zs.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===XG.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?YA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):YA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:zs.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(zG,"authorize");function eq(e,t){let r=WG(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let _ in a)e.attributes.indexOf(a[_].attribute_name)>-1&&!a[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[_].attribute_name} `))}return t(null,s)}o(eq,"checkPermissions");WA.exports={authorize:zG,checkPermissions:eq}});var JA=d((Xk,jA)=>{"use strict";var Ba=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ba,"Node");var Ha=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Ha,"NodeSubscription");jA.exports={Node:Ba,NodeSubscription:Ha}});var XA=d((zk,ZA)=>{"use strict";var tq=h().OPERATIONS_ENUM,va=class{constructor(t,r,s,n=void 0){this.operation=tq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(va,"UpsertObject");ZA.exports=va});var em=d((e$,zA)=>{"use strict";var Ga=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ga,"RemotePayloadObject");var qa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(qa,"RemotePayloadSubscription");zA.exports={RemotePayloadObject:Ga,RemotePayloadSubscription:qa}});var rm=d((t$,tm)=>{"use strict";var Fa=class{constructor(t,r,s=0,n=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=a}};o(Fa,"TableSizeObject");tm.exports=Fa});var om=d((r$,im)=>{"use strict";var rq=rm(),sm=require("path"),nm=Z(),sq=he(),en=$(),nq=O();im.exports=iq;async function iq(e){let t=new rq;try{let r=sm.join(nm.getBaseSchemaPath(),e.schema.toString()),s=await en.openEnvironment(r,e.name),n=en.statDBI(s,e.hash_attribute),i=sm.join(nm.getTransactionAuditStorePath(),e.schema.toString()),a=await en.openEnvironment(i,e.name,!0),_=en.statDBI(a,sq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await en.environmentDataSize(r,e.name),u=await en.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){nq.warn(`unable to stat table dbi due to ${r}`)}return t}o(iq,"lmdbGetTableSize")});var _m=d((s$,am)=>{"use strict";var oq=h(),Va=class{constructor(t){this.operator=oq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(Va,"SystemInformationOperation");am.exports=Va});var um=d((n$,cm)=>{"use strict";var xa=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(xa,"SystemInformationObject");cm.exports=xa});var Em=d((o$,lm)=>{"use strict";var Oe=require("systeminformation"),tn=O(),aq=h(),_q=om(),cq=vo(),uq=Y();uq.initSync();var i$=_m(),lq=um(),ka;lm.exports={getHDBProcessInfo:ku,getNetworkInfo:Yu,getDiskInfo:$u,getMemoryInfo:xu,getCPUInfo:Vu,getTimeInfo:Fu,getSystemInformation:Ku,systemInformation:Eq,getTableSize:Wu};function Fu(){return Oe.time()}o(Fu,"getTimeInfo");async function Vu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:T,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:li,raw_load_nice:nn,raw_load_system:Ei,raw_load_user:ir,...or}=k;p.cpus.push(or)}),l.current_load=p,l}catch(e){return tn.error(`error in getCPUInfo: ${e}`),{}}}o(Vu,"getCPUInfo");async function xu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return tn.error(`error in getMemoryInfo: ${e}`),{}}}o(xu,"getMemoryInfo");async function ku(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(aq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return tn.error(`error in getHDBProcessInfo: ${t}`),e}}o(ku,"getHDBProcessInfo");async function $u(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return tn.error(`error in getDiskInfo: ${t}`),e}}o($u,"getDiskInfo");async function Yu(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...T}=s;e.interfaces.push(T)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return tn.error(`error in getNetworkInfo: ${t}`),e}}o(Yu,"getNetworkInfo");async function Ku(){if(ka!==void 0)return ka;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,ka=e,ka}catch(t){return tn.error(`error in getSystemInformation: ${t}`),e}}o(Ku,"getSystemInformation");async function Wu(){let e=[],t=await cq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await _q(s));return e}o(Wu,"getTableSize");async function Eq(e){let t=new lq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Ku(),t.time=Fu(),t.cpu=await Vu(),t.memory=await xu(),t.disk=await $u(),t.network=await Yu(),t.harperdb_processes=await ku(),t.table_size=await Wu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Ku();break;case"time":t.time=Fu();break;case"cpu":t.cpu=await Vu();break;case"memory":t.memory=await xu();break;case"disk":t.disk=await $u();break;case"network":t.network=await Yu();break;case"harperdb_processes":t.harperdb_processes=await ku();break;case"table_size":t.table_size=await Wu();break;default:break}return t}o(Eq,"systemInformation")});var hm=d((c$,fm)=>{"use strict";var dq=Jr(),Qu=I(),ju=require("util"),as=h(),dm=Y();dm.initSync();var Sq=QA(),Sm=hr(),{Node:a$,NodeSubscription:_$}=JA(),Tq=Ls(),fq=XA(),{RemotePayloadObject:hq,RemotePayloadSubscription:Rq}=em(),{handleHDBError:Aq,hdb_errors:mq}=J(),{HTTP_STATUS_CODES:gq,HDB_ERROR_MSGS:pq}=mq,Nq=At(),Oq=Em(),Iq=Vr(),Cq=ju.promisify(Sq.authorize),bq=ju.promisify(Sm.searchByHash),Lq=ju.promisify(Sm.searchByValue);fm.exports={authHeaderToUser:yq,isEmpty:wq,getNodeRecord:Dq,upsertNodeRecord:Mq,buildNodePayloads:Uq,checkClusteringEnabled:Pq,getAllNodeRecords:Bq,getSystemInfo:Hq,reverseSubscription:Tm};async function yq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cq(t,null),e}o(yq,"authHeaderToUser");function wq(e){return e==null}o(wq,"isEmpty");async function Dq(e){let t=new Tq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return bq(t)}o(Dq,"getNodeRecord");async function Mq(e){let t=new fq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return dq.upsert(t)}o(Mq,"upsertNodeRecord");function Tm(e){if(Qu.isEmpty(e.subscribe)||Qu.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}o(Tm,"reverseSubscription");function Uq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Qu.getTableHashAttribute(c,u),{subscribe:E,publish:T}=Tm(_),S=new Rq(c,u,l,T,E,_.start_time);n.push(S)}return new hq(r,t,n,s)}o(Uq,"buildNodePayloads");function Pq(){if(!dm.get(as.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aq(new Error,pq.CLUSTERING_NOT_ENABLED,gq.BAD_REQUEST,void 0,void 0,!0)}o(Pq,"checkClusteringEnabled");async function Bq(){let e=new Nq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Lq(e)}o(Bq,"getAllNodeRecords");async function Hq(){let e=await Oq.getSystemInformation();return{hdb_version:Iq.version(),node_version:e.node_version,platform:e.platform}}o(Hq,"getSystemInfo")});var rn=d((u$,Lm)=>{"use strict";var D=h(),$a=I(),ai=La(),Ya=ma(),vq=gt(),G=require("pm2"),Gq=require("fs-extra"),tr=Pu(),$e=Y(),rr=O(),qq=Pu(),Fq=hm(),Vq=require("util"),Am=Vq.promisify(require("child_process").exec),mm=require("path");Lm.exports={start:_s,stop:Wa,reload:pm,restart:Nm,list:Zu,describe:Qa,connect:vt,kill:Im,startAllServices:Zq,startService:Ka,getUniqueServicesList:Xu,restartAllServices:Xq,stopAllServices:zq,isServiceRegistered:Cm,reloadStopStart:Ju,restartHdb:Om,deleteProcess:jq,configureLogRotate:rF,startClustering:bm,isHdbRestartRunning:Jq,isClusteringRunning:nF,stopClustering:sF,reloadClustering:iF};var{PACKAGE_ROOT:xq}=h(),kq="2.7.0",gm=mm.join(xq,"node_modules/pm2/bin/pm2"),$q="Log rotate installed.",Yq="Error installing log rotate.",Kq="Log rotate updated.",Wq="Error updating log rotate.",Qq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function _s(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(_s,"start");function Wa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Wa,"stop");function pm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(pm,"reload");function Nm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Nm,"restart");function jq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(jq,"deleteProcess");async function Om(){await _s(qq.generateRestart())}o(Om,"restartHdb");async function Jq(){let e=await Zu();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Jq,"isHdbRestartRunning");function Zu(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Zu,"list");function Qa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Qa,"describe");function Im(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Im,"kill");async function Zq(){try{await bm(),await _s(tr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(Zq,"startAllServices");async function Ka(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=tr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=tr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=tr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=tr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=tr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=tr.generateNatsHubServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=tr.generateNatsLeafServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=tr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _s(t)}catch(t){throw G.disconnect(),t}}o(Ka,"startService");async function Xu(){try{let e=await Zu(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw G.disconnect(),e}}o(Xu,"getUniqueServicesList");async function Xq(e=[]){try{let t=!1,r=await Xu();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Ju(a):await Nm(a))}t&&await Ju(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(Xq,"restartAllServices");async function zq(){try{let e=await Xu();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Wa(s.name)}if(await Im(),$e.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Gq.readFile(mm.join($e.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){rr.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(zq,"stopAllServices");async function Cm(e){return!$a.isEmptyOrZeroLength(await Qa(e))}o(Cm,"isServiceRegistered");async function Ju(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?$e.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$e.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Qa(e),s=$a.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?rr.error(Qq):(await Wa(e),await Ka(e)):e===D.PROCESS_DESCRIPTORS.HDB?await Om():await pm(e)}o(Ju,"reloadStopStart");function eF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(eF,"stopLogrotate");async function tF(){let{stdout:e,stderr:t}=await Am(`${process.platform==="win32"?"node":""} ${gm} install pm2-logrotate@${kq}`);if(rr.debug(`loadLogRotate stdout: ${e}`),t)throw rr.error(Yq),t;rr.info($q)}o(tF,"installLogRotate");async function Rm(){let e={max_size:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${gm} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Am(t);if(rr.debug(`updateLogRotateConfig stdout: ${r}`),s)throw rr.error(Wq),s;rr.info(Kq)}o(Rm,"updateLogRotateConfig");async function rF(){$e.initSync();let e=$a.autoCastBoolean($e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Qa(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if($a.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await tF(),await Rm();return}if(e&&s){await _s(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Rm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await eF()}o(rF,"configureLogRotate");async function bm(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await Ka(r)}await Ya.createWorkQueueStream(vq.WORK_QUEUE_CONSUMER_NAMES),await Ya.updateNodeNameLocalStreams();let e=await Fq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){rr.info("Starting clustering upgrade 4.0.0 process"),await Ka(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(bm,"startClustering");async function sF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Wa(t)}}o(sF,"stopClustering");async function nF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Cm(t)===!1)return!1}return!0}o(nF,"isClusteringRunning");async function iF(){await ai.generateNatsConfig(!0),await Ya.reloadNATSHub(),await Ya.reloadNATSLeaf(),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(iF,"reloadClustering")});var Ja=d((l$,Um)=>{"use strict";var b=h(),F=O(),ja=I(),oF=vr(),zu=La(),rl=ma(),aF=gt(),wm=require("minimist"),{handleHDBError:el,hdb_errors:_F}=J(),_i=We(),{HTTP_STATUS_CODES:tl}=_F,B,ym=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,cs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",cF="Invalid service",uF="'service' is required",lF="Restarting all services",EF="Clustering is not enabled so cannot be restarted";Um.exports={stop:SF,restartProcesses:dF,restartService:Dm};async function dF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=oF(Object.keys(b.CONFIG_PARAM_MAP),!0);ja.isEmptyOrZeroLength(Object.keys(e))||_i.updateConfigValue(void 0,void 0,e,!0,!0);let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=wm(process.argv);if(!ja.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(cs),console.error(cs);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await sn(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await Dm({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(cs),console.error(cs),cs;console.log(ym),t&&await Mm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(lF),await B.restartAllServices(i),ym}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(dF,"restartProcesses");async function Dm(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=rn()),ja.isEmpty(e.service))throw el(new Error,uF,tl.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw el(new Error,cF,tl.BAD_REQUEST,void 0,void 0,!0);let r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(cs),cs;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await sn(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),el(new Error,a,tl.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(Dm,"restartService");async function SF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=wm(process.argv);if(ja.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(SF,"stop");async function Mm(){await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await rl.updateNodeNameLocalStreams(),await rl.closeConnection()}o(Mm,"restartAllClusteringServices");async function sn(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(EF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await Mm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await rl.createWorkQueueStream(aF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await zu.generateNatsConfig(!0,e),await B.restart(e),await zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(sn,"restartClustering")});var Hm=d((E$,Bm)=>{"use strict";var sl=I(),ze=O(),Pm=xc();Bm.exports={processDirectives:TF};async function TF(e){console.log("Starting upgrade process...");let t=Pm.getVersionsForUpgrade(e),r=RF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=fF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await hF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(TF,"processDirectives");function fF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(fF,"runSyncFunctions");async function hF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(hF,"runAsyncFunctions");function RF(e){if(sl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Pm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(RF,"getUpgradeDirectivesToInstall")});var ol=d((d$,xm)=>{"use strict";var Za=Y();Za.initSync();var Fm=require("chalk"),vm=require("fs-extra"),Gt=O(),Ot=h(),Gm=Vr(),AF=Hm(),nl=I(),Vm=na(),mF=Ko(),qm=l_(),gF=Gs(),pF=require("util").promisify,NF=pF(gF.setSchemaDataToGlobal),il,{UPGRADE_VERSION:Xa}=Ot.UPGRADE_JSON_FIELD_NAMES_ENUM;xm.exports={upgrade:OF};async function OF(e){Gt.createLogFile(Ot.PROCESS_LOG_NAMES.CLI,Ot.PROCESS_DESCRIPTORS.UPGRADE),await NF(),il===void 0&&(il=rn()),vm.existsSync(Za.get(Za.BOOT_PROPS_FILE_PATH))||(ci("The hdb_boot_properties file was not found. Please install HDB.",Ot.LOG_LEVELS.ERROR),process.exit(1)),vm.existsSync(Za.get(Ot.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(ci("The hdb settings file was not found. Please make sure HDB is installed.",Ot.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Vm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),ci(`This version of HarperDB is ${Gm.version()}`,Ot.LOG_LEVELS.INFO);let r=t[Xa]?t[Xa]:Gm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ot.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await IF();let s,n=0;try{s=await mF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await CF(t),ci(`HarperDB was successfully upgraded to version ${t[Xa]}`,Ot.LOG_LEVELS.INFO)}o(OF,"upgrade");async function IF(){let e=!1,t=await qm.findPs(Ot.HDB_PROC_NAME);if(nl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await qm.findPs("hdb_express");nl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await il.list();nl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Fm.red(r)),Gt.error(r),process.exit(1)}}o(IF,"checkIfRunning");async function CF(e){try{await AF.processDirectives(e)}catch(t){throw ci("There was an error during the data upgrade. Please check the logs.",Ot.LOG_LEVELS.ERROR),t}try{await Vm.insertHdbUpgradeInfo(e[Xa])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(CF,"runUpgrade");function ci(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Fm.magenta(e))}o(ci,"printToLogAndConsole")});var za=d((T$,Wm)=>{"use strict";var nr=Y();nr.initSync();var ee=h(),Ee=O(),us=require("fs-extra"),ls=require("path"),bF=m_(),LF=Au(),al=require("chalk"),yF=an(),wF=mu(),sr=I(),DF=We(),Ym=vr(),MF=La(),{promisify:S$}=require("util"),UF=Ja(),PF=ol(),BF=require("minimist"),HF=require("child_process").spawn,{PACKAGE_ROOT:Km}=h(),vF=na(),GF=Yt(),qF=vo(),FF=ic(),qt,VF=No(),xF="Upgrade complete. Starting HarperDB.",kF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",$F="HarperDB not found, starting install process.",YF="There was an error during install, check install_log.log for more details. Exiting.",KF="HarperDB successfully started.";async function WF(e=!1){try{if(console.log(al.magenta("Starting HarperDB...")),await ZF()===!1){console.log($F);try{await LF()}catch(i){console.error(YF),Ee.error(i),process.exit(1)}}process.env.PM2_LOG_FILE_PATH=ls.join(nr.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=rn()),Ee.createLogFile(ee.PROCESS_LOG_NAMES.CLI,ee.PROCESS_DESCRIPTORS.RUN);let t;try{let i=await vF.getVersionUpdateInfo();i!==void 0&&(t=i[ee.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await PF.upgrade(i),console.log(xF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(kF),Ee.error(i)),process.exit(1)}if(!e){let i=Ym(Object.keys(ee.CONFIG_PARAM_MAP),!0);!sr.isEmpty(i)&&!sr.isEmptyOrZeroLength(Object.keys(i))&&DF.updateConfigValue(void 0,void 0,i,!0,!0)}bF(),await jF(),QF();try{wF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await MF.generateNatsConfig();let s=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=BF(process.argv);if(sr.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await _l(),await qt.startClustering()):s?(await _l(),await qt.startService(ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await _l();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(ee.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(ee.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${ee.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}$m()}console.log(al.magenta(""+us.readFileSync(ls.join(Km,"utility/install/ascii_logo.txt")))),console.log(al.magenta(`|------------- HarperDB ${yF.version} successfully started ------------|`)),Ee.notify(KF),$m()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(WF,"run");async function _l(){await qt.startService(ee.PROCESS_DESCRIPTORS.IPC),await qt.startService(ee.PROCESS_DESCRIPTORS.HDB)}o(_l,"startHdbIpc");function QF(){let e=ls.join(nr.getHdbBasePath(),ee.LICENSE_KEY_DIR_NAME,ee.LICENSE_FILE_NAME),t=ls.join(e,ee.LICENSE_FILE_NAME),r=ls.join(e,ee.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Ym(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(sr.isEmpty(s)||sr.isEmpty(n))return;us.mkdirpSync(e),us.writeFileSync(r,s),us.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Ee.error(n)}}o(QF,"writeLicenseFromVars");async function jF(){if(nr.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(GF))await km(ee.SYSTEM_SCHEMA_NAME,t);let e=await qF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await km(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(jF,"checkAuditLogEnvironmentsExist");async function km(e,t){try{let r=new VF(e,t);await FF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(km,"openCreateAuditEnvironment");function $m(){XF()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ui),process.on("SIGINT",ui),process.on("SIGUSR1",ui),process.on("SIGUSR2",ui),process.on("SIGTERM",ui),JF()}o($m,"foregroundHandler");function JF(){let e=HF("node",[ls.join(Km,"node_modules/pm2/bin/pm2"),"logs"]);us.writeFileSync(ls.join(nr.get(ee.CONFIG_PARAMS.ROOTPATH),ee.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(JF,"spawnLogProcess");async function ui(){try{await UF.stop()}catch(e){console.error(e)}process.exit(143)}o(ui,"processExitHandler");Wm.exports={run:WF};async function ZF(){try{await us.stat(sr.getPropsFilePath()),await us.stat(nr.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(ZF,"isHdbInstalled");function XF(){return sr.autoCastBoolean(nr.get(ee.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(XF,"getRunInForeground")});var Zm=d((f$,Jm)=>{var zF=Au(),Qm=O(),jm=h();Jm.exports=eV;async function eV(){try{Qm.createLogFile(jm.PROCESS_LOG_NAMES.INSTALL,jm.PROCESS_DESCRIPTORS.INSTALL),await zF()}catch(e){console.error("There was an error during the install."),console.error(e),Qm.error(e),process.exit(1)}}o(eV,"install")});var sg=d((h$,rg)=>{var t_=Qn(),Xm=require("chalk"),Ft=O(),zm=mu(),eg=require("prompt"),{promisify:tV}=require("util"),e_=h(),rV=require("fs-extra"),sV=require("path"),nV=I(),iV=Vr(),tg=Y();tg.initSync();var oV=require("moment"),aV=tV(eg.get),_V=sV.join(tg.getHdbBasePath(),e_.LICENSE_KEY_DIR_NAME,e_.LICENSE_FILE_NAME,e_.LICENSE_FILE_NAME);rg.exports={getFingerprint:uV,setLicense:cV,parseLicense:cl,register:lV,getRegistrationInfo:dV};async function cV(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await cl(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(cV,"setLicense");async function uV(){try{zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await t_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(uV,"getFingerprint");async function cl(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=t_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Ft.info("writing license to disk"),await rV.writeFile(_V,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(cl,"parseLicense");async function lV(){let e=await EV();return cl(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(lV,"register");async function EV(){try{zm.checkPermission()}catch(s){return console.error(s.message)}let e=await t_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Xm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Xm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{eg.start()}catch(s){Ft.error(s)}let r;try{r=await aV(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(EV,"promptForRegistration");async function dV(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await t_.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(nV.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=iV.version(),e.storage_type=e_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=oV.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(dV,"getRegistrationInfo")});var _g=d((R$,ag)=>{"use strict";var SV=sg(),ng=O(),ig=h(),og="Registration failed.";async function TV(){ng.createLogFile(ig.PROCESS_LOG_NAMES.CLI,ig.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await SV.register()}catch(t){return ng.error(`Registration error ${t}`),og}return e||og}o(TV,"register");ag.exports={register:TV}});var Hr=O(),fV=Vr(),Vt=h(),cg=require("fs"),ug=require("path"),hV=require("os"),{PACKAGE_ROOT:lg}=h(),RV=vl();mV();function AV(){let e=ug.join(lg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=cg.statSync(e)}catch{Hr.info("Couldn't find the harperdb executable process.");return}let r=hV.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw Hr.error(s),console.log(s),new Error(s)}}o(AV,"checkCallingUserSync");function mV(){let e=RV();if(e)if(e.error){console.error(e.error),Hr.error(e.error);return}else e.warn&&(console.warn(e.warn),Hr.warn(e.warn));let t;cg.readdir(ug.join(lg,"bin"),r=>{if(r)return Hr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{AV()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:Zm()().then(()=>{za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:_g().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Ja().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Ja().restartProcesses().then().catch(E=>{Hr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:fV.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:Hr.setLogLevel(Vt.LOG_LEVELS.INFO),ol().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{Hr.error(`Got an error during upgrade ${E}`)});break;default:za().run();break}})}o(mV,"harperDBService");
|
|
81
|
+
`,"")}o(TA,"runCommand");async function zv(){try{await Hv.access(Iu)}catch{return!1}let e=await TA(`${Iu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return vv.eq(t,Zv)}o(zv,"checkNATSServerInstalled");async function Lu(e,t,r,s=!0,n="127.0.0.1"){return $v({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:zt.get(te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Lu,"createConnection");async function eG(){Nt&&(await Nt.close(),Nt=void 0)}o(eG,"closeConnection");async function Ra(){if(!Nt){let e=await uA.getClusterUser();if(os(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Nt=await Lu(t,e.username,e.decrypt_hash)}return Nt}o(Ra,"getConnection");async function Qs(){if(ti)return ti;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ti=await Nt.jetstreamManager({domain:e}),ti}o(Qs,"getJetStreamManager");async function fA(){if(ri)return ri;os(Nt)&&await Ra();let{domain:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ri=Nt.jetstream({domain:e}),ri}o(fA,"getJetStream");async function ct(){let e=Nt||await Ra(),t=ti||await Qs(),r=ri||await fA();return{connection:e,jsm:t,js:r}}o(ct,"getNATSReferences");async function tG(){let e=zt.get(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await uA.getClusterUser(),s=await Lu(e,t,r),n=bu(),i=s.subscribe(n),a=[],_=(async()=>{for await(let c of i)a.push(SA.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Cu.async_set_timeout(50),await i.drain(),await s.close(),await _,a}o(tG,"getServerList");async function yu(e,t){let{jsm:r}=await ct();await r.streams.add({name:e,storage:lA.File,retention:EA.Limits,subjects:t})}o(yu,"createLocalStream");async function hA(){let{jsm:e}=await ct(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(hA,"listStreams");async function rG(e){let{jsm:t}=await ct();await t.streams.delete(e)}o(rG,"deleteLocalStream");async function sG(e){let{connection:t}=await ct(),r=[],s=bu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(SA.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(sG,"listRemoteStreams");async function nG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ct(),i=qv(),a=[],_={ack_policy:dA.None,durable_name:i,deliver_subject:i,deliver_policy:Ou.All};t&&(_.deliver_policy=Ou.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=Wv(l),T=cA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:T,originators:[]},A=[];if(E.headers){let R=E.headers.get("originators");R&&(A=R.split(","),S.originators=A)}a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(nG,"viewStream");async function iG(e,t,r=[],s=[]){er.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await ct(),a=await Aa(),_=`${e}.${a}`,c=Kv();s.push(a),c.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{er.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Nu(r[u]),{headers:c})}catch(E){if(E.code&&E.code.toString()==="503")er.trace(`publishToStream creating stream: ${t}`),await yu(t,[_]),await i.publish(_,Nu(r[u]),{headers:c});else throw E}}o(iG,"publishToStream");function ni(e){e=e.toLowerCase();let t=si.join(zt.get(te.CONFIG_PARAMS.ROOTPATH),Jv);if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return os(pu)&&(pu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.HUB,config_file:j.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:si.join(t,j.PID_FILES.HUB),hdb_nats_path:t}),pu;if(e===te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return os(gu)&&(gu={port:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,config_file:j.NATS_CONFIG_FILES.LEAF_SERVER,domain:zn.getConfigFromFile(te.CONFIG_PARAMS.CLUSTERING_NODENAME)+j.SERVER_SUFFIX.LEAF,pid_file_path:si.join(t,j.PID_FILES.LEAF),hdb_nats_path:t}),gu;er.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(ni,"getServerConfig");async function oG(e){let{jsm:t}=await ct(),r=await Aa();try{await t.streams.add({name:e.stream_name,storage:lA.File,retention:EA.Workqueue,subjects:[`${j.SUBJECT_PREFIXES.MSGID}.${r}`,`${j.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:dA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ou.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`});else throw s}}o(oG,"createWorkQueueStream");async function RA(e,t,r){let{jsm:s}=await ct(),n=await s.streams.info(t),i=AA(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=ha.createNatsTableStreamName(_,c),l=i===e,E,T,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,L=n.config.sources.length;R<L;R++)if(E=n.config.sources[R],T=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;await gA(_,c,E,t),n.config.sources.splice(T,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:a,filter_subject:`${j.SUBJECT_PREFIXES.TXN}.>`};l||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}o(RA,"addSourceToWorkStream");function AA(e){return e.split(".")[1]}o(AA,"extractServerName");async function mA(e,t,r){let{schema:s,table:n}=r,i=ha.createNatsTableStreamName(s,n),{jsm:a}=await ct(),_=await a.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await a.streams.update(t,_.config),await gA(s,n,u,t)}o(mA,"removeSourceFromWorkStream");async function gA(e,t,r,s){let n=await Qs(),i;try{i=OA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{er.error("Error purging source subject",i,"from work stream",s)}}o(gA,"purgeSourceFromWorkStream");async function aG(e,t,r=2e3,s=bu()){if(!Cu.isObject(t))throw new Error("data param must be an object");let n=Nu(t),{connection:i}=await ct(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return cA(_.data)}o(aG,"request");function wu(e){return new Promise(async(t,r)=>{let s=Vv(Iu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(wu,"reloadNATS");async function _G(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await wu(e)}o(_G,"reloadNATSHub");async function cG(){let{pid_file_path:e}=ni(te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await wu(e)}o(cG,"reloadNATSLeaf");function uG(e,t,r){let s;switch(e.code){case oA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case oA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(uG,"requestErrorHandler");async function lG(e,t){let r=t+j.SERVER_SUFFIX.LEAF;await xv.writeTransaction(te.SYSTEM_SCHEMA_NAME,te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await RA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await mA(r,j.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(lG,"updateWorkStream");async function pA(e,t){let r=ha.createNatsTableStreamName(e,t),s=await Aa(),n=OA(e,t,s);await yu(r,[n])}o(pA,"createLocalTableStream");async function EG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await pA(s,n)}}o(EG,"createTableStreams");async function NA(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ha.createNatsTableStreamName(e,t),{jsm:s}=await ct();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")er.warn(r);else throw r}}o(NA,"purgeTableStream");async function dG(e,t){if(zt.get(te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await NA(e,t[r])}o(dG,"purgeSchemaTableStreams");async function SG(e){return(await Qs()).streams.info(e)}o(SG,"getStreamInfo");function OA(e,t,r){return`${j.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(OA,"createSubjectName");async function Aa(){if(ei)return ei;if(ei=(await Qs())?.nc?.info?.server_name,ei===void 0)throw new Error("Unable to get jetstream manager server name");return ei}o(Aa,"getJsmServerName");async function TG(){let e=await Qs(),t=await Aa(),r=await hA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=i.split(".");if(a[a.length-1]!==t){if(n.name===j.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===j.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${j.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;er.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(j.WORK_QUEUE_CONSUMER_NAMES.stream_name,j.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${j.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");er.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}o(TG,"updateNodeNameLocalStreams")});var La=d((kk,LA)=>{"use strict";var js=require("path"),Oa=require("fs-extra"),fG=JR(),hG=zR(),RG=tA(),AG=sA(),Du=$s(),Zs=O(),ut=We(),Na=h(),ga=gt(),{CONFIG_PARAMS:fe}=Na,Ia=I(),Ca=Y(),CA=Gn(),Mu=ma(),Js="clustering",mG=1e4,bA=5;LA.exports={generateNatsConfig:gG,removeNatsConfig:pG};async function gG(e=!1,t=void 0){Ca.initSync();let r=Ca.get(fe.ROOTPATH),s=js.join(r,Js,ga.PID_FILES.HUB),n=js.join(r,Js,ga.PID_FILES.LEAF),i=js.join(r,Js,"leaf"),a=js.join(r,Js,ga.NATS_CONFIG_FILES.HUB_SERVER),_=js.join(r,Js,ga.NATS_CONFIG_FILES.LEAF_SERVER),c=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERTIFICATE),u=ut.getConfigFromFile(fe.CLUSTERING_TLS_PRIVATEKEY),l=ut.getConfigFromFile(fe.CLUSTERING_TLS_CERT_AUTH),E=ut.getConfigFromFile(fe.CLUSTERING_TLS_INSECURE),T=ut.getConfigFromFile(fe.CLUSTERING_NODENAME),S=ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Mu.checkNATSServerInstalled()||ba("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await Du.listUsers(),R=ut.getConfigFromFile(fe.CLUSTERING_USER),L=await Du.getClusterUser();(Zs.isEmpty(L)||L.active!==!0)&&ba(`invalid cluster user '${R}'`),e||(await pa(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await pa(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),await pa(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let de=[],p=[];for(let[ir,or]of A.entries())or.role.role===Na.ROLE_TYPES_ENUM.CLUSTER_USER&&or.active&&(de.push(new AG(or.username,CA.decrypt(or.hash))),p.push(new RG(or.username,CA.decrypt(or.hash))));let k=[],{hub_routes:Ie}=ut.getClusteringRoutes();if(!Zs.isEmptyOrZeroLength(Ie))for(let ir of Ie)k.push(`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@${ir.host}:${ir.port}`);let Ce=new fG(ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_NETWORK_PORT),T,s,c,u,l,E,S,ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NAME),ut.getConfigFromFile(fe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),k,de,p);t=Zs.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Oa.writeJson(a,Ce),Ia.trace(`Hub server config written to ${a}`));let li=`tls://${L.sys_name_encoded}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,nn=`tls://${L.uri_encoded_name}:${L.uri_encoded_d_hash}@0.0.0.0:${S}`,Ei=new hG(ut.getConfigFromFile(fe.CLUSTERING_LEAFSERVER_NETWORK_PORT),T,n,i,[li],[nn],de,p,c,u,l,E);(t===void 0||t===Na.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Oa.writeJson(_,Ei),Ia.trace(`Leaf server config written to ${_}`))}o(gG,"generateNatsConfig");async function pa(e){let t=Ca.get(e);Zs.isEmpty(t)&&ba(`port undefined for '${e}'`),await Zs.isPortTaken(t)&&ba(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`)}o(pa,"isPortAvailable");function ba(e){let t=`Error generating clustering config: ${e}`;Ia.error(t),console.error(t),process.exit(1)}o(ba,"generateNatsConfigError");async function pG(e){let{port:t,config_file:r}=Mu.getServerConfig(e),{username:s,decrypt_hash:n}=await Du.getClusterUser(),i=0,a=500;for(;i<bA;){try{let u=await Mu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ia.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=bA)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Zs.async_set_timeout(a*i)}let _="0".repeat(mG),c=js.join(Ca.get(fe.ROOTPATH),Js,r);await Oa.writeFile(c,_),await Oa.remove(c)}o(pG,"removeNatsConfig")});var Pu=d(($k,BA)=>{"use strict";var z=Y(),yA=Qn(),g=h(),Uu=gt(),le=require("path"),{PACKAGE_ROOT:ya}=h(),ne="/dev/null",Xs=le.join(ya,"launchServiceScripts"),wA=le.join(ya,"utility/scripts"),NG=le.join(wA,g.HDB_RESTART_SCRIPT),DA=le.resolve(ya,"dependencies",`${process.platform}-${process.arch}`,Uu.NATS_BINARY_NAME),pe,Ne;function Ht(){(pe===void 0||Ne===void 0)&&(z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}o(Ht,"initLogConfig");function MA(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.IPC),t={name:g.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:g.SERVICE_SERVERS_CWD.IPC};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:g.SERVICE_SERVERS.IPC}}o(MA,"generateIPCServerConfig");function UA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.HDB),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.HDB,script:g.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(UA,"generateHDBServerConfig");function PA(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=le.join(Ne,g.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=yA.licenseSearch(),r=t.ram_allocation?g.MEM_SETTING_KEY+t.ram_allocation:g.MEM_SETTING_KEY+g.RAM_ALLOCATION_ENUM.DEFAULT,s={name:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:g.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:z.get(g.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Xs};return pe||(s.out_file=ne,s.error_file=ne),s}o(PA,"generateCFServerConfig");function OG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.HUB_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(OG,"generateNatsHubServerConfig");function IG(){Ht(),z.initSync(),pe=z.get(g.HDB_SETTINGS_NAMES.LOG_TO_FILE),Ne=z.get(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=z.get(g.CONFIG_PARAMS.ROOTPATH),t=le.join(e,"clustering",Uu.NATS_CONFIG_FILES.LEAF_SERVER),r=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return pe||(s.out_file=ne,s.error_file=ne),s}o(IG,"generateNatsLeafServerConfig");function CG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(CG,"generateNatsIngestServiceConfig");function bG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:g.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs};return pe||(t.out_file=ne,t.error_file=ne),t}o(bG,"generateNatsReplyServiceConfig");function LG(){Ht(),z.initSync();let e=le.join(Ne,g.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:g.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Xs,autorestart:!1};return pe||(t.out_file=ne,t.error_file=ne),t}o(LG,"generateClusteringUpgradeV4ServiceConfig");function yG(){Ht();let e=le.join(Ne,g.PROCESS_LOG_NAMES.PM2),t={name:g.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:g.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:wA};return pe||(t.out_file=ne,t.error_file=ne),{...t,script:NG}}o(yG,"generateRestart");function wG(e){Ht();let t=le.join(Ne,g.PROCESS_LOG_NAMES.JOBS),r=le.join(ya,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[g.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Xs,autorestart:!1};return pe||(s.out_file=ne,s.error_file=ne),{...s,script:le.join(r,"jobProcess.js")}}o(wG,"generateJobConfig");function DG(){return{apps:[MA(),UA(),PA()]}}o(DG,"generateAllServiceConfigs");BA.exports={generateAllServiceConfigs:DG,generateIPCServerConfig:MA,generateHDBServerConfig:UA,generateCFServerConfig:PA,generateRestart:yG,generateNatsHubServerConfig:OG,generateNatsLeafServerConfig:IG,generateNatsIngestServiceConfig:CG,generateNatsReplyServiceConfig:bG,generateClusteringUpgradeV4ServiceConfig:LG,generateJobConfig:wG}});var vA=d((Yk,HA)=>{var MG=tt(),UG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HA.exports=function(e){return MG.validateObject(e,UG)}});var qA=d((Kk,GA)=>{"use strict";var PG={OPERATION:"operation",REFRESH:"refresh"},wa=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(wa,"JWTTokens");var Da=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(Da,"JWTRSAKeys");GA.exports={JWTTokens:wa,TOKEN_TYPE_ENUM:PG,JWTRSAKeys:Da}});var $A=d((Wk,kA)=>{"use strict";var oi=require("jsonwebtoken"),Bu=require("fs-extra"),Hu=O(),lt=h(),{handleHDBError:Ve,hdb_errors:BG}=J(),{HTTP_STATUS_CODES:xe,AUTHENTICATION_ERROR_MSGS:ke}=BG,ii=I(),FA=ca(),qu=$s(),HG=Jr().update,vG=Dc(),GG=On(),{UserEventMsg:qG}=ps(),Br=Y();Br.initSync();var vu=require("path"),{JWTTokens:FG,JWTRSAKeys:VG,TOKEN_TYPE_ENUM:Ma}=qA(),xG=Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",kG=Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Br.get(lt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ua="RS256",Gu;kA.exports={createTokens:$G,validateOperationToken:KG,refreshOperationToken:YG,validateRefreshToken:xA};async function $G(e){if(Hu.isEmpty(e)||typeof e!="object")throw Ve(new Error,ke.INVALID_AUTH_OBJECT,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.username))throw Ve(new Error,ke.USERNAME_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);if(Hu.isEmpty(e.password))throw Ve(new Error,ke.PASSWORD_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qu.findAndValidateUser(e.username,e.password),!t)throw Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}catch(T){throw ii.error(T),Ve(new Error,ke.INVALID_CREDENTIALS,xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Pa(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},a=await VA(i,r.private_key,r.passphrase),_=await oi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:kG,algorithm:Ua,subject:Ma.REFRESH}),c=FA.hash(_),u=new vG(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await HG(u)}catch(T){ii.error(T),E=T}if(E!==void 0||l.skipped_hashes.length>0)throw Ve(new Error,ke.REFRESH_TOKEN_SAVE_FAILED,xe.INTERNAL_SERVER_ERROR);return GG.signalUserChange(new qG(process.pid)),new FG(a,_)}o($G,"createTokens");async function VA(e,t,r){return await oi.sign(e,{key:t,passphrase:r},{expiresIn:xG,algorithm:Ua,subject:Ma.OPERATION})}o(VA,"signOperationToken");async function Pa(){if(Gu===void 0)try{let e=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=vu.join(Br.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bu.readFile(e)).toString(),n=(await Bu.readFile(t)).toString(),i=(await Bu.readFile(r)).toString();Gu=new VG(i,n,s)}catch(e){throw ii.error(e),Ve(new Error,ke.NO_ENCRYPTION_KEYS,xe.INTERNAL_SERVER_ERROR)}return Gu}o(Pa,"getJWTRSAKeys");async function YG(e){if(!e)throw Ve(new Error,ke.INVALID_BODY,xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ve(new Error,ke.REFRESH_TOKEN_REQUIRED,xe.BAD_REQUEST,void 0,void 0,!0);await xA(e.refresh_token);let t=await Pa(),r=await oi.decode(e.refresh_token);return{operation_token:await VA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(YG,"refreshOperationToken");async function KG(e){try{let t=await Pa(),r=await oi.verify(e,t.public_key,{algorithms:Ua,subject:Ma.OPERATION});return await qu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ii.warn(t),t.name&&t.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}}o(KG,"validateOperationToken");async function xA(e){let t;try{let r=await Pa(),s=await oi.verify(e,r.public_key,{algorithms:Ua,subject:Ma.REFRESH});t=await qu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ii.warn(r),r.name&&r.name==="TokenExpiredError"?Ve(new Error,ke.TOKEN_EXPIRED,xe.FORBIDDEN):Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED)}if(!FA.validate(t.refresh_token,e))throw Ve(new Error,ke.INVALID_TOKEN,xe.UNAUTHORIZED);return t}o(xA,"validateRefreshToken")});var QA=d((jk,WA)=>{"use strict";var WG=vA(),zs=require("passport"),QG=require("passport-local").Strategy,jG=require("passport-http").BasicStrategy,JG=require("util"),ZG=$s(),KA=JG.callbackify(ZG.findAndValidateUser),Qk=et(),XG=h(),YA=$A();zs.use(new QG(function(e,t,r){KA(e,t,r)}));zs.use(new jG(function(e,t,r){KA(e,t,r)}));zs.serializeUser(function(e,t){t(null,e)});zs.deserializeUser(function(e,t){t(null,e)});function zG(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":zs.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===XG.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?YA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):YA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:zs.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(zG,"authorize");function eq(e,t){let r=WG(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let _ in a)e.attributes.indexOf(a[_].attribute_name)>-1&&!a[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[_].attribute_name} `))}return t(null,s)}o(eq,"checkPermissions");WA.exports={authorize:zG,checkPermissions:eq}});var JA=d((Jk,jA)=>{"use strict";var Ba=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(Ba,"Node");var Ha=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(Ha,"NodeSubscription");jA.exports={Node:Ba,NodeSubscription:Ha}});var XA=d((Zk,ZA)=>{"use strict";var tq=h().OPERATIONS_ENUM,va=class{constructor(t,r,s,n=void 0){this.operation=tq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(va,"UpsertObject");ZA.exports=va});var em=d((Xk,zA)=>{"use strict";var Ga=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ga,"RemotePayloadObject");var qa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(qa,"RemotePayloadSubscription");zA.exports={RemotePayloadObject:Ga,RemotePayloadSubscription:qa}});var rm=d((zk,tm)=>{"use strict";var Fa=class{constructor(t,r,s=0,n=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=a}};o(Fa,"TableSizeObject");tm.exports=Fa});var om=d((e$,im)=>{"use strict";var rq=rm(),sm=require("path"),nm=Z(),sq=he(),en=$(),nq=I();im.exports=iq;async function iq(e){let t=new rq;try{let r=sm.join(nm.getBaseSchemaPath(),e.schema.toString()),s=await en.openEnvironment(r,e.name),n=en.statDBI(s,e.hash_attribute),i=sm.join(nm.getTransactionAuditStorePath(),e.schema.toString()),a=await en.openEnvironment(i,e.name,!0),_=en.statDBI(a,sq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await en.environmentDataSize(r,e.name),u=await en.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){nq.warn(`unable to stat table dbi due to ${r}`)}return t}o(iq,"lmdbGetTableSize")});var _m=d((t$,am)=>{"use strict";var oq=h(),Va=class{constructor(t){this.operator=oq.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};o(Va,"SystemInformationOperation");am.exports=Va});var um=d((r$,cm)=>{"use strict";var xa=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(xa,"SystemInformationObject");cm.exports=xa});var Em=d((n$,lm)=>{"use strict";var Oe=require("systeminformation"),tn=I(),aq=h(),_q=om(),cq=vo(),uq=Y();uq.initSync();var s$=_m(),lq=um(),ka;lm.exports={getHDBProcessInfo:ku,getNetworkInfo:Yu,getDiskInfo:$u,getMemoryInfo:xu,getCPUInfo:Vu,getTimeInfo:Fu,getSystemInformation:Ku,systemInformation:Eq,getTableSize:Wu};function Fu(){return Oe.time()}o(Fu,"getTimeInfo");async function Vu(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await Oe.cpu();l.cpu_speed=await Oe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:T,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:R,raw_currentload_user:L,cpus:de,...p}=await Oe.currentLoad();return p.cpus=[],de.forEach(k=>{let{raw_load:Ie,raw_load_idle:Ce,raw_load_irq:li,raw_load_nice:nn,raw_load_system:Ei,raw_load_user:ir,...or}=k;p.cpus.push(or)}),l.current_load=p,l}catch(e){return tn.error(`error in getCPUInfo: ${e}`),{}}}o(Vu,"getCPUInfo");async function xu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Oe.mem();return n}catch(e){return tn.error(`error in getMemoryInfo: ${e}`),{}}}o(xu,"getMemoryInfo");async function ku(){let e={core:[],clustering:[]};try{return(await Oe.processes()).list.forEach(r=>{r.params.includes(aq.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return tn.error(`error in getHDBProcessInfo: ${t}`),e}}o(ku,"getHDBProcessInfo");async function $u(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Oe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await Oe.fsStats();return e.read_write=u,e.size=await Oe.fsSize(),e}catch(t){return tn.error(`error in getDiskInfo: ${t}`),e}}o($u,"getDiskInfo");async function Yu(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Oe.networkInterfaceDefault(),e.latency=await Oe.inetChecksite("google.com"),(await Oe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...T}=s;e.interfaces.push(T)}),(await Oe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e.connections=await Oe.networkConnections(),e}catch(t){return tn.error(`error in getNetworkInfo: ${t}`),e}}o(Yu,"getNetworkInfo");async function Ku(){if(ka!==void 0)return ka;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await Oe.osInfo();e=_;let c=await Oe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,ka=e,ka}catch(t){return tn.error(`error in getSystemInformation: ${t}`),e}}o(Ku,"getSystemInformation");async function Wu(){let e=[],t=await cq.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await _q(s));return e}o(Wu,"getTableSize");async function Eq(e){let t=new lq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Ku(),t.time=Fu(),t.cpu=await Vu(),t.memory=await xu(),t.disk=await $u(),t.network=await Yu(),t.harperdb_processes=await ku(),t.table_size=await Wu(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Ku();break;case"time":t.time=Fu();break;case"cpu":t.cpu=await Vu();break;case"memory":t.memory=await xu();break;case"disk":t.disk=await $u();break;case"network":t.network=await Yu();break;case"harperdb_processes":t.harperdb_processes=await ku();break;case"table_size":t.table_size=await Wu();break;default:break}return t}o(Eq,"systemInformation")});var hm=d((a$,fm)=>{"use strict";var dq=Jr(),Qu=O(),ju=require("util"),as=h(),dm=Y();dm.initSync();var Sq=QA(),Sm=hr(),{Node:i$,NodeSubscription:o$}=JA(),Tq=Ls(),fq=XA(),{RemotePayloadObject:hq,RemotePayloadSubscription:Rq}=em(),{handleHDBError:Aq,hdb_errors:mq}=J(),{HTTP_STATUS_CODES:gq,HDB_ERROR_MSGS:pq}=mq,Nq=At(),Oq=Em(),Iq=Vr(),Cq=ju.promisify(Sq.authorize),bq=ju.promisify(Sm.searchByHash),Lq=ju.promisify(Sm.searchByValue);fm.exports={authHeaderToUser:yq,isEmpty:wq,getNodeRecord:Dq,upsertNodeRecord:Mq,buildNodePayloads:Uq,checkClusteringEnabled:Pq,getAllNodeRecords:Bq,getSystemInfo:Hq,reverseSubscription:Tm};async function yq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Cq(t,null),e}o(yq,"authHeaderToUser");function wq(e){return e==null}o(wq,"isEmpty");async function Dq(e){let t=new Tq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return bq(t)}o(Dq,"getNodeRecord");async function Mq(e){let t=new fq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return dq.upsert(t)}o(Mq,"upsertNodeRecord");function Tm(e){if(Qu.isEmpty(e.subscribe)||Qu.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}o(Tm,"reverseSubscription");function Uq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=Qu.getTableHashAttribute(c,u),{subscribe:E,publish:T}=Tm(_),S=new Rq(c,u,l,T,E,_.start_time);n.push(S)}return new hq(r,t,n,s)}o(Uq,"buildNodePayloads");function Pq(){if(!dm.get(as.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Aq(new Error,pq.CLUSTERING_NOT_ENABLED,gq.BAD_REQUEST,void 0,void 0,!0)}o(Pq,"checkClusteringEnabled");async function Bq(){let e=new Nq(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Lq(e)}o(Bq,"getAllNodeRecords");async function Hq(){let e=await Oq.getSystemInformation();return{hdb_version:Iq.version(),node_version:e.node_version,platform:e.platform}}o(Hq,"getSystemInfo")});var rn=d((_$,Lm)=>{"use strict";var D=h(),$a=O(),ai=La(),Ya=ma(),vq=gt(),G=require("pm2"),Gq=require("fs-extra"),tr=Pu(),$e=Y(),rr=I(),qq=Pu(),Fq=hm(),Vq=require("util"),Am=Vq.promisify(require("child_process").exec),mm=require("path");Lm.exports={start:_s,stop:Wa,reload:pm,restart:Nm,list:Zu,describe:Qa,connect:vt,kill:Im,startAllServices:Zq,startService:Ka,getUniqueServicesList:Xu,restartAllServices:Xq,stopAllServices:zq,isServiceRegistered:Cm,reloadStopStart:Ju,restartHdb:Om,deleteProcess:jq,configureLogRotate:rF,startClustering:bm,isHdbRestartRunning:Jq,isClusteringRunning:nF,stopClustering:sF,reloadClustering:iF};var{PACKAGE_ROOT:xq}=h(),kq="2.7.0",gm=mm.join(xq,"node_modules/pm2/bin/pm2"),$q="Log rotate installed.",Yq="Error installing log rotate.",Kq="Log rotate updated.",Wq="Error updating log rotate.",Qq="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function vt(){return new Promise((e,t)=>{G.connect((r,s)=>{r&&t(r),e(s)})})}o(vt,"connect");function _s(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.start(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(_s,"start");function Wa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.stop(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.delete(e,(i,a)=>{i&&(G.disconnect(),r(s)),G.disconnect(),t(a)})})})}o(Wa,"stop");function pm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.reload(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(pm,"reload");function Nm(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.restart(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Nm,"restart");function jq(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.delete(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(jq,"deleteProcess");async function Om(){await _s(qq.generateRestart())}o(Om,"restartHdb");async function Jq(){let e=await Zu();for(let t in e)if(e[t].name===D.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Jq,"isHdbRestartRunning");function Zu(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.list((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Zu,"list");function Qa(e){return new Promise(async(t,r)=>{try{await vt()}catch(s){r(s)}G.describe(e,(s,n)=>{s&&(G.disconnect(),r(s)),G.disconnect(),t(n)})})}o(Qa,"describe");function Im(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.killDaemon((r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(Im,"kill");async function Zq(){try{await bm(),await _s(tr.generateAllServiceConfigs())}catch(e){throw G.disconnect(),e}}o(Zq,"startAllServices");async function Ka(e){try{let t;switch(e=e.toLowerCase(),e){case D.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=tr.generateIPCServerConfig();break;case D.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=tr.generateHDBServerConfig();break;case D.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=tr.generateCFServerConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=tr.generateNatsIngestServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=tr.generateNatsReplyServiceConfig();break;case D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=tr.generateNatsHubServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=tr.generateNatsLeafServerConfig(),await _s(t),await ai.removeNatsConfig(e);return;case D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=tr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _s(t)}catch(t){throw G.disconnect(),t}}o(Ka,"startService");async function Xu(){try{let e=await Zu(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw G.disconnect(),e}}o(Xu,"getUniqueServicesList");async function Xq(e=[]){try{let t=!1,r=await Xu();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],a=i.name;e.includes(a)||(i.exec_mode==="cluster_mode"?a===D.PROCESS_DESCRIPTORS.HDB?t=!0:await Ju(a):await Nm(a))}t&&await Ju(D.PROCESS_DESCRIPTORS.HDB)}catch(t){throw G.disconnect(),t}}o(Xq,"restartAllServices");async function zq(){try{let e=await Xu();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Wa(s.name)}if(await Im(),$e.get(D.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Gq.readFile(mm.join($e.get(D.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),D.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){rr.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw G.disconnect(),e}}o(zq,"stopAllServices");async function Cm(e){return!$a.isEmptyOrZeroLength(await Qa(e))}o(Cm,"isServiceRegistered");async function Ju(e){let t=e===D.PROCESS_DESCRIPTORS.HDB?$e.get(D.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):$e.get(D.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Qa(e),s=$a.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===D.PROCESS_DESCRIPTORS.HDB?rr.error(Qq):(await Wa(e),await Ka(e)):e===D.PROCESS_DESCRIPTORS.HDB?await Om():await pm(e)}o(Ju,"reloadStopStart");function eF(){return new Promise(async(e,t)=>{try{await vt()}catch(r){t(r)}G.stop(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(G.disconnect(),t(r)),G.disconnect(),e(s)})})}o(eF,"stopLogrotate");async function tF(){let{stdout:e,stderr:t}=await Am(`${process.platform==="win32"?"node":""} ${gm} install pm2-logrotate@${kq}`);if(rr.debug(`loadLogRotate stdout: ${e}`),t)throw rr.error(Yq),t;rr.info($q)}o(tF,"installLogRotate");async function Rm(){let e={max_size:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:$e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${gm} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await Am(t);if(rr.debug(`updateLogRotateConfig stdout: ${r}`),s)throw rr.error(Wq),s;rr.info(Kq)}o(Rm,"updateLogRotateConfig");async function rF(){$e.initSync();let e=$a.autoCastBoolean($e.get(D.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Qa(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if($a.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await tF(),await Rm();return}if(e&&s){await _s(D.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await Rm();return}!e&&r===D.PM2_PROCESS_STATUSES.ONLINE&&await eF()}o(rF,"configureLogRotate");async function bm(){for(let t in D.CLUSTERING_PROCESSES){let r=D.CLUSTERING_PROCESSES[t];await Ka(r)}await Ya.createWorkQueueStream(vq.WORK_QUEUE_CONSUMER_NAMES),await Ya.updateNodeNameLocalStreams();let e=await Fq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===D.PRE_4_0_0_VERSION){rr.info("Starting clustering upgrade 4.0.0 process"),await Ka(D.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}o(bm,"startClustering");async function sF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];await Wa(t)}}o(sF,"stopClustering");async function nF(){for(let e in D.CLUSTERING_PROCESSES){let t=D.CLUSTERING_PROCESSES[e];if(await Cm(t)===!1)return!1}return!0}o(nF,"isClusteringRunning");async function iF(){await ai.generateNatsConfig(!0),await Ya.reloadNATSHub(),await Ya.reloadNATSLeaf(),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ai.removeNatsConfig(D.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(iF,"reloadClustering")});var Ja=d((c$,Um)=>{"use strict";var b=h(),F=I(),ja=O(),oF=vr(),zu=La(),rl=ma(),aF=gt(),wm=require("minimist"),{handleHDBError:el,hdb_errors:_F}=J(),_i=We(),{HTTP_STATUS_CODES:tl}=_F,B,ym=`Restarting HarperDB. This may take up to ${b.RESTART_TIMEOUT_MS/1e3} seconds.`,cs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",cF="Invalid service",uF="'service' is required",lF="Restarting all services",EF="Clustering is not enabled so cannot be restarted";Um.exports={stop:SF,restartProcesses:dF,restartService:Dm};async function dF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=oF(Object.keys(b.CONFIG_PARAM_MAP),!0);ja.isEmptyOrZeroLength(Object.keys(e))||_i.updateConfigValue(void 0,void 0,e,!0,!0);let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=wm(process.argv);if(!ja.isEmpty(s.service)){if(typeof s.service!="string"){let _=`Restart service argument expected a string but received: ${s.service}`;return F.error(_),_}let a=s.service.split(",");for(let _ of a){let c=_.toLowerCase();if(c===b.HDB_PROC_DESCRIPTOR.toLowerCase()&&await B.isHdbRestartRunning()===!0){F.notify(cs),console.error(cs);continue}if(b.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){console.error(`Restart received unrecognized service command argument: ${c}`),F.error(`Restart received unrecognized service command argument: ${c}`);continue}let u=b.PROCESS_DESCRIPTORS_VALIDATE[c];if(console.log(`Restarting ${u}`),F.trace(`Restarting ${u}`),u===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(c.toLowerCase().includes("clustering"))await sn(c);else if(await B.isServiceRegistered(u))u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await Dm({service:u});else if(u===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await B.startService(u),F.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;F.error(l),console.log(l)}else await B.startService(u);F.notify(`${u} successfully restarted.`)}return}if(await B.isHdbRestartRunning()===!0)return F.notify(cs),console.error(cs),cs;console.log(ym),t&&await Mm();let n=await B.isServiceRegistered(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await B.startService(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Starting ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await B.stop(b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),F.trace(`Stopping ${b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await B.configureLogRotate(),F.notify(lF),await B.restartAllServices(i),ym}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return F.error(t),t}}o(dF,"restartProcesses");async function Dm(e){if(F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP),B===void 0&&(B=rn()),ja.isEmpty(e.service))throw el(new Error,uF,tl.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw el(new Error,cF,tl.BAD_REQUEST,void 0,void 0,!0);let r=_i.getConfigFromFile(b.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=b.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===b.PROCESS_DESCRIPTORS.HDB){if(await B.isHdbRestartRunning()===!0)return F.notify(cs),cs;await B.reloadStopStart(s)}else if(s===b.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await B.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await sn(s);else if(s===b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===b.SERVICES.CUSTOM_FUNCTIONS){let i=await B.isServiceRegistered(s);if(r)i?(await B.reloadStopStart(s),F.trace(`Reloading ${s}`)):(await B.startService(s),F.trace(`Starting ${s}`));else if(!r&&i)await B.stop(s),F.trace(`Stopping ${s}`);else{let a=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw F.error(a),el(new Error,a,tl.BAD_REQUEST,void 0,void 0,!0)}}else await B.restart(s);let n=`Restarting ${s}`;return F.notify(n),n}o(Dm,"restartService");async function SF(){F.createLogFile(b.PROCESS_LOG_NAMES.CLI,b.PROCESS_DESCRIPTORS.STOP);try{B===void 0&&(B=rn());let e=wm(process.argv);if(ja.isEmpty(e.service))console.log("Stopping HarperDB."),await B.stopAllServices(),F.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;F.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(b.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){F.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await B.stopClustering():await B.stop(b.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${b.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;F.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}o(SF,"stop");async function Mm(){await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await sn(b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await rl.updateNodeNameLocalStreams(),await rl.closeConnection()}o(Mm,"restartAllClusteringServices");async function sn(e){e=b.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=_i.getConfigFromFile(b.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await B.isServiceRegistered(e),i=r||s?await B.isClusteringRunning():void 0;switch(!0){case s:if(!i){F.error(EF);break}await B.reloadClustering();break;case(r&&i&&!t):await B.stopClustering();break;case(r&&!i&&t):await B.startClustering();break;case(r&&i&&t):await Mm();break;case(r&&!i&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await B.stop(e),F.trace(`Stopping ${e}`);break;case(!n&&t):e!==b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await zu.generateNatsConfig(!0,e),await B.startService(e),F.trace(`Starting ${e}`),e===b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await rl.createWorkQueueStream(aF.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):F.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await B.reload(e):(await zu.generateNatsConfig(!0,e),await B.restart(e),await zu.removeNatsConfig(e));break;default:F.error(`Error restarting ${e}`)}}o(sn,"restartClustering")});var Hm=d((u$,Bm)=>{"use strict";var sl=O(),ze=I(),Pm=xc();Bm.exports={processDirectives:TF};async function TF(e){console.log("Starting upgrade process...");let t=Pm.getVersionsForUpgrade(e),r=RF(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;ze.notify(_),console.log(_);let c=[],u=[];try{c=fF(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await hF(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(TF,"processDirectives");function fF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(fF,"runSyncFunctions");async function hF(e){if(sl.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(hF,"runAsyncFunctions");function RF(e){if(sl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Pm.getDirectiveByVersion(r);s&&t.push(s)}return t}o(RF,"getUpgradeDirectivesToInstall")});var ol=d((l$,xm)=>{"use strict";var Za=Y();Za.initSync();var Fm=require("chalk"),vm=require("fs-extra"),Gt=I(),Ot=h(),Gm=Vr(),AF=Hm(),nl=O(),Vm=na(),mF=Ko(),qm=l_(),gF=Gs(),pF=require("util").promisify,NF=pF(gF.setSchemaDataToGlobal),il,{UPGRADE_VERSION:Xa}=Ot.UPGRADE_JSON_FIELD_NAMES_ENUM;xm.exports={upgrade:OF};async function OF(e){Gt.createLogFile(Ot.PROCESS_LOG_NAMES.CLI,Ot.PROCESS_DESCRIPTORS.UPGRADE),await NF(),il===void 0&&(il=rn()),vm.existsSync(Za.get(Za.BOOT_PROPS_FILE_PATH))||(ci("The hdb_boot_properties file was not found. Please install HDB.",Ot.LOG_LEVELS.ERROR),process.exit(1)),vm.existsSync(Za.get(Ot.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(ci("The hdb settings file was not found. Please make sure HDB is installed.",Ot.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Vm.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),ci(`This version of HarperDB is ${Gm.version()}`,Ot.LOG_LEVELS.INFO);let r=t[Xa]?t[Xa]:Gm.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ot.HDB_SUPPORT_ADDRESS}`),Gt.notify("Missing new version field from upgrade info object"),process.exit(1)),await IF();let s,n=0;try{s=await mF.forceUpdatePrompt(t)}catch(i){Gt.error("There was an error when prompting user about upgrade."),Gt.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Gt.info(`Starting upgrade to version ${r}`),await CF(t),ci(`HarperDB was successfully upgraded to version ${t[Xa]}`,Ot.LOG_LEVELS.INFO)}o(OF,"upgrade");async function IF(){let e=!1,t=await qm.findPs(Ot.HDB_PROC_NAME);if(nl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await qm.findPs("hdb_express");nl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await il.list();nl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Fm.red(r)),Gt.error(r),process.exit(1)}}o(IF,"checkIfRunning");async function CF(e){try{await AF.processDirectives(e)}catch(t){throw ci("There was an error during the data upgrade. Please check the logs.",Ot.LOG_LEVELS.ERROR),t}try{await Vm.insertHdbUpgradeInfo(e[Xa])}catch(t){Gt.error("Error updating the 'hdb_info' system table."),Gt.error(t)}}o(CF,"runUpgrade");function ci(e,t=void 0){t||(t=Gt.info),Gt[t](e),console.log(Fm.magenta(e))}o(ci,"printToLogAndConsole")});var za=d((d$,Wm)=>{"use strict";var nr=Y();nr.initSync();var ee=h(),Ee=I(),us=require("fs-extra"),ls=require("path"),bF=m_(),LF=Au(),al=require("chalk"),yF=an(),wF=mu(),sr=O(),DF=We(),Ym=vr(),MF=La(),{promisify:E$}=require("util"),UF=Ja(),PF=ol(),BF=require("minimist"),HF=require("child_process").spawn,{PACKAGE_ROOT:Km}=h(),vF=na(),GF=Yt(),qF=vo(),FF=ic(),qt,VF=No(),xF="Upgrade complete. Starting HarperDB.",kF="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",$F="HarperDB not found, starting install process.",YF="There was an error during install, check install_log.log for more details. Exiting.",KF="HarperDB successfully started.";async function WF(e=!1){try{if(console.log(al.magenta("Starting HarperDB...")),await ZF()===!1){console.log($F);try{await LF()}catch(i){console.error(YF),Ee.error(i),process.exit(1)}}process.env.PM2_LOG_FILE_PATH=ls.join(nr.getHdbBasePath(),"log","pm2.log"),qt===void 0&&(qt=rn()),Ee.createLogFile(ee.PROCESS_LOG_NAMES.CLI,ee.PROCESS_DESCRIPTORS.RUN);let t;try{let i=await vF.getVersionUpdateInfo();i!==void 0&&(t=i[ee.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await PF.upgrade(i),console.log(xF))}catch(i){t?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${t}. Exiting HarperDB.`),Ee.error(i)):(console.error(kF),Ee.error(i)),process.exit(1)}if(!e){let i=Ym(Object.keys(ee.CONFIG_PARAM_MAP),!0);!sr.isEmpty(i)&&!sr.isEmptyOrZeroLength(Object.keys(i))&&DF.updateConfigValue(void 0,void 0,i,!0,!0)}bF(),await jF(),QF();try{wF.checkPermission()}catch(i){Ee.error(i),console.error(i.message),process.exit(1)}let r=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY));r&&await MF.generateNatsConfig();let s=sr.autoCastBoolean(nr.get(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));await qt.configureLogRotate();let n=BF(process.argv);if(sr.isEmpty(n.service))r&&s?await qt.startAllServices():r?(await _l(),await qt.startClustering()):s?(await _l(),await qt.startService(ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)):await _l();else{if(typeof n.service!="string"){let a=`Run service argument expected a string but received: ${n.service}`;Ee.error(a),console.log(a),process.exit(1)}let i=n.service.split(",");for(let a of i){let _=a.toLowerCase();if(ee.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){Ee.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===ee.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!s){Ee.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){Ee.error(`${_} is not enabled in settings`);continue}_==="clustering"?await qt.startClustering():await qt.startService(ee.PROCESS_DESCRIPTORS_VALIDATE[_]);let c=`${ee.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;Ee.notify(c),console.log(c)}$m()}console.log(al.magenta(""+us.readFileSync(ls.join(Km,"utility/install/ascii_logo.txt")))),console.log(al.magenta(`|------------- HarperDB ${yF.version} successfully started ------------|`)),Ee.notify(KF),$m()}catch(t){console.error(t),Ee.error(t),process.exit(1)}}o(WF,"run");async function _l(){await qt.startService(ee.PROCESS_DESCRIPTORS.IPC),await qt.startService(ee.PROCESS_DESCRIPTORS.HDB)}o(_l,"startHdbIpc");function QF(){let e=ls.join(nr.getHdbBasePath(),ee.LICENSE_KEY_DIR_NAME,ee.LICENSE_FILE_NAME),t=ls.join(e,ee.LICENSE_FILE_NAME),r=ls.join(e,ee.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Ym(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(sr.isEmpty(s)||sr.isEmpty(n))return;us.mkdirpSync(e),us.writeFileSync(r,s),us.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Ee.error(n)}}o(QF,"writeLicenseFromVars");async function jF(){if(nr.getHdbBasePath()!==void 0){Ee.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(GF))await km(ee.SYSTEM_SCHEMA_NAME,t);let e=await qF.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await km(t,r);Ee.info("Finished checking Transaction Audit Environments exist")}}o(jF,"checkAuditLogEnvironmentsExist");async function km(e,t){try{let r=new VF(e,t);await FF(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),Ee.error(s)}}o(km,"openCreateAuditEnvironment");function $m(){XF()||process.exit(0),Ee.trace("Running in foreground"),process.on("exit",ui),process.on("SIGINT",ui),process.on("SIGUSR1",ui),process.on("SIGUSR2",ui),process.on("SIGTERM",ui),JF()}o($m,"foregroundHandler");function JF(){let e=HF("node",[ls.join(Km,"node_modules/pm2/bin/pm2"),"logs"]);us.writeFileSync(ls.join(nr.get(ee.CONFIG_PARAMS.ROOTPATH),ee.FOREGROUND_PID_FILE),e.pid.toString()),e.on("error",t=>{console.log(t),console.error("Failed to start subprocess.")}),e.stdout.on("data",t=>{console.log(t.toString())}),e.stderr.on("data",t=>{console.error(t.toString())})}o(JF,"spawnLogProcess");async function ui(){try{await UF.stop()}catch(e){console.error(e)}process.exit(143)}o(ui,"processExitHandler");Wm.exports={run:WF};async function ZF(){try{await us.stat(sr.getPropsFilePath()),await us.stat(nr.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw Ee.error(`Error checking for HDB install - ${e}`),e}return!0}o(ZF,"isHdbInstalled");function XF(){return sr.autoCastBoolean(nr.get(ee.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(XF,"getRunInForeground")});var Zm=d((S$,Jm)=>{var zF=Au(),Qm=I(),jm=h();Jm.exports=e0;async function e0(){try{Qm.createLogFile(jm.PROCESS_LOG_NAMES.INSTALL,jm.PROCESS_DESCRIPTORS.INSTALL),await zF()}catch(e){console.error("There was an error during the install."),console.error(e),Qm.error(e),process.exit(1)}}o(e0,"install")});var sg=d((T$,rg)=>{var t_=Qn(),Xm=require("chalk"),Ft=I(),zm=mu(),eg=require("prompt"),{promisify:t0}=require("util"),e_=h(),r0=require("fs-extra"),s0=require("path"),n0=O(),i0=Vr(),tg=Y();tg.initSync();var o0=require("moment"),a0=t0(eg.get),_0=s0.join(tg.getHdbBasePath(),e_.LICENSE_KEY_DIR_NAME,e_.LICENSE_FILE_NAME,e_.LICENSE_FILE_NAME);rg.exports={getFingerprint:u0,setLicense:c0,parseLicense:cl,register:l0,getRegistrationInfo:d0};async function c0(e){if(e&&e.key&&e.company){try{Ft.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await cl(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Ft.error(r),Ft.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(c0,"setLicense");async function u0(){try{zm.checkPermission()}catch(t){throw Ft.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await t_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Ft.error(r),Ft.error(t),new Error(r)}return e}o(u0,"getFingerprint");async function cl(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=t_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Ft.info("writing license to disk"),await r0.writeFile(_0,JSON.stringify({license_key:e,company:t}))}catch(s){throw Ft.error("Failed to write License"),s}return"Registration successful."}o(cl,"parseLicense");async function l0(){let e=await E0();return cl(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(l0,"register");async function E0(){try{zm.checkPermission()}catch(s){return console.error(s.message)}let e=await t_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Xm.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Xm.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{eg.start()}catch(s){Ft.error(s)}let r;try{r=await a0(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(E0,"promptForRegistration");async function d0(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await t_.getLicense()}catch(r){throw Ft.error(`There was an error when searching licenses due to: ${r.message}`),r}if(n0.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=i0.version(),e.storage_type=e_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=o0.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(d0,"getRegistrationInfo")});var _g=d((f$,ag)=>{"use strict";var S0=sg(),ng=I(),ig=h(),og="Registration failed.";async function T0(){ng.createLogFile(ig.PROCESS_LOG_NAMES.CLI,ig.PROCESS_DESCRIPTORS.REGISTER);let e;try{e=await S0.register()}catch(t){return ng.error(`Registration error ${t}`),og}return e||og}o(T0,"register");ag.exports={register:T0}});var Hr=I(),f0=Vr(),Vt=h(),cg=require("fs"),ug=require("path"),h0=require("os"),{PACKAGE_ROOT:lg}=h(),R0=vl();m0();function A0(){let e=ug.join(lg,"bin",`harperdb.${Vt.CODE_EXTENSION}`),t;try{t=cg.statSync(e)}catch{Hr.info("Couldn't find the harperdb executable process.");return}let r=h0.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw Hr.error(s),console.log(s),new Error(s)}}o(A0,"checkCallingUserSync");function m0(){let e=R0();if(e)if(e.error){console.error(e.error),Hr.error(e.error);return}else e.warn&&(console.warn(e.warn),Hr.warn(e.warn));let t;cg.readdir(ug.join(lg,"bin"),r=>{if(r)return Hr.error(r);if(process.argv&&process.argv[2]&&(t=process.argv[2].toLowerCase()),t!==Vt.SERVICE_ACTIONS_ENUM.INSTALL)try{A0()}catch(n){throw console.log(n.message),n}let s;switch(t){case Vt.SERVICE_ACTIONS_ENUM.RUN:s=za().run();break;case Vt.SERVICE_ACTIONS_ENUM.INSTALL:Zm()().then(()=>{za().run(!0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.REGISTER:_g().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.STOP:Ja().stop().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Vt.SERVICE_ACTIONS_ENUM.RESTART:Ja().restartProcesses().then().catch(E=>{Hr.error(E),console.error("There was an error restarting harperdb. Please stop manually with harperdb stop and start again."),process.exit(1)});break;case Vt.SERVICE_ACTIONS_ENUM.VERSION:f0.printVersion();break;case Vt.SERVICE_ACTIONS_ENUM.UPGRADE:Hr.setLogLevel(Vt.LOG_LEVELS.INFO),ol().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{Hr.error(`Got an error during upgrade ${E}`)});break;default:za().run();break}})}o(m0,"harperDBService");
|