harperdb 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +20 -19
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/server/threads/threadHTTPServer.js +13 -13
- package/utility/scripts/restartHdb.js +6 -6
package/bin/harperdb.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var sN=Object.defineProperty;var o=(e,t)=>sN(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((dk,TE)=>{"use strict";var at=require("path"),nN=require("fs");function iN(){let e=__dirname;for(;!nN.existsSync(at.join(e,"package.json"));){let t=at.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(iN,"getHDBPackageRoot");var ar=iN(),nE="js",$i=nE,oN="harperdb-config.yaml",aN="defaultConfig.yaml",_N="hdb",iE=`harperdb.${$i}`,oE=`customFunctionsServer.${$i}`,cN=`restartHdb.${$i}`,V_="HarperDB",Yi="Custom Functions",Ki="Clustering Hub",Wi="Clustering Leaf",uN="Clustering Ingest Service",lN="Clustering Reply Service",EN="foreground.pid",dN={HDB:V_,CLUSTERING_HUB:Ki,CLUSTERING_LEAF:Wi,CLUSTERING_INGEST_SERVICE:uN,CLUSTERING_REPLY_SERVICE:lN,CUSTOM_FUNCTIONS:Yi,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},SN={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},fN={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},hN={harperdb:V_,"clustering hub":Ki,"clustering leaf":Wi,"custom functions":Yi,custom_functions:Yi,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},TN={CLUSTERING_HUB_PROC_DESCRIPTOR:Ki,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wi},x_={HDB:at.join(ar,"server/harperdb"),CUSTOM_FUNCTIONS:at.join(ar,"server/customFunctions"),CLUSTERING_HUB:at.join(ar,"server/nats"),CLUSTERING_LEAF:at.join(ar,"server/nats")},RN={HDB:at.join(x_.HDB,iE),CUSTOM_FUNCTIONS:at.join(x_.CUSTOM_FUNCTIONS,oE)},mN={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:at.join(ar,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:at.join(ar,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:at.join(ar,"launchServiceScripts/launchUpdateNodes4-0-0.js")},AN={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},aE="support@harperdb.io",gN="customer-success@harperdb.io",_E=1,pN=4141,cE="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",NN="https://www.harperdb.io/product",ON=`For support, please submit a request at ${cE} or contact ${aE}`,uE=`For license support, please contact ${gN}`,IN="None of the specified records were found.",CN="hash attribute not found",bN=`Your current license only supports ${_E} role. ${uE}`,LN="Your current license only supports 3 connections to a node.",yN="127.0.0.1",wN=1,MN=/^\.$/,DN=/^\.\.$/,UN="U+002E",PN=/\//g,HN="U+002F",BN=/U\+002F/g,vN=/^U\+002E$/,GN=/^U\+002EU\+002E$/,qN="d",FN=999999,xN="*",VN="--max-old-space-size=",kN="system",YN="__hdb_hash",$N=".harperdb",KN=".hdb",WN="keys",QN="hdb_boot_properties.file",jN=".updateConfig.json",JN="SIGTSTP",XN=24,ZN=6e4,zN=448,eO="blob",tO="trash",rO="schema",sO="transactions",nO=".count",iO="id",oO="PROCESS_NAME",lE={SETTINGS_PATH_KEY:"settings_path"},EE=require("lodash"),aO={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"},_O={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},cO={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},uO={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"},lO={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},ve="hdb_internal:",EO={CREATE_SCHEMA:ve+"create_schema",CREATE_TABLE:ve+"create_table",CREATE_ATTRIBUTE:ve+"create_attribute",ADD_USER:ve+"add_user",ALTER_USER:ve+"alter_user",DROP_USER:ve+"drop_user",HDB_NODES:ve+"hdb_nodes",HDB_USERS:ve+"hdb_users",HDB_WORKERS:ve+"hdb_workers",CATCHUP:ve+"catchup",SCHEMA_CATCHUP:ve+"schema_catchup",WORKER_ROOM:ve+"cluster_workers"},dO={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"},SO="060493.ks",fO=".license",hO={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream"},TO={CSV:".csv",JSON:".json"},RO={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},mO={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Sn={};Sn[g.INSERT]=g.INSERT;Sn[g.UPDATE]=g.UPDATE;Sn[g.UPSERT]=g.UPSERT;Sn[g.DELETE]=g.DELETE;var Y=Object.create(null);Y[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;Y[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;Y[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;Y[g.READ_LOG]=g.READ_LOG;Y[g.ADD_NODE]=g.ADD_NODE;Y[g.LIST_USERS]=g.LIST_USERS;Y[g.LIST_ROLES]=g.LIST_ROLES;Y[g.USER_INFO]=g.USER_INFO;Y[g.SQL]=g.SQL;Y[g.GET_JOB]=g.GET_JOB;Y[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;Y[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;Y[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;Y[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;Y[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;Y[g.REMOVE_NODE]=g.REMOVE_NODE;Y[g.RESTART]=g.RESTART;Y[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;Y[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;Y[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;Y[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;Y[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;Y[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;Y[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;Y[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;Y[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var AO={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},gO={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dE={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},pO=EE.invert(dE),h={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},SE={settings_path:lE.SETTINGS_PATH_KEY,hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:h.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:h.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:h.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:h.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,clustering_tls_verify:h.CLUSTERING_TLS_VERIFY,clustering_loglevel:h.CLUSTERING_LOGLEVEL,clustering_republishmessages:h.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,http_session_affinity:h.HTTP_SESSION_AFFINITY,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_enabled:h.LOGGING_ROTATION_ENABLED,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:h.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:h.LOGGING_ROTATION_PATH,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,schemas:h.SCHEMAS,storage_path:h.STORAGE_PATH};for(let e in h){let t=h[e];SE[t.toLowerCase()]=t}var NO={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},OO={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},IO={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"},CO={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bO={FILE_SYSTEM:"fs",LMDB:"lmdb"},LO={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},yO={DEVELOPMENT:8192,DEFAULT:512},wO={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"},MO={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"},DO={ENOENT:"ENOENT",EACCES:"EACCES"},fE={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},UO="__clustering__",PO=Object.values(fE),HO=15984864e5,hE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},BO=EE.invert(hE),vO={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"},GO=111,qO=`\r
|
|
3
|
-
`,
|
|
4
|
-
`}o(xt,"createLogRecord");function Rn(e){qt&&yE(e),Ft&&process.stdout.write(e)}o(Rn,"logStdOut");function Zi(e){qt&&yE(e),Ft&&process.stderr.write(e)}o(Zi,"logStdErr");function yE(e){aI(),bs.appendFileSync(hn,e)}o(yE,"logToFile");function $_(){try{bs.closeSync(hn)}catch{}hn=null}o($_,"closeLogFile");function aI(){hn||(hn=bs.openSync(Ji,"a"),setTimeout(()=>{$_()},sI).unref())}o(aI,"openLogFile");function Xi(...e){Ce[Ie]<=Ce.info&&Rn(xt("info",e))}o(Xi,"info");function K_(...e){Ce[Ie]<=Ce.trace&&Rn(xt("trace",e))}o(K_,"trace");function Tn(...e){Ce[Ie]<=Ce.error&&Zi(xt("error",e))}o(Tn,"error");function W_(...e){Ce[Ie]<=Ce.debug&&Rn(xt("debug",e))}o(W_,"debug");function wE(...e){Ce[Ie]<=Ce.notify&&Rn(xt("notify",e))}o(wE,"notify");function ME(...e){Ce[Ie]<=Ce.fatal&&Zi(xt("fatal",e))}o(ME,"fatal");function Q_(...e){Ce[Ie]<=Ce.warn&&Zi(xt("warn",e))}o(Q_,"warn");function _I(e,t,...r){t===CE.STDERR?Zi(xt(e,r)):Rn(xt(e,r))}o(_I,"logCustomLevel");function cI(){let e;try{e=eI.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_r.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return bs.existsSync(t)||(t=_r.join(Y_,"utility/hdb_boot_properties.file")),t}o(cI,"getPropsFilePath");function uI(e){Ie=e}o(uI,"setLogLevel");function pE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(pE,"autoCastBoolean");function lI(e){try{if(e.includes("config/settings.js")){let a=OE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:_r.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=NE.parseDocument(bs.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(lI,"getLogConfig");function EI(){try{let e=NE.parseDocument(bs.readFileSync(rI,"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(EI,"getDefaultConfig")});var Ls=f((mk,dI)=>{dI.exports={name:"harperdb",version:"4.1.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.350.0","@aws-sdk/lib-storage":"3.350.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.1",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.2.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"}}}});var Fr=f((pk,UE)=>{"use strict";var Ak=require("fs-extra"),gk=p();UE.exports={version:SI,printVersion:hI,nodeVersion:fI};var cr=Ls();function SI(){if(cr)return cr.version}o(SI,"version");function fI(){if(cr&&cr.engines&&cr.engines["preferred-node"])return cr.engines["preferred-node"]}o(fI,"nodeVersion");function hI(){cr&&console.log(`HarperDB Version ${cr.version}`)}o(hI,"printVersion")});var vE=f((Ok,BE)=>{"use strict";var PE=require("semver/functions/major"),TI=require("semver/functions/satisfies"),HE=Ls(),mn=process.versions&&process.versions.node?process.versions.node:void 0;BE.exports=RI;function RI(){let e=HE.engines.node,t=HE.engines["preferred-node"];if(mn){if(e&&!TI(mn,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${mn}. Please install a version of Node.js that is withing the defined range.`};if(t&&PE(mn)!==PE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${mn}. Some issues may occur with untested versions of Node.js.`}}}o(RI,"checkNodeVersion")});var j_=f((Ck,GE)=>{"use strict";var mI=require("util"),AI=require("path"),gI=require("child_process"),pI=mI.promisify(gI.execFile),NI=1e3*1e3*10;GE.exports={findPs:OI};async function OI(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await pI("ps",["wwxo",`pid,${r}`],{maxBuffer:NI});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:AI.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(OI,"findPs")});var de=f((Lk,FE)=>{"use strict";var II="__dbis__",CI="__environment_name__",bI="__dbi_defintion__",LI={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"},yI=["__createdtime__","__updatedtime__"],wI="\uFFFF",qE={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},MI=Object.values(qE);FE.exports={INTERNAL_DBIS_NAME:II,DBI_DEFINITION_NAME:bI,SEARCH_TYPES:LI,TIMESTAMP_NAMES:yI,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:CI,TRANSACTIONS_DBI_NAMES_ENUM:qE,TRANSACTIONS_DBIS:MI,OVERFLOW_MARKER:wI}});var Xe=f((yk,jE)=>{"use strict";var xE=T(),VE=de(),kE={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},YE=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),$E={500:YE("There was an error processing your request."),400:"Invalid request"},DI=$E[kE.INTERNAL_SERVER_ERROR],UI={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.`},PI={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},HI={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"},BI={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${VE.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${VE.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},vI={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${xE.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${xE.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},KE={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},GI={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."},qI={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`},FI={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"},xI={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},VI={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},WE={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},QE={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},kI={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."},YI={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},$I={...KE,...HI,...UI,...GI,...qI,...FI,...xI,...VI,...vI,...WE,...QE,...kI,...YI,...PI};jE.exports={CHECK_LOGS_WRAPPER:YE,HDB_ERROR_MSGS:$I,DEFAULT_ERROR_MSGS:$E,DEFAULT_ERROR_RESP:DI,HTTP_STATUS_CODES:kE,LMDB_ERRORS_ENUM:BI,AUTHENTICATION_ERROR_MSGS:KE,VALIDATION_ERROR_MSGS:WE,ITC_ERRORS:QE}});var X=f((Mk,ZE)=>{"use strict";var ys=Xe(),KI=p(),WI=T(),An=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,JE),this.http_resp_code=s||ys.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ys.DEFAULT_ERROR_MSGS[s]?ys.DEFAULT_ERROR_MSGS[s]:ys.DEFAULT_ERROR_MSGS[ys.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&KI[n](i)}};o(An,"HdbError");function JE(e,t,r,s=WI.LOG_LEVELS.ERROR,n=null,i=!1){if(XE(e))return e;let a=new An(e,t,r,s,n);return i&&delete a.stack,a}o(JE,"handleHDBError");function XE(e){return e.__proto__.constructor.name===An.name}o(XE,"isHDBError");ZE.exports={isHDBError:XE,handleHDBError:JE,hdb_errors:ys}});var O=f((Pk,Ed)=>{"use strict";var xr=require("path"),QI=require("fs-extra"),Re=p(),zE=require("fs-extra"),gn=require("os"),jI=require("net"),JI=require("recursive-iterator"),Te=T(),sd=j_(),ed=require("papaparse"),zi=require("moment"),{inspect:XI}=require("util"),td=require("is-number"),Uk=require("lodash"),{hdb_errors:eo}=X(),nd=require("util").promisify(setTimeout),ZI=100,zI=5,eC="",tC=4,rd={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Ed.exports={isEmpty:Ge,isEmptyOrZeroLength:Nt,arrayHasEmptyValues:nC,arrayHasEmptyOrZeroLengthValues:iC,buildFolderPath:oC,isBoolean:id,errorizeMessage:rC,stripFileExtension:_C,autoCast:cC,autoCastJSON:od,autoCastJSONDeep:J_,removeDir:uC,compareVersions:lC,isCompatibleDataVersion:EC,escapeRawValue:dC,unescapeValue:SC,stringifyProps:fC,timeoutPromise:TC,isClusterOperation:mC,getClusterUser:gC,checkGlobalSchemaTable:AC,getHomeDir:_d,getPropsFilePath:hC,promisifyPapaParse:pC,removeBOM:cd,createEventPromise:NC,checkProcessRunning:OC,checkSchemaTableExist:IC,checkSchemaExists:ud,checkTableExists:ld,getStartOfTomorrowInSeconds:CC,getLimitKey:bC,isObject:aC,isNotEmptyAndHasValue:sC,autoCasterIsNumberCheck:ad,backtickASTSchemaItems:LC,isPortTaken:RC,stopProcess:yC,createForkArgs:wC,autoCastBoolean:MC,async_set_timeout:nd,getTableHashAttribute:DC,doesSchemaExist:UC,doesTableExist:PC,stringifyObj:HC,ms_to_time:BC,changeExtension:vC,PACKAGE_ROOT:Te.PACKAGE_ROOT};function rC(e){return e instanceof Error?e:new Error(e)}o(rC,"errorizeMessage");function Ge(e){return e==null}o(Ge,"isEmpty");function sC(e){return!Ge(e)&&(e||e===0||e===""||id(e))}o(sC,"isNotEmptyAndHasValue");function Nt(e){return Ge(e)||e.length===0||e.size===0}o(Nt,"isEmptyOrZeroLength");function nC(e){if(Ge(e))return!0;for(let t=0;t<e.length;t++)if(Ge(e[t]))return!0;return!1}o(nC,"arrayHasEmptyValues");function iC(e){if(Nt(e))return!0;for(let t=0;t<e.length;t++)if(Nt(e[t]))return!0;return!1}o(iC,"arrayHasEmptyOrZeroLengthValues");function oC(...e){try{return e.join(xr.sep)}catch{console.error(e)}}o(oC,"buildFolderPath");function id(e){return Ge(e)?!1:e===!0||e===!1}o(id,"isBoolean");function aC(e){return Ge(e)?!1:typeof e=="object"}o(aC,"isObject");function _C(e){return Nt(e)?eC:e.slice(0,-tC)}o(_C,"stripFileExtension");function cC(e){return Ge(e)||e===""||typeof e!="string"?e:rd[e]!==void 0?rd[e]:ad(e)===!0?Number(e):e}o(cC,"autoCast");function od(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(od,"autoCastJSON");function J_(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=J_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=J_(r);s!==r&&(e[t]=s)}return e}else return od(e)}o(J_,"autoCastJSONDeep");function ad(e){if(e.startsWith("0.")&&td(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&td(e))}o(ad,"autoCasterIsNumberCheck");async function uC(e){if(Nt(e))throw new Error(`Directory path: ${e} does not exist`);try{await zE.emptyDir(e),await zE.remove(e)}catch(t){throw Re.error(`Error removing files in ${e} -- ${t}`),t}}o(uC,"removeDir");function lC(e,t){if(Nt(e)){Re.info("Invalid current version sent as parameter.");return}if(Nt(t)){Re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(a.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(a[u],10)-parseInt(_[u],10),r)return r;return a.length-_.length}o(lC,"compareVersions");function EC(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(EC,"isCompatibleDataVersion");function dC(e){if(Ge(e))return e;let t=String(e);return t==="."?Te.UNICODE_PERIOD:t===".."?Te.UNICODE_PERIOD+Te.UNICODE_PERIOD:t.replace(Te.FORWARD_SLASH_REGEX,Te.UNICODE_FORWARD_SLASH)}o(dC,"escapeRawValue");function SC(e){if(Ge(e))return e;let t=String(e);return t===Te.UNICODE_PERIOD?".":t===Te.UNICODE_PERIOD+Te.UNICODE_PERIOD?"..":String(e).replace(Te.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(SC,"unescapeValue");function fC(e,t){if(Ge(e))return Re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+gn.EOL}!Nt(s)&&s[0]===";"?r+=" "+s+n+gn.EOL:Nt(s)||(r+=s+"="+n+gn.EOL)}catch{Re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(fC,"stringifyProps");function _d(){let e;try{e=gn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(_d,"getHomeDir");function hC(){let e=xr.join(_d(),Te.HDB_HOME_DIR_NAME,Te.BOOT_PROPS_FILE_NAME);return QI.existsSync(e)||(e=xr.join(__dirname,"../","hdb_boot_properties.file")),e}o(hC,"getPropsFilePath");function TC(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(TC,"timeoutPromise");async function RC(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=jI.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(RC,"isPortTaken");function mC(e){try{return Te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Re.error(`Error checking operation against cluster ops ${t}`)}return!1}o(mC,"isClusterOperation");function AC(e,t){if(!global.hdb_schema[e])return eo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return eo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(AC,"checkGlobalSchemaTable");function gC(e,t){if(Ge(t)){Re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ge(e)||Nt(e)){Re.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(gC,"getClusterUser");function pC(){ed.parsePromise=function(e,t){return new Promise(function(r,s){ed.parse(e,{header:!0,transformHeader:cd,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(pC,"promisifyPapaParse");function cd(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(cd,"removeBOM");function NC(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Re.info(`Got cluster status event response: ${XI(n)}`);try{i.cancel()}catch{Re.error("Error trying to cancel timeout.")}s(n)})})}o(NC,"createEventPromise");async function OC(e){let t=!0,r=0;do await nd(ZI*r++),(await sd.findPs(e)).length>0&&(t=!1);while(t&&r<zI);if(t)throw new Error(`process ${e} was not started`)}o(OC,"checkProcessRunning");function IC(e,t){let r=ud(e);if(r)return r;let s=ld(e,t);if(s)return s}o(IC,"checkSchemaTableExist");function ud(e){if(!global.hdb_schema[e])return eo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(ud,"checkSchemaExists");function ld(e,t){if(!global.hdb_schema[e][t])return eo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ld,"checkTableExists");function CC(){let e=zi().utc().add(1,Te.MOMENT_DAYS_TAG).startOf(Te.MOMENT_DAYS_TAG).unix(),t=zi().utc().unix();return e-t}o(CC,"getStartOfTomorrowInSeconds");function bC(){return zi().utc().format("DD-MM-YYYY")}o(bC,"getLimitKey");function LC(e){try{let t=new JI(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Re.error("Got an error back ticking items."),Re.error(t)}}o(LC,"backtickASTSchemaItems");async function yC(e){let t=gn.userInfo();(await sd.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(yC,"stopProcess");function wC(e){return[e]}o(wC,"createForkArgs");function MC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(MC,"autoCastBoolean");function DC(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(DC,"getTableHashAttribute");function UC(e){return global?.hdb_schema?.[e]!==void 0}o(UC,"doesSchemaExist");function PC(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(PC,"doesTableExist");function HC(e){try{return JSON.stringify(e)}catch{return e}}o(HC,"stringifyObj");function BC(e){let t=zi.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}o(BC,"ms_to_time");function vC(e,t){let r=xr.basename(e,xr.extname(e));return xr.join(xr.dirname(e),r+t)}o(vC,"changeExtension")});var X_=f((Bk,dd)=>{"use strict";var GC={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))},qC="certificate.pem",FC="privateKey.pem",xC="ca.pem";dd.exports={CERTIFICATE_VALUES:GC,CERTIFICATE_PEM_NAME:qC,PRIVATEKEY_PEM_NAME:FC,CA_PEM_NAME:xC}});var Ze=f((vk,Sd)=>{"use strict";var be=require("validate.js");be.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||be.validators.type.checks[t](e)?null:` must be a '${t}' value`};be.validators.type.checks={Object:function(e){return be.isObject(e)&&!be.isArray(e)},Array:be.isArray,Integer:be.isInteger,Number:be.isNumber,String:be.isString,Date:be.isDate,Boolean:function(e){return typeof e=="boolean"}};be.validators.hasValidFileExt=function(e,t){return be.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Sd.exports={validateObject:VC,validateObjectAsync:kC,validateBySchema:YC};function VC(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=be(e,t,{format:"flat"});return r?new Error(r):null}o(VC,"validateObject");async function kC(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await be.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(kC,"validateObjectAsync");function YC(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(YC,"validateBySchema")});var z_=f((Fk,Rd)=>{"use strict";var $C=require("fs-extra"),M=require("joi"),KC=require("os"),{boolean:Z,string:Vt,number:_t,array:Z_}=M.types(),{totalmem:fd}=require("os"),pn=require("path"),WC=p(),ro=O(),qk=X_(),QC=T(),jC=Ze(),hd="log",JC="custom_functions",XC="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ZC="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",zC="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",eb="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",tb="rootPath config parameter is undefined",rb="clustering.enabled config parameter is undefined",Vr=_t.min(0).required(),so=Z_.items({host:Vt.required(),port:Vr}).empty(null),ur;Rd.exports={configValidator:sb,routesValidator:cb,route_constraints:so};function sb(e){if(ur=e.rootPath,ro.isEmpty(ur))throw tb;let t=Z.required(),r=M.valid("production","development").required(),s=_t.min(1).max(1e3).empty(null).default(_b),n=Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(to),i=M.custom(nb).messages({"any.custom":"{:#label} {:#error}"}),a=Vt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),_=M.string().empty(null).default(to),c=M.custom(ib).empty(null).default(to),u=e.clustering?.enabled;if(ro.isEmpty(u))throw rb;let l;return u===!0?l=M.object({enabled:t,hubServer:M.object({cluster:M.object({name:M.required().empty(null),network:M.object({port:Vr,routes:so}).required()}).required(),leafNodes:M.object({network:M.object({port:Vr}).required()}).required(),network:M.object({port:Vr}).required()}).required(),leafServer:M.object({network:M.object({port:Vr,routes:so}).required(),streams:M.object({maxAge:_t.min(120).allow(null).optional(),maxBytes:_t.min(1).allow(null).optional(),maxMsgs:_t.min(1).allow(null).optional(),path:_}).required()}).required(),logLevel:M.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Z.optional(),tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required(),verify:Z.optional()}),user:Vt.optional().empty(null)}).required():l=M.object({enabled:t,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required()})}).required(),M.object({clustering:l,customFunctions:M.object({enabled:t,network:M.object({cors:Z.required(),corsAccessList:Z_.required(),headersTimeout:_t.min(1).required(),https:Z.required(),keepAliveTimeout:_t.min(1).required(),port:Vr,timeout:_t.min(1).required()}),nodeEnv:r,root:n,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:M.object({enabled:t}).required(),logging:M.object({file:Z.required(),level:M.valid("notify","fatal","error","warn","info","debug","trace"),rotation:M.object({enabled:Z.optional(),compress:Z.optional(),interval:Vt.custom(ab).optional().empty(null),maxSize:Vt.custom(ob).optional().empty(null),path:Vt.optional().empty(null).default(to)}).required(),root:n,stdStreams:Z.required(),auditLog:Z.required()}).required(),operationsApi:M.object({authentication:M.object({operationTokenTimeout:M.required(),refreshTokenTimeout:M.required()}).required(),foreground:Z.required(),network:M.object({cors:Z.required(),corsAccessList:Z_.required(),headersTimeout:_t.min(1).required(),https:Z.required(),keepAliveTimeout:_t.min(1).required(),port:Vr,timeout:_t.min(1).required()}).required(),nodeEnv:r,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:M.object({threads:s}).required(),storage:M.object({writeAsync:Z.required(),overlappingSync:Z.optional(),caching:Z.optional(),compression:Z.optional(),noReadAhead:Z.optional(),path:c,prefetchWrites:Z.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(sb,"configValidator");function Td(e){return $C.existsSync(e)?null:`Specified path ${e} does not exist.`}o(Td,"doesPathExist");function nb(e,t){if(e===null)return;let r=Td(e);return r?t.message(r):e}o(nb,"validatePemFile");function ib(e,t){M.assert(e,Vt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Td(e);if(r)return t.message(r)}o(ib,"validatePath");function ob(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(XC);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(zC):e}o(ob,"validateRotationMaxSize");function ab(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(ZC);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(eb):e}o(ab,"validateRotationInterval");function _b(e,t){let r=t.state.path.join("."),s=KC.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||fd();return i=Math.round(Math.min(i,fd())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),WC.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}o(_b,"setDefaultThreads");function to(e,t){if(!ro.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ro.isEmpty(ur))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return pn.join(ur,JC);case"logging.root":return pn.join(ur,hd);case"clustering.leafServer.streams.path":return pn.join(ur,"clustering","leaf");case"storage.path":return pn.join(ur,QC.SCHEMA_DIR_NAME);case"logging.rotation.path":return pn.join(ur,hd);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(to,"setDefaultRoot");function cb(e){let t=M.object({routes:so});return jC.validateBySchema({routes:e},t)}o(cb,"routesValidator")});var Fe=f((Vk,Ld)=>{"use strict";var et=T(),qe=O(),_e=p(),{configValidator:ub,routesValidator:md}=z_(),ze=require("fs-extra"),lb=require("yaml"),Ot=require("path"),Eb=require("is-number"),gd=require("properties-reader"),db=require("lodash"),{handleHDBError:Sb}=X(),{HTTP_STATUS_CODES:fb,HDB_ERROR_MSGS:no}=Xe(),hb=require("minimist"),{SCHEMAS_PARAM_CONFIG:Nn,CONFIG_PARAMS:lr,CONFIG_PARAM_MAP:kt}=et,Tb="Unable to get config value because config is uninitialized",Rb="Config successfully initialized",mb="Error backing up config file",Ab="Empty parameter sent to getConfigValue",pd=Ot.join(et.PACKAGE_ROOT,"config","yaml",et.HDB_DEFAULT_CONFIG_FILE),gb="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ad={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},io,Se;Ld.exports={createConfigFile:pb,getDefaultConfig:Nb,getConfigValue:Od,initConfig:Id,flattenConfig:kr,updateConfigValue:Cd,updateConfigObject:Ib,getConfiguration:Lb,setConfiguration:yb,readConfigFile:sc,getClusteringRoutes:wb,initOldConfig:bd,getConfigFromFile:Mb};function pb(e){let t=ws(pd);io=kr(t.toJSON());let r;for(let a in e){let _=kt[a.toLowerCase()];if(_===lr.SCHEMAS){r=e[a];continue}if(_!==void 0){let c=_.split("_"),u=ec(_,e[a]);try{t.setIn([...c],u)}catch(l){_e.error(l)}}}r&&Nd(t,r),rc(t);let s=t.toJSON();Se=kr(s);let n=t.getIn(["rootPath"]),i=Ot.join(n,et.HDB_CONFIG_FILE);ze.createFileSync(i),ze.writeFileSync(i,String(t)),_e.trace(`Config file written to ${i}`)}o(pb,"createConfigFile");function Nd(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!qe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Nn.TABLES))for(let i in s[n][Nn.TABLES])for(let a in s[n][Nn.TABLES][i]){let _=s[n][Nn.TABLES][i][a],c=[lr.SCHEMAS,n,Nn.TABLES,i,a];e.hasIn(c)?e.setIn(c,_):e.addIn(c,_)}else for(let i in s[n]){let a=s[n][i],_=[lr.SCHEMAS,n,i];e.hasIn(_)?e.setIn(_,a):e.addIn(_,a)}}}catch(s){_e.error("Error parsing schemas CLI/env config arguments",s)}}o(Nd,"setSchemasConfig");function Nb(e){if(io===void 0){let r=ws(pd);io=kr(r.toJSON())}let t=kt[e.toLowerCase()];if(t!==void 0)return io[t.toLowerCase()]}o(Nb,"getDefaultConfig");function Od(e){if(qe.isEmpty(e)){_e.error(Ab);return}if(Se===void 0){_e.trace(Tb);return}let t=kt[e.toLowerCase()];if(t!==void 0)return Se[t.toLowerCase()]}o(Od,"getConfigValue");function tc(e){let t=hb(process.argv);return t.ROOTPATH?Ot.join(t.ROOTPATH,et.HDB_CONFIG_FILE):gd(e).get(et.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(tc,"getConfigFilePath");function Id(e=!1){if(Se===void 0||e){let t=qe.getPropsFilePath();try{ze.accessSync(t,ze.constants.F_OK|ze.constants.R_OK)}catch(i){throw _e.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=tc(t),s;if(r.includes("config/settings.js"))try{bd(r);return}catch(i){if(i.code!==et.NODE_ERROR_CODES.ENOENT)throw i}try{s=ws(r)}catch(i){if(i.code===et.NODE_ERROR_CODES.ENOENT){_e.trace(`HarperDB config file not found at ${r}.
|
|
6
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Ob(s,r),rc(s);let n=s.toJSON();if(Se=kr(n),Se.logging_rotation_rotate)for(let i in Ad)Se[i]&&_e.error(`Config ${Ad[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(Rb)}}o(Id,"initConfig");function Ob(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ot.join(r,et.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ot.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ot.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),ze.writeFileSync(t,String(e)))}o(Ob,"checkForUpdatedConfig");function rc(e){let t=e.toJSON(),r=ub(t);if(r.error)throw no.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}o(rc,"validateConfig");function Ib(e,t){Se===void 0&&(Se={});let r=kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}Se[r.toLowerCase()]=t}o(Ib,"updateConfigObject");function Cd(e,t,r=void 0,s=!1,n=!1){Se===void 0&&Id();let i=Od(kt.hdb_root),a=Ot.join(i,et.HDB_CONFIG_FILE),_=ws(a),c;if(r===void 0&&e.toLowerCase()===lr.SCHEMAS)c=t;else if(r===void 0){let E=kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=ec(E,t);_.setIn([...d],S)}else for(let E in r){let d=kt[E.toLowerCase()];if(d===lr.SCHEMAS){c=r[E];continue}if(d!==void 0){let S=d.split("_"),R=ec(d,r[E]);try{_.setIn([...S],R)}catch(m){_e.error(m)}}}c&&Nd(_,c),rc(_);let u=_.getIn(["rootPath"]),l=Ot.join(u,et.HDB_CONFIG_FILE);s===!0&&Cb(a,u),ze.writeFileSync(l,String(_)),n&&(Se=kr(_.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Cd,"updateConfigValue");function Cb(e,t){try{let r=Ot.join(t,"backup",`${et.HDB_CONFIG_FILE}.bak`);ze.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(mb),_e.error(r)}}o(Cb,"backupConfigFile");var bb=["schemas"];function kr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!bb.includes(r)){let s=kr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(kr,"flattenConfig");function ec(e,t){if(e===lr.CLUSTERING_NODENAME||e===lr.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(Eb(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||qe.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return qe.autoCast(t)}o(ec,"castConfigValue");function Lb(){let e=qe.getPropsFilePath(),t=tc(e);return ws(t).toJSON()}o(Lb,"getConfiguration");async function yb(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Cd(void 0,void 0,n,!0),gb}catch(i){throw typeof i=="string"||i instanceof String?Sb(i,i,fb.BAD_REQUEST,void 0,void 0,!0):i}}o(yb,"setConfiguration");function sc(){let e=qe.getPropsFilePath();try{ze.accessSync(e,ze.constants.F_OK|ze.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=tc(e);return ws(t).toJSON()}o(sc,"readConfigFile");function ws(e){return lb.parseDocument(ze.readFileSync(e,"utf8"),{simpleKeys:!0})}o(ws,"parseYamlDoc");function wb(){let e=sc(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=qe.isEmptyOrZeroLength(t)?[]:t;let r=md(t);if(r)throw no.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=qe.isEmptyOrZeroLength(s)?[]:s;let n=md(s);if(n)throw no.CONFIG_VALIDATION(n.message);if(!qe.isEmptyOrZeroLength(s)&&!qe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(_=>_.host===a.host&&_.port===a.port));if(!qe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw no.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(wb,"getClusteringRoutes");function bd(e){let t=gd(e);Se={};for(let r in kt){let s=t.get(r.toUpperCase());if(qe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=kt[r].toLowerCase();n===lr.LOGGING_ROOT?Se[n]=Ot.dirname(s):Se[n]=s}return Se}o(bd,"initOldConfig");function Mb(e){let t=sc();return db.get(t,e.replaceAll("_","."))}o(Mb,"getConfigFromFile")});var G=f((Yk,wd)=>{"use strict";var nc=require("fs-extra"),It=require("path"),Db=require("os"),Ub=require("properties-reader"),On=p(),Ms=O(),L=T(),oo=Fe(),Pb="Error initializing environment manager",ao="BOOT_PROPS_FILE_PATH",yd=!1,Hb={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Yt={};wd.exports={BOOT_PROPS_FILE_PATH:ao,getHdbBasePath:Bb,setHdbBasePath:vb,get:Gb,initSync:Fb,setProperty:v,initTestEnvironment:xb};function Bb(){return Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Bb,"getHdbBasePath");function vb(e){Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(vb,"setHdbBasePath");function Gb(e){let t=oo.getConfigValue(e);return t===void 0?Yt[e]:t}o(Gb,"get");function v(e,t){Hb[e]&&(Yt[e]=t),oo.updateConfigObject(e,t)}o(v,"setProperty");function qb(){let e;try{e=Ms.getPropsFilePath(),nc.accessSync(e,nc.constants.F_OK|nc.constants.R_OK),yd=!0;let t=Ub(e);return Yt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Yt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Yt[ao]=e,!0}catch{return On.trace(`Environment manager found no properties file at ${e}`),!1}}o(qb,"doesPropFileExist");function Fb(e=!1){try{(yd||qb())&&(oo.initConfig(e),Yt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=oo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){On.error(Pb),On.error(t),console.error(t),process.exit(1)}}o(Fb,"initSync");function xb(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:_}=e,c=It.join(__dirname,"../../","unitTests");Yt[ao]=It.join(c,"hdb_boot_properties.file"),v(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,It.join(c,"settings.test")),v(L.HDB_SETTINGS_NAMES.INSTALL_USER,Db.userInfo().username),v(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,It.join(c,"envDir","utility","keys","privateKey.pem")),v(L.HDB_SETTINGS_NAMES.CERT_KEY,It.join(c,"envDir","utility","keys","certificate.pem")),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,It.join(c,"envDir","utility","keys","privateKey.pem")),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,It.join(c,"envDir","utility","keys","certificate.pem")),v(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),v(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,It.join(c,"envDir","log")),v(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),v(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),v(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),v(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,It.join(c,"envDir")),v(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ms.isEmpty(n)?!0:n),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ms.isEmpty(n)?!0:n),v(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),v(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ms.isEmpty(i)?!1:i),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Ms.isEmpty(i)?!1:i),v(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),v(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),v(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),v(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),v(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,It.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),v(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ms.isEmpty(_)?!1:_),a&&(v("CORS_ACCESSLIST",a),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(v(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(v(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(v(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),v(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ao}. Please check your boot props and settings files`;On.fatal(r),On.error(t)}}o(xb,"initTestEnvironment")});var ct=f((Wk,Dd)=>{"use strict";var{platform:Kk}=require("os"),Vb="nats-server.zip",ic="nats-server",kb=process.platform==="win32"?`${ic}.exe`:ic,oc="HDB",Yb=/^[^\s.,*>]+$/,Md="__request__",$b=o(e=>`${e}.${Md}`,"REQUEST_SUBJECT"),Kb={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Wb={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Qb={HUB:"hub.pid",LEAF:"leaf.pid"},jb={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jb={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:oc,deliver_subject:"__HDB__.WORKQUEUE"},Xb={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:oc,deliver_subject:"HDB.SCHEMAQUEUE"},Zb={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:oc,deliver_subject:"HDB.USERQUEUE"},zb={SUCCESS:"success",ERROR:"error"},eL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tL={TXN:"txn",MSGID:"msgid"},Ds={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rL={[Ds.ERR]:1,[Ds.WRN]:2,[Ds.INF]:3,[Ds.DBG]:4,[Ds.TRC]:5},sL={debug:"-D",trace:"-DVV"};Dd.exports={NATS_SERVER_ZIP:Vb,NATS_SERVER_NAME:ic,NATS_BINARY_NAME:kb,PID_FILES:Qb,NATS_CONFIG_FILES:Wb,SERVER_SUFFIX:jb,WORK_QUEUE_CONSUMER_NAMES:Jb,SCHEMA_QUEUE_CONSUMER_NAMES:Xb,USER_QUEUE_CONSUMER_NAMES:Zb,NATS_TERM_CONSTRAINTS_RX:Yb,REQUEST_SUFFIX:Md,UPDATE_REMOTE_RESPONSE_STATUSES:zb,CLUSTER_STATUS_STATUSES:eL,REQUEST_SUBJECT:$b,SUBJECT_PREFIXES:tL,MSG_HEADERS:Kb,LOG_LEVELS:Ds,LOG_LEVEL_FLAGS:sL,LOG_LEVEL_HIERARCHY:rL}});var Pd=f((jk,Ud)=>{"use strict";var nL=ct(),_o=class{constructor(t,r,s,n,i,a,_,c,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+nL.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:a,insecure:_,verify:c},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:_,verify:c}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(_o,"HubConfigObject");Ud.exports=_o});var vd=f((Xk,Bd)=>{"use strict";var Hd=ct(),co=class{constructor(t,r,s,n,i,a,_,c,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Hd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Hd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};o(co,"LeafConfigObject");Bd.exports=co});var qd=f((zk,Gd)=>{"use strict";var uo=class{constructor(t,r){this.user=t,this.password=r}};o(uo,"HdbUserObject");Gd.exports=uo});var xd=f((tY,Fd)=>{"use strict";var iL=ct(),lo=class{constructor(t,r){this.user=t+iL.SERVER_SUFFIX.ADMIN,this.password=r}};o(lo,"SysUserObject");Fd.exports=lo});var Us=f((sY,Yd)=>{"use strict";var kd=O(),Vd=T(),So=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ac=require("joi"),Eo={schema_format:{pattern:So,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},oL=ac.alternatives(ac.string().min(1).max(Eo.schema_length.maximum).pattern(So).messages({"string.pattern.base":"{:#label} "+Eo.schema_format.message}),ac.number()).required();function aL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Eo.schema_length.maximum?`'${e}' maximum of 250 characters`:So.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(aL,"checkValidTable");function _L(e,t){return kd.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(_L,"validateSchemaExists");function cL(e,t){let r=t.state.ancestors[0].schema;return kd.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(cL,"validateTableExists");function uL(e,t){return e.toLowerCase()===Vd.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Vd.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(uL,"validateSchemaName");Yd.exports={common_validators:Eo,schema_regex:So,hdb_schema_table:oL,validateSchemaExists:_L,validateTableExists:cL,validateSchemaName:uL,checkValidTable:aL}});var cc=f((iY,Kd)=>{var{hdb_schema_table:$d}=Us(),lL=Ze(),_c=require("joi"),EL={undefined:"undefined",null:"null"},dL=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||EL[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"),SL=_c.object({schema:$d,table:$d,records:_c.array().items(_c.object().custom(dL)).required()});Kd.exports=function(e){return lL.validateBySchema(e,SL)}});var uc=f((aY,Wd)=>{"use strict";var fo=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};o(fo,"BridgeMethods");Wd.exports=fo});var Er=f((lY,zd)=>{"use strict";var Qd=Xe().LMDB_ERRORS_ENUM,cY=require("lmdb"),fL=de(),uY=require("buffer").Buffer,{OVERFLOW_MARKER:jd,MAX_SEARCH_KEY_LENGTH:ho}=fL,Jd=["number","string","symbol","boolean","bigint"];function hL(e){if(e=e?.database||e,!e)throw new Error(Qd.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Qd.INVALID_ENVIRONMENT)}o(hL,"validateEnv");function TL(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(TL,"stringifyData");function RL(e){return e instanceof Date?e.valueOf():e}o(RL,"convertKeyValueToWrite");function mL(e){if(e==null)return;if(Jd.includes(typeof e))return e.length>ho?[e.slice(0,ho)+jd]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Jd.includes(typeof n)&&(n.length>ho?t.push(n.slice(0,ho)+jd):t.push(n))}}return t}o(mL,"getIndexedValues");var To=0,Xd=0;function Zd(){Xd=Date.now()-performance.now()}o(Zd,"adjustStartTime");Zd();var AL=6e4;setInterval(Zd,AL).unref();function gL(){let e=performance.now()+Xd;return e>To?(To=e,e):(To+=488e-6,To)}o(gL,"getNextMonotonicTime");zd.exports={validateEnv:hL,stringifyData:TL,convertKeyValueToWrite:RL,getNextMonotonicTime:gL,getIndexedValues:mL}});var tS=f((dY,eS)=>{"use strict";var Ro=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Ro,"DBIDefinition");eS.exports=Ro});var nS=f((fY,sS)=>{"use strict";var lc=G(),rS=T();lc.initSync();var pL=lc.get(rS.CONFIG_PARAMS.STORAGE_COMPRESSION),NL=lc.get(rS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mo=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=pL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=NL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(mo,"OpenDBIObject");sS.exports=mo});var aS=f((TY,oS)=>{"use strict";var Ps=G(),In=T();Ps.initSync();var OL=Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ps.get(In.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",iS=Ps.get(In.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),IL=Ps.get(In.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ao=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=OL,iS!==void 0&&(this.overlappingSync=iS),this.noReadAhead=IL}};o(Ao,"OpenEnvironmentObject");oS.exports=Ao});var k=f((mY,SS)=>{"use strict";var Ec=require("lmdb"),tt=require("fs-extra"),ut=require("path"),po=Er(),_S=p(),fe=Xe().LMDB_ERRORS_ENUM,No=tS(),dc=nS(),cS=aS(),dr=de(),lt=dr.INTERNAL_DBIS_NAME,uS=dr.DBI_DEFINITION_NAME,CL="data.mdb",bL="lock.mdb",Cn=".mdb",LL="-lock",go=class{constructor(t,r,s=!1){this.dbi=rt(t,r),this.key_type=this.dbi[dr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ec.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(go,"TransactionCursor");function Sc(e,t){if(e===void 0)throw new Error(fe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fe.ENV_NAME_REQUIRED)}o(Sc,"pathEnvNameValidation");async function fc(e,t,r=!0){try{await tt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(fe.INVALID_BASE_PATH):s}try{let s=ut.join(e,t+Cn);return await tt.access(s,tt.constants.R_OK|tt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await tt.access(ut.join(e,t,CL),tt.constants.R_OK|tt.constants.F_OK),ut.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(fe.INVALID_ENVIRONMENT)}else throw new Error(fe.INVALID_ENVIRONMENT);throw s}}o(fc,"validateEnvironmentPath");function Oo(e,t){if(po.validateEnv(e),t===void 0)throw new Error(fe.DBI_NAME_REQUIRED)}o(Oo,"validateEnvDBIName");async function yL(e,t,r=!1,s=!1){Sc(e,t),t=t.toString();try{return await fc(e,t,s),hc(e,t,r)}catch(n){if(n.message===fe.INVALID_ENVIRONMENT){let i=ut.join(e,t);await tt.mkdirp(s?i:e);let a=new cS(s?i:i+Cn,!1),_=Ec.open(a);_.dbis=Object.create(null);let c=new dc(!1);_.openDB(lt,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Tc(e,t,r);return _[dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}o(yL,"createEnvironment");async function wL(e,t,r,s=!0){let n=await hc(e,t);if(r===void 0)throw new Error(fe.DESTINATION_PATH_REQUIRED);try{await tt.access(ut.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(fe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(wL,"copyEnvironment");async function hc(e,t,r=!1){Sc(e,t),t=t.toString();let s=Tc(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fc(e,t),i=ut.join(e,t+Cn),a=n!=i,_=new cS(n,a),c=Ec.open(_);c.dbis=Object.create(null);let u=ES(c);for(let l=0;l<u.length;l++)rt(c,u[l]);return c[dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}o(hc,"openEnvironment");async function ML(e,t,r=!1){Sc(e,t),t=t.toString();let s=ut.join(e,t+Cn),n=await fc(e,t);if(global.lmdb_map!==void 0){let i=Tc(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await lS(a),delete global.lmdb_map[i]}}await tt.remove(n),await tt.remove(n===s?n+LL:ut.join(ut.dirname(n),bL))}o(ML,"deleteEnvironment");async function lS(e){po.validateEnv(e);let t=e[dr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(lS,"closeEnvironment");function Tc(e,t,r=!1){let n=`${ut.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(Tc,"getCachedEnvironmentName");function DL(e){po.validateEnv(e);let t=Object.create(null),r=rt(e,lt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==lt)try{t[s]=Object.assign(new No,n)}catch{_S.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(DL,"listDBIDefinitions");function ES(e){po.validateEnv(e);let t=[],r=rt(e,lt);for(let{key:s}of r.getRange({start:!1}))s!==lt&&t.push(s);return t}o(ES,"listDBIs");function UL(e,t){let s=rt(e,lt).getEntry(t),n=new No;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{_S.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(UL,"getDBIDefinition");function dS(e,t,r,s=!1){if(Oo(e,t),t=t.toString(),t===lt)throw new Error(fe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rt(e,t)}catch(n){if(n.message===fe.DBI_DOES_NOT_EXIST){let i=new dc(r,s===!0),a=e.openDB(t,i),_=new No(r===!0,s);return a[uS]=_,rt(e,lt).putSync(t,_),e.dbis[t]=a,a}throw n}}o(dS,"createDBI");function rt(e,t){if(Oo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==lt?r=UL(e,t):r=new No,r===void 0)throw new Error(fe.DBI_DOES_NOT_EXIST);let s;try{let n=new dc(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(fe.DBI_DOES_NOT_EXIST):n}return s[uS]=r,e.dbis[t]=s,s}o(rt,"openDBI");function PL(e,t){Oo(e,t),t=t.toString();let r=rt(e,t),s=r.getStats();return r[dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(PL,"statDBI");async function HL(e,t){try{let r=ut.join(e,t+Cn);return(await tt.stat(r)).size}catch{throw new Error(fe.INVALID_ENVIRONMENT)}}o(HL,"environmentDataSize");function BL(e,t){if(Oo(e,t),t=t.toString(),t===lt)throw new Error(fe.CANNOT_DROP_INTERNAL_DBIS_NAME);rt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rt(e,lt).removeSync(t)}o(BL,"dropDBI");function vL(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{rt(e,n)}catch(i){if(i.message===fe.DBI_DOES_NOT_EXIST)dS(e,n,n!==t,n===t);else throw i}}}o(vL,"initializeDBIs");SS.exports={openDBI:rt,openEnvironment:hc,createEnvironment:yL,listDBIs:ES,listDBIDefinitions:DL,createDBI:dS,dropDBI:BL,statDBI:PL,deleteEnvironment:ML,initializeDBIs:vL,TransactionCursor:go,environmentDataSize:HL,copyEnvironment:wL,closeEnvironment:lS}});var hS=f((gY,fS)=>{"use strict";var Io=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Io,"InsertRecordsResponseObject");fS.exports=Io});var RS=f((NY,TS)=>{"use strict";var Co=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Co,"UpdateRecordsResponseObject");TS.exports=Co});var AS=f((IY,mS)=>{"use strict";var bo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(bo,"UpsertRecordsResponseObject");mS.exports=bo});var $r=f((wY,NS)=>{"use strict";var GL=k(),qL=hS(),FL=RS(),xL=AS(),Ct=Er(),bn=Xe().LMDB_ERRORS_ENUM,VL=de(),$t=T(),kL=O(),YL=require("uuid"),bY=require("lmdb"),{handleHDBError:$L,hdb_errors:KL}=X(),{OVERFLOW_MARKER:LY,MAX_SEARCH_KEY_LENGTH:yY}=VL,gS=G();gS.initSync();var Lo=gS.get($t.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rc=$t.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yr=$t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WL(e,t,r,s,n=Ct.getNextMonotonicTime()){pc(e,t,r,s),mc(e,t,r);let i=new qL,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];pS(u,!0,n);let l=QL(e,t,r,u),E=u[t];a.push(l),_.push(E)}return Ac(a,_,s,i,n)}o(WL,"insertRecords");function QL(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let _=s[a];if(typeof _=="function"){let l=_([[{}]]);Array.isArray(l)&&(_=l[0][$t.FUNC_VAL],s[a]=_)}let c=Ct.getIndexedValues(_),u=e.dbis[a];if(c){Lo&&u.prefetch(c.map(l=>({key:l,value:n})),yo);for(let l=0,E=c.length;l<E;l++)u.put(c[l],n)}}Lo&&e.dbis[t].prefetch([n],yo),e.dbis[t].put(n,s,s[Yr])})}o(QL,"insertRecord");function jL(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(jL,"removeSkippedRecords");function pS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yr]))&&(e[Yr]=r||(r=Ct.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Rc]))&&(e[Rc]=r||Ct.getNextMonotonicTime()):delete e[Rc]}o(pS,"setTimestamps");function mc(e,t,r){r.indexOf($t.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push($t.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf($t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push($t.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),GL.initializeDBIs(e,t,r)}o(mc,"initializeTransaction");async function JL(e,t,r,s,n=Ct.getNextMonotonicTime()){pc(e,t,r,s),mc(e,t,r);let i=new FL,a=[],_=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=gc(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}_.push(d),c.push(E)}return Ac(_,c,s,i,n,a)}o(JL,"updateRecords");async function XL(e,t,r,s,n=Ct.getNextMonotonicTime()){try{pc(e,t,r,s)}catch(c){throw $L(c,c.message,KL.HTTP_STATUS_CODES.BAD_REQUEST)}mc(e,t,r);let i=new xL,a=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],l;kL.isEmpty(u[t])?(l=YL.v4(),u[t]=l):l=u[t];let E=gc(e,t,u,l,i,!1,n);a.push(E),_.push(l)}return Ac(a,_,s,i,n)}o(XL,"upsertRecords");async function Ac(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let _=0,c=a.length;_<c;_++)a[_]===!0?s.written_hashes.push(t[_]):(s.skipped_hashes.push(t[_]),i.push(_));return s.txn_time=n||Ct.getNextMonotonicTime(),jL(r,i),s}o(Ac,"finalizeWrite");function gc(e,t,r,s,n,i=!1,a){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,l=u;if(!u){if(i)return!1;u={}}if(pS(r,!l,a),Number.isInteger(r[Yr])&&u[Yr]>r[Yr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let H=m([[u]]);Array.isArray(H)&&(m=H[0][$t.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=Ct.getIndexedValues($);if(A){Lo&&b.prefetch(A.map(H=>({key:H,value:s})),yo);for(let H=0,Ee=A.length;H<Ee;H++)b.remove(A[H],s)}if(A=Ct.getIndexedValues(m),A){Lo&&b.prefetch(A.map(H=>({key:H,value:s})),yo);for(let H=0,Ee=A.length;H<Ee;H++)b.put(A[H],s)}}let S=Object.assign({},u,r);_.put(s,S,S[Yr])},"do_put");return c?E=_.ifVersion(s,c.version,d):E=_.ifNoExists(s,d),E.then(S=>S?!0:gc(e,t,r,s,n,i,a))}o(gc,"updateUpsertRecord");function ZL(e,t,r){if(Ct.validateEnv(e),t===void 0)throw new Error(bn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bn.WRITE_ATTRIBUTES_REQUIRED):new Error(bn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(ZL,"validateBasic");function pc(e,t,r,s){if(ZL(e,t,r),!Array.isArray(s))throw s===void 0?new Error(bn.RECORDS_REQUIRED):new Error(bn.RECORDS_MUST_BE_ARRAY)}o(pc,"validateWrite");function yo(){}o(yo,"noop");NS.exports={insertRecords:WL,updateRecords:JL,upsertRecords:XL}});var K=f((DY,yS)=>{"use strict";var Dn=T(),zL=O(),Le=G(),Un=require("path"),ey=require("minimist"),OS=require("fs-extra"),IS=require("lodash");Le.initSync();var{CONFIG_PARAMS:Sr,SCHEMAS_PARAM_CONFIG:Ln,SYSTEM_SCHEMA_NAME:wo}=Dn,yn,wn,Mn;function CS(){if(yn!==void 0)return yn;if(Le.getHdbBasePath()!==void 0)return yn=Le.get(Sr.STORAGE_PATH)||Un.join(Le.getHdbBasePath(),Dn.SCHEMA_DIR_NAME),yn}o(CS,"getBaseSchemaPath");function bS(){if(wn!==void 0)return wn;if(Le.getHdbBasePath()!==void 0)return wn=LS(wo),wn}o(bS,"getSystemSchemaPath");function ty(){if(Mn!==void 0)return Mn;if(Le.getHdbBasePath()!==void 0)return Mn=Le.get(Dn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Un.join(Le.getHdbBasePath(),Dn.TRANSACTIONS_DIR_NAME),Mn}o(ty,"getTransactionAuditStoreBasePath");function ry(e,t){let r=Le.get(Sr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Un.join(ty(),e.toString())}o(ry,"getTransactionAuditStorePath");function LS(e,t){e=e.toString(),t=t&&t.toString();let r=Le.get(Dn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Un.join(CS(),e)}o(LS,"getSchemaPath");function sy(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ey(process.argv));let s=r[Sr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!zL.isObject(s))throw a;i=s}for(let a of i){let _=a[wo];if(!_)continue;let c=Le.get(Sr.SCHEMAS);c=c??{};let u=_?.tables?.[t]?.[Ln.PATH];if(u)return IS.set(c,[wo,Ln.TABLES,t,Ln.PATH],u),Le.setProperty(Sr.SCHEMAS,c),u;let l=_?.[Ln.PATH];if(l)return IS.set(c,[wo,Ln.PATH],l),Le.setProperty(Sr.SCHEMAS,c),l}}let n=r[Sr.STORAGE_PATH.toUpperCase()];if(n){if(!OS.pathExistsSync(n))throw new Error(n+" does not exist");let i=Un.join(n,e);return OS.mkdirsSync(i),Le.setProperty(Sr.STORAGE_PATH,n),i}return bS()}o(sy,"initSystemSchemaPaths");function ny(){yn=void 0,wn=void 0,Mn=void 0}o(ny,"resetPaths");yS.exports={getBaseSchemaPath:CS,getSystemSchemaPath:bS,getTransactionAuditStorePath:ry,getSchemaPath:LS,initSystemSchemaPaths:sy,resetPaths:ny}});var Kt=f((PY,iy)=>{iy.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Nc=f((HY,wS)=>{var{common_validators:fr}=Us(),Pn=Ze(),Et="is required",W={schema:{presence:!0,format:fr.schema_format,length:fr.schema_length},table:{presence:!0,format:fr.schema_format,length:fr.schema_length},attribute:{presence:!0,format:fr.schema_format,length:fr.schema_length},hash_attribute:{presence:!0,format:fr.schema_format,length:fr.schema_length}};function Hn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(Hn,"makeAttributesStrings");function oy(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(oy,"schema_object");function ay(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(ay,"table_object");function _y(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence={message:Et},Pn.validateObject(e,W)}o(_y,"create_table_object");function cy(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence={message:Et},W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(cy,"attribute_object");function uy(e){return e=Hn(e),W.schema.presence={message:Et},W.table.presence={message:Et},W.attribute.presence=!1,W.hash_attribute.presence=!1,Pn.validateObject(e,W)}o(uy,"describe_table");function ly(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(ly,"validateTableResidence");wS.exports={schema_object:oy,create_table_object:_y,table_object:ay,attribute_object:cy,describe_table:uy,validateTableResidence:ly}});var DS=f((vY,MS)=>{"use strict";var Ey=require("uuid"),Mo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ey.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(Mo,"CreateAttributeObject");MS.exports=Mo});var Uo=f((qY,US)=>{"use strict";var dy=DS(),Do=class extends dy{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Do,"LMDBCreateAttributeObject");US.exports=Do});var HS=f((xY,PS)=>{"use strict";PS.exports=fy;var Sy="inserted";function fy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(fy,"returnObject")});var Po=f((kY,FS)=>{"use strict";var hy=T(),Oc=k(),Ty=$r(),{getSystemSchemaPath:Ry,getSchemaPath:my}=K(),Ay=Kt(),gy=Nc(),py=Uo(),Ny=HS(),{handleHDBError:BS,hdb_errors:GS}=X(),vS=O(),{HTTP_STATUS_CODES:Oy}=GS,Ic=Ay.hdb_attribute,qS=[];for(let e=0;e<Ic.attributes.length;e++)qS.push(Ic.attributes[e].attribute);var Iy="inserted";FS.exports=Cy;async function Cy(e){let t=gy.attribute_object(e);if(t)throw BS(new Error,t.message,GS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&vS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw BS(new Error,r,Oy.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vS.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new py(e.schema,e.table,e.attribute,e.id);try{let i=await Oc.openEnvironment(my(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Oc.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await Oc.openEnvironment(Ry(),hy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:_,skipped_hashes:c}=await Ty.insertRecords(a,Ic.hash_attribute,qS,[n]);return Ny(Iy,_,{records:[n]},c)}catch(i){throw i}}o(Cy,"lmdbCreateAttribute")});var Ho=f((KY,VS)=>{"use strict";var Wt=O(),xS=p(),$Y=cc();VS.exports=by;function by(e){if(Wt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Wt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Wt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(Wt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Wt.isEmptyOrZeroLength(a[r]))throw xS.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Wt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw xS.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Wt.isEmpty(a[r])&&a[r]!==""&&s.has(Wt.autoCast(a[r]))&&(a.skip=!0),s.add(Wt.autoCast(a[r]));for(let _ in a)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(by,"insertUpdateValidate")});var vo=f((QY,kS)=>{"use strict";var Ly=T().OPERATIONS_ENUM,Bo=class{constructor(t,r,s,n,i=void 0){this.operation=Ly.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Bo,"InsertObject");kS.exports=Bo});var qo=f((XY,YS)=>{"use strict";var JY=vo(),Go=T(),bc=O(),Cc=p(),yy=require("uuid"),{handleHDBError:Bn,hdb_errors:wy}=X(),{HDB_ERROR_MSGS:vn,HTTP_STATUS_CODES:Gn}=wy;YS.exports=My;function My(e,t,r){for(let n=0;n<t.length;n++)Dy(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Uy(i,r,e.operation)}}o(My,"processRows");function Dy(e){if(Buffer.byteLength(String(e))>Go.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Bn(new Error,vn.ATTR_NAME_LENGTH_ERR(e),Gn.BAD_REQUEST,void 0,void 0,!0);if(bc.isEmptyOrZeroLength(e)||bc.isEmpty(e.trim()))throw Bn(new Error,vn.ATTR_NAME_NULLISH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}o(Dy,"validateAttribute");function Uy(e,t,r){if(!e.hasOwnProperty(t)||bc.isEmptyOrZeroLength(e[t])){if(r===Go.OPERATIONS_ENUM.INSERT||r===Go.OPERATIONS_ENUM.UPSERT){e[t]=yy.v4();return}throw Cc.error("Update transaction aborted due to record with no hash value:",e),Bn(new Error,vn.RECORD_MISSING_HASH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Go.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cc.error(e),Bn(new Error,vn.HASH_VAL_LENGTH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Cc.error(e),Bn(new Error,vn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Gn.BAD_REQUEST,void 0,void 0,!0)}o(Uy,"validateHash")});var KS=f((zY,$S)=>{"use strict";var Fo=class{constructor(t,r){this.type=t,this.message=r}};o(Fo,"ITCEventObject");$S.exports=Fo});var xo=f((t$,jS)=>{var Py=require("crypto"),WS=9;function Hy(e){let t=vy(WS),r=QS(e+t);return t+r}o(Hy,"createHash");function By(e,t){let r=e.substr(0,WS),s=r+QS(t+r);return e===s}o(By,"validateHash");function vy(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(vy,"generateSalt");function QS(e){return Py.createHash("md5").update(e).digest("hex")}o(QS,"md5");jS.exports={hash:Hy,validate:By}});var XS=f((s$,JS)=>{"use strict";var hr=T(),qn=class{constructor(t=0,r=hr.STORAGE_TYPES_ENUM.LMDB,s=hr.LICENSE_VALUES.API_CALL_DEFAULT,n=hr.RAM_ALLOCATION_ENUM.DEFAULT,i=hr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o(qn,"BaseLicense");var Vo=class extends qn{constructor(t=0,r=hr.STORAGE_TYPES_ENUM.LMDB,s=hr.LICENSE_VALUES.API_CALL_DEFAULT,n=hr.RAM_ALLOCATION_ENUM.DEFAULT,i=hr.LICENSE_VALUES.VERSION_DEFAULT,a,_=!1){super(t,r,s,n,i,a),this.enterprise=_}};o(Vo,"ExtendedLicense");JS.exports={BaseLicense:qn,ExtendedLicense:Vo}});var vs=f((i$,sf)=>{"use strict";var Bs=require("fs-extra"),ZS=xo(),zS=require("crypto"),Gy=require("moment"),qy=require("uuid").v4,me=p(),yc=require("path"),Fy=O(),xe=T(),xy=XS().ExtendedLicense,Hs="invalid license key format",Vy="061183",ky="mofi25",Yy="aes-256-cbc",$y=16,Ky=32,ef=G();ef.initSync();var Lc;sf.exports={validateLicense:tf,generateFingerPrint:Qy,licenseSearch:rf,getLicense:Xy};function wc(){return yc.join(ef.getHdbBasePath(),xe.LICENSE_KEY_DIR_NAME,xe.LICENSE_FILE_NAME)}o(wc,"getLicenseDirPath");function Wy(){let e=wc();return yc.join(e,xe.LICENSE_FILE_NAME)}o(Wy,"getLicenseFilePath");function Mc(){let e=wc();return yc.join(e,xe.REG_KEY_FILE_NAME)}o(Mc,"getFingerPrintFilePath");async function Qy(){let e=Mc();try{return await Bs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await jy();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Qy,"generateFingerPrint");async function jy(){let e=qy(),t=ZS.hash(e),r=Mc();try{await Bs.mkdirp(wc()),await Bs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(jy,"writeFingerprint");function tf(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:xe.STORAGE_TYPES_ENUM.LMDB,api_call:xe.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:xe.RAM_ALLOCATION_ENUM.DEFAULT,version:xe.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=Mc(),n=!1;try{n=Bs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=Bs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(ky),_=a[1];_=Buffer.concat([Buffer.from(_)],$y);let c=Buffer.concat([Buffer.from(i)],Ky),u=zS.createDecipheriv(Yy,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=Jy(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hs),me.error(Hs),new Error(Hs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Hs),me.error(Hs),new Error(Hs)}else r.exp_date=l;r.exp_date<Gy().valueOf()&&(r.valid_date=!1),ZS.validate(a[1],`${Vy}${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(tf,"validateLicense");function Jy(e,t){try{let r=zS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Jy,"checkOldLicense");function rf(){let e=new xy;e.api_call=0;let t=[];try{t=Bs.readFileSync(Wy(),"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(Fy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=tf(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=xe.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=xe.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=xe.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=xe.LICENSE_VALUES.API_CALL_DEFAULT),Lc=e,e}o(rf,"licenseSearch");async function Xy(){return Lc||await rf(),Lc}o(Xy,"getLicense")});var Wr=f((a$,vc)=>{"use strict";var{Worker:Zy,MessageChannel:zy,parentPort:Qt,isMainThread:af,threadId:ew,workerData:tw}=require("worker_threads"),{PACKAGE_ROOT:rw}=T(),{join:sw,isAbsolute:nw,extname:iw}=require("path"),{totalmem:nf}=require("os"),Hc=T(),_f=G(),ow=vs(),ko=p(),aw=T();_f.initSync();var _w=_f.get(Hc.CONFIG_PARAMS.HTTP_THREADS)||1,cw=1024*1024,Tr=[],Kr=[],uw=50,cf=1e4,uf="restart",lf="request_thread_info",Ef="resource_report",df="thread_info",Sf="added-port",Dc;vc.exports={startWorker:Uc,restartWorkers:Bc,shutdownWorkers:Ew,workers:Tr,setMonitorListener:Tw,onMessageFromWorkers:dw,broadcast:Sw};function Uc(e,t={}){let s=ow.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||nf();n=Math.min(n,nf());let i=Math.min(Math.max(Math.floor(n/cw/(1+_w/4)),512),s||1/0),a=Math.min(Math.max(i>>7,16),64),_=[];for(let u of Kr){let{port1:l,port2:E}=new zy;u.postMessage({type:Sf,port:l},[l]),_.push(E)}iw(e)||(e+=".js");let c=new Zy(nw(e)?e:sw(rw,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:a},argv:process.argv.slice(2),workerData:{addPorts:_,name:t.name},transferList:_},t));return Yo(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{Uc(e,t)},c.on("error",u=>{console.error("Worker error:",u),ko.error("Worker error:",u)}),c.on("exit",u=>{Tr.splice(Tr.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<uw?(t.unexpectedRestarts=c.unexpectedRestarts+1,Uc(e,t)):ko.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{u.type===uf&&Bc(u.workerType),u.type===lf&&fw(c),u.type===Ef&&hw(c,u)}),Tr.push(c),mw(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(Uc,"startWorker");var lw=[Hc.THREAD_TYPES.HTTP];async function Bc(e=null,t=2,r=!0){if(af){t<1&&(t=t*Tr.length);let s=[];for(let n of Tr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Hc.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=lw.indexOf(n.name)>-1,a=new Promise(_=>{let c=setTimeout(()=>n.terminate(),cf*2).unref();n.on("exit",()=>{clearTimeout(c),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),_()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Qt.postMessage({type:uf,workerType:e})}o(Bc,"restartWorkers");function Ew(e){return Bc(e,1/0,!1)}o(Ew,"shutdownWorkers");var ff=[];function dw(e){ff.push(e)}o(dw,"onMessageFromWorkers");function Sw(e){for(let t of Kr)try{t.postMessage(e)}catch(r){ko.error("Unable to send message to worker",r)}}o(Sw,"broadcast");function fw(e){e.postMessage({type:df,workers:hf()})}o(fw,"sendThreadInfo");function hf(){let e=Date.now();return Tr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(hf,"getChildWorkerInfo");function hw(e,t){e.resources=t,e.resources.updated=Date.now()}o(hw,"recordResourceReport");var Pc;function Tw(e){Pc=e}o(Tw,"setMonitorListener");var Rw=1e3,of=!1;function mw(){of||(of=!0,setInterval(()=>{for(let e of Tr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Pc&&Pc()},Rw).unref())}o(mw,"startMonitoring");var Aw=1e3;if(Qt){Yo(Qt);for(let e of tw.addPorts)Yo(e);setInterval(()=>{let e=process.memoryUsage();Qt.postMessage({type:Ef,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Aw).unref(),Dc=o(()=>new Promise((e,t)=>{Qt.on("message",r),Qt.postMessage({type:lf});function r(s){s.type===df&&(Qt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else Dc=hf;vc.exports.getThreadInfo=Dc;function Yo(e,t){Kr.push(e),e.on("message",r=>{if(r.type===Sf)Yo(r.port);else for(let s of ff)s(r)}).on("close",()=>{Kr.splice(Kr.indexOf(e),1)}).on("exit",()=>{Kr.splice(Kr.indexOf(e),1)}),t||e.unref()}o(Yo,"addPort");af||Qt.on("message",async e=>{let{type:t}=e;t===aw.ITC_EVENT_TYPES.SHUTDOWN&&(Qt.unref(),setTimeout(()=>{ko.warn("Thread did not voluntarily terminate",ew),process.exit(0)},cf).unref())})});var mf=f((c$,Rf)=>{"use strict";var Gc=k(),gw=p(),Tf=Xe().LMDB_ERRORS_ENUM;Rf.exports=pw;async function pw(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Gc.closeEnvironment(global.lmdb_map[a])}catch(_){if(_.message!==Tf.ENV_REQUIRED)throw _}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Gc.closeEnvironment(global.lmdb_map[s]),await Gc.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Tf.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){gw.error(t)}}o(pw,"cleanLMDBMap")});var Df=f((E$,Mf)=>{"use strict";var qc=require("recursive-iterator"),Nw=require("alasql"),Fc=require("clone"),Af=O(),{handleHDBError:gf,hdb_errors:Ow}=X(),{HDB_ERROR_MSGS:pf,HTTP_STATUS_CODES:Nf}=Ow,Iw=["DISTINCT_ARRAY"],Of=Symbol("validateTables"),xc=Symbol("validateTable"),l$=Symbol("getAllColumns"),If=Symbol("validateAllColumns"),$o=Symbol("findColumn"),Cf=Symbol("validateOrderBy"),Fn=Symbol("validateSegment"),Vc=Symbol("validateColumn"),bf=Symbol("setColumnsForTable"),Lf=Symbol("checkColumnsForAsterisk"),yf=Symbol("validateGroupBy"),wf=Symbol("hasColumns"),Ko=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Of](),this[Lf](),this[If]()}[Of](){if(this[wf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xc](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xc](t.table)})}}[wf](){let t=!1,r=new qc(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[xc](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw gf(new Error,pf.SCHEMA_NOT_FOUND(t.databaseid),Nf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw gf(new Error,pf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Nf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Fc(s);n.table=Fc(t),this.attributes.push(n)})}[$o](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Lf](){let t=new qc(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[bf](r.tableid)}[bf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Nw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[If](){this[Fn](this.statement.columns,!1),this[Fn](this.statement.joins,!1),this[Fn](this.statement.where,!1),this[yf](this.statement.group,!1),this[Fn](this.statement.order,!0)}[Fn](t,r){if(!t)return;let s=new qc(t),n=[];for(let{node:i,path:a}of s)!Af.isEmpty(i)&&!Af.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Cf](i):n.push(this[Vc](i)));return n}[yf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Iw.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Fc(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[$o](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[$o](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((a,_)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Cf](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Vc](t)}[Vc](t){let r=this[$o](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};o(Ko,"SelectValidator");Mf.exports=Ko});var Bf=f((S$,Hf)=>{"use strict";var Uf=require("lodash"),xn=require("mathjs"),Cw=require("jsonata"),Pf=O();Hf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Uf.uniqWith(e,Uf.isEqual):e,searchJSON:bw,mad:Vn.bind(null,xn.mad),mean:Vn.bind(null,xn.mean),mode:Vn.bind(null,xn.mode),prod:Vn.bind(null,xn.prod),median:Vn.bind(null,xn.median)};function Vn(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Vn,"aggregateFunction");function bw(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(Pf.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Pf.isEmpty(this.__ala__.res[r])){let s=Cw(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(bw,"searchJSON")});var Gf=f((h$,vf)=>{"use strict";var re=require("moment"),kc="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;vf.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(kc),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(kc),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(kc)}});var Vf=f((T$,xf)=>{"use strict";var Lw=require("@turf/area"),yw=require("@turf/length"),ww=require("@turf/circle"),Mw=require("@turf/difference"),Dw=require("@turf/distance"),Uw=require("@turf/boolean-contains"),Pw=require("@turf/boolean-equal"),Hw=require("@turf/boolean-disjoint"),Bw=require("@turf/helpers"),qf=T(),U=O();xf.exports={geoArea:vw,geoLength:Gw,geoCircle:qw,geoDifference:Fw,geoDistance:Ff,geoNear:xw,geoContains:Vw,geoEqual:kw,geoCrosses:Yw,geoConvert:$w};var Yc="geo1 is required",$c="geo2 is required";function vw(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),Lw.default(e)}o(vw,"geoArea");function Gw(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),yw.default(e,{units:t||"kilometers"})}o(Gw,"geoLength");function qw(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),ww.default(e,t,{units:r||"kilometers"})}o(qw,"geoCircle");function Fw(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Mw(e,t)}o(Fw,"geoDifference");function Ff(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Dw.default(e,t,{units:r||"kilometers"})}o(Ff,"geoDistance");function xw(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ff(e,t,s)<=r}o(xw,"geoNear");function Vw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Uw.default(e,t)}o(Vw,"geoContains");function kw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),Pw.default(e,t)}o(kw,"geoEqual");function Yw(e,t){if(U.isEmpty(e))throw new Error(Yc);if(U.isEmpty(e))throw new Error($c);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!Hw.default(e,t)}o(Yw,"geoCrosses");function $w(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(qf.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qf.GEO_CONVERSION_ENUM).join(",")}`);return Bw[t](e,r)}o($w,"geoConvert")});var Yf=f((m$,kf)=>{var Qr=Bf(),Ve=Gf(),bt=Vf();kf.exports=e=>{e.aggr.mad=e.aggr.MAD=Qr.mad,e.aggr.mean=e.aggr.MEAN=Qr.mean,e.aggr.mode=e.aggr.MODE=Qr.mode,e.aggr.prod=e.aggr.PROD=Qr.prod,e.aggr.median=e.aggr.MEDIAN=Qr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ve.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ve.current_time,e.fn.extract=e.fn.EXTRACT=Ve.extract,e.fn.date=e.fn.DATE=Ve.date,e.fn.date_format=e.fn.DATE_FORMAT=Ve.date_format,e.fn.date_add=e.fn.DATE_ADD=Ve.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ve.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ve.date_diff,e.fn.now=e.fn.NOW=Ve.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ve.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ve.get_server_time,e.fn.getdate=e.fn.GETDATE=Ve.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ve.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bt.geoNear}});var Wf=f((A$,Kf)=>{"use strict";var kn=require("lodash"),he=require("alasql");he.options.cache=!1;var Kw=Yf(),$f=require("clone"),Wo=require("recursive-iterator"),y=p(),D=O(),Gs=jr(),Ww=T(),{hdb_errors:Qw}=X(),jw="IS NULL",dt="There was a problem performing this search. Please check the logs and try again.";Kw(he);var Qo=class{constructor(t,r){if(D.isEmpty(t))throw y.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(dt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(dt)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(dt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(dt)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(dt)}}_getColumns(){let t=new Wo(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push($f(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=kn.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Wo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new he.yy.LogicValue({value:s}):r.right instanceof he.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new he.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new he.yy.LogicValue({value:i}):s instanceof he.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new he.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Wo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(Ww.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let _=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[a].ignore=_,_?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&kn.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await he.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push($f(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(D.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(jw)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=kn.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,_)),i.attribute!==_&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(c=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let l=await Gs.getDataByHash(_);for(let E of _.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(dt)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},_);E.search_value=l;let d=await Gs.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(dt)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];_.search_attribute=S.attribute,_.search_value=S.search_value;let R=await Gs.getDataByValue(_,S.operation);if(c)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(dt)}else try{_.search_attribute=n.attribute,_.search_value="*";let l=await Gs.getDataByValue(_);if(c)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(dt)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof he.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,a=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new he.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new he.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new he.yy.FuncValue:new he.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],_={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${l} ${E}`,R=this._convertColumnsToIndexes(S,n);d=await he.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=kn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:_,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Wo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let _=a.table.as?a.table.as:a.table.tableid;(!t[_]||t[_].indexOf(a.attribute)<0)&&s.push(a)}}s=kn.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(dt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},c=await Gs.getDataByHash(_),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=c.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(a=>{let _=a.aggregatorid?a.expression:a,c=a.aggregatorid?a.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();y.trace(`Final SQL: ${n}`),s=await he.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return y.error(Qw.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=n[i],u=new RegExp(`${c}.\`${a}\``,"g"),l=`${c}.[${_}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,_)=>{let c=new RegExp(`\`${a}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let a=await Gs.getDataByValue(i);for(let[_,c]of a)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=c[s.attribute]}catch(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(dt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(Qo,"SQLSearch");Kf.exports=Qo});var Jr=f((p$,jf)=>{"use strict";var Jw=Df();jf.exports={searchByConditions:eM,searchByHash:tM,searchByValue:rM,search:sM};var Kc=jr(),Qf=require("util"),Xw=Qf.callbackify(Kc.searchByHash),Zw=Qf.callbackify(Kc.searchByValue),zw=Wf();async function eM(e){return Kc.searchByConditions(e)}o(eM,"searchByConditions");function tM(e,t){try{Xw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(tM,"searchByHash");function rM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),Zw(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(rM,"searchByValue");function sM(e,t){try{let r=new Jw(e);r.validate(),new zw(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(sM,"search")});var $n=f((O$,zf)=>{"use strict";var Yn=require("crypto"),Xf="aes-256-cbc",nM=32,iM=16,Wc=64,Zf=32,oM=Wc+Zf,Jf=new Map;zf.exports={encrypt:aM,decrypt:_M,createNatsTableStreamName:cM};function aM(e){let t=Yn.randomBytes(nM),r=Yn.randomBytes(iM),s=Yn.createCipheriv(Xf,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(aM,"encrypt");function _M(e){let t=e.substr(0,Wc),r=e.substr(Wc,Zf),s=e.substr(oM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Yn.createDecipheriv(Xf,Buffer.from(t,"hex"),n),_=a.update(i);return _=Buffer.concat([_,a.final()]),_.toString()}o(_M,"decrypt");function cM(e,t){let r=`${e}.${t}`,s=Jf.get(r);return s||(s=Yn.createHash("md5").update(`${e}.${t}`).digest("hex"),Jf.set(r,s)),s}o(cM,"createNatsTableStreamName")});var jc=f((b$,eh)=>{"use strict";var uM=T(),C$=Er();function Qc(e,t){let r=Object.create(null);if(t.length===1&&uM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}o(Qc,"parseRow");function lM(e,t,r,s){let n=Qc(r,e);s.push(n)}o(lM,"searchAll");function EM(e,t,r,s){let n=Qc(r,e);s[t]=n}o(EM,"searchAllToMap");function dM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(dM,"iterateDBI");function Xr(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(Xr,"pushResults");function SM(e,t,r,s,n,i){t.toString().endsWith(e)&&Xr(t,r,s,n,i)}o(SM,"endsWith");function fM(e,t,r,s,n,i){t.toString().includes(e)&&Xr(t,r,s,n,i)}o(fM,"contains");function hM(e,t,r,s,n,i){t>e&&Xr(t,r,s,n,i)}o(hM,"greaterThanCompare");function TM(e,t,r,s,n,i){t>=e&&Xr(t,r,s,n,i)}o(TM,"greaterThanEqualCompare");function RM(e,t,r,s,n,i){t<e&&Xr(t,r,s,n,i)}o(RM,"lessThanCompare");function mM(e,t,r,s,n,i){t<=e&&Xr(t,r,s,n,i)}o(mM,"lessThanEqualCompare");eh.exports={parseRow:Qc,searchAll:lM,searchAllToMap:EM,iterateDBI:dM,endsWith:SM,contains:fM,greaterThanCompare:hM,greaterThanEqualCompare:TM,lessThanCompare:RM,lessThanEqualCompare:mM,pushResults:Xr}});var zr=f((D$,ah)=>{"use strict";var Rr=k(),y$=p(),ke=Er(),jo=de(),ee=Xe().LMDB_ERRORS_ENUM,w$=O(),AM=T(),Jo=jc(),{parseRow:gM}=Jo,M$=require("lmdb"),{OVERFLOW_MARKER:th,MAX_SEARCH_KEY_LENGTH:pM}=jo;function rh(e,t,r,s=!1,n=void 0,i=void 0){return Zr(e,t,r,(a,_)=>_.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(rh,"iterateFullIndex");function Kn(e,t,r,s,n,i=!1,a=void 0,_=void 0,c=!1,u=!1){return Zr(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:_,inclusiveEnd:i===!0?!c:!u,exclusiveStart:i===!0?u:c};return S===r?(A.values=!1,E.getRange(A).map(H=>({value:H}))):E.getRange(A)})}o(Kn,"iterateRangeBetween");function Zr(e,t,r,s){let n=e.database||e,i=Rr.openDBI(n,r);i[jo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rr.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let _=s(a,i,n,t);return _.transaction=a,e.database||(_.onDone=()=>{a.done()}),_}o(Zr,"setupTransaction");function sh(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(th)){if(!n)if(r)n=Rr.openDBI(e,r);else{let c=Rr.listDBIs(e);for(let u=0,l=c.length;u<l&&(n=Rr.openDBI(e,c[u]),!n[jo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(sh,"getOverflowCheck");function NM(e,t,r,s=!1,n=void 0,i=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Zr(e,t,t,(a,_,c)=>(Xo(r),r=Wn(c,r),_.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>gM(u.value,r))))}o(NM,"searchAll");function OM(e,t,r,s=!1,n=void 0,i=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);Xo(r),r=Wn(e.database||e,r);let a=new Map;for(let{key:_,value:c}of rh(e,t,t,s,n,i))a.set(_,Jo.parseRow(c,r));return a}o(OM,"searchAllToMap");function IM(e,t,r=!1,s=void 0,n=void 0){if(ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=rh(e,void 0,t,r,s,n),_=a.transaction,c=sh(_.database,_,void 0,t);for(let{key:u,value:l}of a){let E=c(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(IM,"iterateDBI");function CM(e,t){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Rr.statDBI(e,t).entryCount}o(CM,"countAll");function bM(e,t,r,s,n=!1,i=void 0,a=void 0){return mr(e,r,s),Zr(e,t,r,(_,c,u,l)=>(s=ke.convertKeyValueToWrite(s),l===r?c.get(s,{transaction:_,lazy:!0})===void 0?[]:[{key:s,value:s}]:c.getValues(s,{transaction:_,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(bM,"equals");function LM(e,t,r){return mr(e,t,r),Rr.openDBI(e,t).getValuesCount(r)}o(LM,"count");function yM(e,t,r,s,n=!1,i=void 0,a=void 0){return mr(e,r,s),Zr(e,null,r,(_,c)=>{s=ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of c.getKeys({transaction:_,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=c.getRange({transaction:_,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=c.getRange({transaction:_,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(yM,"startsWith");function wM(e,t,r,s,n=!1,i=void 0,a=void 0){return nh(e,t,r,s,n,i,a,!0)}o(wM,"endsWith");function nh(e,t,r,s,n=!1,i=void 0,a=void 0,_=!1){return mr(e,r,s),Zr(e,null,r,(c,u,l,E)=>{let d=sh(l,c,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:c,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(th)?u.getValues(S,{transaction:c}).map(m=>{let b=d(S,m);if(_?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(_?R.endsWith(s):R.includes(s))?u[jo.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:c}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(nh,"contains");function MM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Kn(e,t,r,s,c,n,i,a,!0,!1)}o(MM,"greaterThan");function DM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),Kn(e,t,r,s,c,n,i,a,!1,!1)}o(DM,"greaterThanEqual");function UM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Kn(e,t,r,c,s,n,i,a,!1,!0)}o(UM,"lessThan");function PM(e,t,r,s,n=!1,i=void 0,a=void 0){mr(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),Kn(e,t,r,c,s,n,i,a,!1,!1)}o(PM,"lessThanEqual");function HM(e,t,r,s,n,i=!1,a=void 0,_=void 0){if(ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=ke.convertKeyValueToWrite(s),n=ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Kn(e,t,r,s,n,i,a,_)}o(HM,"between");function BM(e,t,r,s){ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(Xo(r),r=Wn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,_=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return _&&(a=Jo.parseRow(_,r)),a}o(BM,"searchByHash");function vM(e,t,r){ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(vM,"checkHashExists");function GM(e,t,r,s,n=[]){return oh(e,t,r,s,n),ih(e,t,r,s,n).map(i=>i[1])}o(GM,"batchSearchByHash");function qM(e,t,r,s,n=[]){oh(e,t,r,s,n);let i=new Map;for(let[a,_]of ih(e,t,r,s,n))i.set(a,_);return i}o(qM,"batchSearchByHashToMap");function ih(e,t,r,s,n=[]){return Zr(e,t,t,(i,a,_)=>{r=Wn(_,r);let c=r.length<3;return s.map(u=>{let l=_.dbis[t].get(u,{transaction:i,lazy:c});if(l)return[u,Jo.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(ih,"batchHashSearch");function oh(e,t,r,s,n){if(ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(Xo(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(oh,"initializeBatchSearchByHash");function Xo(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(Xo,"validateFetchAttributes");function mr(e,t,r){if(ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>pM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(mr,"validateComparisonFunctions");function Wn(e,t){return t.length===1&&AM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rr.listDBIs(e)),t}o(Wn,"setGetWholeRowAttributes");ah.exports={searchAll:NM,searchAllToMap:OM,count:LM,countAll:CM,equals:bM,startsWith:yM,endsWith:wM,contains:nh,searchByHash:BM,setGetWholeRowAttributes:Wn,batchSearchByHash:GM,batchSearchByHashToMap:qM,checkHashExists:vM,iterateDBI:IM,greaterThan:MM,greaterThanEqual:DM,lessThan:UM,lessThanEqual:PM,between:HM}});var jn=f((P$,fh)=>{"use strict";var ch=Jr(),Ar=p(),uh=Nc(),FM=require("lodash"),xM=$n(),lh=O(),{promisify:Eh}=require("util"),Q=T(),{handleHDBError:Zo,hdb_errors:VM}=X(),{HDB_ERROR_MSGS:zo,HTTP_STATUS_CODES:dh}=VM,kM=G();kM.initSync();var _h=k(),YM=zr(),{getSchemaPath:$M}=K(),Qn=Eh(ch.searchByValue),KM=Eh(ch.searchByHash),qs="name",Sh="hash_attribute",Jc="schema",WM="schema_table",QM="attribute";fh.exports={describeAll:jM,describeTable:ea,describeSchema:XM};async function jM(e){try{let t=lh.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:qs,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[qs]},i=await Qn(n),a={},_={};for(let d of i)a[d.name]=!0,!t&&!s&&(_[d.name]=r[d.name].describe);let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Sh,Q.ID_ATTRIBUTE_STRING,qs,Jc]},u=await Qn(c),l=[];for(let d of u)try{let S;if(t||s)S=await ea({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await ea({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){Ar.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]):_[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:_[d]&&(E[d]={});return E}catch(t){return Ar.error("Got an error in describeAll"),Ar.error(t),Zo(new Error,zo.DESCRIBE_ALL_ERR)}}o(jM,"describeAll");async function ea(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},a=uh.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:qs,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},c=Array.from(await Qn(_));if(!c||c.length===0)throw Zo(new Error,zo.TABLE_NOT_FOUND(e.schema,e.table),dh.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Zo(new Error,zo.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:WM,search_value:r+"."+s,get_attributes:[QM]},E=Array.from(await Qn(l));E=FM.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=JM(n)),i.attributes=E,i.clustering_stream_name=xM.createNatsTableStreamName(u.schema,u.name);try{let d=$M(i.schema,i.name),S=await _h.openEnvironment(d,i.name),R=_h.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of YM.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){Ar.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Ar.error(`There was an error getting attributes for table '${u.name}'`),Ar.error(l)}return i}o(ea,"descTable");function JM(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(JM,"getAttrsByPerms");async function XM(e){let t=uh.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Jc,search_value:s,hash_values:[],get_attributes:[Sh,Q.ID_ATTRIBUTE_STRING,qs,Jc]},i=Array.from(await Qn(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[qs]},_=Array.from(await KM(a));if(_&&_.length<1)throw Zo(new Error,zo.SCHEMA_NOT_FOUND(e.schema),dh.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]),lh.isEmpty(c)||c.describe){let u=await ea({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(a[u.name]=u)}}catch(c){Ar.error(`Error describing schema table '${e.schema}.${_}'`),Ar.error(c)}})),a}}o(XM,"describeSchema")});var es=f((B$,Ah)=>{var Fs=Kt(),{callbackify:Rh,promisify:ZM}=require("util");Ah.exports={setSchemaDataToGlobal:hh,getTableSchema:tD,getSystemSchema:sD,setSchemaDataToGlobalAsync:ZM(hh)};var mh=jn(),zM=Rh(mh.describeAll),eD=Rh(mh.describeTable);function hh(e){zM(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Fs),global.hdb_schema=r,e(null,null)})}o(hh,"setSchemaDataToGlobal");function Th(e,t){return e==="system"?Fs[t]:global.hdb_schema[e][t]}o(Th,"returnSchema");function tD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?rD(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,Th(e,t))}):r(null,Th(e,t))}o(tD,"getTableSchema");function rD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Fs:global.hdb_schema={system:Fs},r();return}eD(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Fs}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(rD,"setTableDataToGlobal");function sD(){return Fs}o(sD,"getSystemSchema")});var ta=f((G$,Oh)=>{"use strict";var ts=p(),Ye=T(),nD=mf(),gh=es(),iD=jn(),oD=ss(),{validateEvent:Nh}=rs(),Jn=jr(),aD=require("process"),_D={[Ye.ITC_EVENT_TYPES.SCHEMA]:cD,[Ye.ITC_EVENT_TYPES.USER]:lD};async function cD(e){let t=Nh(e);if(t){ts.error(t);return}ts.trace("ITC schemaHandler received schema event:",e),await nD(e.message),await uD(e.message)}o(cD,"schemaHandler");async function uD(e){try{if(Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await iD.describeTable({schema:e.schema,table:e.table});break;default:gh.setSchemaDataToGlobal(ph);break}else gh.setSchemaDataToGlobal(ph)}catch(t){ts.error(t)}}o(uD,"syncSchemaMetadata");function ph(e){e&&ts.error(e)}o(ph,"handleErrorCallback");async function lD(e){try{Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Jn.resetReadTxn(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Nh(e);if(t){ts.error(t);return}ts.trace(`ITC userHandler ${Ye.HDB_ITC_CLIENT_PREFIX}${aD.pid} received user event:`,e),await oD.setUsersToGlobal()}catch(t){ts.error(t)}}o(lD,"userHandler");Oh.exports=_D});var rs=f((k$,Ch)=>{"use strict";var F$=p(),Xc=O(),ED=T(),{ITC_ERRORS:Xn}=Xe(),{parentPort:x$,threadId:dD,isMainThread:SD,workerData:V$}=require("worker_threads"),{onMessageFromWorkers:fD,broadcast:hD}=Wr();Ch.exports={sendItcEvent:TD,validateEvent:Ih,SchemaEventMsg:RD,UserEventMsg:mD};var ra;fD(e=>{ra=ra||ta(),Ih(e),ra[e.type]&&ra[e.type](e)});function TD(e){!SD&&e.message&&(e.message.originator=dD),hD(e)}o(TD,"sendItcEvent");function Ih(e){if(typeof e!="object")return Xn.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Xc.isEmpty(e.type))return Xn.MISSING_TYPE;if(!e.hasOwnProperty("message")||Xc.isEmpty(e.message))return Xn.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Xc.isEmpty(e.message.originator))return Xn.MISSING_ORIGIN;if(ED.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xn.INVALID_EVENT(e.type)}o(Ih,"validateEvent");function RD(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(RD,"SchemaEventMsg");function mD(e){this.originator=e}o(mD,"UserEventMsg")});var Zn=f((K$,wh)=>{"use strict";var bh=T(),$$=O(),sa=p(),Lh=KS(),xs,{sendItcEvent:yh}=rs();function AD(e){try{sa.trace("signalSchemaChange called with message:",e),xs=xs||ta();let t=new Lh(bh.ITC_EVENT_TYPES.SCHEMA,e);xs.schema(t),yh(t)}catch(t){sa.error(t)}}o(AD,"signalSchemaChange");function gD(e){try{sa.trace("signalUserChange called with message:",e),xs=xs||ta();let t=new Lh(bh.ITC_EVENT_TYPES.USER,e);xs.user(t),yh(t)}catch(t){sa.error(t)}}o(gD,"signalUserChange");wh.exports={signalSchemaChange:AD,signalUserChange:gD}});var na=f((Q$,Dh)=>{"use strict";var Mh=O(),pD=T(),ND=p(),OD=Po(),ID=Uo(),CD=Zn(),{SchemaEventMsg:bD}=rs(),LD="already exists in";Dh.exports=yD;async function yD(e,t,r){if(Mh.isEmptyOrZeroLength(r))return r;let s=[];Mh.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 wD(e,t.schema,t.name,i)})),n}o(yD,"lmdbCheckForNewAttributes");async function wD(e,t,r,s){let n=new ID(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await MD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(LD))ND.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(wD,"createNewAttribute");async function MD(e){let t;return t=await OD(e),CD.signalSchemaChange(new bD(process.pid,pD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(MD,"createAttribute")});var Vs=f((J$,Uh)=>{"use strict";var ia=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};o(ia,"LMDBTransactionObject");Uh.exports=ia});var Hh=f((Z$,Ph)=>{"use strict";var DD=Vs(),UD=T().OPERATIONS_ENUM,oa=class extends DD{constructor(t,r,s,n,i=void 0){super(UD.INSERT,r,s,n,i),this.records=t}};o(oa,"LMDBInsertTransactionObject");Ph.exports=oa});var vh=f((eK,Bh)=>{"use strict";var PD=Vs(),HD=T().OPERATIONS_ENUM,aa=class extends PD{constructor(t,r,s,n,i,a=void 0){super(HD.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(aa,"LMDBUpdateTransactionObject");Bh.exports=aa});var qh=f((rK,Gh)=>{"use strict";var BD=Vs(),vD=T().OPERATIONS_ENUM,_a=class extends BD{constructor(t,r,s,n,i,a=void 0){super(vD.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(_a,"LMDBUpsertTransactionObject");Gh.exports=_a});var xh=f((nK,Fh)=>{"use strict";var GD=Vs(),qD=T().OPERATIONS_ENUM,ca=class extends GD{constructor(t,r,s,n,i=void 0){super(qD.DELETE,s,n,t,i),this.original_records=r}};o(ca,"LMDBDeleteTransactionObject");Fh.exports=ca});var zn=f((aK,$h)=>{"use strict";var oK=require("path"),Vh=k(),FD=Hh(),xD=vh(),VD=qh(),kD=xh(),ks=de(),kh=O(),{CONFIG_PARAMS:YD}=T(),Yh=G();Yh.initSync();var ua=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:$D}=K();$h.exports=KD;async function KD(e,t){if(Yh.get(YD.LOGGING_AUDITLOG)===!1)return;let r=$D(e.schema,e.table),s=await Vh.openEnvironment(r,e.table,!0),n=WD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Vh.initializeDBIs(s,ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ks.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),kh.isEmpty(n.user_name)||s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[ks.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(KD,"writeTransaction");function WD(e,t){let r=kh.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ua.INSERT)return new FD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.UPDATE)return new xD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.UPSERT)return new VD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ua.DELETE)return new kD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(WD,"createTransactionObject")});var Zc=f((uK,Kh)=>{"use strict";var QD=Ho(),cK=vo(),ei=T(),jD=qo(),JD=$r().insertRecords,XD=k(),ZD=p(),zD=na(),{getSchemaPath:eU}=K(),tU=zn();Kh.exports=rU;async function rU(e){try{let{schema_table:t,attributes:r}=QD(e);jD(e,r,t.hash_attribute),e.schema!==ei.SYSTEM_SCHEMA_NAME&&(r.includes(ei.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ei.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ei.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ei.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await zD(e.hdb_auth_header,t,r),n=eU(e.schema,e.table),i=await XD.openEnvironment(n,e.table),a=await JD(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tU(e,a)}catch(_){ZD.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(rU,"lmdbCreateRecords")});var jh=f((EK,Qh)=>{"use strict";var Wh=T(),sU=Zc(),nU=vo(),iU=require("fs-extra"),{getSchemaPath:oU}=K();Qh.exports=aU;async function aU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nU(Wh.SYSTEM_SCHEMA_NAME,Wh.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sU(r),await iU.mkdirp(oU(e.schema))}o(aU,"lmdbCreateSchema")});var Xh=f((SK,Jh)=>{"use strict";var la=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(la,"DeleteRecordsResponseObject");Jh.exports=la});var tu=f((mK,eT)=>{"use strict";var Zh=k(),zc=Er(),eu=Xe().LMDB_ERRORS_ENUM,_U=de(),zh=p(),hK=O(),cU=require("lmdb"),uU=Xh(),lU=T(),{OVERFLOW_MARKER:TK,MAX_SEARCH_KEY_LENGTH:RK}=_U,EU=lU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dU(e,t,r,s){if(zc.validateEnv(e),t===void 0)throw new Error(eu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(eu.IDS_REQUIRED):new Error(eu.IDS_MUST_BE_ITERABLE);try{let n=Zh.listDBIs(e);Zh.initializeDBIs(e,t,n);let i=new uU,a,_=[],c=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[EU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,cU.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],H=R[$];if(H!=null)try{let Ee=zc.getIndexedValues(H);if(Ee)for(let ae=0,or=Ee.length;ae<or;ae++)A.remove(Ee[ae],a)}catch{zh.warn(`cannot delete from attribute: ${$}, ${H}:${a}`)}}});_.push(m),c.push(a),i.original_records.push(R)}catch(R){zh.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(_);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(c[d]):(i.skipped.push(c[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=zc.getNextMonotonicTime(),i}catch(n){throw n}}o(dU,"deleteRecords");eT.exports={deleteRecords:dU}});var ti=f((gK,rT)=>{"use strict";var Ys=O(),SU=tu(),fU=k(),{getSchemaPath:hU}=K(),TU=zn(),RU=p();rT.exports=mU;async function mU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ys.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ys.isEmptyOrZeroLength(e.hash_values)&&!Ys.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];Ys.isEmpty(c)||e.hash_values.push(c)}}if(Ys.isEmptyOrZeroLength(e.hash_values))return tT([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ys.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=hU(e.schema,e.table),i=await fU.openEnvironment(n,e.table),a=await SU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await TU(e,a)}catch(_){RU.error(`unable to write transaction due to ${_.message}`)}return tT(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(mU,"lmdbDeleteRecords");function tT(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(tT,"createDeleteResponse")});var ri=f((OK,oT)=>{var sT=require("lodash"),nT=Ze(),x=require("joi"),AU=O(),{hdb_schema_table:St,checkValidTable:iT}=Us(),{handleHDBError:gU,hdb_errors:pU}=X(),{HTTP_STATUS_CODES:NU}=pU,NK=x.object({schema:St,table:St,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(St).required()}),OU=x.object({schema:St,table:St,search_attribute:St,search_value:x.any().required(),get_attributes:x.array().min(1).items(St).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),IU=x.object({schema:St,table:St,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(St).required(),conditions:x.array().min(1).items(x.object({search_attribute:St,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});oT.exports=function(e,t){let r=null;switch(t){case"value":r=nT.validateBySchema(e,OU);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(iT("schema",e.schema)),i(iT("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=nT.validateBySchema(e,IU);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=AU.checkGlobalSchemaTable(e.schema,e.table);if(n)return gU(new Error,n,NU.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=sT.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!sT.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var ru=f((CK,aT)=>{"use strict";var CU=k(),bU=ri(),{getSchemaPath:LU}=K();aT.exports=yU;function yU(e){let t=bU(e,"hashes");if(t)throw t;let r=LU(e.schema,e.table);return CU.openEnvironment(r,e.table)}o(yU,"initialize")});var su=f((LK,_T)=>{"use strict";var wU=zr(),MU=ru();_T.exports=DU;async function DU(e){let t=await MU(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return wU.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(DU,"lmdbGetDataByHash")});var si=f((wK,cT)=>{"use strict";var Ea=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ea,"SearchByHashObject");cT.exports=Ea});var lT=f((UK,uT)=>{"use strict";var DK=si(),UU=zr(),PU=ru();uT.exports=HU;async function HU(e){let t=await PU(e),r=global.hdb_schema[e.schema][e.table];return UU.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(HU,"lmdbSearchByHash")});var ft=f((HK,ET)=>{"use strict";var da=class{constructor(t,r,s,n,i,a,_,c=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=_,this.reverse=c,this.limit=u,this.offset=l}};o(da,"SearchObject");ET.exports=da});var Sa=f((vK,RT)=>{"use strict";var Ae=zr(),BU=k(),vU=O(),I=de(),ns=T(),GU=Kt(),dT=Xe().LMDB_ERRORS_ENUM,{compareKeys:$s}=require("ordered-binary"),{getSchemaPath:qU}=K(),jt=ns.SEARCH_WILDCARDS;async function FU(e,t,r){let s;e.schema===ns.SYSTEM_SCHEMA_NAME?s=GU[e.table]:s=global.hdb_schema[e.schema][e.table];let n=TT(e,s.hash_attribute,r,t);return fT(e,n,s.hash_attribute,r)}o(FU,"prepSearch");async function fT(e,t,r,s){let n=qU(e.schema,e.table),i=await BU.openEnvironment(n,e.table),a=hT(i,e,t,r),_=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(VU(e,r)===!1){let l=e.search_attribute;if(l===r)return s?ST(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?ST(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(_,r,e.get_attributes,u):Ae.batchSearchByHash(_,r,e.get_attributes,u)}o(fT,"executeSearch");function hT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:_,offset:c}=t;switch(a=typeof a=="boolean"?a:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,_,c);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,_,c);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,_,c);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,_,c);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,_,c);break;default:return Object.create(null)}return n}o(hT,"searchByType");function xU(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return $s(i,s[0])>=0&&$s(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>$s(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>$s(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>$s(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>$s(n[r],s)<=0;default:return Object.create(null)}}o(xU,"filterByType");function ST(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(ST,"createMapFromIterable");function VU(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(VU,"checkToFetchMore");function TT(e,t,r,s){if(vU.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),jt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(jt[0])<0&&n.indexOf(jt[1])<0)return _===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(jt.indexOf(i)>=0&&jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(jt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(jt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(jt[0])||n.includes(jt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(dT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case ns.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case ns.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(dT.UNKNOWN_SEARCH_TYPE)}}o(TT,"createSearchTypeFromSearchObject");RT.exports={executeSearch:fT,createSearchTypeFromSearchObject:TT,prepSearch:FU,searchByType:hT,filterByType:xU}});var AT=f((FK,mT)=>{"use strict";var qK=ft(),kU=ri(),YU=O(),$U=T(),KU=Sa();mT.exports=WU;function WU(e,t){if(!YU.isEmpty(t)&&$U.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=kU(e,"value");if(s)throw s;let n=!0;return KU.prepSearch(e,t,n)}o(WU,"lmdbGetDataByValue")});var Ks=f((kK,gT)=>{"use strict";var VK=ft(),QU=ri(),jU=O(),JU=T(),XU=Sa();gT.exports=ZU;async function ZU(e,t){if(!jU.isEmpty(t)&&JU.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=QU(e,"value");if(s)throw s;return XU.prepSearch(e,t,!1)}o(ZU,"lmdbSearchByValue")});var NT=f((KK,pT)=>{"use strict";var $K=de(),fa=class{constructor(t,r,s,n,i=void 0,a=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=_}};o(fa,"SearchByConditionsObject");var ha=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(ha,"SearchCondition");var Ta=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Ta,"SortAttribute");pT.exports={SearchByConditionsObject:fa,SearchCondition:ha,SortAttribute:Ta}});var LT=f((jK,bT)=>{"use strict";var QK=NT().SearchByConditionsObject,zU=ft(),eP=ri(),nu=zr(),Ra=de(),CT=Sa(),tP=jc(),rP=require("lodash"),{getSchemaPath:sP}=K(),OT=k(),{handleHDBError:nP,hdb_errors:iP}=X(),{HTTP_STATUS_CODES:oP}=iP,aP=1e8;bT.exports=_P;async function _P(e){let t=eP(e,"conditions");if(t)throw nP(t,t.message,oP.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=sP(e.schema,e.table),s=await OT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)OT.openDBI(s,u.search_attribute);let i=rP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Ra.SEARCH_TYPES.EQUALS?u.estimated_count=nu.count(s,u.search_attribute,u.search_value):l===Ra.SEARCH_TYPES.CONTAINS||l===Ra.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=aP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let _=await IT(a,e,i[0],n.hash_attribute),c;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(CT.filterByType),E=l.length,d=nu.setGetWholeRowAttributes(s,e.get_attributes);c=_.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(c=c.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))return!1;return!0})),(e.offset||e.limit!==void 0)&&(c=c.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),c=c.map(S=>tP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await IT(a,e,d,n.hash_attribute);_=_.concat(S)}let u=new Set,l=e.offset||0;_=_.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),c=nu.batchSearchByHash(a,n.hash_attribute,e.get_attributes,_)}return c.onDone=()=>{a.done()},c}o(_P,"lmdbSearchByConditions");async function IT(e,t,r,s){let n=new zU(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ra.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,CT.searchByType(e,n,i,s).map(a=>a.value)}o(IT,"executeConditionSearch")});var Aa=f((XK,yT)=>{"use strict";var cP=T().OPERATIONS_ENUM,ma=class{constructor(t,r,s,n=void 0){this.operation=cP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(ma,"DeleteObject");yT.exports=ma});var iu=f((zK,vT)=>{"use strict";var UT=ft(),PT=Aa(),HT=Ks(),BT=ti(),ye=T(),wT=O(),MT=k(),{getTransactionAuditStorePath:uP,getSchemaPath:lP}=K(),DT=p();vT.exports=EP;async function EP(e){try{if(wT.isEmpty(global.hdb_schema[e.schema])||wT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await dP(e),await SP(e);let t=lP(e.schema,e.table);try{await MT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=uP(e.schema,e.table);await MT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(EP,"lmdbDropTable");async function dP(e){let t=new UT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await HT(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 PT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await BT(n)}o(dP,"deleteAttributesFromSystem");async function SP(e){let t=new UT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ye.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await HT(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 PT(ye.SYSTEM_SCHEMA_NAME,ye.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await BT(n)}catch(i){throw i}}o(SP,"dropTableFromSystem")});var qT=f((tW,GT)=>{"use strict";var fP=require("fs-extra"),hP=ft(),TP=si(),RP=Aa(),mP=iu(),AP=ti(),gP=su(),pP=Ks(),Jt=T(),{getSchemaPath:NP}=K(),{handleHDBError:OP,hdb_errors:IP}=X(),{HDB_ERROR_MSGS:CP,HTTP_STATUS_CODES:bP}=IP;GT.exports=LP;async function LP(e){let t;try{t=await yP(e.schema);let r=new hP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await pP(r));for(let a=0;a<s.length;a++){let _={schema:t,table:s[a].name};try{await mP(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new RP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await AP(n);let i=NP(t);await fP.remove(i)}catch(r){throw r}}o(LP,"lmdbDropSchema");async function yP(e){let t=new TP(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await gP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw OP(new Error,CP.SCHEMA_NOT_FOUND(e),bP.NOT_FOUND,void 0,void 0,!0);return s}o(yP,"validateDropSchema")});var pa=f((sW,FT)=>{"use strict";var ga=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ga,"CreateTableObject");FT.exports=ga});var au=f((oW,xT)=>{"use strict";var wP=require("fs-extra"),Na=k(),{getTransactionAuditStorePath:MP}=K(),ou=de(),iW=pa();xT.exports=DP;async function DP(e){let t;try{let r=MP(e.schema,e.table);await wP.mkdirp(r),t=await Na.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Na.createDBI(t,ou.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Na.createDBI(t,ou.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Na.createDBI(t,ou.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(DP,"createTransactionsAuditEnvironment")});var Eu=f((_W,YT)=>{"use strict";var _u=T(),VT=k(),UP=$r(),{getSystemSchemaPath:PP,getSchemaPath:HP}=K(),BP=Kt(),vP=Po(),cu=Uo(),GP=p(),qP=au(),lu=BP.hdb_table,kT=[];for(let e=0;e<lu.attributes.length;e++)kT.push(lu.attributes[e].attribute);YT.exports=FP;async function FP(e,t){let r=HP(t.schema,t.table),s=new cu(t.schema,t.table,_u.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new cu(t.schema,t.table,_u.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new cu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await VT.createEnvironment(r,t.table),e!==void 0){let a=await VT.openEnvironment(PP(),_u.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UP.insertRecords(a,lu.hash_attribute,kT,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await uu(s),await uu(n),await uu(i)}await qP(t)}catch(a){throw a}}o(FP,"lmdbCreateTable");async function uu(e){try{await vP(e)}catch(t){GP.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(uu,"createAttribute")});var KT=f((uW,$T)=>{"use strict";var xP=Ho(),VP=qo(),kP=na(),ni=T(),YP=$r().updateRecords,$P=k(),{getSchemaPath:KP}=K(),WP=zn(),QP=p();$T.exports=jP;async function jP(e){try{let{schema_table:t,attributes:r}=xP(e);VP(e,r,t.hash_attribute),e.schema!==ni.SYSTEM_SCHEMA_NAME&&(r.includes(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await kP(e.hdb_auth_header,t,r),n=KP(e.schema,e.table),i=await $P.openEnvironment(n,e.table),a=await YP(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await WP(e,a)}catch(_){QP.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(jP,"lmdbUpdateRecords")});var QT=f((EW,WT)=>{"use strict";var JP=T().OPERATIONS_ENUM,Oa=class{constructor(t,r,s,n=void 0){this.operation=JP.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Oa,"UpsertObject");WT.exports=Oa});var JT=f((fW,jT)=>{"use strict";var SW=QT(),XP=Ho(),ZP=qo(),zP=na(),ii=T(),eH=$r().upsertRecords,tH=k(),{getSchemaPath:rH}=K(),sH=zn(),nH=p(),{handleHDBError:iH,hdb_errors:oH}=X();jT.exports=aH;async function aH(e){let t;try{t=XP(e)}catch(c){throw iH(c,c.message,oH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;ZP(e,s,r.hash_attribute),e.schema!==ii.SYSTEM_SCHEMA_NAME&&(s.includes(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(ii.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(ii.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zP(e.hdb_auth_header,r,s),i=rH(e.schema,e.table),a=await tH.openEnvironment(i,e.table),_=await eH(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await sH(e,_)}catch(c){nH.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(aH,"lmdbUpsertRecords")});var rR=f((TW,tR)=>{"use strict";var _H=ft(),XT=O(),ZT=p(),cH=Ks(),zT=T(),uH=tu().deleteRecords,lH=k(),{getSchemaPath:EH}=K(),{promisify:dH}=require("util"),SH=dH(setTimeout),eR=1e4,fH=10;tR.exports=hH;async function hH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(XT.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 _H(e.schema,e.table,zT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await cH(n,zT.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw ZT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return XT.isEmptyOrZeroLength(s)?(ZT.trace("No records found to delete"),{message:"No records found to delete"}):await TH(e,s,t)}o(hH,"lmdbDeleteRecordsBefore");async function TH(e,t,r){let s=EH(e.schema,e.table),n=await lH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,_=t.length;a<_;a+=eR){let c=t.slice(a,a+eR),u=[];for(let l=0,E=c.length;l<E;l++)u.push(c[l][r]);try{let l=await uH(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 SH(fH)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(TH,"chunkDeletes")});var nR=f((mW,sR)=>{"use strict";var Ia=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ia,"DeleteBeforeObject");sR.exports=Ia});var oR=f((gW,iR)=>{"use strict";var Ca=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Ca,"DeleteAuditLogsBeforeResults");iR.exports=Ca});var cR=f((OW,_R)=>{"use strict";var du=k(),{getTransactionAuditStorePath:RH}=K(),NW=nR(),oi=de(),mH=O(),aR=oR(),AH=require("util").promisify,gH=AH(setTimeout),pH=1e4,NH=100;_R.exports=OH;async function OH(e){let t=RH(e.schema,e.table),r=await du.openEnvironment(t,e.table,!0),s=du.listDBIs(r);du.initializeDBIs(r,oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new aR;do n=await IH(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 gH(NH);while(n.transactions_deleted>0);return i}o(OH,"deleteAuditLogsBefore");async function IH(e,t){let r=new aR;try{let s=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=a[oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];mH.isEmpty(_)||(n=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<a.hash_values.length;c++)n=e.dbis[oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>pH)break}return await n,r}catch(s){throw s}}o(IH,"deleteTransactions")});var lR=f((CW,uR)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(ba,"DropAttributeObject");uR.exports=ba});var dR=f((yW,ER)=>{"use strict";var CH=ft(),bH=Aa(),LW=lR(),Lt=T(),LH=O(),Su=k(),yH=Kt(),wH=Ks(),MH=ti(),{getSchemaPath:DH}=K();ER.exports=UH;async function UH(e,t=!0){let r;e.schema===Lt.SYSTEM_SCHEMA_NAME?r=yH[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await HH(e),n=DH(e.schema,e.table),i=await Su.openEnvironment(n,e.table);return t===!0&&await PH(e,i,r.hash_attribute),Su.dropDBI(i,e.attribute),s}o(UH,"lmdbDropAttribute");async function PH(e,t,r){let s=Su.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let l in _)l!==i&&(u[l]=_[l]);n=t.dbis[r].put(a,u,c)}await n}o(PH,"removeAttributeFromAllObjects");async function HH(e){let t=new CH(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await wH(t)).filter(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(LH.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[Lt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new bH(Lt.SYSTEM_SCHEMA_NAME,Lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return MH(i)}o(HH,"dropAttributeFromSystem")});var mR=f((DW,RR)=>{"use strict";var fu=k(),Ws=de(),MW=Er(),hu=T(),SR=O(),{getTransactionAuditStorePath:BH}=K(),vH=zr(),La=Vs(),GH=p();RR.exports=qH;async function qH(e){let t=BH(e.schema,e.table),r=await fu.openEnvironment(t,e.table,!0),s=fu.listDBIs(r);fu.initializeDBIs(r,Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return fR(r,e.search_values);case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,xH(r,e.search_values,n);case hu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return FH(r,e.search_values);default:return fR(r)}}o(qH,"readAuditLog");function fR(e,t=[0,Date.now()]){SR.isEmpty(t[0])&&(t[0]=0),SR.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new La,n))}o(fR,"searchTransactionsByTimestamp");function FH(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Ws.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,TR(e,i))}return Object.fromEntries(r)}o(FH,"searchTransactionsByUsername");function xH(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],l=vH.equals(e,Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ws.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=TR(e,n),a=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,l=s.get(u);hR(c,"records",r,l,a),hR(c,"original_records",r,l,a)}return Object.fromEntries(a)}o(xH,"searchTransactionsByHashValues");function hR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let _=e[t][a],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),l=u[u.length-1];if(l.timestamp===i)l[t]=[_];else{let E=new La(e.operation,e.user_name,i,void 0);E[t]=[_],u.push(E)}}else{let u=new La(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}o(hR,"loopRecords");function TR(e,t){let r=[];try{let s=e.dbis[Ws.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new La,i);r.push(a)}}catch(i){GH.warn(i)}return r}catch(s){throw s}}o(TR,"batchSearchTransactions")});var gR=f((PW,AR)=>{"use strict";var{getSchemaPath:VH}=K(),kH=k();AR.exports={writeTransaction:YH};async function YH(e,t,r){let s=VH(e,t);return(await kH.openEnvironment(s,t)).transaction(r)}o(YH,"writeTransaction")});var IR=f((BW,OR)=>{"use strict";var{getSchemaPath:pR}=K(),NR=k();OR.exports={flush:$H,resetReadTxn:KH};async function $H(e,t){return(await NR.openEnvironment(pR(e,t),t.toString())).flushed}o($H,"flush");async function KH(e,t){try{(await NR.openEnvironment(pR(e,t),t.toString())).resetReadTxn()}catch{}}o(KH,"resetReadTxn")});var LR=f((GW,bR)=>{"use strict";var WH=p(),{handleHDBError:QH}=X(),jH=uc(),JH=Po(),XH=Zc(),ZH=jh(),zH=ti(),eB=su(),tB=lT(),rB=AT(),sB=Ks(),nB=LT(),iB=qT(),oB=Eu(),aB=KT(),_B=JT(),cB=rR(),uB=cR(),lB=iu(),EB=dR(),dB=mR(),SB=gR(),CR=IR(),ya=class extends jH{async searchByConditions(t){return nB(t)}async getDataByHash(t){return await eB(t)}async searchByHash(t){return await tB(t)}async getDataByValue(t,r){return await rB(t,r)}async searchByValue(t){return await sB(t)}async createSchema(t){return await ZH(t)}async dropSchema(t){return await iB(t)}async createTable(t,r){return await oB(t,r)}async dropTable(t){return await lB(t)}async createAttribute(t){return await JH(t)}async createRecords(t){return await XH(t)}async updateRecords(t){return await aB(t)}async upsertRecords(t){try{return await _B(t)}catch(r){throw QH(r,null,null,WH.ERR,r)}}async deleteRecords(t){return await zH(t)}async deleteRecordsBefore(t){return await cB(t)}async dropAttribute(t){return await EB(t)}async deleteAuditLogsBefore(t){return await uB(t)}async readAuditLog(t){return await dB(t)}writeTransaction(t,r,s){return SB.writeTransaction(t,r,s)}flush(t,r){return CR.flush(t,r)}resetReadTxn(t,r){return CR.resetReadTxn(t,r)}};o(ya,"LMDBBridge");bR.exports=ya});var jr=f((FW,wR)=>{"use strict";var fB=LR(),hB=uc(),TB=G();TB.initSync();var yR;function RB(){return yR instanceof hB?yR:new fB}o(RB,"getBridge");wR.exports=RB()});var os=f((VW,UR)=>{"use strict";var Ma=cc(),st=O(),mB=require("util"),Da=jr(),AB=es(),Tu=p(),{handleHDBError:gr,hdb_errors:gB}=X(),{HTTP_STATUS_CODES:is}=gB,pB=mB.promisify(AB.getTableSchema),NB="updated",MR="inserted",DR="upserted";UR.exports={insert:IB,update:CB,upsert:bB,validation:OB,flush:LB};async function OB(e){if(st.isEmpty(e))throw new Error("invalid update parameters defined.");if(st.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(st.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await pB(e.schema,e.table),r=Ma(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(_=>{if(a&&st.isEmptyOrZeroLength(_[s]))throw Tu.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!st.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Tu.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!st.isEmpty(_[s])&&_[s]!==""&&n.has(st.autoCast(_[s]))&&(_.skip=!0),n.add(st.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(OB,"validation");async function IB(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);let s=await Da.createRecords(e);return wa(MR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(IB,"insertData");async function CB(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);let s=await Da.updateRecords(e);return st.isEmpty(s.existing_rows)?wa(NB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):wa(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(CB,"updateData");async function bB(e){if(e.operation!=="upsert")throw gr(new Error,"invalid operation, must be upsert",is.INTERNAL_SERVER_ERROR);let t=Ma(e);if(t)throw gr(new Error,t.message,is.BAD_REQUEST);let r=st.checkSchemaTableExist(e.schema,e.table);if(r)throw gr(new Error,r,is.BAD_REQUEST);try{let s=await Da.upsertRecords(e);return wa(DR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw gr(s,null,null,Tu.ERR,n)}}o(bB,"upsertData");function wa(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===MR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===DR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(wa,"returnObject");function LB(e){return Da.flush(e.schema,e.table)}o(LB,"flush")});var vR=f((YW,BR)=>{var yB=Ze(),Ru=require("joi"),{hdb_schema_table:PR}=Us(),HR={schema:PR,table:PR},wB={date:Ru.date().iso().required()},MB={timestamp:Ru.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};BR.exports=function(e,t){let r=t==="timestamp"?{...HR,...MB}:{...HR,...wB},s=Ru.object(r);return yB.validateBySchema(e,s)}});var xR=f(($W,FR)=>{var DB=Ze(),GR=require("joi"),{hdb_schema_table:qR}=Us(),UB=GR.object({schema:qR,table:qR,hash_values:GR.array().required()});FR.exports=function(e){return DB.validateBySchema(e,UB)}});var mu=f((KW,VR)=>{"use strict";var Ua=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(Ua,"InsertObject");var Pa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Pa,"NoSQLSeachObject");var Ha=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(Ha,"DeleteResponseObject");VR.exports={InsertObject:Ua,NoSQLSeachObject:Pa,DeleteResponseObject:Ha}});var pu=f((QW,WR)=>{"use strict";var YR=vR(),PB=xR(),Ba=O(),kR=require("moment"),$R=p(),{promisify:HB,callbackify:BB}=require("util"),as=T(),vB=es(),Au=HB(vB.getTableSchema),gu=jr(),{DeleteResponseObject:GB}=mu(),{handleHDBError:pr,hdb_errors:qB}=X(),{HDB_ERROR_MSGS:va,HTTP_STATUS_CODES:Nr}=qB,FB="records successfully deleted",xB=BB(KR);WR.exports={delete:xB,deleteRecord:KR,deleteFilesBefore:VB,deleteAuditLogsBefore:kB};async function VB(e){let t=YR(e,"date");if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(!kR(e.date,kR.ISO_8601).isValid())throw pr(new Error,va.INVALID_DATE,Nr.BAD_REQUEST,as.LOG_LEVELS.ERROR,va.INVALID_DATE,!0);let s=Ba.checkSchemaTableExist(e.schema,e.table);if(s)throw pr(new Error,s,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,s,!0);let n=await gu.deleteRecordsBefore(e);if(await Au(e.schema,e.table),$R.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(VB,"deleteFilesBefore");async function kB(e){let t=YR(e,"timestamp");if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw pr(new Error,va.INVALID_VALUE("Timestamp"),Nr.BAD_REQUEST,as.LOG_LEVELS.ERROR,va.INVALID_VALUE("Timestamp"),!0);let r=Ba.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,r,!0);let s=await gu.deleteAuditLogsBefore(e);return await Au(e.schema,e.table),$R.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(kB,"deleteAuditLogsBefore");async function KR(e){let t=PB(e);if(t)throw pr(t,t.message,Nr.BAD_REQUEST,void 0,void 0,!0);let r=Ba.checkSchemaTableExist(e.schema,e.table);if(r)throw pr(new Error,r,Nr.NOT_FOUND,as.LOG_LEVELS.ERROR,r,!0);try{await Au(e.schema,e.table);let s=await gu.deleteRecords(e);return Ba.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${FB}`),s}catch(s){if(s.message===as.SEARCH_NOT_FOUND_MESSAGE){let n=new GB;return n.message=as.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(KR,"deleteRecord")});var jR=f((JW,QR)=>{var Nu=Ze(),ge={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function YB(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Nu.validateObject(e,ge)}o(YB,"addUserValidation");function $B(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Nu.validateObject(e,ge)}o($B,"alterUserValidation");function KB(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Nu.validateObject(e,ge)}o(KB,"dropUserValidation");QR.exports={addUserValidation:YB,alterUserValidation:$B,dropUserValidation:KB}});var ss=f((zW,um)=>{"use strict";var em="username is required",tm="nothing to update, must supply active, role or password to update",rm="password cannot be an empty string",sm="If role is specified, it cannot be empty.",nm="active must be true or false";um.exports={addUser:ev,alterUser:tv,dropUser:sv,userInfo:nv,listUsers:qa,listUsersExternal:iv,setUsersToGlobal:ai,findAndValidateUser:_v,getClusterUser:cv,USERNAME_REQUIRED:em,ALTERUSER_NOTHING_TO_UPDATE:tm,EMPTY_PASSWORD:rm,EMPTY_ROLE:sm,ACTIVE_BOOLEAN:nm};var im=os(),WB=pu(),Iu=xo(),om=jR(),am=Jr(),Cu=Zn(),$e=O(),_m=require("validate.js"),w=p(),{promisify:bu}=require("util"),Lu=$n(),JR=T(),XR=ct(),QB=Fe(),ZW=G(),jB=vs(),JB=Kt(),{handleHDBError:yt,hdb_errors:XB}=X(),{HTTP_STATUS_CODES:wt,AUTHENTICATION_ERROR_MSGS:Ou,HDB_ERROR_MSGS:Qs}=XB,{UserEventMsg:yu}=rs(),ZR=require("lodash"),cm={username:!0,active:!0,role:!0,password:!0},zR=new Map,Ga=bu(am.searchByValue),ZB=bu(am.searchByHash),zB=bu(WB.delete);async function ev(e){let t=_m.cleanAttributes(e,cm),r=om.addUserValidation(t);if(r)throw yt(new Error,r.message,wt.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Ga(s),n=n&&Array.from(n)}catch(c){throw w.error("There was an error searching for a role in add user"),w.error(c),c}if(!n||n.length<1)throw yt(new Error,Qs.ROLE_NAME_NOT_FOUND(t.role),wt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw yt(new Error,Qs.DUP_ROLES_FOUND(t.role),wt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Lu.encrypt(t.password)),t.password=Iu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await im.insert(i)}catch(c){throw w.error("There was an error searching for a user."),w.error(c),c}w.debug(a);try{await ai()}catch(c){throw w.error("Got an error setting users to global"),w.error(c),c}if(a.skipped_hashes.length===1)throw yt(new Error,Qs.USER_ALREADY_EXISTS(t.username),wt.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);return _.role=n[0],Cu.signalUserChange(new yu(process.pid)),`${_.username} successfully added`}o(ev,"addUser");async function tv(e){let t=_m.cleanAttributes(e,cm);if($e.isEmptyOrZeroLength(t.username))throw new Error(em);if($e.isEmptyOrZeroLength(t.password)&&$e.isEmptyOrZeroLength(t.role)&&$e.isEmptyOrZeroLength(t.active))throw new Error(tm);if(!$e.isEmpty(t.password)&&$e.isEmptyOrZeroLength(t.password.trim()))throw new Error(rm);if(!$e.isEmpty(t.active)&&!$e.isBoolean(t.active))throw new Error(nm);let r=rv(t.username);if(!$e.isEmpty(t.password)&&!$e.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Lu.encrypt(t.password)),t.password=Iu.hash(t.password)),t.role==="")throw new Error(sm);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ga(i)||[])}catch(_){throw w.error("Got an error searching for a role."),w.error(_),_}if(!a||a.length===0){let _=Qs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(_),yt(new Error,_,wt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let _=Qs.ALTER_USER_DUP_ROLES(t.role);throw w.error(_),yt(new Error,_,wt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await im.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await ai()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Cu.signalUserChange(new yu(process.pid)),n}o(tv,"alterUser");function rv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(rv,"isClusterUser");async function sv(e){try{let t=om.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if($e.isEmpty(global.hdb_users.get(e.username)))throw yt(new Error,Qs.USER_NOT_EXIST(e.username),wt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await zB(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await ai()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Cu.signalUserChange(new yu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(sv,"dropUser");async function nv(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 ZB(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(nv,"userInfo");async function iv(){let e;try{e=await qa()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(iv,"listUsersExternal");async function qa(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ga(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=ZR.cloneDeep(a);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ga(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=ZR.cloneDeep(a),a.role=r[a.role],ov(a.role),i.set(a.username,a);return(await jB.getLicense()).enterprise?i:av(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),$e.errorizeMessage(e)}return null}o(qa,"listUsers");function ov(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(JB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(ov,"appendSystemTablesToRole");function av(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(av,"nonEnterpriseFilter");async function ai(){try{let e=await qa();global.hdb_users=e}catch(e){throw w.error(e),e}}o(ai,"setUsersToGlobal");async function _v(e,t,r=!0){global.hdb_users||await ai();let s=global.hdb_users.get(e);if(!s)throw yt(new Error,Ou.GENERIC_AUTH_FAIL,wt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw yt(new Error,Ou.USER_INACTIVE,wt.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(zR.get(t)===s.password)return n;if(Iu.validate(s.password,t))zR.set(t,s.password);else throw yt(new Error,Ou.GENERIC_AUTH_FAIL,wt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(_v,"findAndValidateUser");async function cv(){let e=await qa(),t=QB.getConfigFromFile(JR.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!$e.isEmpty(r)&&r?.role?.role===JR.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Lu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+XR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+XR.SERVER_SUFFIX.ADMIN,r}o(cv,"getClusterUser")});var Em=f((t1,lm)=>{"use strict";var uv=jr();lm.exports={writeTransaction:lv};function lv(e,t,r){return uv.writeTransaction(e,t,r)}o(lv,"writeTransaction")});var ka=f((l1,wm)=>{"use strict";var le=G();le.initSync();var Ev=require("fs-extra"),dv=require("semver"),Ei=require("path"),{monotonicFactory:Sv}=require("ulidx"),Pu=Sv(),fv=require("util"),Sm=require("child_process"),hv=fv.promisify(Sm.exec),Tv=Sm.spawn,B=ct(),V=T(),Fa=O(),Or=p(),xa=$n(),Rv=Em(),_i=Fe(),{encode:Du,decode:Hu}=require("msgpackr"),{isEmpty:_s}=Fa,fm=ss(),hm=12e10,{connect:mv,StorageType:Tm,RetentionPolicy:Rm,AckPolicy:Bu,DeliverPolicy:di,DiscardPolicy:Av,NatsConnection:s1,JetStreamManager:n1,JetStreamClient:i1,StringCodec:o1,JSONCodec:gv,createInbox:vu,StreamSource:a1,headers:pv,toJsMsg:mm,nuid:_1,JetStreamOptions:c1,ErrorCode:dm,nanos:u1}=require("nats"),{PACKAGE_ROOT:Nv}=T(),Ov=Ls(),Am=gv(),Iv="clustering",Cv=Ov.engines[B.NATS_SERVER_NAME],bv=Ei.join(Nv,"dependencies"),Uu=Ei.join(bv,`${process.platform}-${process.arch}`,B.NATS_BINARY_NAME),wu,Mu,ci,ui,li,ht;wm.exports={runCommand:gm,checkNATSServerInstalled:Lv,createConnection:Gu,getConnection:Va,getJetStreamManager:Si,getJetStream:pm,getNATSReferences:Ke,getServerList:wv,createLocalStream:qu,listStreams:Nm,deleteLocalStream:Mv,getServerConfig:fi,listRemoteStreams:Dv,viewStream:Uv,viewStreamIterator:Pv,publishToStream:Hv,createWorkQueueStream:Bv,addSourceToWorkStream:Im,request:vv,removeSourceFromWorkStream:bm,reloadNATS:Fu,reloadNATSHub:Gv,reloadNATSLeaf:qv,extractServerName:Cm,requestErrorHandler:Fv,updateWorkStream:xv,createLocalTableStream:Lm,createTableStreams:Vv,purgeTableStream:ym,purgeSchemaTableStreams:kv,getStreamInfo:Yv,updateLocalStreams:Kv,closeConnection:yv,getJsmServerName:hi,addNatsMsgHeader:Om};async function gm(e,t=void 0){let{stdout:r,stderr:s}=await hv(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
2
|
+
"use strict";var DN=Object.defineProperty;var o=(e,t)=>DN(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((uY,PE)=>{"use strict";var _t=require("path"),UN=require("fs");function PN(){let e=__dirname;for(;!UN.existsSync(_t.join(e,"package.json"));){let t=_t.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(PN,"getHDBPackageRoot");var _r=PN(),gE="js",Xi=gE,HN="harperdb-config.yaml",BN="defaultConfig.yaml",vN="hdb",pE=`harperdb.${Xi}`,NE=`customFunctionsServer.${Xi}`,GN=`restartHdb.${Xi}`,Zc="HarperDB",Ji="Custom Functions",Zi="Clustering Hub",zi="Clustering Leaf",qN="Clustering Ingest Service",FN="Clustering Reply Service",xN="foreground.pid",VN="hdb.pid",kN={HDB:Zc,CLUSTERING_HUB:Zi,CLUSTERING_LEAF:zi,CLUSTERING_INGEST_SERVICE:qN,CLUSTERING_REPLY_SERVICE:FN,CUSTOM_FUNCTIONS:Ji,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},YN={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$N={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},KN={harperdb:Zc,"clustering hub":Zi,"clustering leaf":zi,"custom functions":Ji,custom_functions:Ji,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},WN={CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi},Xc={HDB:_t.join(_r,"server/harperdb"),CUSTOM_FUNCTIONS:_t.join(_r,"server/customFunctions"),CLUSTERING_HUB:_t.join(_r,"server/nats"),CLUSTERING_LEAF:_t.join(_r,"server/nats")},QN={HDB:_t.join(Xc.HDB,pE),CUSTOM_FUNCTIONS:_t.join(Xc.CUSTOM_FUNCTIONS,NE)},jN={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:_t.join(_r,"launchServiceScripts/launchUpdateNodes4-0-0.js")},JN={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},OE="support@harperdb.io",XN="customer-success@harperdb.io",IE=1,ZN=4141,CE="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zN="https://www.harperdb.io/product",eO=`For support, please submit a request at ${CE} or contact ${OE}`,bE=`For license support, please contact ${XN}`,tO="None of the specified records were found.",rO="hash attribute not found",sO=`Your current license only supports ${IE} role. ${bE}`,nO="Your current license only supports 3 connections to a node.",iO="127.0.0.1",oO=1,aO=/^\.$/,cO=/^\.\.$/,_O="U+002E",uO=/\//g,lO="U+002F",EO=/U\+002F/g,dO=/^U\+002E$/,SO=/^U\+002EU\+002E$/,fO="d",hO=999999,TO="*",RO="--max-old-space-size=",mO="system",AO="__hdb_hash",gO=".harperdb",pO=".hdb",NO="keys",OO="hdb_boot_properties.file",IO=".updateConfig.json",CO="SIGTSTP",bO=24,LO=6e4,yO=448,wO="blob",MO="trash",DO="schema",UO="transactions",PO=".count",HO="id",BO="PROCESS_NAME",LE={SETTINGS_PATH_KEY:"settings_path"},yE=require("lodash"),vO={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},GO={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},qO={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},FO={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},xO={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Ge="hdb_internal:",VO={CREATE_SCHEMA:Ge+"create_schema",CREATE_TABLE:Ge+"create_table",CREATE_ATTRIBUTE:Ge+"create_attribute",ADD_USER:Ge+"add_user",ALTER_USER:Ge+"alter_user",DROP_USER:Ge+"drop_user",HDB_NODES:Ge+"hdb_nodes",HDB_USERS:Ge+"hdb_users",HDB_WORKERS:Ge+"hdb_workers",CATCHUP:Ge+"catchup",SCHEMA_CATCHUP:Ge+"schema_catchup",WORKER_ROOM:Ge+"cluster_workers"},kO={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},YO="060493.ks",$O=".license",KO={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream"},WO={CSV:".csv",JSON:".json"},QO={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},jO={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},An={};An[g.INSERT]=g.INSERT;An[g.UPDATE]=g.UPDATE;An[g.UPSERT]=g.UPSERT;An[g.DELETE]=g.DELETE;var Y=Object.create(null);Y[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;Y[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;Y[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;Y[g.READ_LOG]=g.READ_LOG;Y[g.ADD_NODE]=g.ADD_NODE;Y[g.LIST_USERS]=g.LIST_USERS;Y[g.LIST_ROLES]=g.LIST_ROLES;Y[g.USER_INFO]=g.USER_INFO;Y[g.SQL]=g.SQL;Y[g.GET_JOB]=g.GET_JOB;Y[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;Y[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;Y[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;Y[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;Y[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;Y[g.REMOVE_NODE]=g.REMOVE_NODE;Y[g.RESTART]=g.RESTART;Y[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;Y[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;Y[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;Y[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;Y[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;Y[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;Y[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;Y[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;Y[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var JO={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},XO={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wE={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},ZO=yE.invert(wE),h={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},ME={settings_path:LE.SETTINGS_PATH_KEY,hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:h.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:h.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:h.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:h.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,clustering_tls_verify:h.CLUSTERING_TLS_VERIFY,clustering_loglevel:h.CLUSTERING_LOGLEVEL,clustering_republishmessages:h.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,http_session_affinity:h.HTTP_SESSION_AFFINITY,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_enabled:h.LOGGING_ROTATION_ENABLED,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:h.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:h.LOGGING_ROTATION_PATH,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,schemas:h.SCHEMAS,storage_path:h.STORAGE_PATH};for(let e in h){let t=h[e];ME[t.toLowerCase()]=t}var zO={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eI={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},tI={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},rI={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},sI={FILE_SYSTEM:"fs",LMDB:"lmdb"},nI={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},iI={DEVELOPMENT:8192,DEFAULT:512},oI={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},aI={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},cI={ENOENT:"ENOENT",EACCES:"EACCES"},DE={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_I="__clustering__",uI=Object.values(DE),lI=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},EI=yE.invert(UE),dI={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},SI=111,fI=`\r
|
|
3
|
+
`,hI={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},TI=["*","%"],RI="unauthorized_access",mI="func_val",AI={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gI={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},pI={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},NI={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OI={HTTP:"http"},II={STOPPED:"stopped",ONLINE:"online"},CI="3.x.x";PE.exports={LOCAL_HARPERDB_OPERATIONS:Y,HDB_SUPPORT_ADDRESS:OE,HDB_SUPPORT_URL:CE,HDB_PRICING_URL:zN,SUPPORT_HELP_MSG:eO,LICENSE_HELP_MSG:bE,HDB_PROC_NAME:pE,HDB_PROC_DESCRIPTOR:Zc,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi,CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,SYSTEM_SCHEMA_NAME:mO,HASH_FOLDER_NAME:AO,HDB_HOME_DIR_NAME:gO,UPDATE_FILE_NAME:IO,LICENSE_KEY_DIR_NAME:NO,BOOT_PROPS_FILE_NAME:OO,JOB_TYPE_ENUM:eI,JOB_STATUS_ENUM:KO,SYSTEM_TABLE_NAMES:FO,SYSTEM_TABLE_HASH_ATTRIBUTES:xO,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:WO,S3_BUCKET_AUTH_KEYS:QO,VALID_SQL_OPS_ENUM:jO,GEO_CONVERSION_ENUM:XO,HDB_SETTINGS_NAMES:wE,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ZO,SERVICE_ACTIONS_ENUM:JO,CLUSTER_MESSAGE_TYPE_ENUM:tI,CLUSTER_CONNECTION_DIRECTION_ENUM:rI,CLUSTER_EVENTS_DEFS_ENUM:oI,PERIOD_REGEX:aO,DOUBLE_PERIOD_REGEX:cO,UNICODE_PERIOD:_O,FORWARD_SLASH_REGEX:uO,UNICODE_FORWARD_SLASH:lO,ESCAPED_FORWARD_SLASH_REGEX:EO,ESCAPED_PERIOD_REGEX:dO,ESCAPED_DOUBLE_PERIOD_REGEX:SO,REG_KEY_FILE_NAME:YO,RESTART_TIMEOUT_MS:LO,HDB_FILE_PERMISSIONS:yO,SCHEMA_DIR_NAME:DO,TRANSACTIONS_DIR_NAME:UO,LIMIT_COUNT_NAME:PO,ID_ATTRIBUTE_STRING:HO,INSERT_MODULE_ENUM:GO,UPGRADE_JSON_FIELD_NAMES_ENUM:qO,RESTART_CODE:CO,RESTART_CODE_NUM:bO,CLUSTER_OPERATIONS:An,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:kO,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ge,INTERNAL_SC_CHANNELS:VO,CLUSTERING_MESSAGE_TYPES:dI,HDB_FILE_SUFFIX:pO,BLOB_FOLDER_NAME:wO,HDB_TRASH_DIR:MO,ORIGINATOR_SET_VALUE:SI,LICENSE_VALUES:nI,RAM_ALLOCATION_ENUM:iI,STORAGE_TYPES_ENUM:sI,TIME_STAMP_NAMES_ENUM:DE,TIME_STAMP_NAMES:uI,PERMS_UPDATE_RELEASE_TIMESTAMP:lI,SEARCH_NOT_FOUND_MESSAGE:tO,SEARCH_ATTRIBUTE_NOT_FOUND:rO,LICENSE_ROLE_DENIED_RESPONSE:sO,LICENSE_MAX_CONNS_REACHED:nO,BASIC_LICENSE_MAX_NON_CU_ROLES:IE,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:ZN,VALUE_SEARCH_COMPARATORS:UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:EI,LICENSE_FILE_NAME:$O,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aI,NEW_LINE:fI,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oO,MOMENT_DAYS_TAG:fO,API_TURNOVER_SEC:hO,LOOPBACK:iO,CODE_EXTENSION:Xi,WILDCARD_SEARCH_VALUE:TO,NODE_ERROR_CODES:cI,JAVASCRIPT_EXTENSION:gE,PERMS_CRUD_ENUM:hI,UNAUTHORIZED_PERMISSION_NAME:RI,SEARCH_WILDCARDS:TI,FUNC_VAL:mI,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:AI,JWT_ENUM:gI,CLUSTERING_FLAG:_I,ITC_EVENT_TYPES:pI,CUSTOM_FUNCTION_PROC_NAME:NE,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ji,SERVICES:NI,THREAD_TYPES:OI,MEM_SETTING_KEY:RO,HDB_RESTART_SCRIPT:GN,PROCESS_DESCRIPTORS:kN,SERVICE_SERVERS:QN,SERVICE_SERVERS_CWD:Xc,PROCESS_DESCRIPTORS_VALIDATE:KN,LAUNCH_SERVICE_SCRIPTS:jN,LOG_LEVELS:$N,PROCESS_NAME_ENV_PROP:BO,LOG_NAMES:YN,PM2_PROCESS_STATUSES:II,CONFIG_PARAM_MAP:ME,CONFIG_PARAMS:h,HDB_CONFIG_FILE:HN,HDB_DEFAULT_CONFIG_FILE:BN,ROLE_TYPES_ENUM:JN,BOOT_PROP_PARAMS:LE,INSTALL_PROMPTS:vO,HDB_ROOT_DIR_NAME:vN,CLUSTERING_PROCESSES:WN,FOREGROUND_PID_FILE:xN,PACKAGE_ROOT:_r,PRE_4_0_0_VERSION:CI,SCHEMAS_PARAM_CONFIG:zO,HDB_PID_FILE:VN}});var kr=f((EY,vE)=>{"use strict";var HE=require("minimist");vE.exports=bI;function bI(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BE(process.env),s=BE(HE(process.argv))):(r=process.env,s=HE(process.argv));let n={};for(let i=0,a=e.length;i<a;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}o(bI,"assignCMDENVVariables");function BE(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(BE,"objKeysToLowerCase")});var p=f((SY,jE)=>{"use strict";var Ds=require("fs-extra"),{workerData:LI,threadId:yI}=require("worker_threads"),ur=require("path"),FE=require("yaml"),xE=require("properties-reader"),ue=T(),GE=kr(),wI=require("os"),{PACKAGE_ROOT:e_}=T(),VE={};for(let e in console)VE[e]=console[e];var be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kE={STDOUT:"stdOut",STDERR:"stdErr"},MI=ur.join(e_,"logs"),DI=ur.join(e_,"config/yaml/",ue.HDB_DEFAULT_CONFIG_FILE),UI=1e4,Vt,kt,Ce,eo,to,ro,pn,gn;gn===void 0&&YE();jE.exports={notify:WE,fatal:QE,error:Nn,warn:n_,info:so,debug:s_,trace:r_,setLogLevel:FI,log_level:Ce,loggerWithTag:PI,suppressLogging:HI,initLogSettings:YE,setupConsoleLogging:$E,logCustomLevel:GI,closeLogFile:t_,getLogFilePath:()=>ro,OUTPUTS:kE};function YE(e=!1){try{if(gn===void 0||e){t_();let t=qI();gn=xE(t);let r=GE(["ROOTPATH"]);({level:Ce,config_log_path:to,to_file:Vt,to_stream:kt}=xI(r.ROOTPATH?ur.join(r.ROOTPATH,ue.HDB_CONFIG_FILE):gn.get("settings_path"))),eo=ue.LOG_NAMES.HDB,ro=ur.join(to,eo)}}catch(t){if(gn=void 0,t.code===ue.NODE_ERROR_CODES.ENOENT){let r=GE(Object.keys(ue.CONFIG_PARAM_MAP),!0);for(let a in r){let c=ue.CONFIG_PARAM_MAP[a];c&&c.toLowerCase();let _=r[a];if(c===ue.CONFIG_PARAMS.LOGGING_LEVEL){Ce=_;continue}if(c===ue.CONFIG_PARAMS.LOGGING_STDSTREAMS){kt=_;continue}c===ue.CONFIG_PARAMS.LOGGING_FILE&&(Vt=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=VI();Vt=Vt===void 0?n:Vt,Vt=qE(Vt),kt=kt===void 0?i:kt,kt=qE(kt),Ce=Ce===void 0?s:Ce,to=MI,eo=ue.LOG_NAMES.INSTALL,ro=ur.join(to,eo);return}throw Nn("Error initializing log settings"),Nn(t),t}$E()}o(YE,"initLogSettings");var zc=!0;function $E(){Ms("error",Nn),Ms("warn",n_),Ms("log",so),Ms("info",so),Ms("debug",s_),Ms("trace",r_)}o($E,"setupConsoleLogging");function Ms(e,t){console[e]=function(...r){if(zc&&t(...r),!/PM2 log:|App \[/.test(r[0]))return VE[e](...r)}}o(Ms,"logConsole");function PI(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(WE),fatal:r(QE),error:r(Nn),warn:r(n_),info:r(so),debug:r(s_),trace:r(r_)};function r(s){return function(...n){return s(t,...n)}}}o(PI,"loggerWithTag");function HI(e){try{zc=!1,e()}finally{zc=!0}}o(HI,"suppressLogging");var BI=LI?.name?.replace(/ /g,"-")||"main";function Yt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,a=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(a.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),a.unshift(_||BI+"/"+yI);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${a.join("] [")}]: ${s}
|
|
4
|
+
`}o(Yt,"createLogRecord");function On(e){Vt&&KE(e),kt&&process.stdout.write(e)}o(On,"logStdOut");function no(e){Vt&&KE(e),kt&&process.stderr.write(e)}o(no,"logStdErr");function KE(e){vI(),Ds.appendFileSync(pn,e)}o(KE,"logToFile");function t_(){try{Ds.closeSync(pn)}catch{}pn=null}o(t_,"closeLogFile");function vI(){pn||(pn=Ds.openSync(ro,"a"),setTimeout(()=>{t_()},UI).unref())}o(vI,"openLogFile");function so(...e){be[Ce]<=be.info&&On(Yt("info",e))}o(so,"info");function r_(...e){be[Ce]<=be.trace&&On(Yt("trace",e))}o(r_,"trace");function Nn(...e){be[Ce]<=be.error&&no(Yt("error",e))}o(Nn,"error");function s_(...e){be[Ce]<=be.debug&&On(Yt("debug",e))}o(s_,"debug");function WE(...e){be[Ce]<=be.notify&&On(Yt("notify",e))}o(WE,"notify");function QE(...e){be[Ce]<=be.fatal&&no(Yt("fatal",e))}o(QE,"fatal");function n_(...e){be[Ce]<=be.warn&&no(Yt("warn",e))}o(n_,"warn");function GI(e,t,...r){t===kE.STDERR?no(Yt(e,r)):On(Yt(e,r))}o(GI,"logCustomLevel");function qI(){let e;try{e=wI.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ur.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return Ds.existsSync(t)||(t=ur.join(e_,"utility/hdb_boot_properties.file")),t}o(qI,"getPropsFilePath");function FI(e){Ce=e}o(FI,"setLogLevel");function qE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qE,"autoCastBoolean");function xI(e){try{if(e.includes("config/settings.js")){let a=xE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ur.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FE.parseDocument(Ds.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(xI,"getLogConfig");function VI(){try{let e=FE.parseDocument(Ds.readFileSync(DI,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(VI,"getDefaultConfig")});var Us=f((hY,kI)=>{kI.exports={name:"harperdb",version:"4.1.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.2",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var Yr=f((mY,JE)=>{"use strict";var TY=require("fs-extra"),RY=p();JE.exports={version:YI,printVersion:KI,nodeVersion:$I};var lr=Us();function YI(){if(lr)return lr.version}o(YI,"version");function $I(){if(lr&&lr.engines&&lr.engines["preferred-node"])return lr.engines["preferred-node"]}o($I,"nodeVersion");function KI(){lr&&console.log(`HarperDB Version ${lr.version}`)}o(KI,"printVersion")});var ed=f((gY,zE)=>{"use strict";var XE=require("semver/functions/major"),WI=require("semver/functions/satisfies"),ZE=Us(),In=process.versions&&process.versions.node?process.versions.node:void 0;zE.exports=QI;function QI(){let e=ZE.engines.node,t=ZE.engines["preferred-node"];if(In){if(e&&!WI(In,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${In}. Please install a version of Node.js that is withing the defined range.`};if(t&&XE(In)!==XE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${In}. Some issues may occur with untested versions of Node.js.`}}}o(QI,"checkNodeVersion")});var i_=f((NY,td)=>{"use strict";var jI=require("util"),JI=require("path"),XI=require("child_process"),ZI=jI.promisify(XI.execFile),zI=1e3*1e3*10;td.exports={findPs:eC};async function eC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await ZI("ps",["wwxo",`pid,${r}`],{maxBuffer:zI});for(let n of s.trim().split(`
|
|
5
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:JI.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}o(eC,"findPs")});var de=f((IY,sd)=>{"use strict";var tC="__dbis__",rC="__environment_name__",sC="__dbi_defintion__",nC={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},iC=["__createdtime__","__updatedtime__"],oC="\uFFFF",rd={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},aC=Object.values(rd);sd.exports={INTERNAL_DBIS_NAME:tC,DBI_DEFINITION_NAME:sC,SEARCH_TYPES:nC,TIMESTAMP_NAMES:iC,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rC,TRANSACTIONS_DBI_NAMES_ENUM:rd,TRANSACTIONS_DBIS:aC,OVERFLOW_MARKER:oC}});var et=f((CY,Ed)=>{"use strict";var nd=T(),id=de(),od={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},ad=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cd={500:ad("There was an error processing your request."),400:"Invalid request"},cC=cd[od.INTERNAL_SERVER_ERROR],_C={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},uC={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lC={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},EC={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${id.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${id.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},dC={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${nd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${nd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},_d={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},SC={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},fC={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},hC={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},TC={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RC={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},ud={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},ld={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},mC={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},AC={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gC={..._d,...lC,..._C,...SC,...fC,...hC,...TC,...RC,...dC,...ud,...ld,...mC,...AC,...uC};Ed.exports={CHECK_LOGS_WRAPPER:ad,HDB_ERROR_MSGS:gC,DEFAULT_ERROR_MSGS:cd,DEFAULT_ERROR_RESP:cC,HTTP_STATUS_CODES:od,LMDB_ERRORS_ENUM:EC,AUTHENTICATION_ERROR_MSGS:_d,VALIDATION_ERROR_MSGS:ud,ITC_ERRORS:ld}});var J=f((LY,fd)=>{"use strict";var Ps=et(),pC=p(),NC=T(),Cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,dd),this.http_resp_code=s||Ps.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ps.DEFAULT_ERROR_MSGS[s]?Ps.DEFAULT_ERROR_MSGS[s]:Ps.DEFAULT_ERROR_MSGS[Ps.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&pC[n](i)}};o(Cn,"HdbError");function dd(e,t,r,s=NC.LOG_LEVELS.ERROR,n=null,i=!1){if(Sd(e))return e;let a=new Cn(e,t,r,s,n);return i&&delete a.stack,a}o(dd,"handleHDBError");function Sd(e){return e.__proto__.constructor.name===Cn.name}o(Sd,"isHDBError");fd.exports={isHDBError:Sd,handleHDBError:dd,hdb_errors:Ps}});var O=f((MY,yd)=>{"use strict";var $r=require("path"),OC=require("fs-extra"),Re=p(),hd=require("fs-extra"),bn=require("os"),IC=require("net"),CC=require("recursive-iterator"),Te=T(),Ad=i_(),Td=require("papaparse"),io=require("moment"),{inspect:bC}=require("util"),Rd=require("is-number"),wY=require("lodash"),{hdb_errors:oo}=J(),gd=require("util").promisify(setTimeout),LC=100,yC=5,wC="",MC=4,md={true:!0,false:!1,undefined:null,null:null,NaN:NaN};yd.exports={isEmpty:qe,isEmptyOrZeroLength:Ot,arrayHasEmptyValues:PC,arrayHasEmptyOrZeroLengthValues:HC,buildFolderPath:BC,isBoolean:pd,errorizeMessage:DC,stripFileExtension:GC,autoCast:qC,autoCastJSON:Nd,autoCastJSONDeep:o_,removeDir:FC,compareVersions:xC,isCompatibleDataVersion:VC,escapeRawValue:kC,unescapeValue:YC,stringifyProps:$C,timeoutPromise:WC,isClusterOperation:jC,getClusterUser:XC,checkGlobalSchemaTable:JC,getHomeDir:Id,getPropsFilePath:KC,promisifyPapaParse:ZC,removeBOM:Cd,createEventPromise:zC,checkProcessRunning:eb,checkSchemaTableExist:tb,checkSchemaExists:bd,checkTableExists:Ld,getStartOfTomorrowInSeconds:rb,getLimitKey:sb,isObject:vC,isNotEmptyAndHasValue:UC,autoCasterIsNumberCheck:Od,backtickASTSchemaItems:nb,isPortTaken:QC,stopProcess:ib,createForkArgs:ob,autoCastBoolean:ab,async_set_timeout:gd,getTableHashAttribute:cb,doesSchemaExist:_b,doesTableExist:ub,stringifyObj:lb,ms_to_time:Eb,changeExtension:db,PACKAGE_ROOT:Te.PACKAGE_ROOT};function DC(e){return e instanceof Error?e:new Error(e)}o(DC,"errorizeMessage");function qe(e){return e==null}o(qe,"isEmpty");function UC(e){return!qe(e)&&(e||e===0||e===""||pd(e))}o(UC,"isNotEmptyAndHasValue");function Ot(e){return qe(e)||e.length===0||e.size===0}o(Ot,"isEmptyOrZeroLength");function PC(e){if(qe(e))return!0;for(let t=0;t<e.length;t++)if(qe(e[t]))return!0;return!1}o(PC,"arrayHasEmptyValues");function HC(e){if(Ot(e))return!0;for(let t=0;t<e.length;t++)if(Ot(e[t]))return!0;return!1}o(HC,"arrayHasEmptyOrZeroLengthValues");function BC(...e){try{return e.join($r.sep)}catch{console.error(e)}}o(BC,"buildFolderPath");function pd(e){return qe(e)?!1:e===!0||e===!1}o(pd,"isBoolean");function vC(e){return qe(e)?!1:typeof e=="object"}o(vC,"isObject");function GC(e){return Ot(e)?wC:e.slice(0,-MC)}o(GC,"stripFileExtension");function qC(e){return qe(e)||e===""||typeof e!="string"?e:md[e]!==void 0?md[e]:Od(e)===!0?Number(e):e}o(qC,"autoCast");function Nd(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Nd,"autoCastJSON");function o_(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=o_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=o_(r);s!==r&&(e[t]=s)}return e}else return Nd(e)}o(o_,"autoCastJSONDeep");function Od(e){if(e.startsWith("0.")&&Rd(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Rd(e))}o(Od,"autoCasterIsNumberCheck");async function FC(e){if(Ot(e))throw new Error(`Directory path: ${e} does not exist`);try{await hd.emptyDir(e),await hd.remove(e)}catch(t){throw Re.error(`Error removing files in ${e} -- ${t}`),t}}o(FC,"removeDir");function xC(e,t){if(Ot(e)){Re.info("Invalid current version sent as parameter.");return}if(Ot(t)){Re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(a.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(xC,"compareVersions");function VC(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(VC,"isCompatibleDataVersion");function kC(e){if(qe(e))return e;let t=String(e);return t==="."?Te.UNICODE_PERIOD:t===".."?Te.UNICODE_PERIOD+Te.UNICODE_PERIOD:t.replace(Te.FORWARD_SLASH_REGEX,Te.UNICODE_FORWARD_SLASH)}o(kC,"escapeRawValue");function YC(e){if(qe(e))return e;let t=String(e);return t===Te.UNICODE_PERIOD?".":t===Te.UNICODE_PERIOD+Te.UNICODE_PERIOD?"..":String(e).replace(Te.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(YC,"unescapeValue");function $C(e,t){if(qe(e))return Re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+bn.EOL}!Ot(s)&&s[0]===";"?r+=" "+s+n+bn.EOL:Ot(s)||(r+=s+"="+n+bn.EOL)}catch{Re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o($C,"stringifyProps");function Id(){let e;try{e=bn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(Id,"getHomeDir");function KC(){let e=$r.join(Id(),Te.HDB_HOME_DIR_NAME,Te.BOOT_PROPS_FILE_NAME);return OC.existsSync(e)||(e=$r.join(__dirname,"../","hdb_boot_properties.file")),e}o(KC,"getPropsFilePath");function WC(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(WC,"timeoutPromise");async function QC(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=IC.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(QC,"isPortTaken");function jC(e){try{return Te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Re.error(`Error checking operation against cluster ops ${t}`)}return!1}o(jC,"isClusterOperation");function JC(e,t){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(JC,"checkGlobalSchemaTable");function XC(e,t){if(qe(t)){Re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(qe(e)||Ot(e)){Re.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(XC,"getClusterUser");function ZC(){Td.parsePromise=function(e,t){return new Promise(function(r,s){Td.parse(e,{header:!0,transformHeader:Cd,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(ZC,"promisifyPapaParse");function Cd(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Cd,"removeBOM");function zC(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Re.info(`Got cluster status event response: ${bC(n)}`);try{i.cancel()}catch{Re.error("Error trying to cancel timeout.")}s(n)})})}o(zC,"createEventPromise");async function eb(e){let t=!0,r=0;do await gd(LC*r++),(await Ad.findPs(e)).length>0&&(t=!1);while(t&&r<yC);if(t)throw new Error(`process ${e} was not started`)}o(eb,"checkProcessRunning");function tb(e,t){let r=bd(e);if(r)return r;let s=Ld(e,t);if(s)return s}o(tb,"checkSchemaTableExist");function bd(e){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(bd,"checkSchemaExists");function Ld(e,t){if(!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Ld,"checkTableExists");function rb(){let e=io().utc().add(1,Te.MOMENT_DAYS_TAG).startOf(Te.MOMENT_DAYS_TAG).unix(),t=io().utc().unix();return e-t}o(rb,"getStartOfTomorrowInSeconds");function sb(){return io().utc().format("DD-MM-YYYY")}o(sb,"getLimitKey");function nb(e){try{let t=new CC(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Re.error("Got an error back ticking items."),Re.error(t)}}o(nb,"backtickASTSchemaItems");async function ib(e){let t=bn.userInfo();(await Ad.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(ib,"stopProcess");function ob(e){return[e]}o(ob,"createForkArgs");function ab(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(ab,"autoCastBoolean");function cb(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(cb,"getTableHashAttribute");function _b(e){return global?.hdb_schema?.[e]!==void 0}o(_b,"doesSchemaExist");function ub(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(ub,"doesTableExist");function lb(e){try{return JSON.stringify(e)}catch{return e}}o(lb,"stringifyObj");function Eb(e){let t=io.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}o(Eb,"ms_to_time");function db(e,t){let r=$r.basename(e,$r.extname(e));return $r.join($r.dirname(e),r+t)}o(db,"changeExtension")});var a_=f((UY,wd)=>{"use strict";var Sb={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},fb="certificate.pem",hb="privateKey.pem",Tb="ca.pem";wd.exports={CERTIFICATE_VALUES:Sb,CERTIFICATE_PEM_NAME:fb,PRIVATEKEY_PEM_NAME:hb,CA_PEM_NAME:Tb}});var Fe=f((PY,Md)=>{"use strict";var Le=require("validate.js");Le.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Le.validators.type.checks[t](e)?null:` must be a '${t}' value`};Le.validators.type.checks={Object:function(e){return Le.isObject(e)&&!Le.isArray(e)},Array:Le.isArray,Integer:Le.isInteger,Number:Le.isNumber,String:Le.isString,Date:Le.isDate,Boolean:function(e){return typeof e=="boolean"}};Le.validators.hasValidFileExt=function(e,t){return Le.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Md.exports={validateObject:Rb,validateObjectAsync:mb,validateBySchema:Ab};function Rb(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Le(e,t,{format:"flat"});return r?new Error(r):null}o(Rb,"validateObject");async function mb(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Le.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(mb,"validateObjectAsync");function Ab(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(Ab,"validateBySchema")});var __=f((vY,Hd)=>{"use strict";var gb=require("fs-extra"),M=require("joi"),pb=require("os"),{boolean:Z,string:$t,number:ut,array:c_}=M.types(),{totalmem:Dd}=require("os"),Ln=require("path"),Nb=p(),co=O(),BY=a_(),Ob=T(),Ib=Fe(),Ud="log",Cb="custom_functions",bb="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Lb="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yb="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",wb="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Mb="rootPath config parameter is undefined",Db="clustering.enabled config parameter is undefined",Kr=ut.min(0).required(),_o=c_.items({host:$t.required(),port:Kr}).empty(null),Er;Hd.exports={configValidator:Ub,routesValidator:qb,route_constraints:_o};function Ub(e){if(Er=e.rootPath,co.isEmpty(Er))throw Mb;let t=Z.required(),r=M.valid("production","development").required(),s=ut.min(1).max(1e3).empty(null).default(Gb),n=$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ao),i=M.custom(Pb).messages({"any.custom":"{:#label} {:#error}"}),a=$t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=M.string().empty(null).default(ao),_=M.custom(Hb).empty(null).default(ao),u=e.clustering?.enabled;if(co.isEmpty(u))throw Db;let l;return u===!0?l=M.object({enabled:t,hubServer:M.object({cluster:M.object({name:M.required().empty(null),network:M.object({port:Kr,routes:_o}).required()}).required(),leafNodes:M.object({network:M.object({port:Kr}).required()}).required(),network:M.object({port:Kr}).required()}).required(),leafServer:M.object({network:M.object({port:Kr,routes:_o}).required(),streams:M.object({maxAge:ut.min(120).allow(null).optional(),maxBytes:ut.min(1).allow(null).optional(),maxMsgs:ut.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:M.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Z.optional(),tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required(),verify:Z.optional()}),user:$t.optional().empty(null)}).required():l=M.object({enabled:t,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required()})}).required(),M.object({clustering:l,customFunctions:M.object({enabled:t,network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}),nodeEnv:r,root:n,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:M.object({enabled:t}).required(),logging:M.object({file:Z.required(),level:M.valid("notify","fatal","error","warn","info","debug","trace"),rotation:M.object({enabled:Z.optional(),compress:Z.optional(),interval:$t.custom(vb).optional().empty(null),maxSize:$t.custom(Bb).optional().empty(null),path:$t.optional().empty(null).default(ao)}).required(),root:n,stdStreams:Z.required(),auditLog:Z.required()}).required(),operationsApi:M.object({authentication:M.object({operationTokenTimeout:M.required(),refreshTokenTimeout:M.required()}).required(),foreground:Z.required(),network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}).required(),nodeEnv:r,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:M.object({threads:s}).required(),storage:M.object({writeAsync:Z.required(),overlappingSync:Z.optional(),caching:Z.optional(),compression:Z.optional(),noReadAhead:Z.optional(),path:_,prefetchWrites:Z.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(Ub,"configValidator");function Pd(e){return gb.existsSync(e)?null:`Specified path ${e} does not exist.`}o(Pd,"doesPathExist");function Pb(e,t){if(e===null)return;let r=Pd(e);return r?t.message(r):e}o(Pb,"validatePemFile");function Hb(e,t){M.assert(e,$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Pd(e);if(r)return t.message(r)}o(Hb,"validatePath");function Bb(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(bb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yb):e}o(Bb,"validateRotationMaxSize");function vb(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Lb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(wb):e}o(vb,"validateRotationInterval");function Gb(e,t){let r=t.state.path.join("."),s=pb.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Dd();return i=Math.round(Math.min(i,Dd())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Nb.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}o(Gb,"setDefaultThreads");function ao(e,t){if(!co.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(co.isEmpty(Er))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ln.join(Er,Cb);case"logging.root":return Ln.join(Er,Ud);case"clustering.leafServer.streams.path":return Ln.join(Er,"clustering","leaf");case"storage.path":return Ln.join(Er,Ob.SCHEMA_DIR_NAME);case"logging.rotation.path":return Ln.join(Er,Ud);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(ao,"setDefaultRoot");function qb(e){let t=M.object({routes:_o});return Ib.validateBySchema({routes:e},t)}o(qb,"routesValidator")});var Ve=f((qY,$d)=>{"use strict";var rt=T(),xe=O(),_e=p(),{configValidator:Fb,routesValidator:Bd}=__(),tt=require("fs-extra"),xb=require("yaml"),It=require("path"),Vb=require("is-number"),Gd=require("properties-reader"),kb=require("lodash"),{handleHDBError:Yb}=J(),{HTTP_STATUS_CODES:$b,HDB_ERROR_MSGS:uo}=et(),Kb=require("minimist"),{SCHEMAS_PARAM_CONFIG:yn,CONFIG_PARAMS:dr,CONFIG_PARAM_MAP:Kt}=rt,Wb="Unable to get config value because config is uninitialized",Qb="Config successfully initialized",jb="Error backing up config file",Jb="Empty parameter sent to getConfigValue",qd=It.join(rt.PACKAGE_ROOT,"config","yaml",rt.HDB_DEFAULT_CONFIG_FILE),Xb="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",vd={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},lo,Se;$d.exports={createConfigFile:Zb,getDefaultConfig:zb,getConfigValue:xd,initConfig:Vd,flattenConfig:Wr,updateConfigValue:kd,updateConfigObject:tL,getConfiguration:nL,setConfiguration:iL,readConfigFile:d_,getClusteringRoutes:oL,initOldConfig:Yd,getConfigFromFile:aL};function Zb(e){let t=Hs(qd);lo=Wr(t.toJSON());let r;for(let a in e){let c=Kt[a.toLowerCase()];if(c===dr.SCHEMAS){r=e[a];continue}if(c!==void 0){let _=c.split("_"),u=u_(c,e[a]);try{t.setIn([..._],u)}catch(l){_e.error(l)}}}r&&Fd(t,r),E_(t);let s=t.toJSON();Se=Wr(s);let n=t.getIn(["rootPath"]),i=It.join(n,rt.HDB_CONFIG_FILE);tt.createFileSync(i),tt.writeFileSync(i,String(t)),_e.trace(`Config file written to ${i}`)}o(Zb,"createConfigFile");function Fd(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!xe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(yn.TABLES))for(let i in s[n][yn.TABLES])for(let a in s[n][yn.TABLES][i]){let c=s[n][yn.TABLES][i][a],_=[dr.SCHEMAS,n,yn.TABLES,i,a];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let a=s[n][i],c=[dr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(s){_e.error("Error parsing schemas CLI/env config arguments",s)}}o(Fd,"setSchemasConfig");function zb(e){if(lo===void 0){let r=Hs(qd);lo=Wr(r.toJSON())}let t=Kt[e.toLowerCase()];if(t!==void 0)return lo[t.toLowerCase()]}o(zb,"getDefaultConfig");function xd(e){if(xe.isEmpty(e)){_e.error(Jb);return}if(Se===void 0){_e.trace(Wb);return}let t=Kt[e.toLowerCase()];if(t!==void 0)return Se[t.toLowerCase()]}o(xd,"getConfigValue");function l_(e){let t=Kb(process.argv);return t.ROOTPATH?It.join(t.ROOTPATH,rt.HDB_CONFIG_FILE):Gd(e).get(rt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(l_,"getConfigFilePath");function Vd(e=!1){if(Se===void 0||e){let t=xe.getPropsFilePath();try{tt.accessSync(t,tt.constants.F_OK|tt.constants.R_OK)}catch(i){throw _e.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=l_(t),s;if(r.includes("config/settings.js"))try{Yd(r);return}catch(i){if(i.code!==rt.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hs(r)}catch(i){if(i.code===rt.NODE_ERROR_CODES.ENOENT){_e.trace(`HarperDB config file not found at ${r}.
|
|
6
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eL(s,r),E_(s);let n=s.toJSON();if(Se=Wr(n),Se.logging_rotation_rotate)for(let i in vd)Se[i]&&_e.error(`Config ${vd[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(Qb)}}o(Vd,"initConfig");function eL(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],It.join(r,rt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],It.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],It.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),tt.writeFileSync(t,String(e)))}o(eL,"checkForUpdatedConfig");function E_(e){let t=e.toJSON(),r=Fb(t);if(r.error)throw uo.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}o(E_,"validateConfig");function tL(e,t){Se===void 0&&(Se={});let r=Kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}Se[r.toLowerCase()]=t}o(tL,"updateConfigObject");function kd(e,t,r=void 0,s=!1,n=!1){Se===void 0&&Vd();let i=xd(Kt.hdb_root),a=It.join(i,rt.HDB_CONFIG_FILE),c=Hs(a),_;if(r===void 0&&e.toLowerCase()===dr.SCHEMAS)_=t;else if(r===void 0){let E=Kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=u_(E,t);c.setIn([...d],S)}else for(let E in r){let d=Kt[E.toLowerCase()];if(d===dr.SCHEMAS){_=r[E];continue}if(d!==void 0){let S=d.split("_"),R=u_(d,r[E]);try{c.setIn([...S],R)}catch(m){_e.error(m)}}}_&&Fd(c,_),E_(c);let u=c.getIn(["rootPath"]),l=It.join(u,rt.HDB_CONFIG_FILE);s===!0&&rL(a,u),tt.writeFileSync(l,String(c)),n&&(Se=Wr(c.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(kd,"updateConfigValue");function rL(e,t){try{let r=It.join(t,"backup",`${rt.HDB_CONFIG_FILE}.bak`);tt.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(jb),_e.error(r)}}o(rL,"backupConfigFile");var sL=["schemas"];function Wr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!sL.includes(r)){let s=Wr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(Wr,"flattenConfig");function u_(e,t){if(e===dr.CLUSTERING_NODENAME||e===dr.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(Vb(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xe.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return xe.autoCast(t)}o(u_,"castConfigValue");function nL(){let e=xe.getPropsFilePath(),t=l_(e);return Hs(t).toJSON()}o(nL,"getConfiguration");async function iL(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kd(void 0,void 0,n,!0),Xb}catch(i){throw typeof i=="string"||i instanceof String?Yb(i,i,$b.BAD_REQUEST,void 0,void 0,!0):i}}o(iL,"setConfiguration");function d_(){let e=xe.getPropsFilePath();try{tt.accessSync(e,tt.constants.F_OK|tt.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=l_(e);return Hs(t).toJSON()}o(d_,"readConfigFile");function Hs(e){return xb.parseDocument(tt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Hs,"parseYamlDoc");function oL(){let e=d_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xe.isEmptyOrZeroLength(t)?[]:t;let r=Bd(t);if(r)throw uo.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=xe.isEmptyOrZeroLength(s)?[]:s;let n=Bd(s);if(n)throw uo.CONFIG_VALIDATION(n.message);if(!xe.isEmptyOrZeroLength(s)&&!xe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(c=>c.host===a.host&&c.port===a.port));if(!xe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw uo.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(oL,"getClusteringRoutes");function Yd(e){let t=Gd(e);Se={};for(let r in Kt){let s=t.get(r.toUpperCase());if(xe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Kt[r].toLowerCase();n===dr.LOGGING_ROOT?Se[n]=It.dirname(s):Se[n]=s}return Se}o(Yd,"initOldConfig");function aL(e){let t=d_();return kb.get(t,e.replaceAll("_","."))}o(aL,"getConfigFromFile")});var H=f((xY,Wd)=>{"use strict";var S_=require("fs-extra"),Ct=require("path"),cL=require("os"),_L=require("properties-reader"),wn=p(),Bs=O(),L=T(),Eo=Ve(),uL="Error initializing environment manager",So="BOOT_PROPS_FILE_PATH",Kd=!1,lL={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Wt={};Wd.exports={BOOT_PROPS_FILE_PATH:So,getHdbBasePath:EL,setHdbBasePath:dL,get:SL,initSync:hL,setProperty:G,initTestEnvironment:TL};function EL(){return Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(EL,"getHdbBasePath");function dL(e){Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(dL,"setHdbBasePath");function SL(e){let t=Eo.getConfigValue(e);return t===void 0?Wt[e]:t}o(SL,"get");function G(e,t){lL[e]&&(Wt[e]=t),Eo.updateConfigObject(e,t)}o(G,"setProperty");function fL(){let e;try{e=Bs.getPropsFilePath(),S_.accessSync(e,S_.constants.F_OK|S_.constants.R_OK),Kd=!0;let t=_L(e);return Wt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Wt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Wt[So]=e,!0}catch{return wn.trace(`Environment manager found no properties file at ${e}`),!1}}o(fL,"doesPropFileExist");function hL(e=!1){try{(Kd||fL())&&(Eo.initConfig(e),Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Eo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wn.error(uL),wn.error(t),console.error(t),process.exit(1)}}o(hL,"initSync");function TL(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,_=Ct.join(__dirname,"../../","unitTests");Wt[So]=Ct.join(_,"hdb_boot_properties.file"),G(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ct.join(_,"settings.test")),G(L.HDB_SETTINGS_NAMES.INSTALL_USER,cL.userInfo().username),G(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.HDB_SETTINGS_NAMES.CERT_KEY,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),G(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ct.join(_,"envDir","log")),G(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),G(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),G(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ct.join(_,"envDir")),G(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Bs.isEmpty(n)?!0:n),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Bs.isEmpty(n)?!0:n),G(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),G(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Bs.isEmpty(i)?!1:i),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Bs.isEmpty(i)?!1:i),G(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),G(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ct.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),G(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Bs.isEmpty(c)?!1:c),a&&(G("CORS_ACCESSLIST",a),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(G(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(G(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(G(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${So}. Please check your boot props and settings files`;wn.fatal(r),wn.error(t)}}o(TL,"initTestEnvironment")});var ke=f((YY,jd)=>{"use strict";var{platform:kY}=require("os"),RL="nats-server.zip",f_="nats-server",mL=process.platform==="win32"?`${f_}.exe`:f_,h_="HDB",AL=/^[^\s.,*>]+$/,Qd="__request__",gL=o(e=>`${e}.${Qd}`,"REQUEST_SUBJECT"),pL={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},NL={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},OL={HUB:"hub.pid",LEAF:"leaf.pid"},IL={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CL={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:h_,deliver_subject:"__HDB__.WORKQUEUE"},bL={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:h_,deliver_subject:"HDB.SCHEMAQUEUE"},LL={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:h_,deliver_subject:"HDB.USERQUEUE"},yL={SUCCESS:"success",ERROR:"error"},wL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ML={TXN:"txn",MSGID:"msgid"},vs={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},DL={[vs.ERR]:1,[vs.WRN]:2,[vs.INF]:3,[vs.DBG]:4,[vs.TRC]:5},UL={debug:"-D",trace:"-DVV"};jd.exports={NATS_SERVER_ZIP:RL,NATS_SERVER_NAME:f_,NATS_BINARY_NAME:mL,PID_FILES:OL,NATS_CONFIG_FILES:NL,SERVER_SUFFIX:IL,WORK_QUEUE_CONSUMER_NAMES:CL,SCHEMA_QUEUE_CONSUMER_NAMES:bL,USER_QUEUE_CONSUMER_NAMES:LL,NATS_TERM_CONSTRAINTS_RX:AL,REQUEST_SUFFIX:Qd,UPDATE_REMOTE_RESPONSE_STATUSES:yL,CLUSTER_STATUS_STATUSES:wL,REQUEST_SUBJECT:gL,SUBJECT_PREFIXES:ML,MSG_HEADERS:pL,LOG_LEVELS:vs,LOG_LEVEL_FLAGS:UL,LOG_LEVEL_HIERARCHY:DL}});var Xd=f((KY,Jd)=>{"use strict";var PL=ke(),fo=class{constructor(t,r,s,n,i,a,c,_,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+PL.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:a,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c,verify:_}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(fo,"HubConfigObject");Jd.exports=fo});var eS=f((QY,zd)=>{"use strict";var Zd=ke(),ho=class{constructor(t,r,s,n,i,a,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Zd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Zd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};o(ho,"LeafConfigObject");zd.exports=ho});var rS=f((JY,tS)=>{"use strict";var To=class{constructor(t,r){this.user=t,this.password=r}};o(To,"HdbUserObject");tS.exports=To});var nS=f((ZY,sS)=>{"use strict";var HL=ke(),Ro=class{constructor(t,r){this.user=t+HL.SERVER_SUFFIX.ADMIN,this.password=r}};o(Ro,"SysUserObject");sS.exports=Ro});var Gs=f((e$,aS)=>{"use strict";var oS=O(),iS=T(),Ao=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,T_=require("joi"),mo={schema_format:{pattern:Ao,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BL=T_.alternatives(T_.string().min(1).max(mo.schema_length.maximum).pattern(Ao).messages({"string.pattern.base":"{:#label} "+mo.schema_format.message}),T_.number()).required();function vL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mo.schema_length.maximum?`'${e}' maximum of 250 characters`:Ao.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(vL,"checkValidTable");function GL(e,t){return oS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(GL,"validateSchemaExists");function qL(e,t){let r=t.state.ancestors[0].schema;return oS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(qL,"validateTableExists");function FL(e,t){return e.toLowerCase()===iS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${iS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(FL,"validateSchemaName");aS.exports={common_validators:mo,schema_regex:Ao,hdb_schema_table:BL,validateSchemaExists:GL,validateTableExists:qL,validateSchemaName:FL,checkValidTable:vL}});var m_=f((r$,_S)=>{var{hdb_schema_table:cS}=Gs(),xL=Fe(),R_=require("joi"),VL={undefined:"undefined",null:"null"},kL=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||VL[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),YL=R_.object({schema:cS,table:cS,records:R_.array().items(R_.object().custom(kL)).required()});_S.exports=function(e){return xL.validateBySchema(e,YL)}});var A_=f((n$,uS)=>{"use strict";var go=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};o(go,"BridgeMethods");uS.exports=go});var Sr=f((c$,hS)=>{"use strict";var lS=et().LMDB_ERRORS_ENUM,o$=require("lmdb"),$L=de(),a$=require("buffer").Buffer,{OVERFLOW_MARKER:ES,MAX_SEARCH_KEY_LENGTH:po}=$L,dS=["number","string","symbol","boolean","bigint"];function KL(e){if(e=e?.database||e,!e)throw new Error(lS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(lS.INVALID_ENVIRONMENT)}o(KL,"validateEnv");function WL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(WL,"stringifyData");function QL(e){return e instanceof Date?e.valueOf():e}o(QL,"convertKeyValueToWrite");function jL(e){if(e==null)return;if(dS.includes(typeof e))return e.length>po?[e.slice(0,po)+ES]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];dS.includes(typeof n)&&(n.length>po?t.push(n.slice(0,po)+ES):t.push(n))}}return t}o(jL,"getIndexedValues");var No=0,SS=0;function fS(){SS=Date.now()-performance.now()}o(fS,"adjustStartTime");fS();var JL=6e4;setInterval(fS,JL).unref();function XL(){let e=performance.now()+SS;return e>No?(No=e,e):(No+=488e-6,No)}o(XL,"getNextMonotonicTime");hS.exports={validateEnv:KL,stringifyData:WL,convertKeyValueToWrite:QL,getNextMonotonicTime:XL,getIndexedValues:jL}});var RS=f((u$,TS)=>{"use strict";var Oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Oo,"DBIDefinition");TS.exports=Oo});var gS=f((E$,AS)=>{"use strict";var g_=H(),mS=T();g_.initSync();var ZL=g_.get(mS.CONFIG_PARAMS.STORAGE_COMPRESSION),zL=g_.get(mS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Io=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Io,"OpenDBIObject");AS.exports=Io});var OS=f((S$,NS)=>{"use strict";var qs=H(),Mn=T();qs.initSync();var ey=qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",pS=qs.get(Mn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ty=qs.get(Mn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Co=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ey,pS!==void 0&&(this.overlappingSync=pS),this.noReadAhead=ty}};o(Co,"OpenEnvironmentObject");NS.exports=Co});var k=f((h$,MS)=>{"use strict";var p_=require("lmdb"),st=require("fs-extra"),lt=require("path"),Lo=Sr(),IS=p(),fe=et().LMDB_ERRORS_ENUM,yo=RS(),N_=gS(),CS=OS(),fr=de(),Et=fr.INTERNAL_DBIS_NAME,bS=fr.DBI_DEFINITION_NAME,ry="data.mdb",sy="lock.mdb",Dn=".mdb",ny="-lock",bo=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[fr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new p_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(bo,"TransactionCursor");function O_(e,t){if(e===void 0)throw new Error(fe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fe.ENV_NAME_REQUIRED)}o(O_,"pathEnvNameValidation");async function I_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(fe.INVALID_BASE_PATH):s}try{let s=lt.join(e,t+Dn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(lt.join(e,t,ry),st.constants.R_OK|st.constants.F_OK),lt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(fe.INVALID_ENVIRONMENT)}else throw new Error(fe.INVALID_ENVIRONMENT);throw s}}o(I_,"validateEnvironmentPath");function wo(e,t){if(Lo.validateEnv(e),t===void 0)throw new Error(fe.DBI_NAME_REQUIRED)}o(wo,"validateEnvDBIName");async function iy(e,t,r=!1,s=!1){O_(e,t),t=t.toString();try{return await I_(e,t,s),C_(e,t,r)}catch(n){if(n.message===fe.INVALID_ENVIRONMENT){let i=lt.join(e,t);await st.mkdirp(s?i:e);let a=new CS(s?i:i+Dn,!1),c=p_.open(a);c.dbis=Object.create(null);let _=new N_(!1);c.openDB(Et,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=b_(e,t,r);return c[fr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}o(iy,"createEnvironment");async function oy(e,t,r,s=!0){let n=await C_(e,t);if(r===void 0)throw new Error(fe.DESTINATION_PATH_REQUIRED);try{await st.access(lt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(fe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(oy,"copyEnvironment");async function C_(e,t,r=!1){O_(e,t),t=t.toString();let s=b_(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await I_(e,t),i=lt.join(e,t+Dn),a=n!=i,c=new CS(n,a),_=p_.open(c);_.dbis=Object.create(null);let u=yS(_);for(let l=0;l<u.length;l++)nt(_,u[l]);return _[fr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}o(C_,"openEnvironment");async function ay(e,t,r=!1){O_(e,t),t=t.toString();let s=lt.join(e,t+Dn),n=await I_(e,t);if(global.lmdb_map!==void 0){let i=b_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await LS(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+ny:lt.join(lt.dirname(n),sy))}o(ay,"deleteEnvironment");async function LS(e){Lo.validateEnv(e);let t=e[fr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(LS,"closeEnvironment");function b_(e,t,r=!1){let n=`${lt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(b_,"getCachedEnvironmentName");function cy(e){Lo.validateEnv(e);let t=Object.create(null),r=nt(e,Et);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Et)try{t[s]=Object.assign(new yo,n)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(cy,"listDBIDefinitions");function yS(e){Lo.validateEnv(e);let t=[],r=nt(e,Et);for(let{key:s}of r.getRange({start:!1}))s!==Et&&t.push(s);return t}o(yS,"listDBIs");function _y(e,t){let s=nt(e,Et).getEntry(t),n=new yo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(_y,"getDBIDefinition");function wS(e,t,r,s=!1){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===fe.DBI_DOES_NOT_EXIST){let i=new N_(r,s===!0),a=e.openDB(t,i),c=new yo(r===!0,s);return a[bS]=c,nt(e,Et).putSync(t,c),e.dbis[t]=a,a}throw n}}o(wS,"createDBI");function nt(e,t){if(wo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Et?r=_y(e,t):r=new yo,r===void 0)throw new Error(fe.DBI_DOES_NOT_EXIST);let s;try{let n=new N_(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(fe.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}o(nt,"openDBI");function uy(e,t){wo(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[fr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(uy,"statDBI");async function ly(e,t){try{let r=lt.join(e,t+Dn);return(await st.stat(r)).size}catch{throw new Error(fe.INVALID_ENVIRONMENT)}}o(ly,"environmentDataSize");function Ey(e,t){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Et).removeSync(t)}o(Ey,"dropDBI");function dy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===fe.DBI_DOES_NOT_EXIST)wS(e,n,n!==t,n===t);else throw i}}}o(dy,"initializeDBIs");MS.exports={openDBI:nt,openEnvironment:C_,createEnvironment:iy,listDBIs:yS,listDBIDefinitions:cy,createDBI:wS,dropDBI:Ey,statDBI:uy,deleteEnvironment:ay,initializeDBIs:dy,TransactionCursor:bo,environmentDataSize:ly,copyEnvironment:oy,closeEnvironment:LS}});var US=f((R$,DS)=>{"use strict";var Mo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Mo,"InsertRecordsResponseObject");DS.exports=Mo});var HS=f((A$,PS)=>{"use strict";var Do=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Do,"UpdateRecordsResponseObject");PS.exports=Do});var vS=f((p$,BS)=>{"use strict";var Uo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Uo,"UpsertRecordsResponseObject");BS.exports=Uo});var jr=f((b$,FS)=>{"use strict";var Sy=k(),fy=US(),hy=HS(),Ty=vS(),bt=Sr(),Un=et().LMDB_ERRORS_ENUM,Ry=de(),Qt=T(),my=O(),Ay=require("uuid"),O$=require("lmdb"),{handleHDBError:gy,hdb_errors:py}=J(),{OVERFLOW_MARKER:I$,MAX_SEARCH_KEY_LENGTH:C$}=Ry,GS=H();GS.initSync();var Po=GS.get(Qt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),L_=Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qr=Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ny(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new fy,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];qS(u,!0,n);let l=Oy(e,t,r,u),E=u[t];a.push(l),c.push(E)}return w_(a,c,s,i,n)}o(Ny,"insertRecords");function Oy(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let c=s[a];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Qt.FUNC_VAL],s[a]=c)}let _=bt.getIndexedValues(c),u=e.dbis[a];if(_){Po&&u.prefetch(_.map(l=>({key:l,value:n})),Ho);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}Po&&e.dbis[t].prefetch([n],Ho),e.dbis[t].put(n,s,s[Qr])})}o(Oy,"insertRecord");function Iy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(Iy,"removeSkippedRecords");function qS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Qr]))&&(e[Qr]=r||(r=bt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[L_]))&&(e[L_]=r||bt.getNextMonotonicTime()):delete e[L_]}o(qS,"setTimestamps");function y_(e,t,r){r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Sy.initializeDBIs(e,t,r)}o(y_,"initializeTransaction");async function Cy(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new hy,a=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=M_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}c.push(d),_.push(E)}return w_(c,_,s,i,n,a)}o(Cy,"updateRecords");async function by(e,t,r,s,n=bt.getNextMonotonicTime()){try{D_(e,t,r,s)}catch(_){throw gy(_,_.message,py.HTTP_STATUS_CODES.BAD_REQUEST)}y_(e,t,r);let i=new Ty,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;my.isEmpty(u[t])?(l=Ay.v4(),u[t]=l):l=u[t];let E=M_(e,t,u,l,i,!1,n);a.push(E),c.push(l)}return w_(a,c,s,i,n)}o(by,"upsertRecords");async function w_(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let c=0,_=a.length;c<_;c++)a[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||bt.getNextMonotonicTime(),Iy(r,i),s}o(w_,"finalizeWrite");function M_(e,t,r,s,n,i=!1,a){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(qS(r,!l,a),Number.isInteger(r[Qr])&&u[Qr]>r[Qr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let B=m([[u]]);Array.isArray(B)&&(m=B[0][Qt.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=bt.getIndexedValues($);if(A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.remove(A[B],s)}if(A=bt.getIndexedValues(m),A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.put(A[B],s)}}let S=Object.assign({},u,r);c.put(s,S,S[Qr])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:M_(e,t,r,s,n,i,a))}o(M_,"updateUpsertRecord");function Ly(e,t,r){if(bt.validateEnv(e),t===void 0)throw new Error(Un.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Un.WRITE_ATTRIBUTES_REQUIRED):new Error(Un.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(Ly,"validateBasic");function D_(e,t,r,s){if(Ly(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Un.RECORDS_REQUIRED):new Error(Un.RECORDS_MUST_BE_ARRAY)}o(D_,"validateWrite");function Ho(){}o(Ho,"noop");FS.exports={insertRecords:Ny,updateRecords:Cy,upsertRecords:by}});var K=f((y$,KS)=>{"use strict";var Gn=T(),yy=O(),ye=H(),qn=require("path"),wy=require("minimist"),xS=require("fs-extra"),VS=require("lodash");ye.initSync();var{CONFIG_PARAMS:hr,SCHEMAS_PARAM_CONFIG:Pn,SYSTEM_SCHEMA_NAME:Bo}=Gn,Hn,Bn,vn;function kS(){if(Hn!==void 0)return Hn;if(ye.getHdbBasePath()!==void 0)return Hn=ye.get(hr.STORAGE_PATH)||qn.join(ye.getHdbBasePath(),Gn.SCHEMA_DIR_NAME),Hn}o(kS,"getBaseSchemaPath");function YS(){if(Bn!==void 0)return Bn;if(ye.getHdbBasePath()!==void 0)return Bn=$S(Bo),Bn}o(YS,"getSystemSchemaPath");function My(){if(vn!==void 0)return vn;if(ye.getHdbBasePath()!==void 0)return vn=ye.get(Gn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||qn.join(ye.getHdbBasePath(),Gn.TRANSACTIONS_DIR_NAME),vn}o(My,"getTransactionAuditStoreBasePath");function Dy(e,t){let r=ye.get(hr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||qn.join(My(),e.toString())}o(Dy,"getTransactionAuditStorePath");function $S(e,t){e=e.toString(),t=t&&t.toString();let r=ye.get(Gn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||qn.join(kS(),e)}o($S,"getSchemaPath");function Uy(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,wy(process.argv));let s=r[hr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!yy.isObject(s))throw a;i=s}for(let a of i){let c=a[Bo];if(!c)continue;let _=ye.get(hr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[Pn.PATH];if(u)return VS.set(_,[Bo,Pn.TABLES,t,Pn.PATH],u),ye.setProperty(hr.SCHEMAS,_),u;let l=c?.[Pn.PATH];if(l)return VS.set(_,[Bo,Pn.PATH],l),ye.setProperty(hr.SCHEMAS,_),l}}let n=r[hr.STORAGE_PATH.toUpperCase()];if(n){if(!xS.pathExistsSync(n))throw new Error(n+" does not exist");let i=qn.join(n,e);return xS.mkdirsSync(i),ye.setProperty(hr.STORAGE_PATH,n),i}return YS()}o(Uy,"initSystemSchemaPaths");function Py(){Hn=void 0,Bn=void 0,vn=void 0}o(Py,"resetPaths");KS.exports={getBaseSchemaPath:kS,getSystemSchemaPath:YS,getTransactionAuditStorePath:Dy,getSchemaPath:$S,initSystemSchemaPaths:Uy,resetPaths:Py}});var jt=f((M$,Hy)=>{Hy.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var U_=f((D$,WS)=>{var{common_validators:Tr}=Gs(),Fn=Fe(),dt="is required",W={schema:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},table:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},hash_attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length}};function xn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(xn,"makeAttributesStrings");function By(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(By,"schema_object");function vy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(vy,"table_object");function Gy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence={message:dt},Fn.validateObject(e,W)}o(Gy,"create_table_object");function qy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence={message:dt},W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(qy,"attribute_object");function Fy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(Fy,"describe_table");function xy(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}o(xy,"validateTableResidence");WS.exports={schema_object:By,create_table_object:Gy,table_object:vy,attribute_object:qy,describe_table:Fy,validateTableResidence:xy}});var jS=f((P$,QS)=>{"use strict";var Vy=require("uuid"),vo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vy.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(vo,"CreateAttributeObject");QS.exports=vo});var qo=f((B$,JS)=>{"use strict";var ky=jS(),Go=class extends ky{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Go,"LMDBCreateAttributeObject");JS.exports=Go});var ZS=f((G$,XS)=>{"use strict";XS.exports=$y;var Yy="inserted";function $y(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o($y,"returnObject")});var Fo=f((F$,sf)=>{"use strict";var Ky=T(),P_=k(),Wy=jr(),{getSystemSchemaPath:Qy,getSchemaPath:jy}=K(),Jy=jt(),Xy=U_(),Zy=qo(),zy=ZS(),{handleHDBError:zS,hdb_errors:tf}=J(),ef=O(),{HTTP_STATUS_CODES:ew}=tf,H_=Jy.hdb_attribute,rf=[];for(let e=0;e<H_.attributes.length;e++)rf.push(H_.attributes[e].attribute);var tw="inserted";sf.exports=rw;async function rw(e){let t=Xy.attribute_object(e);if(t)throw zS(new Error,t.message,tf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ef.checkGlobalSchemaTable(e.schema,e.table);if(r)throw zS(new Error,r,ew.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ef.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Zy(e.schema,e.table,e.attribute,e.id);try{let i=await P_.openEnvironment(jy(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);P_.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await P_.openEnvironment(Qy(),Ky.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await Wy.insertRecords(a,H_.hash_attribute,rf,[n]);return zy(tw,c,{records:[n]},_)}catch(i){throw i}}o(rw,"lmdbCreateAttribute")});var xo=f((k$,of)=>{"use strict";var Jt=O(),nf=p(),V$=m_();of.exports=sw;function sw(e){if(Jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Jt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(Jt.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Jt.isEmptyOrZeroLength(a[r]))throw nf.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Jt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw nf.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Jt.isEmpty(a[r])&&a[r]!==""&&s.has(Jt.autoCast(a[r]))&&(a.skip=!0),s.add(Jt.autoCast(a[r]));for(let c in a)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(sw,"insertUpdateValidate")});var ko=f(($$,af)=>{"use strict";var nw=T().OPERATIONS_ENUM,Vo=class{constructor(t,r,s,n,i=void 0){this.operation=nw.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Vo,"InsertObject");af.exports=Vo});var $o=f((Q$,cf)=>{"use strict";var W$=ko(),Yo=T(),v_=O(),B_=p(),iw=require("uuid"),{handleHDBError:Vn,hdb_errors:ow}=J(),{HDB_ERROR_MSGS:kn,HTTP_STATUS_CODES:Yn}=ow;cf.exports=aw;function aw(e,t,r){for(let n=0;n<t.length;n++)cw(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_w(i,r,e.operation)}}o(aw,"processRows");function cw(e){if(Buffer.byteLength(String(e))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vn(new Error,kn.ATTR_NAME_LENGTH_ERR(e),Yn.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(e)||v_.isEmpty(e.trim()))throw Vn(new Error,kn.ATTR_NAME_NULLISH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(cw,"validateAttribute");function _w(e,t,r){if(!e.hasOwnProperty(t)||v_.isEmptyOrZeroLength(e[t])){if(r===Yo.OPERATIONS_ENUM.INSERT||r===Yo.OPERATIONS_ENUM.UPSERT){e[t]=iw.v4();return}throw B_.error("Update transaction aborted due to record with no hash value:",e),Vn(new Error,kn.RECORD_MISSING_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw B_.error(e),Vn(new Error,kn.HASH_VAL_LENGTH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw B_.error(e),Vn(new Error,kn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(_w,"validateHash")});var uf=f((J$,_f)=>{"use strict";var Ko=class{constructor(t,r){this.type=t,this.message=r}};o(Ko,"ITCEventObject");_f.exports=Ko});var Wo=f((Z$,df)=>{var uw=require("crypto"),lf=9;function lw(e){let t=dw(lf),r=Ef(e+t);return t+r}o(lw,"createHash");function Ew(e,t){let r=e.substr(0,lf),s=r+Ef(t+r);return e===s}o(Ew,"validateHash");function dw(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}o(dw,"generateSalt");function Ef(e){return uw.createHash("md5").update(e).digest("hex")}o(Ef,"md5");df.exports={hash:lw,validate:Ew}});var ff=f((eK,Sf)=>{"use strict";var Rr=T(),$n=class{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o($n,"BaseLicense");var Qo=class extends $n{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a,c=!1){super(t,r,s,n,i,a),this.enterprise=c}};o(Qo,"ExtendedLicense");Sf.exports={BaseLicense:$n,ExtendedLicense:Qo}});var Vs=f((rK,gf)=>{"use strict";var xs=require("fs-extra"),hf=Wo(),Tf=require("crypto"),Sw=require("moment"),fw=require("uuid").v4,me=p(),q_=require("path"),hw=O(),Ye=T(),Tw=ff().ExtendedLicense,Fs="invalid license key format",Rw="061183",mw="mofi25",Aw="aes-256-cbc",gw=16,pw=32,Rf=H();Rf.initSync();var G_;gf.exports={validateLicense:mf,generateFingerPrint:Ow,licenseSearch:Af,getLicense:bw};function F_(){return q_.join(Rf.getHdbBasePath(),Ye.LICENSE_KEY_DIR_NAME,Ye.LICENSE_FILE_NAME)}o(F_,"getLicenseDirPath");function Nw(){let e=F_();return q_.join(e,Ye.LICENSE_FILE_NAME)}o(Nw,"getLicenseFilePath");function x_(){let e=F_();return q_.join(e,Ye.REG_KEY_FILE_NAME)}o(x_,"getFingerPrintFilePath");async function Ow(){let e=x_();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Iw();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Ow,"generateFingerPrint");async function Iw(){let e=fw(),t=hf.hash(e),r=x_();try{await xs.mkdirp(F_()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(Iw,"writeFingerprint");function mf(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ye.STORAGE_TYPES_ENUM.LMDB,api_call:Ye.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ye.RAM_ALLOCATION_ENUM.DEFAULT,version:Ye.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=x_(),n=!1;try{n=xs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(mw),c=a[1];c=Buffer.concat([Buffer.from(c)],gw);let _=Buffer.concat([Buffer.from(i)],pw),u=Tf.createDecipheriv(Aw,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=Cw(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fs),me.error(Fs),new Error(Fs)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(Fs),me.error(Fs),new Error(Fs)}else r.exp_date=l;r.exp_date<Sw().valueOf()&&(r.valid_date=!1),hf.validate(a[1],`${Rw}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||me.error("Invalid licence"),r}o(mf,"validateLicense");function Cw(e,t){try{let r=Tf.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Cw,"checkOldLicense");function Af(){let e=new Tw;e.api_call=0;let t=[];try{t=xs.readFileSync(Nw(),"utf-8").split(Ye.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(hw.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mf(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ye.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ye.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT),G_=e,e}o(Af,"licenseSearch");async function bw(){return G_||await Af(),G_}o(bw,"getLicense")});var Xr=f((nK,W_)=>{"use strict";var{Worker:Lw,MessageChannel:yw,parentPort:Xt,isMainThread:Of,threadId:ww,workerData:Mw}=require("worker_threads"),{PACKAGE_ROOT:Dw}=T(),{join:Uw,isAbsolute:Pw,extname:Hw}=require("path"),{totalmem:pf}=require("os"),$_=T(),If=H(),Bw=Vs(),jo=p(),vw=T();If.initSync();var Gw=If.get($_.CONFIG_PARAMS.HTTP_THREADS)||1,qw=1024*1024,mr=[],Jr=[],Fw=50,Cf=1e4,bf="restart",Lf="request_thread_info",yf="resource_report",wf="thread_info",Mf="added-port",V_;W_.exports={startWorker:k_,restartWorkers:K_,shutdownWorkers:Vw,workers:mr,setMonitorListener:Ww,onMessageFromWorkers:kw,broadcast:Yw};function k_(e,t={}){let s=Bw.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||pf();n=Math.min(n,pf());let i=Math.min(Math.max(Math.floor(n/qw/(1+Gw/4)),512),s||1/0),a=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Jr){let{port1:l,port2:E}=new yw;u.postMessage({type:Mf,port:l},[l]),c.push(E)}Hw(e)||(e+=".js");let _=new Lw(Pw(e)?e:Uw(Dw,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:a},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Jo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{k_(e,t)},_.on("error",u=>{console.error("Worker error:",u),jo.error("Worker error:",u)}),_.on("exit",u=>{mr.splice(mr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<Fw?(t.unexpectedRestarts=_.unexpectedRestarts+1,k_(e,t)):jo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===bf&&K_(u.workerType),u.type===Lf&&$w(_),u.type===yf&&Kw(_,u)}),mr.push(_),jw(),t.onStarted&&t.onStarted(_),_.name=t.name,_}o(k_,"startWorker");var xw=[$_.THREAD_TYPES.HTTP];async function K_(e=null,t=2,r=!0){if(Of){t<1&&(t=t*mr.length);let s=[];for(let n of mr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:$_.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=xw.indexOf(n.name)>-1,a=new Promise(c=>{let _=setTimeout(()=>n.terminate(),Cf*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),c()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Xt.postMessage({type:bf,workerType:e})}o(K_,"restartWorkers");function Vw(e){return K_(e,1/0,!1)}o(Vw,"shutdownWorkers");var Df=[];function kw(e){Df.push(e)}o(kw,"onMessageFromWorkers");function Yw(e){for(let t of Jr)try{t.postMessage(e)}catch(r){jo.error("Unable to send message to worker",r)}}o(Yw,"broadcast");function $w(e){e.postMessage({type:wf,workers:Uf()})}o($w,"sendThreadInfo");function Uf(){let e=Date.now();return mr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(Uf,"getChildWorkerInfo");function Kw(e,t){e.resources=t,e.resources.updated=Date.now()}o(Kw,"recordResourceReport");var Y_;function Ww(e){Y_=e}o(Ww,"setMonitorListener");var Qw=1e3,Nf=!1;function jw(){Nf||(Nf=!0,setInterval(()=>{for(let e of mr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Y_&&Y_()},Qw).unref())}o(jw,"startMonitoring");var Jw=1e3;if(Xt){Jo(Xt);for(let e of Mw.addPorts)Jo(e);setInterval(()=>{let e=process.memoryUsage();Xt.postMessage({type:yf,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Jw).unref(),V_=o(()=>new Promise((e,t)=>{Xt.on("message",r),Xt.postMessage({type:Lf});function r(s){s.type===wf&&(Xt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else V_=Uf;W_.exports.getThreadInfo=V_;function Jo(e,t){Jr.push(e),e.on("message",r=>{if(r.type===Mf)Jo(r.port);else for(let s of Df)s(r)}).on("close",()=>{Jr.splice(Jr.indexOf(e),1)}).on("exit",()=>{Jr.splice(Jr.indexOf(e),1)}),t||e.unref()}o(Jo,"addPort");Of||Xt.on("message",async e=>{let{type:t}=e;t===vw.ITC_EVENT_TYPES.SHUTDOWN&&(Xt.unref(),setTimeout(()=>{jo.warn("Thread did not voluntarily terminate",ww),process.exit(0)},Cf).unref())})});var Bf=f((oK,Hf)=>{"use strict";var Q_=k(),Xw=p(),Pf=et().LMDB_ERRORS_ENUM;Hf.exports=Zw;async function Zw(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Q_.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==Pf.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Q_.closeEnvironment(global.lmdb_map[s]),await Q_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Pf.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){Xw.error(t)}}o(Zw,"cleanLMDBMap")});var jf=f((_K,Qf)=>{"use strict";var j_=require("recursive-iterator"),zw=require("alasql"),J_=require("clone"),vf=O(),{handleHDBError:Gf,hdb_errors:eM}=J(),{HDB_ERROR_MSGS:qf,HTTP_STATUS_CODES:Ff}=eM,tM=["DISTINCT_ARRAY"],xf=Symbol("validateTables"),X_=Symbol("validateTable"),cK=Symbol("getAllColumns"),Vf=Symbol("validateAllColumns"),Xo=Symbol("findColumn"),kf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),Z_=Symbol("validateColumn"),Yf=Symbol("setColumnsForTable"),$f=Symbol("checkColumnsForAsterisk"),Kf=Symbol("validateGroupBy"),Wf=Symbol("hasColumns"),Zo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xf](),this[$f](),this[Vf]()}[xf](){if(this[Wf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[X_](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[X_](t.table)})}}[Wf](){let t=!1,r=new j_(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[X_](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gf(new Error,qf.SCHEMA_NOT_FOUND(t.databaseid),Ff.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gf(new Error,qf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ff.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=J_(s);n.table=J_(t),this.attributes.push(n)})}[Xo](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[$f](){let t=new j_(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yf](r.tableid)}[Yf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new zw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Kf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new j_(t),n=[];for(let{node:i,path:a}of s)!vf.isEmpty(i)&&!vf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kf](i):n.push(this[Z_](i)));return n}[Kf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=J_(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Xo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[Xo](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[kf](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Z_](t)}[Z_](t){let r=this[Xo](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};o(Zo,"SelectValidator");Qf.exports=Zo});var zf=f((lK,Zf)=>{"use strict";var Jf=require("lodash"),Wn=require("mathjs"),rM=require("jsonata"),Xf=O();Zf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jf.uniqWith(e,Jf.isEqual):e,searchJSON:sM,mad:Qn.bind(null,Wn.mad),mean:Qn.bind(null,Wn.mean),mode:Qn.bind(null,Wn.mode),prod:Qn.bind(null,Wn.prod),median:Qn.bind(null,Wn.median)};function Qn(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(Qn,"aggregateFunction");function sM(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Xf.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Xf.isEmpty(this.__ala__.res[r])){let s=rM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(sM,"searchJSON")});var th=f((dK,eh)=>{"use strict";var re=require("moment"),z_="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;eh.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(z_),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(z_),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(z_)}});var ih=f((SK,nh)=>{"use strict";var nM=require("@turf/area"),iM=require("@turf/length"),oM=require("@turf/circle"),aM=require("@turf/difference"),cM=require("@turf/distance"),_M=require("@turf/boolean-contains"),uM=require("@turf/boolean-equal"),lM=require("@turf/boolean-disjoint"),EM=require("@turf/helpers"),rh=T(),U=O();nh.exports={geoArea:dM,geoLength:SM,geoCircle:fM,geoDifference:hM,geoDistance:sh,geoNear:TM,geoContains:RM,geoEqual:mM,geoCrosses:AM,geoConvert:gM};var eu="geo1 is required",tu="geo2 is required";function dM(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),nM.default(e)}o(dM,"geoArea");function SM(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),iM.default(e,{units:t||"kilometers"})}o(SM,"geoLength");function fM(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),oM.default(e,t,{units:r||"kilometers"})}o(fM,"geoCircle");function hM(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),aM(e,t)}o(hM,"geoDifference");function sh(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),cM.default(e,t,{units:r||"kilometers"})}o(sh,"geoDistance");function TM(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return sh(e,t,s)<=r}o(TM,"geoNear");function RM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),_M.default(e,t)}o(RM,"geoContains");function mM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),uM.default(e,t)}o(mM,"geoEqual");function AM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!lM.default(e,t)}o(AM,"geoCrosses");function gM(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(rh.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rh.GEO_CONVERSION_ENUM).join(",")}`);return EM[t](e,r)}o(gM,"geoConvert")});var ah=f((hK,oh)=>{var Zr=zf(),$e=th(),Lt=ih();oh.exports=e=>{e.aggr.mad=e.aggr.MAD=Zr.mad,e.aggr.mean=e.aggr.MEAN=Zr.mean,e.aggr.mode=e.aggr.MODE=Zr.mode,e.aggr.prod=e.aggr.PROD=Zr.prod,e.aggr.median=e.aggr.MEDIAN=Zr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=$e.current_date,e.fn.current_time=e.fn.CURRENT_TIME=$e.current_time,e.fn.extract=e.fn.EXTRACT=$e.extract,e.fn.date=e.fn.DATE=$e.date,e.fn.date_format=e.fn.DATE_FORMAT=$e.date_format,e.fn.date_add=e.fn.DATE_ADD=$e.date_add,e.fn.date_sub=e.fn.DATE_SUB=$e.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=$e.date_diff,e.fn.now=e.fn.NOW=$e.now,e.fn.offset_utc=e.fn.OFFSET_UTC=$e.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=$e.get_server_time,e.fn.getdate=e.fn.GETDATE=$e.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=$e.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Lt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Lt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Lt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Lt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Lt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Lt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Lt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Lt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Lt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Lt.geoNear}});var uh=f((TK,_h)=>{"use strict";var jn=require("lodash"),he=require("alasql");he.options.cache=!1;var pM=ah(),ch=require("clone"),zo=require("recursive-iterator"),y=p(),D=O(),ks=zr(),NM=T(),{hdb_errors:OM}=J(),IM="IS NULL",St="There was a problem performing this search. Please check the logs and try again.";pM(he);var ea=class{constructor(t,r){if(D.isEmpty(t))throw y.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(St)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(St)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(St)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(St)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(St)}}_getColumns(){let t=new zo(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(ch(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jn.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new zo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new he.yy.LogicValue({value:s}):r.right instanceof he.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new he.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new he.yy.LogicValue({value:i}):s instanceof he.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new he.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new zo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(NM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&jn.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await he.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(ch(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(D.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(IM)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=jn.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===a&&(_=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await ks.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await ks.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let R=await ks.getDataByValue(c,S.operation);if(_)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ks.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(St)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof he.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,a=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new he.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new he.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new he.yy.FuncValue:new he.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],c={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,R=this._convertColumnsToIndexes(S,n);d=await he.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=jn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new zo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&s.push(a)}}s=jn.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(St)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},_=await ks.getDataByHash(c),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=_.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,_=a.aggregatorid?a.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();y.trace(`Final SQL: ${n}`),s=await he.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return y.error(OM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let _=n[i],u=new RegExp(`${_}.\`${a}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let _=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let a=await ks.getDataByValue(i);for(let[c,_]of a)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=_[s.attribute]}catch(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(St)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(ea,"SQLSearch");_h.exports=ea});var es=f((mK,Eh)=>{"use strict";var CM=jf();Eh.exports={searchByConditions:wM,searchByHash:MM,searchByValue:DM,search:UM};var ru=zr(),lh=require("util"),bM=lh.callbackify(ru.searchByHash),LM=lh.callbackify(ru.searchByValue),yM=uh();async function wM(e){return ru.searchByConditions(e)}o(wM,"searchByConditions");function MM(e,t){try{bM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(MM,"searchByHash");function DM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),LM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(DM,"searchByValue");function UM(e,t){try{let r=new CM(e);r.validate(),new yM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(UM,"search")});var Xn=f((gK,hh)=>{"use strict";var Jn=require("crypto"),Sh="aes-256-cbc",PM=32,HM=16,su=64,fh=32,BM=su+fh,dh=new Map;hh.exports={encrypt:vM,decrypt:GM,createNatsTableStreamName:qM};function vM(e){let t=Jn.randomBytes(PM),r=Jn.randomBytes(HM),s=Jn.createCipheriv(Sh,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=n.toString("hex");return i+a+c}o(vM,"encrypt");function GM(e){let t=e.substr(0,su),r=e.substr(su,fh),s=e.substr(BM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Jn.createDecipheriv(Sh,Buffer.from(t,"hex"),n),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(GM,"decrypt");function qM(e,t){let r=`${e}.${t}`,s=dh.get(r);return s||(s=Jn.createHash("md5").update(`${e}.${t}`).digest("hex"),dh.set(r,s)),s}o(qM,"createNatsTableStreamName")});var iu=f((OK,Th)=>{"use strict";var FM=T(),NK=Sr();function nu(e,t){let r=Object.create(null);if(t.length===1&&FM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}o(nu,"parseRow");function xM(e,t,r,s){let n=nu(r,e);s.push(n)}o(xM,"searchAll");function VM(e,t,r,s){let n=nu(r,e);s[t]=n}o(VM,"searchAllToMap");function kM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(kM,"iterateDBI");function ts(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(ts,"pushResults");function YM(e,t,r,s,n,i){t.toString().endsWith(e)&&ts(t,r,s,n,i)}o(YM,"endsWith");function $M(e,t,r,s,n,i){t.toString().includes(e)&&ts(t,r,s,n,i)}o($M,"contains");function KM(e,t,r,s,n,i){t>e&&ts(t,r,s,n,i)}o(KM,"greaterThanCompare");function WM(e,t,r,s,n,i){t>=e&&ts(t,r,s,n,i)}o(WM,"greaterThanEqualCompare");function QM(e,t,r,s,n,i){t<e&&ts(t,r,s,n,i)}o(QM,"lessThanCompare");function jM(e,t,r,s,n,i){t<=e&&ts(t,r,s,n,i)}o(jM,"lessThanEqualCompare");Th.exports={parseRow:nu,searchAll:xM,searchAllToMap:VM,iterateDBI:kM,endsWith:YM,contains:$M,greaterThanCompare:KM,greaterThanEqualCompare:WM,lessThanCompare:QM,lessThanEqualCompare:jM,pushResults:ts}});var ss=f((yK,Oh)=>{"use strict";var Ar=k(),CK=p(),Ke=Sr(),ta=de(),ee=et().LMDB_ERRORS_ENUM,bK=O(),JM=T(),ra=iu(),{parseRow:XM}=ra,LK=require("lmdb"),{OVERFLOW_MARKER:Rh,MAX_SEARCH_KEY_LENGTH:ZM}=ta;function mh(e,t,r,s=!1,n=void 0,i=void 0){return rs(e,t,r,(a,c)=>c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(mh,"iterateFullIndex");function Zn(e,t,r,s,n,i=!1,a=void 0,c=void 0,_=!1,u=!1){return rs(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return S===r?(A.values=!1,E.getRange(A).map(B=>({value:B}))):E.getRange(A)})}o(Zn,"iterateRangeBetween");function rs(e,t,r,s){let n=e.database||e,i=Ar.openDBI(n,r);i[ta.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ar.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=s(a,i,n,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(rs,"setupTransaction");function Ah(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(Rh)){if(!n)if(r)n=Ar.openDBI(e,r);else{let _=Ar.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Ar.openDBI(e,_[u]),!n[ta.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(Ah,"getOverflowCheck");function zM(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return rs(e,t,t,(a,c,_)=>(sa(r),r=zn(_,r),c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>XM(u.value,r))))}o(zM,"searchAll");function eD(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);sa(r),r=zn(e.database||e,r);let a=new Map;for(let{key:c,value:_}of mh(e,t,t,s,n,i))a.set(c,ra.parseRow(_,r));return a}o(eD,"searchAllToMap");function tD(e,t,r=!1,s=void 0,n=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=mh(e,void 0,t,r,s,n),c=a.transaction,_=Ah(c.database,c,void 0,t);for(let{key:u,value:l}of a){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(tD,"iterateDBI");function rD(e,t){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Ar.statDBI(e,t).entryCount}o(rD,"countAll");function sD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,t,r,(c,_,u,l)=>(s=Ke.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(sD,"equals");function nD(e,t,r){return gr(e,t,r),Ar.openDBI(e,t).getValuesCount(r)}o(nD,"count");function iD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,null,r,(c,_)=>{s=Ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(iD,"startsWith");function oD(e,t,r,s,n=!1,i=void 0,a=void 0){return gh(e,t,r,s,n,i,a,!0)}o(oD,"endsWith");function gh(e,t,r,s,n=!1,i=void 0,a=void 0,c=!1){return gr(e,r,s),rs(e,null,r,(_,u,l,E)=>{let d=Ah(l,_,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(Rh)?u.getValues(S,{transaction:_}).map(m=>{let b=d(S,m);if(c?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(c?R.endsWith(s):R.includes(s))?u[ta.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:_}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(gh,"contains");function aD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!0,!1)}o(aD,"greaterThan");function cD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!1,!1)}o(cD,"greaterThanEqual");function _D(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!0)}o(_D,"lessThan");function uD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!1)}o(uD,"lessThanEqual");function lD(e,t,r,s,n,i=!1,a=void 0,c=void 0){if(Ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=Ke.convertKeyValueToWrite(s),n=Ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Zn(e,t,r,s,n,i,a,c)}o(lD,"between");function ED(e,t,r,s){Ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),r=zn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(a=ra.parseRow(c,r)),a}o(ED,"searchByHash");function dD(e,t,r){Ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(dD,"checkHashExists");function SD(e,t,r,s,n=[]){return Nh(e,t,r,s,n),ph(e,t,r,s,n).map(i=>i[1])}o(SD,"batchSearchByHash");function fD(e,t,r,s,n=[]){Nh(e,t,r,s,n);let i=new Map;for(let[a,c]of ph(e,t,r,s,n))i.set(a,c);return i}o(fD,"batchSearchByHashToMap");function ph(e,t,r,s,n=[]){return rs(e,t,t,(i,a,c)=>{r=zn(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ra.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(ph,"batchHashSearch");function Nh(e,t,r,s,n){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(Nh,"initializeBatchSearchByHash");function sa(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(sa,"validateFetchAttributes");function gr(e,t,r){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>ZM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(gr,"validateComparisonFunctions");function zn(e,t){return t.length===1&&JM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ar.listDBIs(e)),t}o(zn,"setGetWholeRowAttributes");Oh.exports={searchAll:zM,searchAllToMap:eD,count:nD,countAll:rD,equals:sD,startsWith:iD,endsWith:oD,contains:gh,searchByHash:ED,setGetWholeRowAttributes:zn,batchSearchByHash:SD,batchSearchByHashToMap:fD,checkHashExists:dD,iterateDBI:tD,greaterThan:aD,greaterThanEqual:cD,lessThan:_D,lessThanEqual:uD,between:lD}});var ti=f((MK,Dh)=>{"use strict";var Ch=es(),pr=p(),bh=U_(),hD=require("lodash"),TD=Xn(),Lh=O(),{promisify:yh}=require("util"),Q=T(),{handleHDBError:na,hdb_errors:RD}=J(),{HDB_ERROR_MSGS:ia,HTTP_STATUS_CODES:wh}=RD,mD=H();mD.initSync();var Ih=k(),AD=ss(),{getSchemaPath:gD}=K(),ei=yh(Ch.searchByValue),pD=yh(Ch.searchByHash),Ys="name",Mh="hash_attribute",ou="schema",ND="schema_table",OD="attribute";Dh.exports={describeAll:ID,describeTable:oa,describeSchema:bD};async function ID(e){try{let t=Lh.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ys,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Ys]},i=await ei(n),a={},c={};for(let d of i)a[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},u=await ei(_),l=[];for(let d of u)try{let S;if(t||s)S=await oa({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await oa({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){pr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return pr.error("Got an error in describeAll"),pr.error(t),na(new Error,ia.DESCRIBE_ALL_ERR)}}o(ID,"describeAll");async function oa(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},a=bh.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ys,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},_=Array.from(await ei(c));if(!_||_.length===0)throw na(new Error,ia.TABLE_NOT_FOUND(e.schema,e.table),wh.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw na(new Error,ia.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:ND,search_value:r+"."+s,get_attributes:[OD]},E=Array.from(await ei(l));E=hD.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=CD(n)),i.attributes=E,i.clustering_stream_name=TD.createNatsTableStreamName(u.schema,u.name);try{let d=gD(i.schema,i.name),S=await Ih.openEnvironment(d,i.name),R=Ih.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of AD.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){pr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){pr.error(`There was an error getting attributes for table '${u.name}'`),pr.error(l)}return i}o(oa,"descTable");function CD(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(CD,"getAttrsByPerms");async function bD(e){let t=bh.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ou,search_value:s,hash_values:[],get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},i=Array.from(await ei(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ys]},c=Array.from(await pD(a));if(c&&c.length<1)throw na(new Error,ia.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Lh.isEmpty(_)||_.describe){let u=await oa({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(a[u.name]=u)}}catch(_){pr.error(`Error describing schema table '${e.schema}.${c}'`),pr.error(_)}})),a}}o(bD,"describeSchema")});var ns=f((UK,vh)=>{var $s=jt(),{callbackify:Hh,promisify:LD}=require("util");vh.exports={setSchemaDataToGlobal:Uh,getTableSchema:MD,getSystemSchema:UD,setSchemaDataToGlobalAsync:LD(Uh)};var Bh=ti(),yD=Hh(Bh.describeAll),wD=Hh(Bh.describeTable);function Uh(e){yD(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=$s),global.hdb_schema=r,e(null,null)})}o(Uh,"setSchemaDataToGlobal");function Ph(e,t){return e==="system"?$s[t]:global.hdb_schema[e][t]}o(Ph,"returnSchema");function MD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DD(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Ph(e,t))}):r(null,Ph(e,t))}o(MD,"getTableSchema");function DD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=$s:global.hdb_schema={system:$s},r();return}wD(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:$s}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DD,"setTableDataToGlobal");function UD(){return $s}o(UD,"getSystemSchema")});var aa=f((HK,xh)=>{"use strict";var is=p(),We=T(),PD=Bf(),Gh=ns(),HD=ti(),BD=Nr(),{validateEvent:Fh}=os(),ri=zr(),vD=require("process"),GD={[We.ITC_EVENT_TYPES.SCHEMA]:qD,[We.ITC_EVENT_TYPES.USER]:xD};async function qD(e){let t=Fh(e);if(t){is.error(t);return}is.trace("ITC schemaHandler received schema event:",e),await PD(e.message),await FD(e.message)}o(qD,"schemaHandler");async function FD(e){try{if(ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await HD.describeTable({schema:e.schema,table:e.table});break;default:Gh.setSchemaDataToGlobal(qh);break}else Gh.setSchemaDataToGlobal(qh)}catch(t){is.error(t)}}o(FD,"syncSchemaMetadata");function qh(e){e&&is.error(e)}o(qh,"handleErrorCallback");async function xD(e){try{ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Fh(e);if(t){is.error(t);return}is.trace(`ITC userHandler ${We.HDB_ITC_CLIENT_PREFIX}${vD.pid} received user event:`,e),await BD.setUsersToGlobal()}catch(t){is.error(t)}}o(xD,"userHandler");xh.exports=GD});var os=f((FK,kh)=>{"use strict";var vK=p(),au=O(),VD=T(),{ITC_ERRORS:si}=et(),{parentPort:GK,threadId:kD,isMainThread:YD,workerData:qK}=require("worker_threads"),{onMessageFromWorkers:$D,broadcast:KD}=Xr();kh.exports={sendItcEvent:WD,validateEvent:Vh,SchemaEventMsg:QD,UserEventMsg:jD};var ca;$D(e=>{ca=ca||aa(),Vh(e),ca[e.type]&&ca[e.type](e)});function WD(e){!YD&&e.message&&(e.message.originator=kD),KD(e)}o(WD,"sendItcEvent");function Vh(e){if(typeof e!="object")return si.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||au.isEmpty(e.type))return si.MISSING_TYPE;if(!e.hasOwnProperty("message")||au.isEmpty(e.message))return si.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||au.isEmpty(e.message.originator))return si.MISSING_ORIGIN;if(VD.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return si.INVALID_EVENT(e.type)}o(Vh,"validateEvent");function QD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(QD,"SchemaEventMsg");function jD(e){this.originator=e}o(jD,"UserEventMsg")});var ni=f((kK,Wh)=>{"use strict";var Yh=T(),VK=O(),_a=p(),$h=uf(),Ks,{sendItcEvent:Kh}=os();function JD(e){try{_a.trace("signalSchemaChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.SCHEMA,e);Ks.schema(t),Kh(t)}catch(t){_a.error(t)}}o(JD,"signalSchemaChange");function XD(e){try{_a.trace("signalUserChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.USER,e);Ks.user(t),Kh(t)}catch(t){_a.error(t)}}o(XD,"signalUserChange");Wh.exports={signalSchemaChange:JD,signalUserChange:XD}});var ua=f(($K,jh)=>{"use strict";var Qh=O(),ZD=T(),zD=p(),eU=Fo(),tU=qo(),rU=ni(),{SchemaEventMsg:sU}=os(),nU="already exists in";jh.exports=iU;async function iU(e,t,r){if(Qh.isEmptyOrZeroLength(r))return r;let s=[];Qh.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await oU(e,t.schema,t.name,i)})),n}o(iU,"lmdbCheckForNewAttributes");async function oU(e,t,r,s){let n=new tU(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await aU(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(nU))zD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(oU,"createNewAttribute");async function aU(e){let t;return t=await eU(e),rU.signalSchemaChange(new sU(process.pid,ZD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(aU,"createAttribute")});var Ws=f((WK,Jh)=>{"use strict";var la=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};o(la,"LMDBTransactionObject");Jh.exports=la});var Zh=f((jK,Xh)=>{"use strict";var cU=Ws(),_U=T().OPERATIONS_ENUM,Ea=class extends cU{constructor(t,r,s,n,i=void 0){super(_U.INSERT,r,s,n,i),this.records=t}};o(Ea,"LMDBInsertTransactionObject");Xh.exports=Ea});var eT=f((XK,zh)=>{"use strict";var uU=Ws(),lU=T().OPERATIONS_ENUM,da=class extends uU{constructor(t,r,s,n,i,a=void 0){super(lU.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(da,"LMDBUpdateTransactionObject");zh.exports=da});var rT=f((zK,tT)=>{"use strict";var EU=Ws(),dU=T().OPERATIONS_ENUM,Sa=class extends EU{constructor(t,r,s,n,i,a=void 0){super(dU.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(Sa,"LMDBUpsertTransactionObject");tT.exports=Sa});var nT=f((tW,sT)=>{"use strict";var SU=Ws(),fU=T().OPERATIONS_ENUM,fa=class extends SU{constructor(t,r,s,n,i=void 0){super(fU.DELETE,s,n,t,i),this.original_records=r}};o(fa,"LMDBDeleteTransactionObject");sT.exports=fa});var ii=f((nW,cT)=>{"use strict";var sW=require("path"),iT=k(),hU=Zh(),TU=eT(),RU=rT(),mU=nT(),Qs=de(),oT=O(),{CONFIG_PARAMS:AU}=T(),aT=H();aT.initSync();var ha=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:gU}=K();cT.exports=pU;async function pU(e,t){if(aT.get(AU.LOGGING_AUDITLOG)===!1)return;let r=gU(e.schema,e.table),s=await iT.openEnvironment(r,e.table,!0),n=NU(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){iT.initializeDBIs(s,Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qs.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),oT.isEmpty(n.user_name)||s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(pU,"writeTransaction");function NU(e,t){let r=oT.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ha.INSERT)return new hU(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPDATE)return new TU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPSERT)return new RU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.DELETE)return new mU(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(NU,"createTransactionObject")});var cu=f((aW,_T)=>{"use strict";var OU=xo(),oW=ko(),oi=T(),IU=$o(),CU=jr().insertRecords,bU=k(),LU=p(),yU=ua(),{getSchemaPath:wU}=K(),MU=ii();_T.exports=DU;async function DU(e){try{let{schema_table:t,attributes:r}=OU(e);IU(e,r,t.hash_attribute),e.schema!==oi.SYSTEM_SCHEMA_NAME&&(r.includes(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yU(e.hdb_auth_header,t,r),n=wU(e.schema,e.table),i=await bU.openEnvironment(n,e.table),a=await CU(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await MU(e,a)}catch(c){LU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(DU,"lmdbCreateRecords")});var ET=f((_W,lT)=>{"use strict";var uT=T(),UU=cu(),PU=ko(),HU=require("fs-extra"),{getSchemaPath:BU}=K();lT.exports=vU;async function vU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new PU(uT.SYSTEM_SCHEMA_NAME,uT.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await UU(r),await HU.mkdirp(BU(e.schema))}o(vU,"lmdbCreateSchema")});var ST=f((lW,dT)=>{"use strict";var Ta=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(Ta,"DeleteRecordsResponseObject");dT.exports=Ta});var lu=f((hW,TT)=>{"use strict";var fT=k(),_u=Sr(),uu=et().LMDB_ERRORS_ENUM,GU=de(),hT=p(),dW=O(),qU=require("lmdb"),FU=ST(),xU=T(),{OVERFLOW_MARKER:SW,MAX_SEARCH_KEY_LENGTH:fW}=GU,VU=xU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kU(e,t,r,s){if(_u.validateEnv(e),t===void 0)throw new Error(uu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uu.IDS_REQUIRED):new Error(uu.IDS_MUST_BE_ITERABLE);try{let n=fT.listDBIs(e);fT.initializeDBIs(e,t,n);let i=new FU,a,c=[],_=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[VU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,qU.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],B=R[$];if(B!=null)try{let Ee=_u.getIndexedValues(B);if(Ee)for(let ce=0,cr=Ee.length;ce<cr;ce++)A.remove(Ee[ce],a)}catch{hT.warn(`cannot delete from attribute: ${$}, ${B}:${a}`)}}});c.push(m),_.push(a),i.original_records.push(R)}catch(R){hT.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(c);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=_u.getNextMonotonicTime(),i}catch(n){throw n}}o(kU,"deleteRecords");TT.exports={deleteRecords:kU}});var ai=f((RW,mT)=>{"use strict";var js=O(),YU=lu(),$U=k(),{getSchemaPath:KU}=K(),WU=ii(),QU=p();mT.exports=jU;async function jU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(js.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(js.isEmptyOrZeroLength(e.hash_values)&&!js.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];js.isEmpty(_)||e.hash_values.push(_)}}if(js.isEmptyOrZeroLength(e.hash_values))return RT([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(js.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=KU(e.schema,e.table),i=await $U.openEnvironment(n,e.table),a=await YU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await WU(e,a)}catch(c){QU.error(`unable to write transaction due to ${c.message}`)}return RT(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(jU,"lmdbDeleteRecords");function RT(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(RT,"createDeleteResponse")});var ci=f((gW,NT)=>{var AT=require("lodash"),gT=Fe(),x=require("joi"),JU=O(),{hdb_schema_table:ft,checkValidTable:pT}=Gs(),{handleHDBError:XU,hdb_errors:ZU}=J(),{HTTP_STATUS_CODES:zU}=ZU,AW=x.object({schema:ft,table:ft,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(ft).required()}),eP=x.object({schema:ft,table:ft,search_attribute:ft,search_value:x.any().required(),get_attributes:x.array().min(1).items(ft).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),tP=x.object({schema:ft,table:ft,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(ft).required(),conditions:x.array().min(1).items(x.object({search_attribute:ft,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});NT.exports=function(e,t){let r=null;switch(t){case"value":r=gT.validateBySchema(e,eP);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(pT("schema",e.schema)),i(pT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=gT.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=JU.checkGlobalSchemaTable(e.schema,e.table);if(n)return XU(new Error,n,zU.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=AT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!AT.some(a,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Eu=f((NW,OT)=>{"use strict";var rP=k(),sP=ci(),{getSchemaPath:nP}=K();OT.exports=iP;function iP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP(e.schema,e.table);return rP.openEnvironment(r,e.table)}o(iP,"initialize")});var du=f((IW,IT)=>{"use strict";var oP=ss(),aP=Eu();IT.exports=cP;async function cP(e){let t=await aP(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oP.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(cP,"lmdbGetDataByHash")});var _i=f((bW,CT)=>{"use strict";var Ra=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ra,"SearchByHashObject");CT.exports=Ra});var LT=f((wW,bT)=>{"use strict";var yW=_i(),_P=ss(),uP=Eu();bT.exports=lP;async function lP(e){let t=await uP(e),r=global.hdb_schema[e.schema][e.table];return _P.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lP,"lmdbSearchByHash")});var ht=f((DW,yT)=>{"use strict";var ma=class{constructor(t,r,s,n,i,a,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};o(ma,"SearchObject");yT.exports=ma});var Aa=f((PW,HT)=>{"use strict";var Ae=ss(),EP=k(),dP=O(),I=de(),as=T(),SP=jt(),wT=et().LMDB_ERRORS_ENUM,{compareKeys:Js}=require("ordered-binary"),{getSchemaPath:fP}=K(),Zt=as.SEARCH_WILDCARDS;async function hP(e,t,r){let s;e.schema===as.SYSTEM_SCHEMA_NAME?s=SP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=PT(e,s.hash_attribute,r,t);return DT(e,n,s.hash_attribute,r)}o(hP,"prepSearch");async function DT(e,t,r,s){let n=fP(e.schema,e.table),i=await EP.openEnvironment(n,e.table),a=UT(i,e,t,r),c=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(RP(e,r)===!1){let l=e.search_attribute;if(l===r)return s?MT(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?MT(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(c,r,e.get_attributes,u):Ae.batchSearchByHash(c,r,e.get_attributes,u)}o(DT,"executeSearch");function UT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:c,offset:_}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;default:return Object.create(null)}return n}o(UT,"searchByType");function TP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Js(i,s[0])>=0&&Js(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>Js(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Js(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>Js(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Js(n[r],s)<=0;default:return Object.create(null)}}o(TP,"filterByType");function MT(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(MT,"createMapFromIterable");function RP(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}o(RP,"checkToFetchMore");function PT(e,t,r,s){if(dP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Zt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Zt[0])<0&&n.indexOf(Zt[1])<0)return c===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(Zt.indexOf(i)>=0&&Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(Zt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(Zt[0])||n.includes(Zt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(wT.UNKNOWN_SEARCH_TYPE)}else switch(s){case as.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case as.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case as.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case as.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case as.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wT.UNKNOWN_SEARCH_TYPE)}}o(PT,"createSearchTypeFromSearchObject");HT.exports={executeSearch:DT,createSearchTypeFromSearchObject:PT,prepSearch:hP,searchByType:UT,filterByType:TP}});var vT=f((vW,BT)=>{"use strict";var BW=ht(),mP=ci(),AP=O(),gP=T(),pP=Aa();BT.exports=NP;function NP(e,t){if(!AP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mP(e,"value");if(s)throw s;let n=!0;return pP.prepSearch(e,t,n)}o(NP,"lmdbGetDataByValue")});var Xs=f((FW,GT)=>{"use strict";var qW=ht(),OP=ci(),IP=O(),CP=T(),bP=Aa();GT.exports=LP;async function LP(e,t){if(!IP.isEmpty(t)&&CP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OP(e,"value");if(s)throw s;return bP.prepSearch(e,t,!1)}o(LP,"lmdbSearchByValue")});var FT=f((kW,qT)=>{"use strict";var VW=de(),ga=class{constructor(t,r,s,n,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=c}};o(ga,"SearchByConditionsObject");var pa=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(pa,"SearchCondition");var Na=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Na,"SortAttribute");qT.exports={SearchByConditionsObject:ga,SearchCondition:pa,SortAttribute:Na}});var $T=f((KW,YT)=>{"use strict";var $W=FT().SearchByConditionsObject,yP=ht(),wP=ci(),Su=ss(),Oa=de(),kT=Aa(),MP=iu(),DP=require("lodash"),{getSchemaPath:UP}=K(),xT=k(),{handleHDBError:PP,hdb_errors:HP}=J(),{HTTP_STATUS_CODES:BP}=HP,vP=1e8;YT.exports=GP;async function GP(e){let t=wP(e,"conditions");if(t)throw PP(t,t.message,BP.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=UP(e.schema,e.table),s=await xT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)xT.openDBI(s,u.search_attribute);let i=DP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Oa.SEARCH_TYPES.EQUALS?u.estimated_count=Su.count(s,u.search_attribute,u.search_value):l===Oa.SEARCH_TYPES.CONTAINS||l===Oa.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let c=await VT(a,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(kT.filterByType),E=l.length,d=Su.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(_=_.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(S=>MP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await VT(a,e,d,n.hash_attribute);c=c.concat(S)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Su.batchSearchByHash(a,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{a.done()},_}o(GP,"lmdbSearchByConditions");async function VT(e,t,r,s){let n=new yP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Oa.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,kT.searchByType(e,n,i,s).map(a=>a.value)}o(VT,"executeConditionSearch")});var Ca=f((QW,KT)=>{"use strict";var qP=T().OPERATIONS_ENUM,Ia=class{constructor(t,r,s,n=void 0){this.operation=qP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ia,"DeleteObject");KT.exports=Ia});var fu=f((JW,eR)=>{"use strict";var JT=ht(),XT=Ca(),ZT=Xs(),zT=ai(),we=T(),WT=O(),QT=k(),{getTransactionAuditStorePath:FP,getSchemaPath:xP}=K(),jT=p();eR.exports=VP;async function VP(e){try{if(WT.isEmpty(global.hdb_schema[e.schema])||WT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kP(e),await YP(e);let t=xP(e.schema,e.table);try{await QT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FP(e.schema,e.table);await QT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(VP,"lmdbDropTable");async function kP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ZT(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await zT(n)}o(kP,"deleteAttributesFromSystem");async function YP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ZT(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await zT(n)}catch(i){throw i}}o(YP,"dropTableFromSystem")});var rR=f((ZW,tR)=>{"use strict";var $P=require("fs-extra"),KP=ht(),WP=_i(),QP=Ca(),jP=fu(),JP=ai(),XP=du(),ZP=Xs(),zt=T(),{getSchemaPath:zP}=K(),{handleHDBError:eH,hdb_errors:tH}=J(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:sH}=tH;tR.exports=nH;async function nH(e){let t;try{t=await iH(e.schema);let r=new KP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await ZP(r));for(let a=0;a<s.length;a++){let c={schema:t,table:s[a].name};try{await jP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new QP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await JP(n);let i=zP(t);await $P.remove(i)}catch(r){throw r}}o(nH,"lmdbDropSchema");async function iH(e){let t=new WP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await XP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw eH(new Error,rH.SCHEMA_NOT_FOUND(e),sH.NOT_FOUND,void 0,void 0,!0);return s}o(iH,"validateDropSchema")});var La=f((e1,sR)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ba,"CreateTableObject");sR.exports=ba});var Tu=f((s1,nR)=>{"use strict";var oH=require("fs-extra"),ya=k(),{getTransactionAuditStorePath:aH}=K(),hu=de(),r1=La();nR.exports=cH;async function cH(e){let t;try{let r=aH(e.schema,e.table);await oH.mkdirp(r),t=await ya.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(cH,"createTransactionsAuditEnvironment")});var pu=f((i1,aR)=>{"use strict";var Ru=T(),iR=k(),_H=jr(),{getSystemSchemaPath:uH,getSchemaPath:lH}=K(),EH=jt(),dH=Fo(),mu=qo(),SH=p(),fH=Tu(),gu=EH.hdb_table,oR=[];for(let e=0;e<gu.attributes.length;e++)oR.push(gu.attributes[e].attribute);aR.exports=hH;async function hH(e,t){let r=lH(t.schema,t.table),s=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iR.createEnvironment(r,t.table),e!==void 0){let a=await iR.openEnvironment(uH(),Ru.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _H.insertRecords(a,gu.hash_attribute,oR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Au(s),await Au(n),await Au(i)}await fH(t)}catch(a){throw a}}o(hH,"lmdbCreateTable");async function Au(e){try{await dH(e)}catch(t){SH.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Au,"createAttribute")});var _R=f((a1,cR)=>{"use strict";var TH=xo(),RH=$o(),mH=ua(),ui=T(),AH=jr().updateRecords,gH=k(),{getSchemaPath:pH}=K(),NH=ii(),OH=p();cR.exports=IH;async function IH(e){try{let{schema_table:t,attributes:r}=TH(e);RH(e,r,t.hash_attribute),e.schema!==ui.SYSTEM_SCHEMA_NAME&&(r.includes(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await mH(e.hdb_auth_header,t,r),n=pH(e.schema,e.table),i=await gH.openEnvironment(n,e.table),a=await AH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NH(e,a)}catch(c){OH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(IH,"lmdbUpdateRecords")});var lR=f((_1,uR)=>{"use strict";var CH=T().OPERATIONS_ENUM,wa=class{constructor(t,r,s,n=void 0){this.operation=CH.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(wa,"UpsertObject");uR.exports=wa});var dR=f((E1,ER)=>{"use strict";var l1=lR(),bH=xo(),LH=$o(),yH=ua(),li=T(),wH=jr().upsertRecords,MH=k(),{getSchemaPath:DH}=K(),UH=ii(),PH=p(),{handleHDBError:HH,hdb_errors:BH}=J();ER.exports=vH;async function vH(e){let t;try{t=bH(e)}catch(_){throw HH(_,_.message,BH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;LH(e,s,r.hash_attribute),e.schema!==li.SYSTEM_SCHEMA_NAME&&(s.includes(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await yH(e.hdb_auth_header,r,s),i=DH(e.schema,e.table),a=await MH.openEnvironment(i,e.table),c=await wH(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await UH(e,c)}catch(_){PH.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}o(vH,"lmdbUpsertRecords")});var mR=f((S1,RR)=>{"use strict";var GH=ht(),SR=O(),fR=p(),qH=Xs(),hR=T(),FH=lu().deleteRecords,xH=k(),{getSchemaPath:VH}=K(),{promisify:kH}=require("util"),YH=kH(setTimeout),TR=1e4,$H=10;RR.exports=KH;async function KH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(SR.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new GH(e.schema,e.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await qH(n,hR.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw fR.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return SR.isEmptyOrZeroLength(s)?(fR.trace("No records found to delete"),{message:"No records found to delete"}):await WH(e,s,t)}o(KH,"lmdbDeleteRecordsBefore");async function WH(e,t,r){let s=VH(e.schema,e.table),n=await xH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,c=t.length;a<c;a+=TR){let _=t.slice(a,a+TR),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await FH(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await YH($H)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(WH,"chunkDeletes")});var gR=f((h1,AR)=>{"use strict";var Ma=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ma,"DeleteBeforeObject");AR.exports=Ma});var NR=f((R1,pR)=>{"use strict";var Da=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Da,"DeleteAuditLogsBeforeResults");pR.exports=Da});var CR=f((g1,IR)=>{"use strict";var Nu=k(),{getTransactionAuditStorePath:QH}=K(),A1=gR(),Ei=de(),jH=O(),OR=NR(),JH=require("util").promisify,XH=JH(setTimeout),ZH=1e4,zH=100;IR.exports=eB;async function eB(e){let t=QH(e.schema,e.table),r=await Nu.openEnvironment(t,e.table,!0),s=Nu.listDBIs(r);Nu.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new OR;do n=await tB(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await XH(zH);while(n.transactions_deleted>0);return i}o(eB,"deleteAuditLogsBefore");async function tB(e,t){let r=new OR;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=a[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];jH.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<a.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ZH)break}return await n,r}catch(s){throw s}}o(tB,"deleteTransactions")});var LR=f((N1,bR)=>{"use strict";var Ua=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(Ua,"DropAttributeObject");bR.exports=Ua});var wR=f((C1,yR)=>{"use strict";var rB=ht(),sB=Ca(),I1=LR(),yt=T(),nB=O(),Ou=k(),iB=jt(),oB=Xs(),aB=ai(),{getSchemaPath:cB}=K();yR.exports=_B;async function _B(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=iB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await lB(e),n=cB(e.schema,e.table),i=await Ou.openEnvironment(n,e.table);return t===!0&&await uB(e,i,r.hash_attribute),Ou.dropDBI(i,e.attribute),s}o(_B,"lmdbDropAttribute");async function uB(e,t,r){let s=Ou.openDBI(t,r),n,i=e.attribute;for(let{key:a,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(a,u,_)}await n}o(uB,"removeAttributeFromAllObjects");async function lB(e){let t=new rB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await oB(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(nB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new sB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return aB(i)}o(lB,"dropAttributeFromSystem")});var BR=f((y1,HR)=>{"use strict";var Iu=k(),Zs=de(),L1=Sr(),Cu=T(),MR=O(),{getTransactionAuditStorePath:EB}=K(),dB=ss(),Pa=Ws(),SB=p();HR.exports=fB;async function fB(e){let t=EB(e.schema,e.table),r=await Iu.openEnvironment(t,e.table,!0),s=Iu.listDBIs(r);Iu.initializeDBIs(r,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DR(r,e.search_values);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,TB(r,e.search_values,n);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return hB(r,e.search_values);default:return DR(r)}}o(fB,"readAuditLog");function DR(e,t=[0,Date.now()]){MR.isEmpty(t[0])&&(t[0]=0),MR.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Pa,n))}o(DR,"searchTransactionsByTimestamp");function hB(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,PR(e,i))}return Object.fromEntries(r)}o(hB,"searchTransactionsByUsername");function TB(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=dB.equals(e,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=PR(e,n),a=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);UR(_,"records",r,l,a),UR(_,"original_records",r,l,a)}return Object.fromEntries(a)}o(TB,"searchTransactionsByHashValues");function UR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Pa(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Pa(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}o(UR,"loopRecords");function PR(e,t){let r=[];try{let s=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Pa,i);r.push(a)}}catch(i){SB.warn(i)}return r}catch(s){throw s}}o(PR,"batchSearchTransactions")});var GR=f((M1,vR)=>{"use strict";var{getSchemaPath:RB}=K(),mB=k();vR.exports={writeTransaction:AB};async function AB(e,t,r){let s=RB(e,t);return(await mB.openEnvironment(s,t)).transaction(r)}o(AB,"writeTransaction")});var VR=f((U1,xR)=>{"use strict";var{getSchemaPath:qR}=K(),FR=k();xR.exports={flush:gB,resetReadTxn:pB};async function gB(e,t){return(await FR.openEnvironment(qR(e,t),t.toString())).flushed}o(gB,"flush");async function pB(e,t){try{(await FR.openEnvironment(qR(e,t),t.toString())).resetReadTxn()}catch{}}o(pB,"resetReadTxn")});var $R=f((H1,YR)=>{"use strict";var NB=p(),{handleHDBError:OB}=J(),IB=A_(),CB=Fo(),bB=cu(),LB=ET(),yB=ai(),wB=du(),MB=LT(),DB=vT(),UB=Xs(),PB=$T(),HB=rR(),BB=pu(),vB=_R(),GB=dR(),qB=mR(),FB=CR(),xB=fu(),VB=wR(),kB=BR(),YB=GR(),kR=VR(),Ha=class extends IB{async searchByConditions(t){return PB(t)}async getDataByHash(t){return await wB(t)}async searchByHash(t){return await MB(t)}async getDataByValue(t,r){return await DB(t,r)}async searchByValue(t){return await UB(t)}async createSchema(t){return await LB(t)}async dropSchema(t){return await HB(t)}async createTable(t,r){return await BB(t,r)}async dropTable(t){return await xB(t)}async createAttribute(t){return await CB(t)}async createRecords(t){return await bB(t)}async updateRecords(t){return await vB(t)}async upsertRecords(t){try{return await GB(t)}catch(r){throw OB(r,null,null,NB.ERR,r)}}async deleteRecords(t){return await yB(t)}async deleteRecordsBefore(t){return await qB(t)}async dropAttribute(t){return await VB(t)}async deleteAuditLogsBefore(t){return await FB(t)}async readAuditLog(t){return await kB(t)}writeTransaction(t,r,s){return YB.writeTransaction(t,r,s)}flush(t,r){return kR.flush(t,r)}resetReadTxn(t,r){return kR.resetReadTxn(t,r)}};o(Ha,"LMDBBridge");YR.exports=Ha});var zr=f((v1,WR)=>{"use strict";var $B=$R(),KB=A_(),WB=H();WB.initSync();var KR;function QB(){return KR instanceof KB?KR:new $B}o(QB,"getBridge");WR.exports=QB()});var _s=f((q1,JR)=>{"use strict";var va=m_(),it=O(),jB=require("util"),Ga=zr(),JB=ns(),bu=p(),{handleHDBError:Or,hdb_errors:XB}=J(),{HTTP_STATUS_CODES:cs}=XB,ZB=jB.promisify(JB.getTableSchema),zB="updated",QR="inserted",jR="upserted";JR.exports={insert:tv,update:rv,upsert:sv,validation:ev,flush:nv};async function ev(e){if(it.isEmpty(e))throw new Error("invalid update parameters defined.");if(it.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(it.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ZB(e.schema,e.table),r=va(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&it.isEmptyOrZeroLength(c[s]))throw bu.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!it.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw bu.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!it.isEmpty(c[s])&&c[s]!==""&&n.has(it.autoCast(c[s]))&&(c.skip=!0),n.add(it.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(ev,"validation");async function tv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.createRecords(e);return Ba(QR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(tv,"insertData");async function rv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.updateRecords(e);return it.isEmpty(s.existing_rows)?Ba(zB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ba(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(rv,"updateData");async function sv(e){if(e.operation!=="upsert")throw Or(new Error,"invalid operation, must be upsert",cs.INTERNAL_SERVER_ERROR);let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);try{let s=await Ga.upsertRecords(e);return Ba(jR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Or(s,null,null,bu.ERR,n)}}o(sv,"upsertData");function Ba(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===QR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===jR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Ba,"returnObject");function nv(e){return Ga.flush(e.schema,e.table)}o(nv,"flush")});var em=f((x1,zR)=>{var iv=Fe(),Lu=require("joi"),{hdb_schema_table:XR}=Gs(),ZR={schema:XR,table:XR},ov={date:Lu.date().iso().required()},av={timestamp:Lu.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};zR.exports=function(e,t){let r=t==="timestamp"?{...ZR,...av}:{...ZR,...ov},s=Lu.object(r);return iv.validateBySchema(e,s)}});var nm=f((V1,sm)=>{var cv=Fe(),tm=require("joi"),{hdb_schema_table:rm}=Gs(),_v=tm.object({schema:rm,table:rm,hash_values:tm.array().required()});sm.exports=function(e){return cv.validateBySchema(e,_v)}});var yu=f((k1,im)=>{"use strict";var qa=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(qa,"InsertObject");var Fa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Fa,"NoSQLSeachObject");var xa=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(xa,"DeleteResponseObject");im.exports={InsertObject:qa,NoSQLSeachObject:Fa,DeleteResponseObject:xa}});var Du=f(($1,um)=>{"use strict";var am=em(),uv=nm(),Va=O(),om=require("moment"),cm=p(),{promisify:lv,callbackify:Ev}=require("util"),us=T(),dv=ns(),wu=lv(dv.getTableSchema),Mu=zr(),{DeleteResponseObject:Sv}=yu(),{handleHDBError:Ir,hdb_errors:fv}=J(),{HDB_ERROR_MSGS:ka,HTTP_STATUS_CODES:Cr}=fv,hv="records successfully deleted",Tv=Ev(_m);um.exports={delete:Tv,deleteRecord:_m,deleteFilesBefore:Rv,deleteAuditLogsBefore:mv};async function Rv(e){let t=am(e,"date");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(!om(e.date,om.ISO_8601).isValid())throw Ir(new Error,ka.INVALID_DATE,Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_DATE,!0);let s=Va.checkSchemaTableExist(e.schema,e.table);if(s)throw Ir(new Error,s,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,s,!0);let n=await Mu.deleteRecordsBefore(e);if(await wu(e.schema,e.table),cm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(Rv,"deleteFilesBefore");async function mv(e){let t=am(e,"timestamp");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ir(new Error,ka.INVALID_VALUE("Timestamp"),Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_VALUE("Timestamp"),!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);let s=await Mu.deleteAuditLogsBefore(e);return await wu(e.schema,e.table),cm.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(mv,"deleteAuditLogsBefore");async function _m(e){let t=uv(e);if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);try{await wu(e.schema,e.table);let s=await Mu.deleteRecords(e);return Va.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hv}`),s}catch(s){if(s.message===us.SEARCH_NOT_FOUND_MESSAGE){let n=new Sv;return n.message=us.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(_m,"deleteRecord")});var Em=f((W1,lm)=>{var Uu=Fe(),ge={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Av(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Uu.validateObject(e,ge)}o(Av,"addUserValidation");function gv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(gv,"alterUserValidation");function pv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(pv,"dropUserValidation");lm.exports={addUserValidation:Av,alterUserValidation:gv,dropUserValidation:pv}});var Nr=f((J1,bm)=>{"use strict";var Tm="username is required",Rm="nothing to update, must supply active, role or password to update",mm="password cannot be an empty string",Am="If role is specified, it cannot be empty.",gm="active must be true or false";bm.exports={addUser:wv,alterUser:Mv,dropUser:Uv,userInfo:Pv,listUsers:$a,listUsersExternal:Hv,setUsersToGlobal:di,findAndValidateUser:Gv,getClusterUser:qv,USERNAME_REQUIRED:Tm,ALTERUSER_NOTHING_TO_UPDATE:Rm,EMPTY_PASSWORD:mm,EMPTY_ROLE:Am,ACTIVE_BOOLEAN:gm};var pm=_s(),Nv=Du(),Hu=Wo(),Nm=Em(),Om=es(),Bu=ni(),Qe=O(),Im=require("validate.js"),w=p(),{promisify:vu}=require("util"),Gu=Xn(),dm=T(),Sm=ke(),Ov=Ve(),j1=H(),Iv=Vs(),Cv=jt(),{handleHDBError:wt,hdb_errors:bv}=J(),{HTTP_STATUS_CODES:Mt,AUTHENTICATION_ERROR_MSGS:Pu,HDB_ERROR_MSGS:zs}=bv,{UserEventMsg:qu}=os(),fm=require("lodash"),Cm={username:!0,active:!0,role:!0,password:!0},hm=new Map,Ya=vu(Om.searchByValue),Lv=vu(Om.searchByHash),yv=vu(Nv.delete);async function wv(e){let t=Im.cleanAttributes(e,Cm),r=Nm.addUserValidation(t);if(r)throw wt(new Error,r.message,Mt.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Ya(s),n=n&&Array.from(n)}catch(_){throw w.error("There was an error searching for a role in add user"),w.error(_),_}if(!n||n.length<1)throw wt(new Error,zs.ROLE_NAME_NOT_FOUND(t.role),Mt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw wt(new Error,zs.DUP_ROLES_FOUND(t.role),Mt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await pm.insert(i)}catch(_){throw w.error("There was an error searching for a user."),w.error(_),_}w.debug(a);try{await di()}catch(_){throw w.error("Got an error setting users to global"),w.error(_),_}if(a.skipped_hashes.length===1)throw wt(new Error,zs.USER_ALREADY_EXISTS(t.username),Mt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Bu.signalUserChange(new qu(process.pid)),`${c.username} successfully added`}o(wv,"addUser");async function Mv(e){let t=Im.cleanAttributes(e,Cm);if(Qe.isEmptyOrZeroLength(t.username))throw new Error(Tm);if(Qe.isEmptyOrZeroLength(t.password)&&Qe.isEmptyOrZeroLength(t.role)&&Qe.isEmptyOrZeroLength(t.active))throw new Error(Rm);if(!Qe.isEmpty(t.password)&&Qe.isEmptyOrZeroLength(t.password.trim()))throw new Error(mm);if(!Qe.isEmpty(t.active)&&!Qe.isBoolean(t.active))throw new Error(gm);let r=Dv(t.username);if(!Qe.isEmpty(t.password)&&!Qe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password)),t.role==="")throw new Error(Am);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ya(i)||[])}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!a||a.length===0){let c=zs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),wt(new Error,c,Mt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let c=zs.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),wt(new Error,c,Mt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await pm.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await di()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Bu.signalUserChange(new qu(process.pid)),n}o(Mv,"alterUser");function Dv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Dv,"isClusterUser");async function Uv(e){try{let t=Nm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qe.isEmpty(global.hdb_users.get(e.username)))throw wt(new Error,zs.USER_NOT_EXIST(e.username),Mt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yv(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await di()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Bu.signalUserChange(new qu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(Uv,"dropUser");async function Pv(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Lv(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(Pv,"userInfo");async function Hv(){let e;try{e=await $a()}catch(t){throw w.error("Got an error listing users."),w.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(Hv,"listUsersExternal");async function $a(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ya(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=fm.cloneDeep(a);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ya(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=fm.cloneDeep(a),a.role=r[a.role],Bv(a.role),i.set(a.username,a);return(await Iv.getLicense()).enterprise?i:vv(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),Qe.errorizeMessage(e)}return null}o($a,"listUsers");function Bv(e){try{if(!e){w.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Cv)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(Bv,"appendSystemTablesToRole");function vv(e){try{if(w.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role&&(n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1)?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(n.username,n)):r.set(n.username,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(vv,"nonEnterpriseFilter");async function di(){try{let e=await $a();global.hdb_users=e}catch(e){throw w.error(e),e}}o(di,"setUsersToGlobal");async function Gv(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw wt(new Error,Pu.USER_INACTIVE,Mt.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(hm.get(t)===s.password)return n;if(Hu.validate(s.password,t))hm.set(t,s.password);else throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(Gv,"findAndValidateUser");async function qv(){let e=await $a(),t=Ov.getConfigFromFile(dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qe.isEmpty(r)&&r?.role?.role===dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sm.SERVER_SUFFIX.ADMIN,r}o(qv,"getClusterUser")});var ym=f((Z1,Lm)=>{"use strict";var Fv=zr();Lm.exports={writeTransaction:xv};function xv(e,t,r){return Fv.writeTransaction(e,t,r)}o(xv,"writeTransaction")});var Es=f((cQ,Wm)=>{"use strict";var le=H();le.initSync();var Vv=require("fs-extra"),kv=require("semver"),Ri=require("path"),{monotonicFactory:Yv}=require("ulidx"),Yu=Yv(),$v=require("util"),Mm=require("child_process"),Kv=$v.promisify(Mm.exec),Wv=Mm.spawn,v=ke(),V=T(),Ka=O(),br=p(),Wa=Xn(),Qv=ym(),Si=Ve(),{encode:Vu,decode:$u}=require("msgpackr"),{isEmpty:ls}=Ka,Dm=Nr(),Um=12e10,{connect:jv,StorageType:Pm,RetentionPolicy:Hm,AckPolicy:Ku,DeliverPolicy:mi,DiscardPolicy:Jv,NatsConnection:eQ,JetStreamManager:tQ,JetStreamClient:rQ,StringCodec:sQ,JSONCodec:Xv,createInbox:Wu,StreamSource:nQ,headers:Zv,toJsMsg:Bm,nuid:iQ,JetStreamOptions:oQ,ErrorCode:wm,nanos:aQ}=require("nats"),{PACKAGE_ROOT:zv}=T(),eG=Us(),vm=Xv(),tG="clustering",rG=eG.engines[v.NATS_SERVER_NAME],sG=Ri.join(zv,"dependencies"),ku=Ri.join(sG,`${process.platform}-${process.arch}`,v.NATS_BINARY_NAME),Fu,xu,fi,hi,Ti,Tt;Wm.exports={runCommand:Gm,checkNATSServerInstalled:nG,createConnection:Qu,getConnection:Qa,getJetStreamManager:Ai,getJetStream:qm,getNATSReferences:je,getServerList:oG,createLocalStream:ju,listStreams:Fm,deleteLocalStream:aG,getServerConfig:gi,listRemoteStreams:cG,viewStream:_G,viewStreamIterator:uG,publishToStream:lG,createWorkQueueStream:EG,addSourceToWorkStream:Vm,request:dG,removeSourceFromWorkStream:Ym,reloadNATS:Ju,reloadNATSHub:SG,reloadNATSLeaf:fG,extractServerName:km,requestErrorHandler:hG,updateWorkStream:TG,createLocalTableStream:$m,createTableStreams:RG,purgeTableStream:Km,purgeSchemaTableStreams:mG,getStreamInfo:AG,updateLocalStreams:pG,closeConnection:iG,getJsmServerName:pi,addNatsMsgHeader:xm};async function Gm(e,t=void 0){let{stdout:r,stderr:s}=await Kv(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
|
-
`,"")}o(gm,"runCommand");async function Lv(){try{await Ev.access(Uu)}catch{return!1}let e=await gm(`${Uu} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return dv.eq(t,Cv)}o(Lv,"checkNATSServerInstalled");async function Gu(e,t,r,s=!0,n="127.0.0.1"){return mv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Gu,"createConnection");async function yv(){ht&&(await ht.drain(),ht=void 0)}o(yv,"closeConnection");async function Va(){if(!ht){let e=await fm.getClusterUser();if(_s(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);ht=await Gu(t,e.username,e.decrypt_hash)}return ht}o(Va,"getConnection");async function Si(){if(ui)return ui;_s(ht)&&await Va();let{domain:e}=fi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_s(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ui=await ht.jetstreamManager({domain:e}),ui}o(Si,"getJetStreamManager");async function pm(){if(li)return li;_s(ht)&&await Va();let{domain:e}=fi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(_s(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return li=ht.jetstream({domain:e}),li}o(pm,"getJetStream");async function Ke(){let e=ht||await Va(),t=ui||await Si(),r=li||await pm();return{connection:e,jsm:t,js:r}}o(Ke,"getNATSReferences");async function wv(e){let t=le.get(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await fm.getClusterUser(),n=await Gu(t,r,s),i=vu(),a=n.subscribe(i),_=[],c,u=(async()=>{for await(let l of a){let E=Am.decode(l.data);E.response_time=Date.now()-c,_.push(E)}})();return c=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Fa.async_set_timeout(e),await a.drain(),await n.close(),await u,_}o(wv,"getServerList");async function qu(e,t){let{jsm:r}=await Ke(),s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Tm.File,retention:Rm.Limits,subjects:t,discard:Av.Old,duplicate_window:hm,max_msgs:n,max_bytes:i,max_age:s})}o(qu,"createLocalStream");async function Nm(){let{jsm:e}=await Ke(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(Nm,"listStreams");async function Mv(e){let{jsm:t}=await Ke();await t.streams.delete(e)}o(Mv,"deleteLocalStream");async function Dv(e){let{connection:t}=await Ke(),r=[],s=vu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(Am.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(Dv,"listRemoteStreams");async function Uv(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ke(),i=Pu(),a=[],_={ack_policy:Bu.None,durable_name:i,deliver_subject:i,deliver_policy:di.All};t&&(_.deliver_policy=di.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let l of u){let E=mm(l),d=Hu(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(S.origin=E.headers.get(B.MSG_HEADERS.ORIGIN),S.nats_msg_id=E.headers.get(B.MSG_HEADERS.NATS_MSG_ID)),a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return a;throw c}}o(Uv,"viewStream");async function*Pv(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ke(),i=Pu(),a={ack_policy:Bu.None,durable_name:i,deliver_subject:i,deliver_policy:di.All};t&&(a.deliver_policy=di.StartTime,a.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,a);let _={timeout:2e3};r&&(_.max=r);let c=await n.subscribe(i,_);for await(let u of c){let l=mm(u),E=Hu(l.data);E[0]||(E=[E]);for(let d of E){let S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(S.origin=l.headers.get(B.MSG_HEADERS.ORIGIN),S.nats_msg_id=l.headers.get(B.MSG_HEADERS.NATS_MSG_ID)),yield S}c.getPending()===1&&l.info.pending===0&&c.stop()}await s.consumers.delete(e,i)}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return[];throw _}}o(Pv,"viewStreamIterator");async function Hv(e,t,r,s){Or.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;le.get(V.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(B.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=Om(s,r);let{js:i}=await Ke(),a=await hi(),_=`${e}.${a}`;try{Or.trace(`publishToStream publishing to subject: ${_}, data:`,s),n&&await i.publish(_,Du(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Or.trace(`publishToStream creating stream: ${t}`),await qu(t,[_]),n&&await i.publish(_,Du(s),{headers:r});else throw c}}o(Hv,"publishToStream");function Om(e,t){t===void 0&&(t=pv());let r=le.get(V.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(B.MSG_HEADERS.NATS_MSG_ID)){let s=Fa.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Pu()}`;t.append(B.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(B.MSG_HEADERS.ORIGIN)||t.append(B.MSG_HEADERS.ORIGIN,r),t}o(Om,"addNatsMsgHeader");function fi(e){e=e.toLowerCase();let t=Ei.join(le.get(V.CONFIG_PARAMS.ROOTPATH),Iv);if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return _s(Mu)&&(Mu={port:_i.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_i.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+B.SERVER_SUFFIX.HUB,config_file:B.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ei.join(t,B.PID_FILES.HUB),hdb_nats_path:t}),Mu;if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return _s(wu)&&(wu={port:_i.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_i.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+B.SERVER_SUFFIX.LEAF,config_file:B.NATS_CONFIG_FILES.LEAF_SERVER,domain:_i.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+B.SERVER_SUFFIX.LEAF,pid_file_path:Ei.join(t,B.PID_FILES.LEAF),hdb_nats_path:t}),wu;Or.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(fi,"getServerConfig");async function Bv(e){let{jsm:t}=await Ke(),r=await hi();try{await t.streams.add({name:e.stream_name,storage:Tm.File,retention:Rm.Workqueue,duplicate_window:hm,subjects:[`${B.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Bu.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:di.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}o(Bv,"createWorkQueueStream");async function Im(e,t,r){let{jsm:s}=await Ke(),n=await s.streams.info(t),i=Cm(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=xa.createNatsTableStreamName(_,c),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,b=n.config.sources.length;m<b;m++)if(E=n.config.sources[m],d=m,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let R={name:u,opt_start_time:a,filter_subject:`${B.SUBJECT_PREFIXES.TXN}.>`};l||(R.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(R),await s.streams.update(t,n.config)}o(Im,"addSourceToWorkStream");function Cm(e){return e.split(".")[1]}o(Cm,"extractServerName");async function bm(e,t,r){let{schema:s,table:n}=r,i=xa.createNatsTableStreamName(s,n),{jsm:a}=await Ke(),_=await a.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await a.streams.update(t,_.config)}o(bm,"removeSourceFromWorkStream");async function vv(e,t,r=2e3,s=vu()){if(!Fa.isObject(t))throw new Error("data param must be an object");let n=Du(t),{connection:i}=await Ke(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let _=await i.request(e,n,a);return Hu(_.data)}o(vv,"request");function Fu(e){return new Promise(async(t,r)=>{let s=Tv(Uu,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Fu,"reloadNATS");async function Gv(){let{pid_file_path:e}=fi(V.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Fu(e)}o(Gv,"reloadNATSHub");async function qv(){let{pid_file_path:e}=fi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Fu(e)}o(qv,"reloadNATSLeaf");function Fv(e,t,r){let s;switch(e.code){case dm.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case dm.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(Fv,"requestErrorHandler");async function xv(e,t){let r=t+B.SERVER_SUFFIX.LEAF;await Rv.writeTransaction(V.SYSTEM_SCHEMA_NAME,V.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Im(r,B.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await bm(r,B.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(xv,"updateWorkStream");async function Lm(e,t){let r=xa.createNatsTableStreamName(e,t),s=await hi(),n=$v(e,t,s);await qu(r,[n])}o(Lm,"createLocalTableStream");async function Vv(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Lm(s,n)}}o(Vv,"createTableStreams");async function ym(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=xa.createNatsTableStreamName(e,t),{jsm:s}=await Ke();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Or.warn(r);else throw r}}o(ym,"purgeTableStream");async function kv(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await ym(e,t[r])}o(kv,"purgeSchemaTableStreams");async function Yv(e){return(await Si()).streams.info(e)}o(Yv,"getStreamInfo");function $v(e,t,r){return`${B.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o($v,"createSubjectName");async function hi(){if(ci)return ci;if(ci=(await Si())?.nc?.info?.server_name,ci===void 0)throw new Error("Unable to get jetstream manager server name");return ci}o(hi,"getJsmServerName");async function Kv(){let e=await Si(),t=await hi(),r=await Nm();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=Wv(s),_=i.split(".");if(!(_[_.length-1]===t&&!a)){if(n.name===B.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${B.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Or.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===B.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${B.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Or.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(B.WORK_QUEUE_CONSUMER_NAMES.stream_name,B.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${B.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");Or.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}o(Kv,"updateLocalStreams");function Wv(e){let{config:t}=e,r=!1;if(t.name===B.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===B.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Wv,"updateStreamLimits")});var Ja=f((d1,Um)=>{"use strict";var Ti=require("path"),Wa=require("fs-extra"),Qv=Pd(),jv=vd(),Jv=qd(),Xv=xd(),xu=ss(),js=O(),we=Fe(),Ka=T(),Ya=ct(),{CONFIG_PARAMS:se}=Ka,mi=p(),Qa=G(),Mm=$n(),Vu=ka(),Ri="clustering",Zv=1e4,Dm=5;Um.exports={generateNatsConfig:zv,removeNatsConfig:eG};async function zv(e=!1,t=void 0){Qa.initSync();let r=Qa.get(se.ROOTPATH),s=Ti.join(r,Ri,Ya.PID_FILES.HUB),n=Ti.join(r,Ri,Ya.PID_FILES.LEAF),i=we.getConfigFromFile(se.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=Ti.join(r,Ri,Ya.NATS_CONFIG_FILES.HUB_SERVER),_=Ti.join(r,Ri,Ya.NATS_CONFIG_FILES.LEAF_SERVER),c=we.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=we.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),l=we.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),E=we.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),d=we.getConfigFromFile(se.CLUSTERING_TLS_VERIFY),S=we.getConfigFromFile(se.CLUSTERING_NODENAME),R=we.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Vu.checkNATSServerInstalled()||ja("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await xu.listUsers(),b=we.getConfigFromFile(se.CLUSTERING_USER),$=await xu.getClusterUser();(js.isEmpty($)||$.active!==!0)&&ja(`Invalid cluster user '${b}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await $a(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await $a(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await $a(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await $a(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],H=[];for(let[dn,Is]of m.entries())Is.role.role===Ka.ROLE_TYPES_ENUM.CLUSTER_USER&&Is.active&&(A.push(new Xv(Is.username,Mm.decrypt(Is.hash))),H.push(new Jv(Is.username,Mm.decrypt(Is.hash))));let Ee=[],{hub_routes:ae}=we.getClusteringRoutes();if(!js.isEmptyOrZeroLength(ae))for(let dn of ae)Ee.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${dn.host}:${dn.port}`);let or=new Qv(we.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,c,u,l,E,d,R,we.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),we.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ee,A,H);l==null&&(delete or.tls.ca_file,delete or.leafnodes.tls.ca_file),t=js.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ka.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Wa.writeJson(a,or),mi.trace(`Hub server config written to ${a}`));let En=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,ki=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,Gr=new jv(we.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[En],[ki],A,H,c,u,l,E);l==null&&delete Gr.tls.ca_file,(t===void 0||t===Ka.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Wa.writeJson(_,Gr),mi.trace(`Leaf server config written to ${_}`))}o(zv,"generateNatsConfig");async function $a(e){let t=Qa.get(e);return js.isEmpty(t)&&ja(`port undefined for '${e}'`),await js.isPortTaken(t)&&ja(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o($a,"isPortAvailable");function ja(e){let t=`Error generating clustering config: ${e}`;mi.error(t),console.error(t),process.exit(1)}o(ja,"generateNatsConfigError");async function eG(e){let{port:t,config_file:r}=Vu.getServerConfig(e),{username:s,decrypt_hash:n}=await xu.getClusterUser(),i=0,a=500;for(;i<Dm;){try{let u=await Vu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){mi.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=Dm)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await js.async_set_timeout(a*i)}let _="0".repeat(Zv),c=Ti.join(Qa.get(se.ROOTPATH),Ri,r);await Wa.writeFile(c,_),await Wa.remove(c),mi.notify(e,"started.")}o(eG,"removeNatsConfig")});var qm=f((f1,Gm)=>{"use strict";var We=G(),tG=vs(),P=T(),Ai=ct(),Xt=require("path"),{PACKAGE_ROOT:Xa}=T(),Pm=G(),Js="/dev/null",rG=Xt.join(Xa,"launchServiceScripts"),Hm=Xt.join(Xa,"utility/scripts"),sG=Xt.join(Hm,P.HDB_RESTART_SCRIPT),Bm=Xt.resolve(Xa,"dependencies",`${process.platform}-${process.arch}`,Ai.NATS_BINARY_NAME);function vm(){let t=tG.licenseSearch().ram_allocation||P.RAM_ALLOCATION_ENUM.DEFAULT,r=P.MEM_SETTING_KEY+t;return{name:P.PROCESS_DESCRIPTORS.HDB,script:P.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:Xa}}o(vm,"generateMainServerConfig");var nG=9930;function iG(){We.initSync(!0);let e=We.get(P.CONFIG_PARAMS.ROOTPATH),t=Xt.join(e,"clustering",Ai.NATS_CONFIG_FILES.HUB_SERVER),r=Xt.join(We.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Pm.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ai.LOG_LEVEL_FLAGS[We.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==nG?"-"+s:""),script:Bm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Js,i.error_file=Js),i}o(iG,"generateNatsHubServerConfig");var oG=9940;function aG(){We.initSync(!0);let e=We.get(P.CONFIG_PARAMS.ROOTPATH),t=Xt.join(e,"clustering",Ai.NATS_CONFIG_FILES.LEAF_SERVER),r=Xt.join(We.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Pm.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ai.LOG_LEVEL_FLAGS[We.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==oG?"-"+s:""),script:Bm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Js,i.error_file=Js),i}o(aG,"generateNatsLeafServerConfig");function _G(){We.initSync();let e=Xt.join(We.get(P.CONFIG_PARAMS.LOGGING_ROOT),P.LOG_NAMES.HDB),t={name:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:rG,autorestart:!1};return We.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Js,t.error_file=Js),t}o(_G,"generateClusteringUpgradeV4ServiceConfig");function cG(){return{...{name:P.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:Hm},script:sG}}o(cG,"generateRestart");function uG(){return{apps:[vm()]}}o(uG,"generateAllServiceConfigs");Gm.exports={generateAllServiceConfigs:uG,generateMainServerConfig:vm,generateRestart:cG,generateNatsHubServerConfig:iG,generateNatsLeafServerConfig:aG,generateClusteringUpgradeV4ServiceConfig:_G}});var xm=f((T1,Fm)=>{var lG=Ze(),EG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Fm.exports=function(e){return lG.validateObject(e,EG)}});var ku=f((R1,Vm)=>{"use strict";var dG=T().OPERATIONS_ENUM,Za=class{constructor(t,r,s,n=void 0){this.operation=dG.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(Za,"UpdateObject");Vm.exports=Za});var Ym=f((A1,km)=>{"use strict";var SG={OPERATION:"operation",REFRESH:"refresh"},za=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(za,"JWTTokens");var e_=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(e_,"JWTRSAKeys");km.exports={JWTTokens:za,TOKEN_TYPE_ENUM:SG,JWTRSAKeys:e_}});var jm=f((p1,Qm)=>{"use strict";var pi=require("jsonwebtoken"),Yu=require("fs-extra"),$u=O(),nt=T(),{handleHDBError:Me,hdb_errors:fG}=X(),{HTTP_STATUS_CODES:De,AUTHENTICATION_ERROR_MSGS:Ue}=fG,gi=p(),$m=xo(),Qu=ss(),hG=os().update,TG=ku(),RG=Zn(),{UserEventMsg:mG}=rs(),Ir=G();Ir.initSync();var Ku=require("path"),{JWTTokens:AG,JWTRSAKeys:gG,TOKEN_TYPE_ENUM:t_}=Ym(),pG=Ir.get(nt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ir.get(nt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",NG=Ir.get(nt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ir.get(nt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",r_="RS256",Wu;Qm.exports={createTokens:OG,validateOperationToken:CG,refreshOperationToken:IG,validateRefreshToken:Wm};async function OG(e){if($u.isEmpty(e)||typeof e!="object")throw Me(new Error,Ue.INVALID_AUTH_OBJECT,De.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(e.username))throw Me(new Error,Ue.USERNAME_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);if($u.isEmpty(e.password))throw Me(new Error,Ue.PASSWORD_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Qu.findAndValidateUser(e.username,e.password),!t)throw Me(new Error,Ue.INVALID_CREDENTIALS,De.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw gi.error(d),Me(new Error,Ue.INVALID_CREDENTIALS,De.UNAUTHORIZED,void 0,void 0,!0)}let r=await s_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},a=await Km(i,r.private_key,r.passphrase),_=await pi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:NG,algorithm:r_,subject:t_.REFRESH}),c=$m.hash(_),u=new TG(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),l,E;try{l=await hG(u)}catch(d){gi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Me(new Error,Ue.REFRESH_TOKEN_SAVE_FAILED,De.INTERNAL_SERVER_ERROR);return RG.signalUserChange(new mG(process.pid)),new AG(a,_)}o(OG,"createTokens");async function Km(e,t,r){return await pi.sign(e,{key:t,passphrase:r},{expiresIn:pG,algorithm:r_,subject:t_.OPERATION})}o(Km,"signOperationToken");async function s_(){if(Wu===void 0)try{let e=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ku.join(Ir.getHdbBasePath(),nt.LICENSE_KEY_DIR_NAME,nt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Yu.readFile(e)).toString(),n=(await Yu.readFile(t)).toString(),i=(await Yu.readFile(r)).toString();Wu=new gG(i,n,s)}catch(e){throw gi.error(e),Me(new Error,Ue.NO_ENCRYPTION_KEYS,De.INTERNAL_SERVER_ERROR)}return Wu}o(s_,"getJWTRSAKeys");async function IG(e){if(!e)throw Me(new Error,Ue.INVALID_BODY,De.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Me(new Error,Ue.REFRESH_TOKEN_REQUIRED,De.BAD_REQUEST,void 0,void 0,!0);await Wm(e.refresh_token);let t=await s_(),r=await pi.decode(e.refresh_token);return{operation_token:await Km({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(IG,"refreshOperationToken");async function CG(e){try{let t=await s_(),r=await pi.verify(e,t.public_key,{algorithms:r_,subject:t_.OPERATION});return await Qu.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gi.warn(t),t.name&&t.name==="TokenExpiredError"?Me(new Error,Ue.TOKEN_EXPIRED,De.FORBIDDEN):Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED)}}o(CG,"validateOperationToken");async function Wm(e){let t;try{let r=await s_(),s=await pi.verify(e,r.public_key,{algorithms:r_,subject:t_.REFRESH});t=await Qu.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gi.warn(r),r.name&&r.name==="TokenExpiredError"?Me(new Error,Ue.TOKEN_EXPIRED,De.FORBIDDEN):Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED)}if(!$m.validate(t.refresh_token,e))throw Me(new Error,Ue.INVALID_TOKEN,De.UNAUTHORIZED);return t}o(Wm,"validateRefreshToken")});var zm=f((I1,Zm)=>{"use strict";var bG=xm(),Xs=require("passport"),LG=require("passport-local").Strategy,yG=require("passport-http").BasicStrategy,wG=require("util"),MG=ss(),Xm=wG.callbackify(MG.findAndValidateUser),O1=Xe(),DG=T(),Jm=jm();Xs.use(new LG(function(e,t,r){Xm(e,t,r)}));Xs.use(new yG(function(e,t,r){Xm(e,t,r)}));Xs.serializeUser(function(e,t){t(null,e)});Xs.deserializeUser(function(e,t){t(null,e)});function UG(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,_){return a?r(a):_?r(null,_):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":Xs.authenticate("basic",{session:!1},(a,_)=>{i(a,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===DG.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Jm.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):Jm.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:Xs.authenticate("local",{session:!1},function(a,_){i(a,_)})(e,t,r);break}}o(UG,"authorize");function PG(e,t){let r=bG(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(PG,"checkPermissions");Zm.exports={authorize:UG,checkPermissions:PG}});var tA=f((b1,eA)=>{"use strict";var n_=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(n_,"Node");var i_=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(i_,"NodeSubscription");eA.exports={Node:n_,NodeSubscription:i_}});var sA=f((y1,rA)=>{"use strict";var HG=T().OPERATIONS_ENUM,o_=class{constructor(t,r,s,n=void 0){this.operation=HG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(o_,"UpsertObject");rA.exports=o_});var iA=f((M1,nA)=>{"use strict";var a_=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(a_,"RemotePayloadObject");var __=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(__,"RemotePayloadSubscription");nA.exports={RemotePayloadObject:a_,RemotePayloadSubscription:__}});var aA=f((U1,oA)=>{"use strict";var c_=class{constructor(t,r,s=0,n=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=a}};o(c_,"TableSizeObject");oA.exports=c_});var cA=f((H1,_A)=>{"use strict";var BG=aA(),vG=de(),Zs=k(),GG=p(),{getSchemaPath:qG,getTransactionAuditStorePath:FG}=K();_A.exports=xG;async function xG(e){let t=new BG;try{let r=qG(e.schema,e.name),s=await Zs.openEnvironment(r,e.name),n=Zs.statDBI(s,e.hash_attribute),i=FG(e.schema,e.name),a=await Zs.openEnvironment(i,e.name,!0),_=Zs.statDBI(a,vG.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Zs.environmentDataSize(r,e.name),u=await Zs.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){GG.warn(`unable to stat table dbi due to ${r}`)}return t}o(xG,"lmdbGetTableSize")});var lA=f((v1,uA)=>{"use strict";var u_=class{constructor(t,r,s,n,i,a,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=_}};o(u_,"SystemInformationObject");uA.exports=u_});var Ni=f((q1,SA)=>{"use strict";var pe=require("systeminformation"),cs=p(),VG=T(),kG=cA(),dA=jn(),{getThreadInfo:EA}=Wr(),YG=G();YG.initSync();var $G=lA(),{openEnvironment:KG}=k(),{getSchemaPath:WG}=K(),l_;SA.exports={getHDBProcessInfo:Zu,getNetworkInfo:el,getDiskInfo:zu,getMemoryInfo:Xu,getCPUInfo:Ju,getTimeInfo:ju,getSystemInformation:tl,systemInformation:QG,getTableSize:rl,getMetrics:sl};function ju(){return pe.time()}o(ju,"getTimeInfo");async function Ju(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:_,socket:c,cache:u,...l}=await pe.cpu();l.cpu_speed=await pe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:R,raw_currentload_system:m,raw_currentload_user:b,cpus:$,...A}=await pe.currentLoad();return A.cpus=[],$.forEach(H=>{let{raw_load:Ee,raw_load_idle:ae,raw_load_irq:or,raw_load_nice:En,raw_load_system:ki,raw_load_user:Gr,...dn}=H;A.cpus.push(dn)}),l.current_load=A,l}catch(e){return cs.error(`error in getCPUInfo: ${e}`),{}}}o(Ju,"getCPUInfo");async function Xu(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await pe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return cs.error(`error in getMemoryInfo: ${e}`),{}}}o(Xu,"getMemoryInfo");async function Zu(){let e={core:[],clustering:[]};try{return(await pe.processes()).list.forEach(r=>{r.params.includes(VG.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return cs.error(`error in getHDBProcessInfo: ${t}`),e}}o(Zu,"getHDBProcessInfo");async function zu(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await pe.disksIO();e.io=i;let{rx_sec:a,tx_sec:_,wx_sec:c,...u}=await pe.fsStats();return e.read_write=u,e.size=await pe.fsSize(),e}catch(t){return cs.error(`error in getDiskInfo: ${t}`),e}}o(zu,"getDiskInfo");async function el(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pe.networkInterfaceDefault(),e.latency=await pe.inetChecksite("google.com"),(await pe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await pe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,..._}=s;e.stats.push(_)}),e}catch(t){return cs.error(`error in getNetworkInfo: ${t}`),e}}o(el,"getNetworkInfo");async function tl(){if(l_!==void 0)return l_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,..._}=await pe.osInfo();e=_;let c=await pe.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,l_=e,l_}catch(t){return cs.error(`error in getSystemInformation: ${t}`),e}}o(tl,"getSystemInformation");async function rl(){let e=[],t=await dA.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await kG(s));return e}o(rl,"getTableSize");async function sl(){let e=await dA.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=WG(r,n),_=(await KG(i,n)).getStats();s[n]={puts:_.puts,deletes:_.deletes,txns:_.txns,pageFlushes:_.pageFlushes,writes:_.writes,pagesWritten:_.pagesWritten,timeDuringTxns:_.timeDuringTxns,timeStartTxns:_.timeStartTxns,timePageFlushes:_.timePageFlushes,timeSync:_.timeSync}}catch(i){cs.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(sl,"getMetrics");async function QG(e){let t=new $G;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tl(),t.time=ju(),t.cpu=await Ju(),t.memory=await Xu(),t.disk=await zu(),t.network=await el(),t.harperdb_processes=await Zu(),t.table_size=await rl(),t.metrics=await sl(),t.threads=await EA(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tl();break;case"time":t.time=ju();break;case"cpu":t.cpu=await Ju();break;case"memory":t.memory=await Xu();break;case"disk":t.disk=await zu();break;case"network":t.network=await el();break;case"harperdb_processes":t.harperdb_processes=await Zu();break;case"table_size":t.table_size=await rl();break;case"database_metrics":t.metrics=await sl();break;case"threads":t.threads=await EA();break;default:break}return t}o(QG,"systemInformation")});var mA=f((k1,RA)=>{"use strict";var jG=os(),nl=O(),il=require("util"),us=T(),fA=G();fA.initSync();var JG=zm(),hA=Jr(),{Node:x1,NodeSubscription:V1}=tA(),XG=si(),ZG=sA(),{RemotePayloadObject:zG,RemotePayloadSubscription:eq}=iA(),{handleHDBError:tq,hdb_errors:rq}=X(),{HTTP_STATUS_CODES:sq,HDB_ERROR_MSGS:nq}=rq,iq=ft(),oq=Ni(),aq=Fr(),_q=il.promisify(JG.authorize),cq=il.promisify(hA.searchByHash),uq=il.promisify(hA.searchByValue);RA.exports={authHeaderToUser:lq,isEmpty:Eq,getNodeRecord:dq,upsertNodeRecord:Sq,buildNodePayloads:fq,checkClusteringEnabled:hq,getAllNodeRecords:Tq,getSystemInfo:Rq,reverseSubscription:TA};async function lq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await _q(t,null),e}o(lq,"authHeaderToUser");function Eq(e){return e==null}o(Eq,"isEmpty");async function dq(e){let t=new XG(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return cq(t)}o(dq,"getNodeRecord");async function Sq(e){let t=new ZG(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return jG.upsert(t)}o(Sq,"upsertNodeRecord");function TA(e){if(nl.isEmpty(e.subscribe)||nl.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}o(TA,"reverseSubscription");function fq(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let _=e[i],{schema:c,table:u}=_,l=nl.getTableHashAttribute(c,u),{subscribe:E,publish:d}=TA(_),S=new eq(c,u,l,d,E,_.start_time);n.push(S)}return new zG(r,t,n,s)}o(fq,"buildNodePayloads");function hq(){if(!fA.get(us.CONFIG_PARAMS.CLUSTERING_ENABLED))throw tq(new Error,nq.CLUSTERING_NOT_ENABLED,sq.BAD_REQUEST,void 0,void 0,!0)}o(hq,"checkClusteringEnabled");async function Tq(){let e=new iq(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await uq(e))}o(Tq,"getAllNodeRecords");async function Rq(){let e=await oq.getSystemInformation();return{hdb_version:aq.version(),node_version:e.node_version,platform:e.platform}}o(Rq,"getSystemInfo")});var zs=f((X1,UA)=>{"use strict";var q=T(),gA=O(),Oi=Ja(),E_=ka(),Mt=ct(),F=require("pm2"),Cr=qm(),d_=G(),Zt=p(),mq=mA(),{startWorker:ol,onMessageFromWorkers:Aq}=Wr(),$1=Ni(),gq=require("util"),pA=require("child_process"),{execFile:pq}=pA,K1=gq.promisify(pA.exec),W1=require("systeminformation");UA.exports={enterPM2Mode:Nq,start:ls,stop:al,reload:NA,restart:OA,list:_l,describe:cl,connect:zt,kill:Lq,startAllServices:yq,startService:ul,getUniqueServicesList:CA,restartAllServices:wq,isServiceRegistered:bA,reloadStopStart:LA,restartHdb:IA,deleteProcess:Cq,startClusteringProcesses:MA,startClusteringThreads:DA,isHdbRestartRunning:bq,isClusteringRunning:Dq,stopClustering:Mq,reloadClustering:Uq};var{PACKAGE_ROOT:Q1}=T(),j1=T(),{loggerWithTag:J1}=Zt,Ii=!1;Aq(e=>{e.type==="restart"&&d_.initSync(!0)});function Nq(){Ii=!0}o(Nq,"enterPM2Mode");function zt(){return new Promise((e,t)=>{F.connect((r,s)=>{Zt.setupConsoleLogging(),r&&t(r),e(s)})})}o(zt,"connect");var Pe,Oq=10,AA;function ls(e){if(Ii)return Iq(e);let t=pq(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Pe.indexOf(t);i>-1&&Pe.splice(i,1),!AA&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Oq&&ls(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(q.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,_,c=0,u;for(;_=a.exec(n);){if(_.index&&Mt.LOG_LEVEL_HIERARCHY[i]>=Mt.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Mt.LOG_LEVELS.ERR||u===Mt.LOG_LEVELS.WRN?Zt.OUTPUTS.STDERR:Zt.OUTPUTS.STDOUT;Zt.logCustomLevel(u||"info",d,r,n.slice(c,_.index).trim())}let[l,E]=_;c=_.index+l.length,u=Mt.LOG_LEVELS[E]}if(Mt.LOG_LEVEL_HIERARCHY[i]>=Mt.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===Mt.LOG_LEVELS.ERR||u===Mt.LOG_LEVELS.WRN?Zt.OUTPUTS.STDERR:Zt.OUTPUTS.STDOUT;Zt.logCustomLevel(u||"info",l,r,n.slice(c).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Pe){Pe=[];let n=o(()=>{AA=!0,Pe&&(Pe.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Pe.push(t)}o(ls,"start");function Iq(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.start(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(Iq,"startWithPM2");function al(e){if(!Ii){for(let t of Pe||[])t.name===e&&(Pe.splice(Pe.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.stop(e,async(s,n)=>{s&&(F.disconnect(),r(s)),F.delete(e,(i,a)=>{i&&(F.disconnect(),r(s)),F.disconnect(),t(a)})})})}o(al,"stop");function NA(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.reload(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(NA,"reload");function OA(e){if(!Ii)for(let t of Pe||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.restart(e,(s,n)=>{F.disconnect(),t(n)})})}o(OA,"restart");function Cq(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.delete(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(Cq,"deleteProcess");async function IA(){await ls(Cr.generateRestart())}o(IA,"restartHdb");async function bq(){let e=await _l();for(let t in e)if(e[t].name===q.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(bq,"isHdbRestartRunning");function _l(){return new Promise(async(e,t)=>{try{await zt()}catch(r){t(r)}F.list((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(_l,"list");function cl(e){return new Promise(async(t,r)=>{try{await zt()}catch(s){r(s)}F.describe(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(cl,"describe");function Lq(){if(!Ii){for(let e of Pe||[])e.kill();Pe=[];return}return new Promise(async(e,t)=>{try{await zt()}catch(r){t(r)}F.killDaemon((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(Lq,"kill");async function yq(){try{await MA(),await DA(),await ls(Cr.generateAllServiceConfigs())}catch(e){throw F.disconnect(),e}}o(yq,"startAllServices");async function ul(e){try{let t;switch(e=e.toLowerCase(),e){case q.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Cr.generateMainServerConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Cr.generateNatsIngestServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Cr.generateNatsReplyServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Cr.generateNatsHubServerConfig(),await ls(t),await Oi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Cr.generateNatsLeafServerConfig(),await ls(t),await Oi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Cr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ls(t)}catch(t){throw F.disconnect(),t}}o(ul,"startService");async function CA(){try{let e=await _l(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw F.disconnect(),e}}o(CA,"getUniqueServicesList");async function wq(e=[]){try{let t=!1,r=await CA();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===q.PROCESS_DESCRIPTORS.HDB?t=!0:await OA(a))}t&&await LA(q.PROCESS_DESCRIPTORS.HDB)}catch(t){throw F.disconnect(),t}}o(wq,"restartAllServices");async function bA(e){return Pe?.find(t=>t.name===e)?!0:!gA.isEmptyOrZeroLength(await cl(e))}o(bA,"isServiceRegistered");async function LA(e){let t=e===q.PROCESS_DESCRIPTORS.HDB?d_.get(q.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(q.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await cl(e),s=gA.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await al(e),await ul(e)):e===q.PROCESS_DESCRIPTORS.HDB?await IA():await NA(e)}o(LA,"reloadStopStart");var yA,wA;async function MA(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];await ul(t)}}o(MA,"startClusteringProcesses");async function DA(){yA=ol(q.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),wA=ol(q.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await E_.createWorkQueueStream(Mt.WORK_QUEUE_CONSUMER_NAMES),await E_.updateLocalStreams();let e=await mq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===q.PRE_4_0_0_VERSION){Zt.info("Starting clustering upgrade 4.0.0 process"),ol(q.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(DA,"startClusteringThreads");async function Mq(){for(let e in q.CLUSTERING_PROCESSES)if(e===q.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await yA.terminate();else if(e===q.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await wA.terminate();else{let t=q.CLUSTERING_PROCESSES[e];await al(t)}}o(Mq,"stopClustering");async function Dq(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];if(await bA(t)===!1)return!1}return!0}o(Dq,"isClusteringRunning");async function Uq(){await Oi.generateNatsConfig(!0),await E_.reloadNATSHub(),await E_.reloadNATSLeaf(),await Oi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Oi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Uq,"reloadClustering")});var Tl=f((z1,qA)=>{"use strict";var Pq=require("minimist"),{isMainThread:dl,parentPort:BA}=require("worker_threads"),z=T(),{PROCESS_DESCRIPTORS_VALIDATE:Ci}=z,Dt=p(),Sl=O(),S_=Ja(),en=ka(),ll=ct(),vA=Fe(),Ut=zs(),PA=Ni(),Hq=qr(),{restartWorkers:f_,onMessageFromWorkers:Bq}=Wr(),{handleHDBError:vq,hdb_errors:Gq}=X(),{HTTP_STATUS_CODES:qq}=Gq,h_=G();h_.initSync();var bi=`Restarting HarperDB. This may take up to ${z.RESTART_TIMEOUT_MS/1e3} seconds.`,Fq="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",HA="Clustering is not enabled so cannot be restarted",xq="Invalid service",Es,Tt;qA.exports={restart:GA,restartService:fl};dl&&Bq(e=>{e.type===z.ITC_EVENT_TYPES.RESTART&&(e.workerType?fl({service:e.workerType}):GA({operation:"restart"}))});async function GA(e){Tt=Object.keys(e).length===0,Es=await Ut.isServiceRegistered(z.HDB_PROC_DESCRIPTOR);let t=Pq(process.argv);if(t.service){await fl(t);return}if(Tt&&!Es){console.error(Fq);return}if(Tt&&console.log(bi),Es){Ut.enterPM2Mode(),Dt.notify(bi);let r=Hq(Object.keys(z.CONFIG_PARAM_MAP),!0);return Sl.isEmptyOrZeroLength(Object.keys(r))||vA.updateConfigValue(void 0,void 0,r,!0,!0),kq(),bi}return dl?(Dt.notify(bi),await hl(),setTimeout(()=>{f_()},50)):BA.postMessage({type:z.ITC_EVENT_TYPES.RESTART}),bi}o(GA,"restart");async function fl(e){let{service:t}=e;if(z.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw vq(new Error,xq,qq.BAD_REQUEST,void 0,void 0,!0);if(Es=await Ut.isServiceRegistered(z.HDB_PROC_DESCRIPTOR),!dl)return BA.postMessage({type:z.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case Ci.clustering:if(!h_.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HA;break}Tt&&console.log("Restarting clustering"),Dt.notify("Restarting clustering"),await hl();break;case Ci.clustering_config:case Ci["clustering config"]:if(!h_.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HA;break}Tt&&console.log("Restarting clustering_config"),Dt.notify("Restarting clustering_config"),await Ut.reloadClustering();break;case"custom_functions":case"custom functions":case Ci.harperdb:case Ci.http_workers:if(Tt&&!Es){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Tt&&console.log("Restarting http_workers"),Dt.notify("Restarting http_workers"),Es?await Ut.restart(z.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Dt.error(r),Tt&&console.error(r),r):`Restarting ${t}`}o(fl,"restartService");async function Vq(){await en.publishToStream(`${ll.SUBJECT_PREFIXES.TXN}.${ll.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,ll.WORK_QUEUE_CONSUMER_NAMES.stream_name,en.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(Vq,"postDummyNatsMsg");async function kq(){await hl(),await Ut.restart(z.HDB_PROC_DESCRIPTOR),await Sl.async_set_timeout(2e3),h_.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await El(),Tt&&(await en.closeConnection(),process.exit(0))}o(kq,"restartPM2Mode");async function hl(){if(!vA.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await PA.getHDBProcessInfo()).clustering.length===0)Dt.trace("Clustering not running, restart will start clustering services"),await S_.generateNatsConfig(!0),await Ut.startClusteringProcesses(),await Ut.startClusteringThreads(),await El(),Tt&&await en.closeConnection();else{await Vq(),await S_.generateNatsConfig(!0),Es?(Dt.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ut.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ut.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await PA.getHDBProcessInfo()).clustering.forEach(n=>{Dt.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Sl.async_set_timeout(3e3),await El(),await en.updateLocalStreams(),Tt&&await en.closeConnection(),Dt.trace("Restart clustering restarting ingest and reply service threads");let t=f_(z.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(z.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(hl,"restartClustering");async function El(){await S_.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await S_.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(El,"removeNatsConfig")});var ml=f((tQ,FA)=>{"use strict";var Li=G();Li.initSync();var tn=require("fs-extra"),Rl=require("path"),rn=T(),Yq=require("crypto"),$q=require("uuid").v4;FA.exports=Kq;function Kq(){if(Li.getHdbBasePath()!==void 0){let e=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=Rl.join(Li.getHdbBasePath(),rn.LICENSE_KEY_DIR_NAME,rn.JWT_ENUM.JWT_PASSPHRASE_NAME);try{tn.accessSync(r),tn.accessSync(e),tn.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=$q(),i=Yq.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});tn.writeFileSync(r,n),tn.writeFileSync(e,i.privateKey),tn.writeFileSync(t,i.publicKey)}else throw s}}}o(Kq,"checkJWTTokenExist")});var VA=f((sQ,xA)=>{"use strict";var T_=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(T_,"HdbInfoInsertObject");xA.exports={HdbInfoInsertObject:T_}});var $A=f((iQ,YA)=>{"use strict";var kA=T(),R_=class{constructor(t,r){this[kA.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[kA.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(R_,"UpgradeObject");YA.exports={UpgradeObject:R_}});var m_=f((aQ,WA)=>{"use strict";var it=require("prompt"),sn=require("chalk"),KA=p(),Rt=require("os"),Al=qr(),gl=["yes","y"];async function Wq(e){let t=`${Rt.EOL}`+sn.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Rt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rt.EOL}${Rt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Rt.EOL}`;it.override=Al(["CONFIRM_UPGRADE"]),it.start(),it.message=t;let r={properties:{CONFIRM_UPGRADE:{description:sn.magenta(`${Rt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await it.get([r])}catch(n){return KA.error("There was an error when prompting user about an upgrade."),KA.error(n),!1}return gl.includes(s.CONFIRM_UPGRADE)}o(Wq,"forceUpdatePrompt");async function Qq(e){let t=`${Rt.EOL}`+sn.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Rt.EOL}`);it.override=Al(["CONFIRM_DOWNGRADE"]),it.start(),it.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:sn.magenta(`${Rt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await it.get([r]);return gl.includes(s.CONFIRM_DOWNGRADE)}o(Qq,"forceDowngradePrompt");async function jq(){let e=`${Rt.EOL}`+sn.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");it.override=Al(["GENERATE_CERTS"]),it.start(),it.message=e;let t={properties:{GENERATE_CERTS:{description:sn.magenta(`${Rt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await it.get([t]);return gl.includes(r.GENERATE_CERTS)}o(jq,"upgradeCertsPrompt");WA.exports={forceUpdatePrompt:Wq,forceDowngradePrompt:Qq,upgradeCertsPrompt:jq}});var pl=f((cQ,QA)=>{"use strict";var A_=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(A_,"UpgradeDirective");QA.exports=A_});var JA=f((fQ,jA)=>{"use strict";var Jq=O(),Xq=Fe(),lQ=p(),EQ=require("path"),dQ=require("fs"),SQ=T();jA.exports={getOldPropsValue:Zq};function Zq(e,t,r=!1){let s=t.getRaw(e);return Jq.isNotEmptyAndHasValue(s)?s:r?Xq.getDefaultConfig(e):""}o(Zq,"getOldPropsValue")});var eg=f((TQ,zA)=>{"use strict";var br=require("path"),Lr=require("fs-extra"),zq=require("properties-reader"),eF=pl(),ne=p(),{getOldPropsValue:j}=JA(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:ds}=T(),Ss=Fe(),g_=G(),XA=O(),Pt=T(),Nl=new eF("3.1.0"),ZA=[];function tF(){let e=zq(g_.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ne.info(t);let r=` ;Settings for the HarperDB process.
|
|
8
|
+
`,"")}o(Gm,"runCommand");async function nG(){try{await Vv.access(ku)}catch{return!1}let e=await Gm(`${ku} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kv.eq(t,rG)}o(nG,"checkNATSServerInstalled");async function Qu(e,t,r,s=!0,n="127.0.0.1"){return jv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Qu,"createConnection");async function iG(){Tt&&(await Tt.drain(),Tt=void 0)}o(iG,"closeConnection");async function Qa(){if(!Tt){let e=await Dm.getClusterUser();if(ls(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Tt=await Qu(t,e.username,e.decrypt_hash)}return Tt}o(Qa,"getConnection");async function Ai(){if(hi)return hi;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return hi=await Tt.jetstreamManager({domain:e}),hi}o(Ai,"getJetStreamManager");async function qm(){if(Ti)return Ti;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ti=Tt.jetstream({domain:e}),Ti}o(qm,"getJetStream");async function je(){let e=Tt||await Qa(),t=hi||await Ai(),r=Ti||await qm();return{connection:e,jsm:t,js:r}}o(je,"getNATSReferences");async function oG(e){let t=le.get(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Dm.getClusterUser(),n=await Qu(t,r,s),i=Wu(),a=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of a){let E=vm.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Ka.async_set_timeout(e),await a.drain(),await n.close(),await u,c}o(oG,"getServerList");async function ju(e,t){let{jsm:r}=await je(),s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Pm.File,retention:Hm.Limits,subjects:t,discard:Jv.Old,duplicate_window:Um,max_msgs:n,max_bytes:i,max_age:s})}o(ju,"createLocalStream");async function Fm(){let{jsm:e}=await je(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(Fm,"listStreams");async function aG(e){let{jsm:t}=await je();await t.streams.delete(e)}o(aG,"deleteLocalStream");async function cG(e){let{connection:t}=await je(),r=[],s=Wu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(vm.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(cG,"listRemoteStreams");async function _G(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a=[],c={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(c.deliver_policy=mi.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=Bm(l),d=$u(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(S.origin=E.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=E.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return a;throw _}}o(_G,"viewStream");async function*uG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(a.deliver_policy=mi.StartTime,a.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,a);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=Bm(u),E=$u(l.data);E[0]||(E=[E]);for(let d of E){let S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(S.origin=l.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=l.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),yield S}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}o(uG,"viewStreamIterator");async function lG(e,t,r,s){br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;le.get(V.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(v.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=xm(s,r);let{js:i}=await je(),a=await pi(),c=`${e}.${a}`;try{br.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,Vu(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")br.trace(`publishToStream creating stream: ${t}`),await ju(t,[c]),n&&await i.publish(c,Vu(s),{headers:r});else throw _}}o(lG,"publishToStream");function xm(e,t){t===void 0&&(t=Zv());let r=le.get(V.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(v.MSG_HEADERS.NATS_MSG_ID)){let s=Ka.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Yu()}`;t.append(v.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(v.MSG_HEADERS.ORIGIN)||t.append(v.MSG_HEADERS.ORIGIN,r),t}o(xm,"addNatsMsgHeader");function gi(e){e=e.toLowerCase();let t=Ri.join(le.get(V.CONFIG_PARAMS.ROOTPATH),tG);if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ls(xu)&&(xu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.HUB,config_file:v.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ri.join(t,v.PID_FILES.HUB),hdb_nats_path:t}),xu;if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ls(Fu)&&(Fu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,config_file:v.NATS_CONFIG_FILES.LEAF_SERVER,domain:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,pid_file_path:Ri.join(t,v.PID_FILES.LEAF),hdb_nats_path:t}),Fu;br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(gi,"getServerConfig");async function EG(e){let{jsm:t}=await je(),r=await pi();try{await t.streams.add({name:e.stream_name,storage:Pm.File,retention:Hm.Workqueue,duplicate_window:Um,subjects:[`${v.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Ku.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:mi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}o(EG,"createWorkQueueStream");async function Vm(e,t,r){let{jsm:s}=await je(),n=await s.streams.info(t),i=km(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Wa.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,b=n.config.sources.length;m<b;m++)if(E=n.config.sources[m],d=m,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===a)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let R={name:u,opt_start_time:a,filter_subject:`${v.SUBJECT_PREFIXES.TXN}.>`};l||(R.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(R),await s.streams.update(t,n.config)}o(Vm,"addSourceToWorkStream");function km(e){return e.split(".")[1]}o(km,"extractServerName");async function Ym(e,t,r){let{schema:s,table:n}=r,i=Wa.createNatsTableStreamName(s,n),{jsm:a}=await je(),c=await a.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await a.streams.update(t,c.config)}o(Ym,"removeSourceFromWorkStream");async function dG(e,t,r=2e3,s=Wu()){if(!Ka.isObject(t))throw new Error("data param must be an object");let n=Vu(t),{connection:i}=await je(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let c=await i.request(e,n,a);return $u(c.data)}o(dG,"request");function Ju(e){return new Promise(async(t,r)=>{let s=Wv(ku,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Ju,"reloadNATS");async function SG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Ju(e)}o(SG,"reloadNATSHub");async function fG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Ju(e)}o(fG,"reloadNATSLeaf");function hG(e,t,r){let s;switch(e.code){case wm.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case wm.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(hG,"requestErrorHandler");async function TG(e,t){let r=t+v.SERVER_SUFFIX.LEAF;await Qv.writeTransaction(V.SYSTEM_SCHEMA_NAME,V.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Vm(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Ym(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(TG,"updateWorkStream");async function $m(e,t){let r=Wa.createNatsTableStreamName(e,t),s=await pi(),n=gG(e,t,s);await ju(r,[n])}o($m,"createLocalTableStream");async function RG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await $m(s,n)}}o(RG,"createTableStreams");async function Km(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wa.createNatsTableStreamName(e,t),{jsm:s}=await je();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")br.warn(r);else throw r}}o(Km,"purgeTableStream");async function mG(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Km(e,t[r])}o(mG,"purgeSchemaTableStreams");async function AG(e){return(await Ai()).streams.info(e)}o(AG,"getStreamInfo");function gG(e,t,r){return`${v.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(gG,"createSubjectName");async function pi(){if(fi)return fi;if(fi=(await Ai())?.nc?.info?.server_name,fi===void 0)throw new Error("Unable to get jetstream manager server name");return fi}o(pi,"getJsmServerName");async function pG(){let e=await Ai(),t=await pi(),r=await Fm();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=NG(s),c=i.split(".");if(!(c[c.length-1]===t&&!a)){if(n.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(v.WORK_QUEUE_CONSUMER_NAMES.stream_name,v.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${v.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");br.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}o(pG,"updateLocalStreams");function NG(e){let{config:t}=e,r=!1;if(t.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(NG,"updateStreamLimits")});var tc=f((uQ,Jm)=>{"use strict";var Ni=require("path"),Za=require("fs-extra"),OG=Xd(),IG=eS(),CG=rS(),bG=nS(),Xu=Nr(),en=O(),Me=Ve(),Xa=T(),ja=ke(),{CONFIG_PARAMS:se}=Xa,Ii=p(),za=H(),Qm=Xn(),Zu=Es(),Oi="clustering",LG=1e4,jm=5;Jm.exports={generateNatsConfig:yG,removeNatsConfig:wG};async function yG(e=!1,t=void 0){za.initSync();let r=za.get(se.ROOTPATH),s=Ni.join(r,Oi,ja.PID_FILES.HUB),n=Ni.join(r,Oi,ja.PID_FILES.LEAF),i=Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.HUB_SERVER),c=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.LEAF_SERVER),_=Me.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Me.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),l=Me.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),E=Me.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),d=Me.getConfigFromFile(se.CLUSTERING_TLS_VERIFY),S=Me.getConfigFromFile(se.CLUSTERING_NODENAME),R=Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Zu.checkNATSServerInstalled()||ec("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await Xu.listUsers(),b=Me.getConfigFromFile(se.CLUSTERING_USER),$=await Xu.getClusterUser();(en.isEmpty($)||$.active!==!0)&&ec(`Invalid cluster user '${b}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ja(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ja(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],B=[];for(let[mn,ws]of m.entries())ws.role.role===Xa.ROLE_TYPES_ENUM.CLUSTER_USER&&ws.active&&(A.push(new bG(ws.username,Qm.decrypt(ws.hash))),B.push(new CG(ws.username,Qm.decrypt(ws.hash))));let Ee=[],{hub_routes:ce}=Me.getClusteringRoutes();if(!en.isEmptyOrZeroLength(ce))for(let mn of ce)Ee.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${mn.host}:${mn.port}`);let cr=new OG(Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,_,u,l,E,d,R,Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ee,A,B);l==null&&(delete cr.tls.ca_file,delete cr.leafnodes.tls.ca_file),t=en.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Za.writeJson(a,cr),Ii.trace(`Hub server config written to ${a}`));let Rn=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,ji=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,Vr=new IG(Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[Rn],[ji],A,B,_,u,l,E);l==null&&delete Vr.tls.ca_file,(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Za.writeJson(c,Vr),Ii.trace(`Leaf server config written to ${c}`))}o(yG,"generateNatsConfig");async function Ja(e){let t=za.get(e);return en.isEmpty(t)&&ec(`port undefined for '${e}'`),await en.isPortTaken(t)&&ec(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(Ja,"isPortAvailable");function ec(e){let t=`Error generating clustering config: ${e}`;Ii.error(t),console.error(t),process.exit(1)}o(ec,"generateNatsConfigError");async function wG(e){let{port:t,config_file:r}=Zu.getServerConfig(e),{username:s,decrypt_hash:n}=await Xu.getClusterUser(),i=0,a=500;for(;i<jm;){try{let u=await Zu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ii.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=jm)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await en.async_set_timeout(a*i)}let c="0".repeat(LG),_=Ni.join(za.get(se.ROOTPATH),Oi,r);await Za.writeFile(_,c),await Za.remove(_),Ii.notify(e,"started.")}o(wG,"removeNatsConfig")});var rA=f((EQ,tA)=>{"use strict";var Je=H(),MG=Vs(),P=T(),Ci=ke(),er=require("path"),{PACKAGE_ROOT:rc}=T(),Xm=H(),tn="/dev/null",DG=er.join(rc,"launchServiceScripts"),Zm=er.join(rc,"utility/scripts"),UG=er.join(Zm,P.HDB_RESTART_SCRIPT),zm=er.resolve(rc,"dependencies",`${process.platform}-${process.arch}`,Ci.NATS_BINARY_NAME);function eA(){let t=MG.licenseSearch().ram_allocation||P.RAM_ALLOCATION_ENUM.DEFAULT,r=P.MEM_SETTING_KEY+t;return{name:P.PROCESS_DESCRIPTORS.HDB,script:P.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:rc}}o(eA,"generateMainServerConfig");var PG=9930;function HG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.HUB_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==PG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(HG,"generateNatsHubServerConfig");var BG=9940;function vG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.LEAF_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==BG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(vG,"generateNatsLeafServerConfig");function GG(){Je.initSync();let e=er.join(Je.get(P.CONFIG_PARAMS.LOGGING_ROOT),P.LOG_NAMES.HDB),t={name:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:DG,autorestart:!1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tn,t.error_file=tn),t}o(GG,"generateClusteringUpgradeV4ServiceConfig");function qG(){return{...{name:P.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:Zm},script:UG}}o(qG,"generateRestart");function FG(){return{apps:[eA()]}}o(FG,"generateAllServiceConfigs");tA.exports={generateAllServiceConfigs:FG,generateMainServerConfig:eA,generateRestart:qG,generateNatsHubServerConfig:HG,generateNatsLeafServerConfig:vG,generateClusteringUpgradeV4ServiceConfig:GG}});var nA=f((SQ,sA)=>{var xG=Fe(),VG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sA.exports=function(e){return xG.validateObject(e,VG)}});var zu=f((fQ,iA)=>{"use strict";var kG=T().OPERATIONS_ENUM,sc=class{constructor(t,r,s,n=void 0){this.operation=kG.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(sc,"UpdateObject");iA.exports=sc});var aA=f((TQ,oA)=>{"use strict";var YG={OPERATION:"operation",REFRESH:"refresh"},nc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(nc,"JWTTokens");var ic=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ic,"JWTRSAKeys");oA.exports={JWTTokens:nc,TOKEN_TYPE_ENUM:YG,JWTRSAKeys:ic}});var EA=f((mQ,lA)=>{"use strict";var Li=require("jsonwebtoken"),el=require("fs-extra"),tl=O(),ot=T(),{handleHDBError:De,hdb_errors:$G}=J(),{HTTP_STATUS_CODES:Ue,AUTHENTICATION_ERROR_MSGS:Pe}=$G,bi=p(),cA=Wo(),nl=Nr(),KG=_s().update,WG=zu(),QG=ni(),{UserEventMsg:jG}=os(),Lr=H();Lr.initSync();var rl=require("path"),{JWTTokens:JG,JWTRSAKeys:XG,TOKEN_TYPE_ENUM:oc}=aA(),ZG=Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",zG=Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ac="RS256",sl;lA.exports={createTokens:eq,validateOperationToken:rq,refreshOperationToken:tq,validateRefreshToken:uA};async function eq(e){if(tl.isEmpty(e)||typeof e!="object")throw De(new Error,Pe.INVALID_AUTH_OBJECT,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.username))throw De(new Error,Pe.USERNAME_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.password))throw De(new Error,Pe.PASSWORD_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await nl.findAndValidateUser(e.username,e.password),!t)throw De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw bi.error(d),De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}let r=await cc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},a=await _A(i,r.private_key,r.passphrase),c=await Li.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:zG,algorithm:ac,subject:oc.REFRESH}),_=cA.hash(c),u=new WG(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await KG(u)}catch(d){bi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw De(new Error,Pe.REFRESH_TOKEN_SAVE_FAILED,Ue.INTERNAL_SERVER_ERROR);return QG.signalUserChange(new jG(process.pid)),new JG(a,c)}o(eq,"createTokens");async function _A(e,t,r){return await Li.sign(e,{key:t,passphrase:r},{expiresIn:ZG,algorithm:ac,subject:oc.OPERATION})}o(_A,"signOperationToken");async function cc(){if(sl===void 0)try{let e=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PASSPHRASE_NAME),t=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await el.readFile(e)).toString(),n=(await el.readFile(t)).toString(),i=(await el.readFile(r)).toString();sl=new XG(i,n,s)}catch(e){throw bi.error(e),De(new Error,Pe.NO_ENCRYPTION_KEYS,Ue.INTERNAL_SERVER_ERROR)}return sl}o(cc,"getJWTRSAKeys");async function tq(e){if(!e)throw De(new Error,Pe.INVALID_BODY,Ue.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw De(new Error,Pe.REFRESH_TOKEN_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);await uA(e.refresh_token);let t=await cc(),r=await Li.decode(e.refresh_token);return{operation_token:await _A({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(tq,"refreshOperationToken");async function rq(e){try{let t=await cc(),r=await Li.verify(e,t.public_key,{algorithms:ac,subject:oc.OPERATION});return await nl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bi.warn(t),t.name&&t.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}}o(rq,"validateOperationToken");async function uA(e){let t;try{let r=await cc(),s=await Li.verify(e,r.public_key,{algorithms:ac,subject:oc.REFRESH});t=await nl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bi.warn(r),r.name&&r.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}if(!cA.validate(t.refresh_token,e))throw De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED);return t}o(uA,"validateRefreshToken")});var hA=f((pQ,fA)=>{"use strict";var sq=nA(),rn=require("passport"),nq=require("passport-local").Strategy,iq=require("passport-http").BasicStrategy,oq=require("util"),aq=Nr(),SA=oq.callbackify(aq.findAndValidateUser),gQ=et(),cq=T(),dA=EA();rn.use(new nq(function(e,t,r){SA(e,t,r)}));rn.use(new iq(function(e,t,r){SA(e,t,r)}));rn.serializeUser(function(e,t){t(null,e)});rn.deserializeUser(function(e,t){t(null,e)});function _q(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":rn.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===cq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):dA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:rn.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(_q,"authorize");function uq(e,t){let r=sq(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,s)}o(uq,"checkPermissions");fA.exports={authorize:_q,checkPermissions:uq}});var RA=f((OQ,TA)=>{"use strict";var _c=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(_c,"Node");var uc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(uc,"NodeSubscription");TA.exports={Node:_c,NodeSubscription:uc}});var AA=f((CQ,mA)=>{"use strict";var lq=T().OPERATIONS_ENUM,lc=class{constructor(t,r,s,n=void 0){this.operation=lq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(lc,"UpsertObject");mA.exports=lc});var il=f((LQ,gA)=>{"use strict";var Ec=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ec,"RemotePayloadObject");var dc=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(dc,"RemotePayloadSubscription");gA.exports={RemotePayloadObject:Ec,RemotePayloadSubscription:dc}});var NA=f((wQ,pA)=>{"use strict";var Sc=class{constructor(t,r,s=0,n=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=a}};o(Sc,"TableSizeObject");pA.exports=Sc});var IA=f((DQ,OA)=>{"use strict";var Eq=NA(),dq=de(),sn=k(),Sq=p(),{getSchemaPath:fq,getTransactionAuditStorePath:hq}=K();OA.exports=Tq;async function Tq(e){let t=new Eq;try{let r=fq(e.schema,e.name),s=await sn.openEnvironment(r,e.name),n=sn.statDBI(s,e.hash_attribute),i=hq(e.schema,e.name),a=await sn.openEnvironment(i,e.name,!0),c=sn.statDBI(a,dq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await sn.environmentDataSize(r,e.name),u=await sn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){Sq.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tq,"lmdbGetTableSize")});var bA=f((PQ,CA)=>{"use strict";var fc=class{constructor(t,r,s,n,i,a,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=c}};o(fc,"SystemInformationObject");CA.exports=fc});var nn=f((BQ,MA)=>{"use strict";var Rq=require("fs-extra"),mq=require("path"),pe=require("systeminformation"),yr=p(),ol=T(),Aq=IA(),yA=ti(),{getThreadInfo:LA}=Xr(),wA=H();wA.initSync();var gq=bA(),{openEnvironment:pq}=k(),{getSchemaPath:Nq}=K(),hc;MA.exports={getHDBProcessInfo:ul,getNetworkInfo:El,getDiskInfo:ll,getMemoryInfo:_l,getCPUInfo:cl,getTimeInfo:al,getSystemInformation:dl,systemInformation:Oq,getTableSize:Sl,getMetrics:fl};function al(){return pe.time()}o(al,"getTimeInfo");async function cl(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:c,socket:_,cache:u,...l}=await pe.cpu();l.cpu_speed=await pe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:R,raw_currentload_system:m,raw_currentload_user:b,cpus:$,...A}=await pe.currentLoad();return A.cpus=[],$.forEach(B=>{let{raw_load:Ee,raw_load_idle:ce,raw_load_irq:cr,raw_load_nice:Rn,raw_load_system:ji,raw_load_user:Vr,...mn}=B;A.cpus.push(mn)}),l.current_load=A,l}catch(e){return yr.error(`error in getCPUInfo: ${e}`),{}}}o(cl,"getCPUInfo");async function _l(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await pe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return yr.error(`error in getMemoryInfo: ${e}`),{}}}o(_l,"getMemoryInfo");async function ul(){let e={core:[],clustering:[]};try{let t=await pe.processes(),r;try{r=Number.parseInt(await Rq.readFile(mq.join(wA.get(ol.CONFIG_PARAMS.ROOTPATH),ol.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===ol.NODE_ERROR_CODES.ENOENT)yr.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return yr.error(`error in getHDBProcessInfo: ${t}`),e}}o(ul,"getHDBProcessInfo");async function ll(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await pe.disksIO();e.io=i;let{rx_sec:a,tx_sec:c,wx_sec:_,...u}=await pe.fsStats();return e.read_write=u,e.size=await pe.fsSize(),e}catch(t){return yr.error(`error in getDiskInfo: ${t}`),e}}o(ll,"getDiskInfo");async function El(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pe.networkInterfaceDefault(),e.latency=await pe.inetChecksite("google.com"),(await pe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await pe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,...c}=s;e.stats.push(c)}),e}catch(t){return yr.error(`error in getNetworkInfo: ${t}`),e}}o(El,"getNetworkInfo");async function dl(){if(hc!==void 0)return hc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,...c}=await pe.osInfo();e=c;let _=await pe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,hc=e,hc}catch(t){return yr.error(`error in getSystemInformation: ${t}`),e}}o(dl,"getSystemInformation");async function Sl(){let e=[],t=await yA.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Aq(s));return e}o(Sl,"getTableSize");async function fl(){let e=await yA.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Nq(r,n),c=(await pq(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){yr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(fl,"getMetrics");async function Oq(e){let t=new gq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dl(),t.time=al(),t.cpu=await cl(),t.memory=await _l(),t.disk=await ll(),t.network=await El(),t.harperdb_processes=await ul(),t.table_size=await Sl(),t.metrics=await fl(),t.threads=await LA(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dl();break;case"time":t.time=al();break;case"cpu":t.cpu=await cl();break;case"memory":t.memory=await _l();break;case"disk":t.disk=await ll();break;case"network":t.network=await El();break;case"harperdb_processes":t.harperdb_processes=await ul();break;case"table_size":t.table_size=await Sl();break;case"database_metrics":case"metrics":t.metrics=await fl();break;case"threads":t.threads=await LA();break;default:break}return t}o(Oq,"systemInformation")});var Tc=f((FQ,HA)=>{"use strict";var Iq=_s(),hl=O(),Tl=require("util"),ds=T(),DA=H();DA.initSync();var Cq=hA(),UA=es(),{Node:GQ,NodeSubscription:qQ}=RA(),bq=_i(),Lq=AA(),{RemotePayloadObject:yq,RemotePayloadSubscription:wq}=il(),{handleHDBError:Mq,hdb_errors:Dq}=J(),{HTTP_STATUS_CODES:Uq,HDB_ERROR_MSGS:Pq}=Dq,Hq=ht(),Bq=nn(),vq=Yr(),Gq=Tl.promisify(Cq.authorize),qq=Tl.promisify(UA.searchByHash),Fq=Tl.promisify(UA.searchByValue);HA.exports={authHeaderToUser:xq,isEmpty:Vq,getNodeRecord:kq,upsertNodeRecord:Yq,buildNodePayloads:$q,checkClusteringEnabled:Kq,getAllNodeRecords:Wq,getSystemInfo:Qq,reverseSubscription:PA};async function xq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Gq(t,null),e}o(xq,"authHeaderToUser");function Vq(e){return e==null}o(Vq,"isEmpty");async function kq(e){let t=new bq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qq(t)}o(kq,"getNodeRecord");async function Yq(e){let t=new Lq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Iq.upsert(t)}o(Yq,"upsertNodeRecord");function PA(e){if(hl.isEmpty(e.subscribe)||hl.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}o(PA,"reverseSubscription");function $q(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:_,table:u}=c,l=hl.getTableHashAttribute(_,u),{subscribe:E,publish:d}=PA(c),S=new wq(_,u,l,d,E,c.start_time);n.push(S)}return new yq(r,t,n,s)}o($q,"buildNodePayloads");function Kq(){if(!DA.get(ds.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mq(new Error,Pq.CLUSTERING_NOT_ENABLED,Uq.BAD_REQUEST,void 0,void 0,!0)}o(Kq,"checkClusteringEnabled");async function Wq(){let e=new Hq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fq(e))}o(Wq,"getAllNodeRecords");async function Qq(){let e=await Bq.getSystemInformation();return{hdb_version:vq.version(),node_version:e.node_version,platform:e.platform}}o(Qq,"getSystemInfo")});var on=f((QQ,jA)=>{"use strict";var q=T(),vA=O(),yi=tc(),Rc=Es(),Dt=ke(),F=require("pm2"),wr=rA(),mc=H(),tr=p(),jq=Tc(),{startWorker:Rl,onMessageFromWorkers:Jq}=Xr(),VQ=nn(),Xq=require("util"),GA=require("child_process"),{execFile:Zq}=GA,kQ=Xq.promisify(GA.exec),YQ=require("systeminformation");jA.exports={enterPM2Mode:zq,start:Ss,stop:ml,reload:qA,restart:FA,list:Al,describe:gl,connect:rr,kill:nF,startAllServices:iF,startService:pl,getUniqueServicesList:VA,restartAllServices:oF,isServiceRegistered:kA,reloadStopStart:YA,restartHdb:xA,deleteProcess:rF,startClusteringProcesses:WA,startClusteringThreads:QA,isHdbRestartRunning:sF,isClusteringRunning:cF,stopClustering:aF,reloadClustering:_F};var{PACKAGE_ROOT:$Q}=T(),KQ=T(),{loggerWithTag:WQ}=tr,wi=!1;Jq(e=>{e.type==="restart"&&mc.initSync(!0)});function zq(){wi=!0}o(zq,"enterPM2Mode");function rr(){return new Promise((e,t)=>{F.connect((r,s)=>{tr.setupConsoleLogging(),r&&t(r),e(s)})})}o(rr,"connect");var He,eF=10,BA;function Ss(e){if(wi)return tF(e);let t=Zq(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=He.indexOf(t);i>-1&&He.splice(i,1),!BA&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<eF&&Ss(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=mc.get(q.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=a.exec(n);){if(c.index&&Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=Dt.LOG_LEVELS[E]}if(Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!He){He=[];let n=o(()=>{BA=!0,He&&(He.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}He.push(t)}o(Ss,"start");function tF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.start(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(tF,"startWithPM2");function ml(e){if(!wi){for(let t of He||[])t.name===e&&(He.splice(He.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.stop(e,async(s,n)=>{s&&(F.disconnect(),r(s)),F.delete(e,(i,a)=>{i&&(F.disconnect(),r(s)),F.disconnect(),t(a)})})})}o(ml,"stop");function qA(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.reload(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(qA,"reload");function FA(e){if(!wi)for(let t of He||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.restart(e,(s,n)=>{F.disconnect(),t(n)})})}o(FA,"restart");function rF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.delete(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(rF,"deleteProcess");async function xA(){await Ss(wr.generateRestart())}o(xA,"restartHdb");async function sF(){let e=await Al();for(let t in e)if(e[t].name===q.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(sF,"isHdbRestartRunning");function Al(){return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.list((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(Al,"list");function gl(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.describe(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(gl,"describe");function nF(){if(!wi){for(let e of He||[])e.kill();He=[];return}return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.killDaemon((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(nF,"kill");async function iF(){try{await WA(),await QA(),await Ss(wr.generateAllServiceConfigs())}catch(e){throw F.disconnect(),e}}o(iF,"startAllServices");async function pl(e){try{let t;switch(e=e.toLowerCase(),e){case q.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=wr.generateMainServerConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=wr.generateNatsIngestServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=wr.generateNatsReplyServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=wr.generateNatsHubServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=wr.generateNatsLeafServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=wr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ss(t)}catch(t){throw F.disconnect(),t}}o(pl,"startService");async function VA(){try{let e=await Al(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw F.disconnect(),e}}o(VA,"getUniqueServicesList");async function oF(e=[]){try{let t=!1,r=await VA();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===q.PROCESS_DESCRIPTORS.HDB?t=!0:await FA(a))}t&&await YA(q.PROCESS_DESCRIPTORS.HDB)}catch(t){throw F.disconnect(),t}}o(oF,"restartAllServices");async function kA(e){return He?.find(t=>t.name===e)?!0:!vA.isEmptyOrZeroLength(await gl(e))}o(kA,"isServiceRegistered");async function YA(e){let t=e===q.PROCESS_DESCRIPTORS.HDB?mc.get(q.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):mc.get(q.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await gl(e),s=vA.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await ml(e),await pl(e)):e===q.PROCESS_DESCRIPTORS.HDB?await xA():await qA(e)}o(YA,"reloadStopStart");var $A,KA;async function WA(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];await pl(t)}}o(WA,"startClusteringProcesses");async function QA(){$A=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),KA=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Rc.createWorkQueueStream(Dt.WORK_QUEUE_CONSUMER_NAMES),await Rc.updateLocalStreams();let e=await jq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===q.PRE_4_0_0_VERSION){tr.info("Starting clustering upgrade 4.0.0 process"),Rl(q.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(QA,"startClusteringThreads");async function aF(){for(let e in q.CLUSTERING_PROCESSES)if(e===q.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await $A.terminate();else if(e===q.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await KA.terminate();else{let t=q.CLUSTERING_PROCESSES[e];await ml(t)}}o(aF,"stopClustering");async function cF(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];if(await kA(t)===!1)return!1}return!0}o(cF,"isClusteringRunning");async function _F(){await yi.generateNatsConfig(!0),await Rc.reloadNATSHub(),await Rc.reloadNATSLeaf(),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var yl=f((JQ,tg)=>{"use strict";var uF=require("minimist"),{isMainThread:Il,parentPort:ZA}=require("worker_threads"),z=T(),{PROCESS_DESCRIPTORS_VALIDATE:Mi}=z,Ut=p(),Cl=O(),Ac=tc(),an=Es(),Nl=ke(),zA=Ve(),Pt=on(),JA=nn(),lF=kr(),{restartWorkers:gc,onMessageFromWorkers:EF}=Xr(),{handleHDBError:dF,hdb_errors:SF}=J(),{HTTP_STATUS_CODES:fF}=SF,pc=H();pc.initSync();var Di=`Restarting HarperDB. This may take up to ${z.RESTART_TIMEOUT_MS/1e3} seconds.`,hF="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XA="Clustering is not enabled so cannot be restarted",TF="Invalid service",fs,Rt;tg.exports={restart:eg,restartService:bl};Il&&EF(e=>{e.type===z.ITC_EVENT_TYPES.RESTART&&(e.workerType?bl({service:e.workerType}):eg({operation:"restart"}))});async function eg(e){Rt=Object.keys(e).length===0,fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR);let t=uF(process.argv);if(t.service){await bl(t);return}if(Rt&&!fs){console.error(hF);return}if(Rt&&console.log(Di),fs){Pt.enterPM2Mode(),Ut.notify(Di);let r=lF(Object.keys(z.CONFIG_PARAM_MAP),!0);return Cl.isEmptyOrZeroLength(Object.keys(r))||zA.updateConfigValue(void 0,void 0,r,!0,!0),mF(),Di}return Il?(Ut.notify(Di),await Ll(),setTimeout(()=>{gc()},50)):ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART}),Di}o(eg,"restart");async function bl(e){let{service:t}=e;if(z.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw dF(new Error,TF,fF.BAD_REQUEST,void 0,void 0,!0);if(fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR),!Il)return ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case Mi.clustering:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering"),Ut.notify("Restarting clustering"),await Ll();break;case Mi.clustering_config:case Mi["clustering config"]:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering_config"),Ut.notify("Restarting clustering_config"),await Pt.reloadClustering();break;case"custom_functions":case"custom functions":case Mi.harperdb:case Mi.http_workers:if(Rt&&!fs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Rt&&console.log("Restarting http_workers"),Ut.notify("Restarting http_workers"),fs?await Pt.restart(z.HDB_PROC_DESCRIPTOR):setTimeout(()=>{gc("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ut.error(r),Rt&&console.error(r),r):`Restarting ${t}`}o(bl,"restartService");async function RF(){await an.publishToStream(`${Nl.SUBJECT_PREFIXES.TXN}.${Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name,an.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(RF,"postDummyNatsMsg");async function mF(){await Ll(),await Pt.restart(z.HDB_PROC_DESCRIPTOR),await Cl.async_set_timeout(2e3),pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Ol(),Rt&&(await an.closeConnection(),process.exit(0))}o(mF,"restartPM2Mode");async function Ll(){if(!zA.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JA.getHDBProcessInfo()).clustering.length===0)Ut.trace("Clustering not running, restart will start clustering services"),await Ac.generateNatsConfig(!0),await Pt.startClusteringProcesses(),await Pt.startClusteringThreads(),await Ol(),Rt&&await an.closeConnection();else{await RF(),await Ac.generateNatsConfig(!0),fs?(Ut.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JA.getHDBProcessInfo()).clustering.forEach(n=>{Ut.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Cl.async_set_timeout(3e3),await Ol(),await an.updateLocalStreams(),Rt&&await an.closeConnection(),Ut.trace("Restart clustering restarting ingest and reply service threads");let t=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(Ll,"restartClustering");async function Ol(){await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(Ol,"removeNatsConfig")});var Ml=f((ZQ,rg)=>{"use strict";var Ui=H();Ui.initSync();var cn=require("fs-extra"),wl=require("path"),_n=T(),AF=require("crypto"),gF=require("uuid").v4;rg.exports=pF;function pF(){if(Ui.getHdbBasePath()!==void 0){let e=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PASSPHRASE_NAME);try{cn.accessSync(r),cn.accessSync(e),cn.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=gF(),i=AF.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});cn.writeFileSync(r,n),cn.writeFileSync(e,i.privateKey),cn.writeFileSync(t,i.publicKey)}else throw s}}}o(pF,"checkJWTTokenExist")});var ng=f((ej,sg)=>{"use strict";var Nc=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Nc,"HdbInfoInsertObject");sg.exports={HdbInfoInsertObject:Nc}});var ag=f((rj,og)=>{"use strict";var ig=T(),Oc=class{constructor(t,r){this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Oc,"UpgradeObject");og.exports={UpgradeObject:Oc}});var Ic=f((nj,_g)=>{"use strict";var at=require("prompt"),un=require("chalk"),cg=p(),mt=require("os"),Dl=kr(),Ul=["yes","y"];async function NF(e){let t=`${mt.EOL}`+un.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=Dl(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return cg.error("There was an error when prompting user about an upgrade."),cg.error(n),!1}return Ul.includes(s.CONFIRM_UPGRADE)}o(NF,"forceUpdatePrompt");async function OF(e){let t=`${mt.EOL}`+un.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=Dl(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Ul.includes(s.CONFIRM_DOWNGRADE)}o(OF,"forceDowngradePrompt");async function IF(){let e=`${mt.EOL}`+un.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=Dl(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:un.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Ul.includes(r.GENERATE_CERTS)}o(IF,"upgradeCertsPrompt");_g.exports={forceUpdatePrompt:NF,forceDowngradePrompt:OF,upgradeCertsPrompt:IF}});var Pl=f((oj,ug)=>{"use strict";var Cc=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Cc,"UpgradeDirective");ug.exports=Cc});var Eg=f((Ej,lg)=>{"use strict";var CF=O(),bF=Ve(),cj=p(),_j=require("path"),uj=require("fs"),lj=T();lg.exports={getOldPropsValue:LF};function LF(e,t,r=!1){let s=t.getRaw(e);return CF.isNotEmptyAndHasValue(s)?s:r?bF.getDefaultConfig(e):""}o(LF,"getOldPropsValue")});var hg=f((Sj,fg)=>{"use strict";var Mr=require("path"),Dr=require("fs-extra"),yF=require("properties-reader"),wF=Pl(),ne=p(),{getOldPropsValue:j}=Eg(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:hs}=T(),Ts=Ve(),bc=H(),dg=O(),Ht=T(),Hl=new wF("3.1.0"),Sg=[];function MF(){let e=yF(bc.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ne.info(t);let r=` ;Settings for the HarperDB process.
|
|
9
9
|
|
|
10
10
|
;The directory selected during install where the database files reside.
|
|
11
11
|
${N.HDB_ROOT_KEY} = ${j(N.HDB_ROOT_KEY,e)}
|
|
@@ -28,9 +28,9 @@ ${N.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${j(N.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
|
|
|
28
28
|
;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
|
|
29
29
|
${N.SERVER_HEADERS_TIMEOUT_KEY} = ${j(N.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
|
|
30
30
|
;Define whether to log to file or not.
|
|
31
|
-
${N.LOG_TO_FILE} = ${
|
|
31
|
+
${N.LOG_TO_FILE} = ${Ts.getDefaultConfig(hs.LOGGING_FILE)}
|
|
32
32
|
;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
|
|
33
|
-
${N.LOG_TO_STDSTREAMS} = ${
|
|
33
|
+
${N.LOG_TO_STDSTREAMS} = ${Ts.getDefaultConfig(hs.LOGGING_STDSTREAMS)}
|
|
34
34
|
;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
|
|
35
35
|
${N.LOG_LEVEL_KEY} = ${j(N.LOG_LEVEL_KEY,e)}
|
|
36
36
|
;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
|
|
@@ -63,22 +63,22 @@ ${N.OPERATION_TOKEN_TIMEOUT_KEY} = ${j(N.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
|
63
63
|
;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
|
|
64
64
|
${N.REFRESH_TOKEN_TIMEOUT_KEY} = ${j(N.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
|
|
65
65
|
;The port the IPC server will run on.
|
|
66
|
-
${N.IPC_SERVER_PORT} = ${
|
|
66
|
+
${N.IPC_SERVER_PORT} = ${Ts.getDefaultConfig(hs.IPC_NETWORK_PORT)}
|
|
67
67
|
;Run HDB in the foreground.
|
|
68
|
-
${N.RUN_IN_FOREGROUND} = ${
|
|
68
|
+
${N.RUN_IN_FOREGROUND} = ${Ts.getDefaultConfig(hs.OPERATIONSAPI_FOREGROUND)}
|
|
69
69
|
;Set to true to enable custom API endpoints. Requires a valid enterprise license.
|
|
70
|
-
${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${
|
|
70
|
+
${N.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ts.getDefaultConfig(hs.CUSTOMFUNCTIONS_ENABLED)}
|
|
71
71
|
;The port used to access the custom functions server.
|
|
72
|
-
${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${
|
|
72
|
+
${N.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ts.getDefaultConfig(hs.CUSTOMFUNCTIONS_NETWORK_PORT)}
|
|
73
73
|
;The path to the folder containing HarperDB custom function files.
|
|
74
|
-
${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${
|
|
74
|
+
${N.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Mr.join(j(N.HDB_ROOT_KEY,e),"custom_functions")}
|
|
75
75
|
;Set the max number of processes HarperDB will start for the Custom Functions server
|
|
76
|
-
${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${
|
|
77
|
-
`,s=
|
|
76
|
+
${N.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ts.getDefaultConfig(hs.HTTP_THREADS)}
|
|
77
|
+
`,s=bc.get("settings_path"),n=Mr.dirname(s),i=Mr.join(n,"3_1_0_upgrade_settings.bak");try{ne.info(`Backing up old settings file to: ${i}`),Dr.copySync(s,i)}catch(c){throw ne.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ne.info("New settings file values for 3.1.0 upgrade:",r),ne.info(`Creating new/upgraded settings file at '${s}'`),Dr.writeFileSync(s,r),ne.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ne.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ne.error(c),Dr.copySync(i,s),c}bc.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),ne.info(a),a}o(MF,"updateSettingsFile_3_1_0");function DF(){let e=Mr.join(dg.getHomeDir(),Ht.HDB_HOME_DIR_NAME,Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),t=Mr.join(dg.getHomeDir(),Ht.HDB_HOME_DIR_NAME,Ht.LICENSE_KEY_DIR_NAME,Ht.REG_KEY_FILE_NAME),r=Mr.join(bc.getHdbBasePath(),Ht.LICENSE_KEY_DIR_NAME,Ht.LICENSE_FILE_NAME),s=Mr.join(r,Ht.LICENSE_FILE_NAME),n=Mr.join(r,Ht.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ne.info(i);let a="Creating .license directory";console.log(a),ne.info(a),Dr.mkdirpSync(r);try{Dr.accessSync(e);try{let c="Moving licence file";console.log(c),ne.info(c),Dr.moveSync(e,s);let _="License file successfully moved.";console.log(_),ne.info(_)}catch{let _="moving license file failed";console.error(_),ne.error(_)}}catch{let _=`license file '${e}' does not exist.`;console.warn(_),ne.warn(_)}try{Dr.accessSync(t);try{let c="Moving registration file";console.log(c),ne.info(c),Dr.moveSync(t,n);let _="Registration file successfully moved.";console.log(_),ne.info(_)}catch{let _="moving registration file failed";console.error(_),ne.error(_)}}catch{let _=`registration file '${t}' does not exist.`;console.warn(_),ne.warn(_)}}o(DF,"moveLicenseFiles");Hl.sync_functions.push(MF);Hl.sync_functions.push(DF);Sg.push(Hl);fg.exports=Sg});var Ag=f((hj,mg)=>{"use strict";var Bl=require("joi"),Tg=Fe(),{route_constraints:Rg}=__();mg.exports={setRoutesValidator:UF,deleteRoutesValidator:PF};function UF(e){let t=Bl.object({server:Bl.valid("hub","leaf").required(),routes:Rg.required()});return Tg.validateBySchema(e,t)}o(UF,"setRoutesValidator");function PF(e){let t=Bl.object({routes:Rg.required()});return Tg.validateBySchema(e,t)}o(PF,"deleteRoutesValidator")});var Ig=f((Rj,Og)=>{"use strict";var Rs=Ve(),vl=O(),Lc=T(),gg=Ag(),{handleHDBError:pg,hdb_errors:HF}=J(),{HTTP_STATUS_CODES:Ng}=HF,BF="cluster routes successfully set",vF="cluster routes successfully deleted";Og.exports={setRoutes:GF,getRoutes:qF,deleteRoutes:FF};function GF(e){let t=gg.setRoutesValidator(e);if(t)throw pg(t,t.message,Ng.BAD_REQUEST,void 0,void 0,!0);let r=Rs.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=vl.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),a.push(u))}return e.server==="hub"?Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:BF,set:a,skipped:i}}o(GF,"setRoutes");function qF(){let e=Rs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(qF,"getRoutes");function FF(e){let t=gg.deleteRoutesValidator(e);if(t)throw pg(t,t.message,Ng.BAD_REQUEST,void 0,void 0,!0);let r=Rs.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,R=s.length;S<R;S++){let m=s[S];if(E.host===m.host&&E.port===m.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let R=0,m=n.length;R<m;R++){let b=n[R];if(E.host===b.host&&E.port===b.port){n.splice(R,1),_=!0,S=!1,i.push(E);break}}S&&a.push(E)}}return c&&(s=vl.isEmptyOrZeroLength(s)?null:s,Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=vl.isEmptyOrZeroLength(n)?null:n,Rs.updateConfigValue(Lc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:vF,deleted:i,skipped:a}}o(FF,"deleteRoutes")});var wg=f((gj,yg)=>{"use strict";var Xe=k(),{insertRecords:xF}=jr(),VF=Sr(),Ur=de(),kF=O(),{STORAGE_TYPES_ENUM:Aj}=T(),sr=p(),YF=O(),Bt=require("fs-extra"),nr=require("path"),$F=require("cli-progress"),Pi=require("assert"),KF=require("pino"),WF=H();yg.exports=QF;var yc,Cg,wc,Gl,Ne,Hi=!1;async function QF(e=!0){return yc=WF.getHdbBasePath(),Cg=nr.join(yc,"schema"),wc=nr.join(yc,"4_0_0_upgrade_tmp"),Gl=nr.join(yc,"transactions"),console.info("Reindexing upgrade started for schemas"),sr.notify("Reindexing upgrade started for schemas"),await bg(Cg,!1,e),await Bt.pathExists(Gl)&&(console.info(`
|
|
78
78
|
|
|
79
|
-
Reindexing upgrade started for transaction logs`),er.notify("Reindexing upgrade started for transaction logs"),await lg(Cl,!0,e)),er.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(wi?", but errors occurred":"")}o(RF,"reindexUpgrade");async function lg(e,t,r){let s=await Ht.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],_=tr.join(e,a.toString());if(a===".DS_Store")continue;let c=await Ht.readdir(_),u=c.length;for(let l=0;l<u;l++){let E=c[l];if(E!==".DS_Store"&&Ht.statSync(tr.join(_,E)).isDirectory())try{await mF(a,E,t),Ne.info(`Reindexing started for ${a}.${E}`),er.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await gF(a,E,_,t,r),Ne.info(`Reindexing completed for ${a}.${E}`),er.notify(`Reindexing completed for ${a}.${E}`)}catch(d){wi=!0,d.schema_path=_,d.table_name=E,er.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),er.error(d),Ne.error(d),console.error(d)}}}if(!wi)try{await Ht.rm(O_,{recursive:!0})}catch{}}o(lg,"processTables");async function mF(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=tr.join(O_,n);await Ht.ensureDir(O_),await Ht.writeFile(i,""),Ne=hF({level:"debug",formatters:{bindings(){}}},i)}o(mF,"initPinoLogger");var AF=20;async function gF(e,t,r,s,n){let i;try{i=await Qe.openEnvironment(r,t,s)}catch(A){if(A.message==="MDB_INVALID: File is not an LMDB file"){er.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ne.error(A);return}throw A}let a=OF(i.dbis),_=Qe.openDBI(i,a),c=Object.keys(i.dbis),u=Qe.statDBI(i,a);Ne.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new fF.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Qe.createEnvironment(r,t,!1);Qe.createDBI(E,a,!1,!0);let d=[];try{for(let A of _.getRange({start:!1}))A.value=Object.assign({},A.value),d.push(A),s||e==="system"&&(t==="hdb_schema"&&(A.key=A.key.toString(),A.value.name=A.value.name.toString()),t==="hdb_table"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.name=A.value.name.toString()),t==="hdb_attribute"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.table=A.value.table.toString(),A.value.attribute=A.value.attribute.toString())),d.length>AF&&await S();await S()}catch(A){throw wi=!0,Ne.error(A),A}async function S(){let A,H=d.map(({value:ae})=>ae);s?A=await Promise.all(H.map(ae=>pF(E,ae))):A=await lF(E,a,c.filter(ae=>ae!=="__blob__"),H,!1);for(let ae=0,or=d.length;ae<or;ae++){let{key:En,value:ki}=d[ae];Ne.info(`Record hash value: ${En} hash: ${a}`);let Gr;s?Gr=A[ae]:Gr=A.written_hashes.indexOf(En)>-1,yi(Gr,!0),NF(E,a,ki[a],s),Ne.info(`Insert success, written hashes: ${A.written_hashes}`),l.increment()}d=[],l.value/l.total*100%10===0&&er.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Ne.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let R=Qe.statDBI(i,a),m=Qe.statDBI(E,a);if(Ne.info(`Old stats entry count: ${R.entryCount}. New stats entry count: ${m.entryCount}`),yi.deepStrictEqual(R.entryCount,m.entryCount),await Qe.closeEnvironment(i),await Qe.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let A=tr.join(r,t),H=tr.join(A,"data.mdb"),Ee=tr.join(A,"lock.mdb");await Ht.unlink(H),await Ht.unlink(Ee),await Ht.rmdir(A),Ne.info(`Deleted old environment files from schema folder: ${H}, ${Ee}`)}let b=await Qe.openEnvironment(r,t),$=Qe.statDBI(b,a);Ne.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify($)}`),yi.deepStrictEqual($.entryCount,m.entryCount),await Qe.closeEnvironment(b),delete global.lmdb_map[`${e}.${t}`]}o(gF,"processTable");async function pF(e,t){Qe.initializeDBIs(e,yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yr.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),SF.isEmpty(t.user_name)||e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(pF,"insertTransaction");function NF(e,t,r,s){let i=e.dbis[t].get(r);yi.deepStrictEqual(typeof i,"object");let a;if(s){let _={[yr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[yr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(_)}else a=Object.entries(i);for(let[_,c]of a)if(_!==t&&e.dbis[_]!==void 0&&!dF.isEmptyOrZeroLength(c))if(s&&_==="hash_value")for(let u=0,l=c.length;u<l;u++){let E=c[u];Eg(e,_,E,r)}else Eg(e,_,c,r)}o(NF,"validateIndices");function Eg(e,t,r,s){try{let n=!1,i=EF.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||Ne.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),yi.deepStrictEqual(n,!0)}catch(n){wi=!0,Ne.error(n),console.error(n)}}o(Eg,"validateIndex");function OF(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(OF,"getHashDBI")});var wl=f((CQ,hg)=>{"use strict";var IF=require("mkcert"),I_=require("path"),bl=require("fs-extra"),Ll=p(),CF=G(),yl=T(),nn=X_(),bF=qr(),LF=Fe();hg.exports={generateKeys:yF,updateConfigCert:fg};async function yF(){let e=CF.getHdbBasePath(),t=I_.join(e,yl.LICENSE_KEY_DIR_NAME),r=await IF.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:nn.CERTIFICATE_VALUES.key,caCert:nn.CERTIFICATE_VALUES.cert}),s=I_.join(t,nn.CERTIFICATE_PEM_NAME),n=I_.join(t,nn.PRIVATEKEY_PEM_NAME),i=I_.join(t,nn.CA_PEM_NAME);try{await bl.writeFile(s,r.cert)}catch(a){throw Ll.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await bl.writeFile(n,r.key)}catch(a){throw Ll.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await bl.writeFile(i,nn.CERTIFICATE_VALUES.cert)}catch(a){throw Ll.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}fg(s,n,i)}o(yF,"generateKeys");function fg(e,t,r){let s=bF(Object.keys(yl.CONFIG_PARAM_MAP),!0),n=yl.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};LF.updateConfigValue(void 0,void 0,i,!1,!0)}o(fg,"updateConfigCert")});var gg=f((LQ,Ag)=>{"use strict";var C_=require("path"),wr=require("fs-extra"),wF=pl(),hs=p(),Tg=Fe(),Ml=G(),mt=T(),b_=O(),MF=require("properties-reader"),DF=ft(),UF=ku(),PF=Jr(),HF=require("util"),BF=HF.promisify(PF.searchByValue),vF=os(),GF=cg(),qF=ct(),FF=Sg(),Rg=wl(),xF=m_(),Ui=new wF("4.0.0"),mg=[],Mi,Di;async function VF(){try{if(await xF.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Mi){let t=b_.changeExtension(Mi,".bak");await wr.move(Mi,t)}if(Di){let t=b_.changeExtension(Di,".bak");await wr.move(Di,t)}await Rg.generateKeys()}else console.log("Using existing certificates."),Rg.updateConfigCert(Mi,Di,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(VF,"generateNewKeys");async function kF(){console.log("Updating HarperDB nodes."),hs.info("Updating HarperDB nodes.");let e=[];try{let t=new DF(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await BF(t)),s=[];for(let i=0,a=r.length;i<a;i++){let _=r[i];if(!qF.NATS_TERM_CONSTRAINTS_RX.test(_.name)){let l=`Node name '${_.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let c={host:_.host,port:_.port};e.push(c);let u=[];for(let l=0,E=_.subscriptions.length;l<E;l++){let d=_.subscriptions[l],S=d.channel.split(":");u.push({schema:S[0],table:S[1],publish:d.publish,subscribe:d.subscribe})}s.push({name:_.name,subscriptions:u,system_info:{hdb_version:mt.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(b_.isEmptyOrZeroLength(s))return;let n=new UF(mt.SYSTEM_SCHEMA_NAME,mt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await vF.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{GF.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(kF,"updateNodes");async function YF(){let e=Ml.get(mt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(C_.join("config","settings.js"))){hs.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),hs.info(t);let r=C_.dirname(e),s=Ml.get(mt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=C_.join(s,"backup","4_0_0_upgrade_settings.bak"),i=C_.join(s,mt.HDB_CONFIG_FILE);try{hs.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),wr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{hs.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),hs.info("Updating env variables with new settings values");let E=Tg.initOldConfig(e);Mi=E[mt.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],Di=E[mt.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],Tg.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=b_.getPropsFilePath();wr.accessSync(a,wr.constants.F_OK|wr.constants.R_OK);let c=MF(a).get(mt.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
80
|
-
install_user = ${c}`;try{wr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{Ml.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{wr.removeSync(r),console.log(l),hs.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(YF,"updateSettingsFile_4_0_0");Ui.async_functions.push(YF);Ui.async_functions.push(VF);Ui.async_functions.push(FF);Ui.async_functions.push(kF);mg.push(Ui);Ag.exports=mg});var Dl=f((wQ,Ig)=>{"use strict";var Ts=O(),$F=T(),pg=p(),{DATA_VERSION:KF,UPGRADE_VERSION:WF}=$F.UPGRADE_JSON_FIELD_NAMES_ENUM,Ng=eg(),L_=gg(),Rs=new Map;Ng&&Ng.forEach(e=>{Rs.set(e.version,e)});L_&&L_.forEach(e=>{Rs.set(e.version,e)});L_&&L_.forEach(e=>{Rs.set(e.version,e)});function QF(){return[...Rs.keys()].sort(Ts.compareVersions)}o(QF,"getSortedVersions");function Og(e){let t=e[KF],r=e[WF];return Ts.isEmptyOrZeroLength(t)||Ts.isEmptyOrZeroLength(r)?(pg.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),pg.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(Og,"getVersionsForUpgrade");function jF(e){return Og(e).length>0}o(jF,"hasUpgradesRequired");function JF(e){return Ts.isEmptyOrZeroLength(e)?null:Rs.has(e)?Rs.get(e):null}o(JF,"getDirectiveByVersion");Ig.exports={getSortedVersions:QF,getDirectiveByVersion:JF,getVersionsForUpgrade:Og,hasUpgradesRequired:jF}});var y_=f((DQ,Mg)=>{"use strict";var bg=require("util"),Ul=require("chalk"),XF=require("os"),Lg=os(),ZF=Jr(),je=T(),yg=VA(),Hl=mu(),{UpgradeObject:Cg}=$A(),{forceDowngradePrompt:zF}=m_(),e0=Fr(),Pi=p(),on=O(),t0=es(),r0=Dl(),s0=bg.promisify(ZF.searchByValue),Bl=bg.promisify(t0.setSchemaDataToGlobal),n0="info_id",i0="2.9.9",o0="3.0.0";async function a0(e){let t=new yg.HdbInfoInsertObject(1,e,e),r=new Hl.InsertObject(je.OPERATIONS_ENUM.INSERT,je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Bl(),Lg.insert(r)}o(a0,"insertHdbInstallInfo");async function Pl(e){let t,r=await wg(),s=new Map([[0,{}]]);for(let _ of r)s.set(_.info_id,_);let i=Math.max.apply(null,[...s.keys()])+1;t=new yg.HdbInfoInsertObject(i,e,e);let a=new Hl.InsertObject(je.OPERATIONS_ENUM.INSERT,je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Bl(),Lg.insert(a)}o(Pl,"insertHdbUpgradeInfo");async function wg(){let e=new Hl.NoSQLSeachObject(je.SYSTEM_SCHEMA_NAME,je.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,n0,je.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await s0(e))}catch(r){Pi.info(r)}return t}o(wg,"getAllHdbInfoRecords");async function _0(){let e=await wg();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(_0,"getLatestHdbInfoRecord");async function c0(){Pi.info("Checking if HDB software has been updated");try{let e=e0.version(),t=await _0(),r;if(on.isEmpty(t))r=i0;else if(r=t.data_version_num,on.compareVersions(r.toString(),e.toString())>0){if(!on.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(Ul.yellow(`This instance's data was last run on version ${r}`)),console.error(Ul.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${XF.EOL}${je.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");on.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(Ul.yellow(`This instance's data was last run on version ${r}`)),await zF(new Cg(r,e))?await Pl(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Bl(),u0(r),e.toString()===r.toString())return;let s=new Cg(r,e);if(r0.hasUpgradesRequired(s))return s;on.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await Pl(s.upgrade_version),Pi.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw Pi.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Pi.fatal(e),e}}o(c0,"getVersionUpdateInfo");function u0(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${je.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!on.isEmpty(e)&&e<o0)throw console.log(t),new Error(t)}o(u0,"checkIfInstallIsSupported");Mg.exports={insertHdbInstallInfo:a0,insertHdbUpgradeInfo:Pl,getVersionUpdateInfo:c0}});var Bg=f((PQ,Hg)=>{"use strict";var vl=require("joi"),{boolean:l0,string:Dg,number:E0}=vl.types(),Ug=require("fs-extra"),Hi=T(),Pg=require("path"),d0=Ze();Hg.exports=S0;function S0(e){let t=Dg.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=vl.object({[Hi.INSTALL_PROMPTS.ROOTPATH]:vl.custom(f0),[Hi.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:E0.min(0),[Hi.INSTALL_PROMPTS.TC_AGREEMENT]:Dg.valid("yes","YES","Yes"),[Hi.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Hi.INSTALL_PROMPTS.CLUSTERING_ENABLED]:l0});return d0.validateBySchema(e,r)}o(S0,"installValidator");function f0(e,t){if(Ug.existsSync(Pg.join(e,"system/hdb_user/data.mdb"))||Ug.existsSync(Pg.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(f0,"validateRootAvailable")});var Gg=f((BQ,vg)=>{"use strict";var{mkdirpSync:h0}=require("fs-extra"),At=require("path"),Bt=T(),M_=p(),w_=k(),Gl=Kt(),T0=K();vg.exports=R0;async function R0(e){M_.trace("Mounting HarperDB");let t=At.join(e,Bt.SCHEMA_DIR_NAME,Bt.SYSTEM_SCHEMA_NAME);ot(e),ot(At.join(e,"backup")),ot(At.join(e,"trash")),ot(At.join(e,"keys")),ot(At.join(e,"keys",Bt.LICENSE_FILE_NAME)),ot(At.join(e,"log")),ot(At.join(e,"doc")),ot(At.join(e,"schema")),ot(t),ot(At.join(e,Bt.TRANSACTIONS_DIR_NAME)),ot(At.join(e,"clustering","leaf")),ot(At.join(e,"custom_functions")),await m0()}o(R0,"mountHdb");async function m0(){let e,t=pa(),r=Object.keys(Gl);for(let s=0;s<r.length;s++){let n=r[s],i,a=Gl[n].hash_attribute;try{let c=T0.initSystemSchemaPaths(Bt.SYSTEM_SCHEMA_NAME,n);e=e??Eu();let u=new t(Bt.SYSTEM_SCHEMA_NAME,n,a);await e(void 0,u),i=await w_.openEnvironment(c,n)}catch(c){throw M_.error(`issue creating environment for ${Bt.SYSTEM_SCHEMA_NAME}.${n}: ${c}`),c}let _=Gl[n].attributes;for(let c=0;c<_.length;c++){let u=_[c].attribute;try{Bt.TIME_STAMP_NAMES.indexOf(u)>=0?await w_.createDBI(i,u,!0):u===a?await w_.createDBI(i,u,!1,!0):await w_.createDBI(i,u,!0,!1)}catch(l){throw M_.error(`issue creating dbi for ${Bt.SYSTEM_SCHEMA_NAME}.${n}.${u}: ${l}`),l}}}}o(m0,"createLMDBTables");function ot(e){h0(e,{mode:Bt.HDB_FILE_PERMISSIONS}),M_.info(`Directory ${e} created`)}o(ot,"makeDirectory")});var Yg=f((GQ,kg)=>{var Mr=require("validate.js"),Fg=Ze(),an=T(),{handleHDBError:A0,hdb_errors:g0}=X(),{HDB_ERROR_MSGS:te,HTTP_STATUS_CODES:p0}=g0,ql=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),N0={STRUCTURE_USER:"structure_user"},qg=Object.values(an.ROLE_TYPES_ENUM),O0="attribute_permissions",I0="attribute_name",{PERMS_CRUD_ENUM:_n}=an,C0=[O0,...Object.values(_n)],xg=[_n.READ,_n.INSERT,_n.UPDATE],b0=[I0,...xg];function L0(e){let t=ql();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Vg(e,t)}o(L0,"addRoleValidation");function y0(e){let t=ql();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Vg(e,t)}o(y0,"alterRoleValidation");function w0(e){let t=ql();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Fg.validateObject(e,t)}o(w0,"dropRoleValidation");var M0=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Vg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,_=s.length;a<_;a++)M0.includes(s[a])||n.push(s[a]);n.length>0&&ie(te.INVALID_ROLE_JSON_KEYS(n),r);let i=Fg.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ie(a,r)}),e.permission){let a=D0(e);a&&ie(a,r),qg.forEach(_=>{e.permission[_]&&!Mr.isBoolean(e.permission[_])&&ie(te.SU_CU_ROLE_BOOLEAN_ERROR(_),r)})}for(let a in e.permission)if(qg.indexOf(a)<0){if(a===N0.STRUCTURE_USER){let c=e.permission[a];if(typeof c=="boolean")continue;if(Array.isArray(c)){for(let u=0,l=c.length;u<l;u++){let E=c[u];global.hdb_schema[E]||ie(te.SCHEMA_NOT_FOUND(E),r)}continue}ie(te.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let _=e.permission[a];if(!a||!global.hdb_schema[a]){ie(te.SCHEMA_NOT_FOUND(a),r);continue}if(_.tables)for(let c in _.tables){let u=_.tables[c];if(!c||!global.hdb_schema[a][c]){ie(te.TABLE_NOT_FOUND(a,c),r);continue}if(Object.keys(u).forEach(l=>{C0.includes(l)||ie(te.INVALID_PERM_KEY(l),r,a,c)}),Object.values(_n).forEach(l=>{Mr.isDefined(u[l])?Mr.isBoolean(u[l])||ie(te.TABLE_PERM_NOT_BOOLEAN(l),r,a,c):ie(te.TABLE_PERM_MISSING(l),r,a,c)}),Mr.isDefined(u.attribute_permissions)){if(!Mr.isArray(u.attribute_permissions)){ie(te.ATTR_PERMS_NOT_ARRAY,r,a,c);continue}}else{ie(te.ATTR_PERMS_ARRAY_MISSING,r,a,c);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][c].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(m=>{!b0.includes(m)&&m!==_n.DELETE&&ie(te.INVALID_ATTR_PERM_KEY(m),r,a,c)}),!Mr.isDefined(S.attribute_name)){ie(te.ATTR_PERM_MISSING_NAME,r,a,c);continue}let R=S.attribute_name;if(!l.includes(R)){ie(te.INVALID_ATTRIBUTE_IN_PERMS(R),r,a,c);continue}xg.forEach(m=>{Mr.isDefined(S[m])?Mr.isBoolean(S[m])||ie(te.ATTR_PERM_NOT_BOOLEAN(m,R),r,a,c):ie(te.ATTR_PERM_MISSING(m,R),r,a,c)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${a}.${c}`;ie(te.MISMATCHED_TABLE_ATTR_PERMS(d),r,a,c)}}}}return U0(r)}o(Vg,"customValidate");kg.exports={addRoleValidation:L0,alterRoleValidation:y0,dropRoleValidation:w0};function D0(e){let{operation:t,permission:r}=e;if(t===an.OPERATIONS_ENUM.ADD_ROLE||t===an.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return te.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?an.ROLE_TYPES_ENUM.SUPER_USER:an.ROLE_TYPES_ENUM.CLUSTER_USER;return te.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(D0,"validateNoSUPerms");function U0(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:te.ROLE_PERMS_ERROR,...e};return A0(new Error,s,p0.BAD_REQUEST)}else return null}o(U0,"generateRolePermResponse");function ie(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ie,"addPermError")});var Xg=f((FQ,Jg)=>{"use strict";var $g=os(),Kg=Jr(),P0=pu(),Vl=Yg(),kl=Zn(),H0=require("uuid").v4,Yl=require("util"),B0=vs(),rr=T(),Wg=O(),$l=Yl.promisify(Kg.searchByValue),v0=Yl.promisify(Kg.searchByHash),G0=Yl.promisify(P0.delete),q0=ft(),F0=si(),{hdb_errors:x0,handleHDBError:Bi}=X(),{HDB_ERROR_MSGS:Qg,HTTP_STATUS_CODES:Fl}=x0,{UserEventMsg:Kl}=rs();Jg.exports={addRole:V0,alterRole:Y0,dropRole:$0,listRoles:jg};function xl(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(xl,"scrubRoleDetails");async function V0(e){let t=Vl.addRoleValidation(e);if(t)throw t;if(!(await B0.getLicense()).enterprise){let a=await jg();if(k0(e,a))throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${rr.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${rr.BASIC_LICENSE_MAX_NON_CU_ROLES+rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${rr.SUPPORT_HELP_MSG}`)}e=xl(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await $l(s)||[])}catch(a){throw Bi(a)}if(n&&n.length>0)throw Bi(new Error,Qg.ROLE_ALREADY_EXISTS(e.role),Fl.CONFLICT,void 0,void 0,!0);e.id||(e.id=H0());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await $g.insert(i),kl.signalUserChange(new Kl(process.pid)),e=xl(e),e}o(V0,"addRole");function k0(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(!Wg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(k0,"checkClusterUserRole");async function Y0(e){let t=Vl.alterRoleValidation(e);if(t)throw t;e=xl(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await $g.update(r)}catch(s){throw Bi(s)}return kl.signalUserChange(new Kl(process.pid)),e}o(Y0,"alterRole");async function $0(e){let t=Vl.dropRoleValidation(e);if(t)throw Bi(new Error,t,Fl.BAD_REQUEST,void 0,void 0,!0);let r=new F0(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await v0(r));if(s.length===0)throw Bi(new Error,Qg.ROLE_NOT_FOUND,Fl.NOT_FOUND,void 0,void 0,!0);let n=new q0(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await $l(n)),a=!1;if(Wg.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 G0(_),kl.signalUserChange(new Kl(process.pid)),`${s[0].role} successfully deleted`}o($0,"dropRole");async function jg(){return $l({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(jg,"listRoles")});var Ql=f((VQ,ap)=>{"use strict";var vi=require("os"),rp=require("inquirer"),Br=require("fs-extra"),K0=require("properties-reader"),gs=require("chalk"),ms=require("path"),W0=require("human-readable-ids").hri,Q0=require("ora"),oe=p(),Pr=G(),Gi=O(),Wl=qr(),sp=y_(),np=Fr(),C=T(),j0=Bg(),J0=Gg(),ip=Fe(),X0=ss(),Z0=Xg(),z0=ml(),ex=es(),tx=require("util").promisify,rx=tx(ex.setSchemaDataToGlobal),sx=wl(),cn=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Oe=o(e=>gs.magenta.bold(e),"HDB_PROMPT_MSG"),nx="https://harperdb.io/legal/end-user-license-agreement",Hr=vi.EOL,Dr="",ix="yes",Zg="Starting HarperDB install...",zg="HarperDB installation was successful.",ep="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ox="An out of date version of HarperDB is already installed.",tp="It appears HarperDB is already installed. Exiting install...",ax="Aborting install",_x=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])$/),cx=new RegExp(/^[^\s.,*>]+$/),ux=vi.homedir(),lx=ms.join(ux,C.HDB_ROOT_DIR_NAME),Ex=9925,dx="HDB_ADMIN",Sx="CLUSTER_USER",He={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},As;ap.exports=fx;async function fx(){if(console.log(Oe(Hr+Zg+Hr)),oe.notify(Zg),Gi.isEmptyOrZeroLength(vi.userInfo().uid))throw`Installing user: ${vi.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=Tx(),t=j0(e);if(t)throw t.message;await Rx(),await mx(e);let r=await hx(e),s=Q0({prefixText:Oe("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),As=r[C.INSTALL_PROMPTS.ROOTPATH],Gi.isEmpty(As))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Pr.setHdbBasePath(As),await J0(As),await Ax(),await gx(r),oe.initLogSettings(!0),await Nx(r),await Ox(r),await sx.generateKeys(),await Ix(),z0(),s.stop(),console.log(Oe(Hr+zg+Hr)),oe.notify(zg)}o(fx,"install");async function hx(e){oe.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.ROOTPATH],He.DESTINATION),name:C.INSTALL_PROMPTS.ROOTPATH,prefix:Dr,default:lx,validate:async n=>vt(n)?vt(n):await Br.pathExists(ms.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Oe(He.DESTINATION)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],He.HDB_PORT),name:C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Dr,default:Ex,validate:n=>_x.test(n)?!0:"Invalid port.",message:Oe(He.HDB_PORT)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],He.HDB_USERNAME),name:C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Dr,default:dx,validate:n=>vt(n)?vt(n):(t=n,!0),message:Oe(He.HDB_USERNAME)},{type:"password",when:Ur(e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],He.HDB_PASS),name:C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Dr,validate:n=>vt(n)?vt(n):!0,message:Oe(He.HDB_PASS)}];if(Gi.autoCastBoolean(e[C.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_NODENAME],He.NODE_NAME),name:C.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Dr,default:W0.random(),validate:i=>cx.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Oe(He.NODE_NAME)},{type:"input",transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_USER],He.CLUSTER_USERNAME),name:C.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Dr,default:Sx,validate:i=>vt(i)?vt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Oe(He.CLUSTER_USERNAME)},{type:"password",when:Ur(e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD],He.CLUSTER_PASS),name:C.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Dr,validate:i=>vt(i)?vt(i):!0,message:Oe(He.CLUSTER_PASS)}];r.push(...n)}let s=await rp.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(hx,"installPrompts");function Ur(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Oe(t)} ${gs.gray("[hidden]")}`),oe.trace(`${Oe(t)} [hidden]`)):(console.log(`${Oe(t)} ${e}`),oe.trace(`${Oe(t)} ${e}`)),!1):!0}o(Ur,"displayCmdEnvVar");function vt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(vt,"checkForEmptyValue");function Tx(){let e=Object.keys(C.INSTALL_PROMPTS),t=Wl(e),r=Wl(Object.keys(C.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=C.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(Tx,"checkForPromptOverride");async function Rx(){oe.trace("Checking for existing install.");let e=Gi.getPropsFilePath(),t=await Br.pathExists(e),r;if(t){oe.trace(`Install found an existing boot prop file at:${e}`);let s=K0(e),n=ip.getConfigValue(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Br.pathExists(n)}if(r){if(oe.trace(`Install found existing HDB config at:${e}`),await sp.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${np.version()}. Exiting install...`;console.log(Hr+gs.magenta.bold(ox)),console.log(gs.magenta.bold(n)),oe.error(n)}else console.log(Hr+gs.magenta.bold(tp)),oe.error(tp);process.exit(0)}}o(Rx,"checkForExistingInstall");async function mx(e){oe.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${nx}${Hr}and can be viewed by typing or copying and pasting the URL into your web browser.${Hr}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Dr,transformer:cn,when:Ur(e[C.INSTALL_PROMPTS.TC_AGREEMENT],t),name:C.INSTALL_PROMPTS.TC_AGREEMENT,message:Oe(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:gs.yellow("Please enter 'yes' or 'no'")},s=await rp.prompt([r]);s[C.INSTALL_PROMPTS.TC_AGREEMENT]&&s[C.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==ix&&(console.log(gs.yellow(ep)),oe.error(ep),process.exit(0))}o(mx,"termsAgreement");async function Ax(){let e=ms.join(As,C.HDB_CONFIG_FILE),t;try{t=vi.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
81
|
-
install_user = ${t}`,s=Gi.getHomeDir(),n=ms.join(s,C.HDB_HOME_DIR_NAME),i=ms.join(n,C.LICENSE_KEY_DIR_NAME);try{Br.mkdirpSync(n,{mode:C.HDB_FILE_PERMISSIONS}),Br.mkdirpSync(i,{mode:C.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${C.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=ms.join(n,C.BOOT_PROPS_FILE_NAME);try{await Br.writeFile(a,r)}catch(_){throw oe.error(`There was an error creating the boot file at path: ${a}`),_}Pr.setProperty(C.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Pr.setProperty(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Pr.setProperty(Pr.BOOT_PROPS_FILE_PATH,a)}o(Ax,"createBootPropertiesFile");async function gx(e){oe.trace("Creating HarperDB config file");let t=Wl(Object.keys(C.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{ip.createConfigFile(t),Pr.initSync()}catch(r){px(r)}}o(gx,"createConfigFile");function px(e){oe.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(ax);let t=ms.resolve(Pr.get(Pr.BOOT_PROPS_FILE_PATH),"../");t&&Br.removeSync(t),As&&Br.removeSync(As),process.exit(1)}o(px,"rollbackInstall");async function op(e,t){oe.trace("Creating admin user"),await rx();let r;try{r=await Z0.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await X0.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(op,"createAdminUser");async function Nx(e){oe.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await op(t,r),delete e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(Nx,"createSuperUser");async function Ox(e){oe.trace("Creating Cluster user.");let t;e[C.INSTALL_PROMPTS.CLUSTERING_USER]&&e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[C.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await op({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[C.INSTALL_PROMPTS.CLUSTERING_USER],delete e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Ox,"createClusterUser");async function Ix(){let e=np.version();if(e)await sp.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(Ix,"insertHdbVersionInfo")});var jl=f((YQ,cp)=>{var Cx=require("os"),_p=G();cp.exports={checkPermission:bx};function bx(){if(Cx.userInfo().username!==_p.get("install_user"))throw new Error(`Error: Must execute as ${_p.get("install_user")}`)}o(bx,"checkPermission")});var Ep=f((KQ,lp)=>{"use strict";var Jl=O(),Je=p(),up=Dl();lp.exports={processDirectives:Lx};async function Lx(e){console.log("Starting upgrade process...");let t=up.getVersionsForUpgrade(e),r=Mx(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],_=`Running upgrade for version ${a.version}`;Je.notify(_),console.log(_);let c=[],u=[];try{c=yx(a.sync_functions)}catch(l){throw Je.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await wx(a.async_functions)}catch(l){throw Je.error(`Error while running an upgrade script for ${a.version}`),l}s.push(...c,...u)}return s}o(Lx,"processDirectives");function yx(e){if(Jl.isEmptyOrZeroLength(e))return Je.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Je.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Je.info(`Running function ${r.name}`),!(r instanceof Function)){Je.info("Variable being processed is not a function");continue}let s=r();Je.info(s),t.push(s)}return t}o(yx,"runSyncFunctions");async function wx(e){if(Jl.isEmptyOrZeroLength(e))return Je.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Je.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Je.info(`Running function ${n.name}`),!(n instanceof Function)){Je.info("Variable being processed is not a function");continue}let i=await n();Je.info(i),t.push(i)}return t}o(wx,"runAsyncFunctions");function Mx(e){if(Jl.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=up.getDirectiveByVersion(r);s&&t.push(s)}return t}o(Mx,"getUpgradeDirectivesToInstall")});var zl=f((QQ,Rp)=>{"use strict";var D_=G();D_.initSync();var hp=require("chalk"),dp=require("fs-extra"),nr=p(),sr=T(),Sp=Fr(),Dx=Ep(),Xl=O(),Tp=y_(),Ux=m_(),fp=j_(),Px=es(),Hx=require("util").promisify,Bx=Hx(Px.setSchemaDataToGlobal),Zl,{UPGRADE_VERSION:U_}=sr.UPGRADE_JSON_FIELD_NAMES_ENUM;Rp.exports={upgrade:vx};async function vx(e){await Bx(),Zl===void 0&&(Zl=zs()),dp.existsSync(D_.get(D_.BOOT_PROPS_FILE_PATH))||(qi("The hdb_boot_properties file was not found. Please install HDB.",sr.LOG_LEVELS.ERROR),process.exit(1)),dp.existsSync(D_.get(sr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(qi("The hdb settings file was not found. Please make sure HDB is installed.",sr.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Tp.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),qi(`This version of HarperDB is ${Sp.version()}`,sr.LOG_LEVELS.INFO);let r=t[U_]?t[U_]:Sp.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${sr.HDB_SUPPORT_ADDRESS}`),nr.notify("Missing new version field from upgrade info object"),process.exit(1)),await Gx();let s,n=0;try{s=await Ux.forceUpdatePrompt(t)}catch(i){nr.error("There was an error when prompting user about upgrade."),nr.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),nr.info(`Starting upgrade to version ${r}`),await qx(t),qi(`HarperDB was successfully upgraded to version ${t[U_]}`,sr.LOG_LEVELS.INFO)}o(vx,"upgrade");async function Gx(){let e=!1,t=await fp.findPs(sr.HDB_PROC_NAME);if(Xl.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await fp.findPs("hdb_express");Xl.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await Zl.list();Xl.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(hp.red(r)),nr.error(r),process.exit(1)}}o(Gx,"checkIfRunning");async function qx(e){try{await Dx.processDirectives(e)}catch(t){throw qi("There was an error during the data upgrade. Please check the logs.",sr.LOG_LEVELS.ERROR),t}try{await Tp.insertHdbUpgradeInfo(e[U_])}catch(t){nr.error("Error updating the 'hdb_info' system table."),nr.error(t)}}o(qx,"runUpgrade");function qi(e,t=void 0){t||(t=nr.info),nr[t](e),console.log(hp.magenta(e))}o(qi,"printToLogAndConsole")});var Np=f((JQ,pp)=>{"use strict";var{promises:tE,createReadStream:Fx,createWriteStream:xx}=require("fs"),{createGzip:Vx}=require("zlib"),{promisify:kx}=require("util"),{pipeline:Yx}=require("stream"),$x=kx(Yx),Kx=require("path"),Ns=G();Ns.initSync();var ps=p(),{CONFIG_PARAMS:Fi,ITC_EVENT_TYPES:Wx}=T(),{onMessageFromWorkers:Qx}=Wr(),jx=6e4,Jx="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Xx="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",eE,Ap;pp.exports=gp;Qx(e=>{e.type===Wx.RESTART&&(Ns.initSync(!0),clearInterval(Ap),Ns.get(Fi.LOGGING_ROTATION_ENABLED)&&gp())});async function gp(){try{let e=ps.getLogFilePath(),t=Ns.get(Fi.LOGGING_ROTATION_MAXSIZE),r=Ns.get(Fi.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ps.error(Jx);return}let s=Ns.get(Fi.LOGGING_ROTATION_PATH);if(!s){ps.error(Xx);return}let n;if(t){let a=t.slice(-1),_=t.slice(0,-1);a==="G"?n=_*1e9:a==="M"?n=_*1e6:n=_*1e3}let i;if(r){let a=r.slice(-1),_=r.slice(0,-1);a==="D"?i=_*1440:a==="H"?i=_*60:i=_}eE=Date.now()/6e4,ps.trace("Log rotate enabled, maxSize:",t,"interval:",r),Ap=setInterval(async()=>{if(n){let a;a=await tE.stat(e),a.size>=n&&await mp(e,s)}i&&Date.now()/6e4-eE>=i&&(await mp(e,s),eE=Date.now()/6e4)},jx).unref()}catch(e){ps.error(e)}}o(gp,"logRotator");async function mp(e,t){let r=Ns.get(Fi.LOGGING_ROTATION_COMPRESS),s=Kx.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await $x(Fx(e),Vx(),xx(s)),await tE.unlink(e)):await tE.rename(e,s),ps.closeLogFile(),ps.notify(`hdb.log rotated, old log moved to ${s}`)}o(mp,"moveLogFile")});var yp=f((ZQ,Lp)=>{"use strict";var{startWorker:Zx,setMonitorListener:zx}=Wr(),{createServer:eV}=require("net"),tV=G(),rV=T(),Op=p(),sV=Ls(),Os=[];Lp.exports={startHTTPThreads:nV,startSocketServer:iV,updateWorkerIdleness:bp,mostIdleRouting:B_,remoteAffinityRouting:Cp};tV.initSync();function nV(e=2){for(let t=0;t<e;t++)Zx("server/threads/threadHTTPServer.js",{name:rV.THREAD_TYPES.HTTP,onStarted(r){Os.push(r),r.expectedIdle=1,r.lastIdle=0,r.requests=1,r.on("message",n=>{if(n.requestId){let i=H_.get(n.requestId);i&&i(n)}}),r.on("exit",s),r.on("shutdown",s);function s(){let n=Os.indexOf(r);n>-1&&Os.splice(n,1)}o(s,"removeWorker")}});return Os}o(nV,"startHTTPThreads");function iV(e,t=0,r){let s;r?r==="ip"?s=Cp:s=oV(r):s=B_;let n=eV({allowHalfOpen:!0,pauseOnConnect:!s.readsData},i=>{s(i,(a,_)=>{if(!a)return Op.error("No HTTP workers found");a.requests++,i._handle.fd>=0?a.postMessage({type:e,fd:i._handle.fd,data:_}):cV(i,a,e)})}).listen(t);return Op.info(`HarperDB ${sV.version} Server running on port ${t}`),n}o(iV,"startSocketServer");var P_=0;function B_(e,t){let r,s=0;for(let n of Os){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=P_)return P_=i,t(r);s=i}P_=0,t(r)}o(B_,"findMostIdleWorker");var Ip=36e5,un=new Map;function Cp(e,t){let r=e.remoteAddress,s=un.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);B_(e,i=>{un.set(r,{worker:i,lastUsed:n}),t(i)})}o(Cp,"findByRemoteAddressAffinity");function oV(e){let t=new RegExp(`${e}:s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let _=i.toString("latin1").match(t)?.[1],c=un.get(_),u=Date.now();if(c&&c.worker.threadId!==-1)return c.lastUsed=u,n(c.worker);B_(s,l=>{un.set(_,{worker:l,lastUsed:u}),n(l,i)})})}o(r,"findByHeaderAffinity")}o(oV,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of un)r.lastUsed+Ip<e&&un.delete(t)},Ip).unref();var aV=1e3;function bp(){P_=0;for(let e of Os)e.expectedIdle=e.recentELU.idle+aV,e.requests=1;Os.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}o(bp,"updateWorkerIdleness");zx(bp);var H_=new Map,_V=1;function cV(e,t,r){let s=_V++;t.postMessage({type:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({type:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({type:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({type:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({type:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({type:r,requestId:s,event:"end"})}).resume(),H_.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),H_.delete(s)),n.event=="destroy"&&(e.destroy(),H_.delete(s))})}o(cV,"proxySocket")});var v_=f((sj,Gp)=>{"use strict";var Be=G();Be.initSync();var ej=Tl(),J=T(),ce=p(),ln=require("fs-extra"),xi=require("path"),uV=ml(),lV=Ql(),rE=require("chalk"),EV=Ls(),dV=jl(),pt=O(),Up=Fe(),Pp=qr(),SV=Ja(),fV=zl(),hV=Np(),TV=require("minimist"),{PACKAGE_ROOT:RV}=T(),{startHTTPThreads:mV,startSocketServer:wp,mostIdleRouting:tj,remoteAffinityRouting:rj}=yp(),AV=y_(),{isMainThread:gV}=require("worker_threads"),pV=Kt(),NV=jn(),OV=au(),IV=pa(),Mp=T(),gt,CV="Upgrade complete. Starting HarperDB.",bV="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",LV="HarperDB not found, starting install process.",yV="There was an error during install, check install_log.log for more details. Exiting.",wV="HarperDB successfully started.";async function Hp(e=!1,t=!1){if(console.log(rE.magenta("Starting HarperDB...")),await PV()===!1){console.log(LV);try{await lV()}catch(n){console.error(yV),ce.error(n),process.exit(1)}}gt===void 0&&(gt=zs());let r;try{let n=await AV.getVersionUpdateInfo();n!==void 0&&(r=n[J.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await fV.upgrade(n),console.log(CV))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),ce.error(n)):(console.error(bV),ce.error(n)),process.exit(1)}if(!e){let n=Pp(Object.keys(J.CONFIG_PARAM_MAP),!0);!pt.isEmpty(n)&&!pt.isEmptyOrZeroLength(Object.keys(n))&&Up.updateConfigValue(void 0,void 0,n,!0,!0)}uV(),await UV(),DV();try{dV.checkPermission()}catch(n){ce.error(n),console.error(n.message),process.exit(1)}pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&gV&&await SV.generateNatsConfig(t)}o(Hp,"initialize");async function Bp(e=!1){try{let t=TV(process.argv);t.ROOTPATH&&Up.updateConfigObject("settings_path",xi.join(t.ROOTPATH,J.HDB_CONFIG_FILE)),await Hp(e,!0);let r=pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(pt.isEmpty(t.service)){mV(Be.get(Mp.CONFIG_PARAMS.HTTP_THREADS));let a=Be.get(Mp.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);wp(J.SERVICES.HDB_CORE,parseInt(Be.get(J.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),10),a),i&&wp(J.SERVICES.CUSTOM_FUNCTIONS,parseInt(Be.get(J.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),a),n&&(s||await gt.startClusteringProcesses(),await gt.startClusteringThreads())}else{if(typeof t.service!="string"){let _=`Run service argument expected a string but received: ${t.service}`;ce.error(_),console.log(_),process.exit(1)}let a=t.service.split(",");for(let _ of a){let c=_.toLowerCase();if(J.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){ce.error(`Run received unrecognized service command argument: ${c}`);continue}if(c===J.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){ce.error(`${c} is not enabled in settings`);continue}if(c.includes("clustering")&&!r){ce.error(`${c} is not enabled in settings`);continue}c==="clustering"?await gt.startClusteringProcesses():await gt.startService(J.PROCESS_DESCRIPTORS_VALIDATE[c]);let u=`${J.PROCESS_DESCRIPTORS_VALIDATE[c]} successfully started.`;ce.notify(u),console.log(u)}}Be.get(J.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await hV(),s||vp()}catch(t){console.error(t),ce.error(t),process.exit(1)}}o(Bp,"main");function vp(){ce.suppressLogging(()=>{console.log(rE.magenta(""+ln.readFileSync(xi.join(RV,"utility/install/ascii_logo.txt")))),console.log(rE.magenta(`|------------- HarperDB ${EV.version} successfully started ------------|`))}),ce.notify(wV)}o(vp,"started");async function MV(){if(HV())return Bp();try{gt===void 0&&(gt=zs()),gt.enterPM2Mode(),await Hp(),pt.autoCastBoolean(Be.get(J.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await gt.startClusteringProcesses(),await gt.startService(J.PROCESS_DESCRIPTORS.HDB),vp(),process.exit(0)}catch(e){console.error(e),ce.error(e),process.exit(1)}}o(MV,"launch");function DV(){let e=xi.join(Be.getHdbBasePath(),J.LICENSE_KEY_DIR_NAME,J.LICENSE_FILE_NAME),t=xi.join(e,J.LICENSE_FILE_NAME),r=xi.join(e,J.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Pp(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(pt.isEmpty(s)||pt.isEmpty(n))return;ln.mkdirpSync(e),ln.writeFileSync(r,s),ln.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),ce.error(n)}}o(DV,"writeLicenseFromVars");async function UV(){if(Be.getHdbBasePath()!==void 0){ce.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(pV))await Dp(J.SYSTEM_SCHEMA_NAME,t);let e=await NV.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Dp(t,r);ce.info("Finished checking Transaction Audit Environments exist")}}o(UV,"checkAuditLogEnvironmentsExist");async function Dp(e,t){try{let r=new IV(e,t);await OV(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),ce.error(s)}}o(Dp,"openCreateAuditEnvironment");Gp.exports={launch:MV,main:Bp};async function PV(){try{await ln.stat(pt.getPropsFilePath()),await ln.stat(Be.get(J.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw ce.error(`Error checking for HDB install - ${e}`),e}return!0}o(PV,"isHdbInstalled");function HV(){return pt.autoCastBoolean(Be.get(J.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(HV,"getRunInForeground")});var Fp=f((ij,qp)=>{var BV=Ql(),vV=p();qp.exports=GV;async function GV(){try{await BV()}catch(e){console.error("There was an error during the install."),console.error(e),vV.error(e),process.exit(1)}}o(GV,"install")});var Kp=f((aj,$p)=>{var q_=vs(),xp=require("chalk"),Gt=p(),Vp=jl(),kp=require("prompt"),{promisify:qV}=require("util"),G_=T(),FV=require("fs-extra"),xV=require("path"),VV=O(),kV=Fr(),Yp=G();Yp.initSync();var YV=require("moment"),$V=qV(kp.get),KV=xV.join(Yp.getHdbBasePath(),G_.LICENSE_KEY_DIR_NAME,G_.LICENSE_FILE_NAME,G_.LICENSE_FILE_NAME);$p.exports={getFingerprint:QV,setLicense:WV,parseLicense:sE,register:jV,getRegistrationInfo:XV};async function WV(e){if(e&&e.key&&e.company){try{Gt.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await sE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Gt.error(r),Gt.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(WV,"setLicense");async function QV(){try{Vp.checkPermission()}catch(t){throw Gt.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await q_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Gt.error(r),Gt.error(t),new Error(r)}return e}o(QV,"getFingerprint");async function sE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=q_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Gt.info("writing license to disk"),await FV.writeFile(KV,JSON.stringify({license_key:e,company:t}))}catch(s){throw Gt.error("Failed to write License"),s}return"Registration successful."}o(sE,"parseLicense");async function jV(){let e=await JV();return sE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(jV,"register");async function JV(){try{Vp.checkPermission()}catch(s){return console.error(s.message)}let e=await q_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:xp.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:xp.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{kp.start()}catch(s){Gt.error(s)}let r;try{r=await $V(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(JV,"promptForRegistration");async function XV(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await q_.getLicense()}catch(r){throw Gt.error(`There was an error when searching licenses due to: ${r.message}`),r}if(VV.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=kV.version(),e.storage_type=G_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=YV.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(XV,"getRegistrationInfo")});var jp=f((cj,Qp)=>{"use strict";var ZV=Kp(),zV=p(),Wp="Registration failed.";async function ek(){let e;try{e=await ZV.register()}catch(t){return zV.error(`Registration error ${t}`),Wp}return e||Wp}o(ek,"register");Qp.exports={register:ek}});var zp=f((lj,Zp)=>{"use strict";var tk=p(),rk=T(),sk=require("util"),nk=require("child_process"),Jp=sk.promisify(nk.exec),ik=Ni(),Vi=zs(),Xp="Stopping HarperDB.";Zp.exports=ok;async function ok(){console.log(Xp),tk.notify(Xp),await Vi.isServiceRegistered(rk.HDB_PROC_DESCRIPTOR)&&Vi.enterPM2Mode();let e=await Vi.getUniqueServicesList();for(let r in e)await Vi.stop(r);await Vi.kill();let t=await ik.getHDBProcessInfo();t.clustering.forEach(r=>{Jp(`kill ${r.pid}`)}),t.core.forEach(r=>{Jp(`kill ${r.pid}`)})}o(ok,"stop")});var vr=p(),ak=Fr(),F_=T(),eN=require("fs"),tN=require("path"),_k=require("os"),{PACKAGE_ROOT:rN}=T(),ck=vE(),{SERVICE_ACTIONS_ENUM:ir}=F_;lk();function uk(){let e=tN.join(rN,"bin",`harperdb.${F_.CODE_EXTENSION}`),t;try{t=eN.statSync(e)}catch{vr.info("Couldn't find the harperdb executable process.");return}let r=_k.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw vr.error(s),console.log(s),new Error(s)}}o(uk,"checkCallingUserSync");function lk(){let e=ck();if(e)if(e.error){console.error(e.error),vr.error(e.error);return}else e.warn&&(console.warn(e.warn),vr.warn(e.warn));let t;eN.readdir(tN.join(rN,"bin"),r=>{if(r)return vr.error(r);if(process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase()),t!==F_.SERVICE_ACTIONS_ENUM.INSTALL)try{uk()}catch(n){throw console.log(n.message),n}let s;switch(t){case ir.RUN:console.warn('The "run" command is deprecated, please use "start" instead');case ir.START:s=v_().launch();break;case ir.INSTALL:Fp()().then(()=>v_().main(!0)).catch(l=>{console.error(l)});break;case ir.REGISTER:jp().register().then(l=>{console.log(l)}).catch(l=>{console.error(l)});break;case ir.STOP:zp()().then(()=>{process.exit(0)}).catch(l=>{console.error(l)});break;case ir.RESTART:Tl().restart({}).then().catch(l=>{vr.error(l),console.error(`There was an error restarting harperdb. ${l}`),process.exit(1)});break;case ir.VERSION:ak.printVersion();break;case ir.UPGRADE:vr.setLogLevel(F_.LOG_LEVELS.INFO),zl().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(l=>{vr.error(`Got an error during upgrade ${l}`)});break;case void 0:v_().main();break;default:console.warn(`The "${t}" command is not understood.`);case ir.HELP:console.log(`
|
|
79
|
+
Reindexing upgrade started for transaction logs`),sr.notify("Reindexing upgrade started for transaction logs"),await bg(Gl,!0,e)),sr.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Hi?", but errors occurred":"")}o(QF,"reindexUpgrade");async function bg(e,t,r){let s=await Bt.readdir(e),n=s.length;for(let i=0;i<n;i++){let a=s[i],c=nr.join(e,a.toString());if(a===".DS_Store")continue;let _=await Bt.readdir(c),u=_.length;for(let l=0;l<u;l++){let E=_[l];if(E!==".DS_Store"&&Bt.statSync(nr.join(c,E)).isDirectory())try{await jF(a,E,t),Ne.info(`Reindexing started for ${a}.${E}`),sr.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${E}`),await XF(a,E,c,t,r),Ne.info(`Reindexing completed for ${a}.${E}`),sr.notify(`Reindexing completed for ${a}.${E}`)}catch(d){Hi=!0,d.schema_path=c,d.table_name=E,sr.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),sr.error(d),Ne.error(d),console.error(d)}}}if(!Hi)try{await Bt.rm(wc,{recursive:!0})}catch{}}o(bg,"processTables");async function jF(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=nr.join(wc,n);await Bt.ensureDir(wc),await Bt.writeFile(i,""),Ne=KF({level:"debug",formatters:{bindings(){}}},i)}o(jF,"initPinoLogger");var JF=20;async function XF(e,t,r,s,n){let i;try{i=await Xe.openEnvironment(r,t,s)}catch(A){if(A.message==="MDB_INVALID: File is not an LMDB file"){sr.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Ne.error(A);return}throw A}let a=e0(i.dbis),c=Xe.openDBI(i,a),_=Object.keys(i.dbis),u=Xe.statDBI(i,a);Ne.info(`Old environment stats: ${JSON.stringify(u)}`);let l=new $F.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(u.entryCount,0,{});let E=await Xe.createEnvironment(r,t,!1);Xe.createDBI(E,a,!1,!0);let d=[];try{for(let A of c.getRange({start:!1}))A.value=Object.assign({},A.value),d.push(A),s||e==="system"&&(t==="hdb_schema"&&(A.key=A.key.toString(),A.value.name=A.value.name.toString()),t==="hdb_table"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.name=A.value.name.toString()),t==="hdb_attribute"&&(A.key=A.key.toString(),A.value.schema=A.value.schema.toString(),A.value.table=A.value.table.toString(),A.value.attribute=A.value.attribute.toString())),d.length>JF&&await S();await S()}catch(A){throw Hi=!0,Ne.error(A),A}async function S(){let A,B=d.map(({value:ce})=>ce);s?A=await Promise.all(B.map(ce=>ZF(E,ce))):A=await xF(E,a,_.filter(ce=>ce!=="__blob__"),B,!1);for(let ce=0,cr=d.length;ce<cr;ce++){let{key:Rn,value:ji}=d[ce];Ne.info(`Record hash value: ${Rn} hash: ${a}`);let Vr;s?Vr=A[ce]:Vr=A.written_hashes.indexOf(Rn)>-1,Pi(Vr,!0),zF(E,a,ji[a],s),Ne.info(`Insert success, written hashes: ${A.written_hashes}`),l.increment()}d=[],l.value/l.total*100%10===0&&sr.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Ne.info(`${l.value}/${l.total} records inserted`)}o(S,"finishOutstanding"),l.stop();let R=Xe.statDBI(i,a),m=Xe.statDBI(E,a);if(Ne.info(`Old stats entry count: ${R.entryCount}. New stats entry count: ${m.entryCount}`),Pi.deepStrictEqual(R.entryCount,m.entryCount),await Xe.closeEnvironment(i),await Xe.closeEnvironment(E),delete global.lmdb_map[`${e}.${t}`],n){let A=nr.join(r,t),B=nr.join(A,"data.mdb"),Ee=nr.join(A,"lock.mdb");await Bt.unlink(B),await Bt.unlink(Ee),await Bt.rmdir(A),Ne.info(`Deleted old environment files from schema folder: ${B}, ${Ee}`)}let b=await Xe.openEnvironment(r,t),$=Xe.statDBI(b,a);Ne.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify($)}`),Pi.deepStrictEqual($.entryCount,m.entryCount),await Xe.closeEnvironment(b),delete global.lmdb_map[`${e}.${t}`]}o(XF,"processTable");async function ZF(e,t){Xe.initializeDBIs(e,Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ur.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),YF.isEmpty(t.user_name)||e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Ur.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}o(ZF,"insertTransaction");function zF(e,t,r,s){let i=e.dbis[t].get(r);Pi.deepStrictEqual(typeof i,"object");let a;if(s){let c={[Ur.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ur.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,_]of a)if(c!==t&&e.dbis[c]!==void 0&&!kF.isEmptyOrZeroLength(_))if(s&&c==="hash_value")for(let u=0,l=_.length;u<l;u++){let E=_[u];Lg(e,c,E,r)}else Lg(e,c,_,r)}o(zF,"validateIndices");function Lg(e,t,r,s){try{let n=!1,i=VF.getIndexedValues(r);if(!i)return;for(let a of i)n=e.dbis[t].doesExist(a,s),n||Ne.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${s}`),Pi.deepStrictEqual(n,!0)}catch(n){Hi=!0,Ne.error(n),console.error(n)}}o(Lg,"validateIndex");function e0(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(e0,"getHashDBI")});var Vl=f((Nj,Dg)=>{"use strict";var t0=require("mkcert"),Mc=require("path"),ql=require("fs-extra"),Fl=p(),r0=H(),xl=T(),ln=a_(),s0=kr(),n0=Ve();Dg.exports={generateKeys:i0,updateConfigCert:Mg};async function i0(){let e=r0.getHdbBasePath(),t=Mc.join(e,xl.LICENSE_KEY_DIR_NAME),r=await t0.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:ln.CERTIFICATE_VALUES.key,caCert:ln.CERTIFICATE_VALUES.cert}),s=Mc.join(t,ln.CERTIFICATE_PEM_NAME),n=Mc.join(t,ln.PRIVATEKEY_PEM_NAME),i=Mc.join(t,ln.CA_PEM_NAME);try{await ql.writeFile(s,r.cert)}catch(a){throw Fl.error(a),console.error("There was a problem creating the certificate file. Please check the install log for details."),a}try{await ql.writeFile(n,r.key)}catch(a){throw Fl.error(a),console.error("There was a problem creating the private key file. Please check the install log for details."),a}try{await ql.writeFile(i,ln.CERTIFICATE_VALUES.cert)}catch(a){throw Fl.error(a),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),a}Mg(s,n,i)}o(i0,"generateKeys");function Mg(e,t,r){let s=s0(Object.keys(xl.CONFIG_PARAM_MAP),!0),n=xl.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};n0.updateConfigValue(void 0,void 0,i,!1,!0)}o(Mg,"updateConfigCert")});var vg=f((Ij,Bg)=>{"use strict";var Dc=require("path"),Pr=require("fs-extra"),o0=Pl(),ms=p(),Ug=Ve(),kl=H(),At=T(),Uc=O(),a0=require("properties-reader"),c0=ht(),_0=zu(),u0=es(),l0=require("util"),E0=l0.promisify(u0.searchByValue),d0=_s(),S0=Ig(),f0=ke(),h0=wg(),Pg=Vl(),T0=Ic(),Gi=new o0("4.0.0"),Hg=[],Bi,vi;async function R0(){try{if(await T0.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Bi){let t=Uc.changeExtension(Bi,".bak");await Pr.move(Bi,t)}if(vi){let t=Uc.changeExtension(vi,".bak");await Pr.move(vi,t)}await Pg.generateKeys()}else console.log("Using existing certificates."),Pg.updateConfigCert(Bi,vi,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(R0,"generateNewKeys");async function m0(){console.log("Updating HarperDB nodes."),ms.info("Updating HarperDB nodes.");let e=[];try{let t=new c0(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await E0(t)),s=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!f0.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let _={host:c.host,port:c.port};e.push(_);let u=[];for(let l=0,E=c.subscriptions.length;l<E;l++){let d=c.subscriptions[l],S=d.channel.split(":");u.push({schema:S[0],table:S[1],publish:d.publish,subscribe:d.subscribe})}s.push({name:c.name,subscriptions:u,system_info:{hdb_version:At.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Uc.isEmptyOrZeroLength(s))return;let n=new _0(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await d0.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{S0.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(m0,"updateNodes");async function A0(){let e=kl.get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(Dc.join("config","settings.js"))){ms.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ms.info(t);let r=Dc.dirname(e),s=kl.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=Dc.join(s,"backup","4_0_0_upgrade_settings.bak"),i=Dc.join(s,At.HDB_CONFIG_FILE);try{ms.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Pr.copySync(e,n)}catch(E){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),E}try{ms.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ms.info("Updating env variables with new settings values");let E=Ug.initOldConfig(e);Bi=E[At.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],vi=E[At.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],Ug.createConfigFile(E)}catch(E){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),E}let a=Uc.getPropsFilePath();Pr.accessSync(a,Pr.constants.F_OK|Pr.constants.R_OK);let _=a0(a).get(At.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
|
|
80
|
+
install_user = ${_}`;try{Pr.writeFileSync(a,u)}catch(E){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),E}try{kl.initSync(!0)}catch(E){throw console.error("Unable to initialize new properties. Please check the log for details."),E}let l="New settings file for 4.0.0 upgrade successfully created.";try{Pr.removeSync(r),console.log(l),ms.info(l)}catch(E){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),E}}o(A0,"updateSettingsFile_4_0_0");Gi.async_functions.push(A0);Gi.async_functions.push(R0);Gi.async_functions.push(h0);Gi.async_functions.push(m0);Hg.push(Gi);Bg.exports=Hg});var Yl=f((bj,xg)=>{"use strict";var As=O(),g0=T(),Gg=p(),{DATA_VERSION:p0,UPGRADE_VERSION:N0}=g0.UPGRADE_JSON_FIELD_NAMES_ENUM,qg=hg(),Pc=vg(),gs=new Map;qg&&qg.forEach(e=>{gs.set(e.version,e)});Pc&&Pc.forEach(e=>{gs.set(e.version,e)});Pc&&Pc.forEach(e=>{gs.set(e.version,e)});function O0(){return[...gs.keys()].sort(As.compareVersions)}o(O0,"getSortedVersions");function Fg(e){let t=e[p0],r=e[N0];return As.isEmptyOrZeroLength(t)||As.isEmptyOrZeroLength(r)?(Gg.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),Gg.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...gs.keys()].sort(As.compareVersions).filter(function(s){return As.compareVersions(s,t)>0&&As.compareVersions(s,r)<=0})}o(Fg,"getVersionsForUpgrade");function I0(e){return Fg(e).length>0}o(I0,"hasUpgradesRequired");function C0(e){return As.isEmptyOrZeroLength(e)?null:gs.has(e)?gs.get(e):null}o(C0,"getDirectiveByVersion");xg.exports={getSortedVersions:O0,getDirectiveByVersion:C0,getVersionsForUpgrade:Fg,hasUpgradesRequired:I0}});var Hc=f((yj,Wg)=>{"use strict";var kg=require("util"),$l=require("chalk"),b0=require("os"),Yg=_s(),L0=es(),Ze=T(),$g=ng(),Wl=yu(),{UpgradeObject:Vg}=ag(),{forceDowngradePrompt:y0}=Ic(),w0=Yr(),qi=p(),En=O(),M0=ns(),D0=Yl(),U0=kg.promisify(L0.searchByValue),Ql=kg.promisify(M0.setSchemaDataToGlobal),P0="info_id",H0="2.9.9",B0="3.0.0";async function v0(e){let t=new $g.HdbInfoInsertObject(1,e,e),r=new Wl.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Ql(),Yg.insert(r)}o(v0,"insertHdbInstallInfo");async function Kl(e){let t,r=await Kg(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new $g.HdbInfoInsertObject(i,e,e);let a=new Wl.InsertObject(Ze.OPERATIONS_ENUM.INSERT,Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Ql(),Yg.insert(a)}o(Kl,"insertHdbUpgradeInfo");async function Kg(){let e=new Wl.NoSQLSeachObject(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,P0,Ze.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await U0(e))}catch(r){qi.info(r)}return t}o(Kg,"getAllHdbInfoRecords");async function G0(){let e=await Kg();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}o(G0,"getLatestHdbInfoRecord");async function q0(){qi.info("Checking if HDB software has been updated");try{let e=w0.version(),t=await G0(),r;if(En.isEmpty(t))r=H0;else if(r=t.data_version_num,En.compareVersions(r.toString(),e.toString())>0){if(!En.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log($l.yellow(`This instance's data was last run on version ${r}`)),console.error($l.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${b0.EOL}${Ze.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");En.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log($l.yellow(`This instance's data was last run on version ${r}`)),await y0(new Vg(r,e))?await Kl(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(await Ql(),F0(r),e.toString()===r.toString())return;let s=new Vg(r,e);if(D0.hasUpgradesRequired(s))return s;En.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await Kl(s.upgrade_version),qi.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw qi.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),qi.fatal(e),e}}o(q0,"getVersionUpdateInfo");function F0(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Ze.HDB_SUPPORT_ADDRESS}`;if(!global.hdb_schema.system.hasOwnProperty("hdb_info"))throw console.log(t),new Error(t);if(!En.isEmpty(e)&&e<B0)throw console.log(t),new Error(t)}o(F0,"checkIfInstallIsSupported");Wg.exports={insertHdbInstallInfo:v0,insertHdbUpgradeInfo:Kl,getVersionUpdateInfo:q0}});var Zg=f((Mj,Xg)=>{"use strict";var jl=require("joi"),{boolean:x0,string:Qg,number:V0}=jl.types(),jg=require("fs-extra"),Fi=T(),Jg=require("path"),k0=Fe();Xg.exports=Y0;function Y0(e){let t=Qg.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=jl.object({[Fi.INSTALL_PROMPTS.ROOTPATH]:jl.custom($0),[Fi.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:V0.min(0),[Fi.INSTALL_PROMPTS.TC_AGREEMENT]:Qg.valid("yes","YES","Yes"),[Fi.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Fi.INSTALL_PROMPTS.CLUSTERING_ENABLED]:x0});return k0.validateBySchema(e,r)}o(Y0,"installValidator");function $0(e,t){if(jg.existsSync(Jg.join(e,"system/hdb_user/data.mdb"))||jg.existsSync(Jg.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o($0,"validateRootAvailable")});var ep=f((Uj,zg)=>{"use strict";var{mkdirpSync:K0}=require("fs-extra"),gt=require("path"),vt=T(),vc=p(),Bc=k(),Jl=jt(),W0=K();zg.exports=Q0;async function Q0(e){vc.trace("Mounting HarperDB");let t=gt.join(e,vt.SCHEMA_DIR_NAME,vt.SYSTEM_SCHEMA_NAME);ct(e),ct(gt.join(e,"backup")),ct(gt.join(e,"trash")),ct(gt.join(e,"keys")),ct(gt.join(e,"keys",vt.LICENSE_FILE_NAME)),ct(gt.join(e,"log")),ct(gt.join(e,"doc")),ct(gt.join(e,"schema")),ct(t),ct(gt.join(e,vt.TRANSACTIONS_DIR_NAME)),ct(gt.join(e,"clustering","leaf")),ct(gt.join(e,"custom_functions")),await j0()}o(Q0,"mountHdb");async function j0(){let e,t=La(),r=Object.keys(Jl);for(let s=0;s<r.length;s++){let n=r[s],i,a=Jl[n].hash_attribute;try{let _=W0.initSystemSchemaPaths(vt.SYSTEM_SCHEMA_NAME,n);e=e??pu();let u=new t(vt.SYSTEM_SCHEMA_NAME,n,a);await e(void 0,u),i=await Bc.openEnvironment(_,n)}catch(_){throw vc.error(`issue creating environment for ${vt.SYSTEM_SCHEMA_NAME}.${n}: ${_}`),_}let c=Jl[n].attributes;for(let _=0;_<c.length;_++){let u=c[_].attribute;try{vt.TIME_STAMP_NAMES.indexOf(u)>=0?await Bc.createDBI(i,u,!0):u===a?await Bc.createDBI(i,u,!1,!0):await Bc.createDBI(i,u,!0,!1)}catch(l){throw vc.error(`issue creating dbi for ${vt.SYSTEM_SCHEMA_NAME}.${n}.${u}: ${l}`),l}}}}o(j0,"createLMDBTables");function ct(e){K0(e,{mode:vt.HDB_FILE_PERMISSIONS}),vc.info(`Directory ${e} created`)}o(ct,"makeDirectory")});var op=f((Hj,ip)=>{var Hr=require("validate.js"),rp=Fe(),dn=T(),{handleHDBError:J0,hdb_errors:X0}=J(),{HDB_ERROR_MSGS:te,HTTP_STATUS_CODES:Z0}=X0,Xl=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),z0={STRUCTURE_USER:"structure_user"},tp=Object.values(dn.ROLE_TYPES_ENUM),ex="attribute_permissions",tx="attribute_name",{PERMS_CRUD_ENUM:Sn}=dn,rx=[ex,...Object.values(Sn)],sp=[Sn.READ,Sn.INSERT,Sn.UPDATE],sx=[tx,...sp];function nx(e){let t=Xl();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,np(e,t)}o(nx,"addRoleValidation");function ix(e){let t=Xl();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,np(e,t)}o(ix,"alterRoleValidation");function ox(e){let t=Xl();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,rp.validateObject(e,t)}o(ox,"dropRoleValidation");var ax=["operation","role","id","permission","hdb_user","hdb_auth_header"];function np(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,c=s.length;a<c;a++)ax.includes(s[a])||n.push(s[a]);n.length>0&&ie(te.INVALID_ROLE_JSON_KEYS(n),r);let i=rp.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{ie(a,r)}),e.permission){let a=cx(e);a&&ie(a,r),tp.forEach(c=>{e.permission[c]&&!Hr.isBoolean(e.permission[c])&&ie(te.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(tp.indexOf(a)<0){if(a===z0.STRUCTURE_USER){let _=e.permission[a];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||ie(te.SCHEMA_NOT_FOUND(E),r)}continue}ie(te.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){ie(te.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[a][_]){ie(te.TABLE_NOT_FOUND(a,_),r);continue}if(Object.keys(u).forEach(l=>{rx.includes(l)||ie(te.INVALID_PERM_KEY(l),r,a,_)}),Object.values(Sn).forEach(l=>{Hr.isDefined(u[l])?Hr.isBoolean(u[l])||ie(te.TABLE_PERM_NOT_BOOLEAN(l),r,a,_):ie(te.TABLE_PERM_MISSING(l),r,a,_)}),Hr.isDefined(u.attribute_permissions)){if(!Hr.isArray(u.attribute_permissions)){ie(te.ATTR_PERMS_NOT_ARRAY,r,a,_);continue}}else{ie(te.ATTR_PERMS_ARRAY_MISSING,r,a,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[a][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(m=>{!sx.includes(m)&&m!==Sn.DELETE&&ie(te.INVALID_ATTR_PERM_KEY(m),r,a,_)}),!Hr.isDefined(S.attribute_name)){ie(te.ATTR_PERM_MISSING_NAME,r,a,_);continue}let R=S.attribute_name;if(!l.includes(R)){ie(te.INVALID_ATTRIBUTE_IN_PERMS(R),r,a,_);continue}sp.forEach(m=>{Hr.isDefined(S[m])?Hr.isBoolean(S[m])||ie(te.ATTR_PERM_NOT_BOOLEAN(m,R),r,a,_):ie(te.ATTR_PERM_MISSING(m,R),r,a,_)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${a}.${_}`;ie(te.MISMATCHED_TABLE_ATTR_PERMS(d),r,a,_)}}}}return _x(r)}o(np,"customValidate");ip.exports={addRoleValidation:nx,alterRoleValidation:ix,dropRoleValidation:ox};function cx(e){let{operation:t,permission:r}=e;if(t===dn.OPERATIONS_ENUM.ADD_ROLE||t===dn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return te.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?dn.ROLE_TYPES_ENUM.SUPER_USER:dn.ROLE_TYPES_ENUM.CLUSTER_USER;return te.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(cx,"validateNoSUPerms");function _x(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:te.ROLE_PERMS_ERROR,...e};return J0(new Error,s,Z0.BAD_REQUEST)}else return null}o(_x,"generateRolePermResponse");function ie(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(ie,"addPermError")});var dp=f((vj,Ep)=>{"use strict";var ap=_s(),cp=es(),ux=Du(),eE=op(),tE=ni(),lx=require("uuid").v4,rE=require("util"),Ex=Vs(),ir=T(),_p=O(),sE=rE.promisify(cp.searchByValue),dx=rE.promisify(cp.searchByHash),Sx=rE.promisify(ux.delete),fx=ht(),hx=_i(),{hdb_errors:Tx,handleHDBError:xi}=J(),{HDB_ERROR_MSGS:up,HTTP_STATUS_CODES:Zl}=Tx,{UserEventMsg:nE}=os();Ep.exports={addRole:Rx,alterRole:Ax,dropRole:gx,listRoles:lp};function zl(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(zl,"scrubRoleDetails");async function Rx(e){let t=eE.addRoleValidation(e);if(t)throw t;if(!(await Ex.getLicense()).enterprise){let a=await lp();if(mx(e,a))throw new Error(`Your current license only supports ${ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${ir.SUPPORT_HELP_MSG}`);if(a.length>=2)throw new Error(`Your current license only supports ${ir.BASIC_LICENSE_MAX_NON_CU_ROLES+ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${ir.SUPPORT_HELP_MSG}`)}e=zl(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await sE(s)||[])}catch(a){throw xi(a)}if(n&&n.length>0)throw xi(new Error,up.ROLE_ALREADY_EXISTS(e.role),Zl.CONFLICT,void 0,void 0,!0);e.id||(e.id=lx());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ap.insert(i),tE.signalUserChange(new nE(process.pid)),e=zl(e),e}o(Rx,"addRole");function mx(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!_p.isEmpty(i)&&i.cluster_user===!0)return!0}return r}o(mx,"checkClusterUserRole");async function Ax(e){let t=eE.alterRoleValidation(e);if(t)throw t;e=zl(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ap.update(r)}catch(s){throw xi(s)}return tE.signalUserChange(new nE(process.pid)),e}o(Ax,"alterRole");async function gx(e){let t=eE.dropRoleValidation(e);if(t)throw xi(new Error,t,Zl.BAD_REQUEST,void 0,void 0,!0);let r=new hx(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await dx(r));if(s.length===0)throw xi(new Error,up.ROLE_NOT_FOUND,Zl.NOT_FOUND,void 0,void 0,!0);let n=new fx(ir.SYSTEM_SCHEMA_NAME,ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await sE(n)),a=!1;if(_p.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){a=!0;break}}if(a===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Sx(c),tE.signalUserChange(new nE(process.pid)),`${s[0].role} successfully deleted`}o(gx,"dropRole");async function lp(){return sE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(lp,"listRoles")});var oE=f((qj,Np)=>{"use strict";var Vi=require("os"),Rp=require("inquirer"),Fr=require("fs-extra"),px=require("properties-reader"),Os=require("chalk"),ps=require("path"),Nx=require("human-readable-ids").hri,Ox=require("ora"),oe=p(),Gr=H(),ki=O(),iE=kr(),mp=Hc(),Ap=Yr(),C=T(),Ix=Zg(),Cx=ep(),gp=Ve(),bx=Nr(),Lx=dp(),yx=Ml(),wx=ns(),Mx=require("util").promisify,Dx=Mx(wx.setSchemaDataToGlobal),Ux=Vl(),fn=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Oe=o(e=>Os.magenta.bold(e),"HDB_PROMPT_MSG"),Px="https://harperdb.io/legal/end-user-license-agreement",qr=Vi.EOL,Br="",Hx="yes",Sp="Starting HarperDB install...",fp="HarperDB installation was successful.",hp="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Bx="An out of date version of HarperDB is already installed.",Tp="It appears HarperDB is already installed. Exiting install...",vx="Aborting install",Gx=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),qx=new RegExp(/^[^\s.,*>]+$/),Fx=Vi.homedir(),xx=ps.join(Fx,C.HDB_ROOT_DIR_NAME),Vx=9925,kx="HDB_ADMIN",Yx="CLUSTER_USER",Be={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Ns;Np.exports=$x;async function $x(){if(console.log(Oe(qr+Sp+qr)),oe.notify(Sp),ki.isEmptyOrZeroLength(Vi.userInfo().uid))throw`Installing user: ${Vi.userInfo().username} has no pid. Please install with a properly created user. Cancelling install.`;let e=Wx(),t=Ix(e);if(t)throw t.message;await Qx(),await jx(e);let r=await Kx(e),s=Ox({prefixText:Oe("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Ns=r[C.INSTALL_PROMPTS.ROOTPATH],ki.isEmpty(Ns))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Gr.setHdbBasePath(Ns),await Cx(Ns),await Jx(),await Xx(r),oe.initLogSettings(!0),await zx(r),await eV(r),await Ux.generateKeys(),await tV(),yx(),s.stop(),console.log(Oe(qr+fp+qr)),oe.notify(fp)}o($x,"install");async function Kx(e){oe.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.ROOTPATH],Be.DESTINATION),name:C.INSTALL_PROMPTS.ROOTPATH,prefix:Br,default:xx,validate:async n=>Gt(n)?Gt(n):await Fr.pathExists(ps.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Oe(Be.DESTINATION)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Be.HDB_PORT),name:C.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Br,default:Vx,validate:n=>Gx.test(n)?!0:"Invalid port.",message:Oe(Be.HDB_PORT)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Be.HDB_USERNAME),name:C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Br,default:kx,validate:n=>Gt(n)?Gt(n):(t=n,!0),message:Oe(Be.HDB_USERNAME)},{type:"password",when:vr(e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Be.HDB_PASS),name:C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Br,validate:n=>Gt(n)?Gt(n):!0,message:Oe(Be.HDB_PASS)}];if(ki.autoCastBoolean(e[C.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_NODENAME],Be.NODE_NAME),name:C.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Br,default:Nx.random(),validate:i=>qx.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Oe(Be.NODE_NAME)},{type:"input",transformer:fn,when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_USER],Be.CLUSTER_USERNAME),name:C.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Br,default:Yx,validate:i=>Gt(i)?Gt(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Oe(Be.CLUSTER_USERNAME)},{type:"password",when:vr(e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Be.CLUSTER_PASS),name:C.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Br,validate:i=>Gt(i)?Gt(i):!0,message:Oe(Be.CLUSTER_PASS)}];r.push(...n)}let s=await Rp.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}o(Kx,"installPrompts");function vr(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Oe(t)} ${Os.gray("[hidden]")}`),oe.trace(`${Oe(t)} [hidden]`)):(console.log(`${Oe(t)} ${e}`),oe.trace(`${Oe(t)} ${e}`)),!1):!0}o(vr,"displayCmdEnvVar");function Gt(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gt,"checkForEmptyValue");function Wx(){let e=Object.keys(C.INSTALL_PROMPTS),t=iE(e),r=iE(Object.keys(C.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=C.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}o(Wx,"checkForPromptOverride");async function Qx(){oe.trace("Checking for existing install.");let e=ki.getPropsFilePath(),t=await Fr.pathExists(e),r;if(t){oe.trace(`Install found an existing boot prop file at:${e}`);let s=px(e),n=gp.getConfigValue(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(C.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Fr.pathExists(n)}if(r){if(oe.trace(`Install found existing HDB config at:${e}`),await mp.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${Ap.version()}. Exiting install...`;console.log(qr+Os.magenta.bold(Bx)),console.log(Os.magenta.bold(n)),oe.error(n)}else console.log(qr+Os.magenta.bold(Tp)),oe.error(Tp);process.exit(0)}}o(Qx,"checkForExistingInstall");async function jx(e){oe.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Px}${qr}and can be viewed by typing or copying and pasting the URL into your web browser.${qr}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Br,transformer:fn,when:vr(e[C.INSTALL_PROMPTS.TC_AGREEMENT],t),name:C.INSTALL_PROMPTS.TC_AGREEMENT,message:Oe(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:Os.yellow("Please enter 'yes' or 'no'")},s=await Rp.prompt([r]);s[C.INSTALL_PROMPTS.TC_AGREEMENT]&&s[C.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Hx&&(console.log(Os.yellow(hp)),oe.error(hp),process.exit(0))}o(jx,"termsAgreement");async function Jx(){let e=ps.join(Ns,C.HDB_CONFIG_FILE),t;try{t=Vi.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(!t)throw new Error("Could not determine current username in this environment. Please set the USERNAME environment variable in your OS and try install again.");let r=`settings_path = ${e}
|
|
81
|
+
install_user = ${t}`,s=ki.getHomeDir(),n=ps.join(s,C.HDB_HOME_DIR_NAME),i=ps.join(n,C.LICENSE_KEY_DIR_NAME);try{Fr.mkdirpSync(n,{mode:C.HDB_FILE_PERMISSIONS}),Fr.mkdirpSync(i,{mode:C.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${C.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=ps.join(n,C.BOOT_PROPS_FILE_NAME);try{await Fr.writeFile(a,r)}catch(c){throw oe.error(`There was an error creating the boot file at path: ${a}`),c}Gr.setProperty(C.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Gr.setProperty(C.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Gr.setProperty(Gr.BOOT_PROPS_FILE_PATH,a)}o(Jx,"createBootPropertiesFile");async function Xx(e){oe.trace("Creating HarperDB config file");let t=iE(Object.keys(C.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{gp.createConfigFile(t),Gr.initSync()}catch(r){Zx(r)}}o(Xx,"createConfigFile");function Zx(e){oe.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(vx);let t=ps.resolve(Gr.get(Gr.BOOT_PROPS_FILE_PATH),"../");t&&Fr.removeSync(t),Ns&&Fr.removeSync(Ns),process.exit(1)}o(Zx,"rollbackInstall");async function pp(e,t){oe.trace("Creating admin user"),await Dx();let r;try{r=await Lx.addRole(e)}catch(s){throw new Error(`Error creating role - ${s}`)}if(t)try{t.role=r.role,await bx.addUser(t)}catch(s){throw new Error(`Error creating user - ${s}`)}}o(pp,"createAdminUser");async function zx(e){oe.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await pp(t,r),delete e[C.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[C.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(zx,"createSuperUser");async function eV(e){oe.trace("Creating Cluster user.");let t;e[C.INSTALL_PROMPTS.CLUSTERING_USER]&&e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[C.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await pp({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[C.INSTALL_PROMPTS.CLUSTERING_USER],delete e[C.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(eV,"createClusterUser");async function tV(){let e=Ap.version();if(e)await mp.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(tV,"insertHdbVersionInfo")});var aE=f((xj,Ip)=>{var rV=require("os"),Op=H();Ip.exports={checkPermission:sV};function sV(){if(rV.userInfo().username!==Op.get("install_user"))throw new Error(`Error: Must execute as ${Op.get("install_user")}`)}o(sV,"checkPermission")});var Lp=f((kj,bp)=>{"use strict";var cE=O(),ze=p(),Cp=Yl();bp.exports={processDirectives:nV};async function nV(e){console.log("Starting upgrade process...");let t=Cp.getVersionsForUpgrade(e),r=aV(t),s=[],n=r.length;for(let i=0;i<n;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;ze.notify(c),console.log(c);let _=[],u=[];try{_=iV(a.sync_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}try{u=await oV(a.async_functions)}catch(l){throw ze.error(`Error while running an upgrade script for ${a.version}`),l}s.push(..._,...u)}return s}o(nV,"processDirectives");function iV(e){if(cE.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ze.info(`Running function ${r.name}`),!(r instanceof Function)){ze.info("Variable being processed is not a function");continue}let s=r();ze.info(s),t.push(s)}return t}o(iV,"runSyncFunctions");async function oV(e){if(cE.isEmptyOrZeroLength(e))return ze.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ze.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(ze.info(`Running function ${n.name}`),!(n instanceof Function)){ze.info("Variable being processed is not a function");continue}let i=await n();ze.info(i),t.push(i)}return t}o(oV,"runAsyncFunctions");function aV(e){if(cE.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Cp.getDirectiveByVersion(r);s&&t.push(s)}return t}o(aV,"getUpgradeDirectivesToInstall")});var lE=f(($j,Pp)=>{"use strict";var Gc=H();Gc.initSync();var Dp=require("chalk"),yp=require("fs-extra"),ar=p(),or=T(),wp=Yr(),cV=Lp(),_E=O(),Up=Hc(),_V=Ic(),Mp=i_(),uV=ns(),lV=require("util").promisify,EV=lV(uV.setSchemaDataToGlobal),uE,{UPGRADE_VERSION:qc}=or.UPGRADE_JSON_FIELD_NAMES_ENUM;Pp.exports={upgrade:dV};async function dV(e){await EV(),uE===void 0&&(uE=on()),yp.existsSync(Gc.get(Gc.BOOT_PROPS_FILE_PATH))||(Yi("The hdb_boot_properties file was not found. Please install HDB.",or.LOG_LEVELS.ERROR),process.exit(1)),yp.existsSync(Gc.get(or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Yi("The hdb settings file was not found. Please make sure HDB is installed.",or.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Up.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Yi(`This version of HarperDB is ${wp.version()}`,or.LOG_LEVELS.INFO);let r=t[qc]?t[qc]:wp.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${or.HDB_SUPPORT_ADDRESS}`),ar.notify("Missing new version field from upgrade info object"),process.exit(1)),await SV();let s,n=0;try{s=await _V.forceUpdatePrompt(t)}catch(i){ar.error("There was an error when prompting user about upgrade."),ar.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),ar.info(`Starting upgrade to version ${r}`),await fV(t),Yi(`HarperDB was successfully upgraded to version ${t[qc]}`,or.LOG_LEVELS.INFO)}o(dV,"upgrade");async function SV(){let e=!1,t=await Mp.findPs(or.HDB_PROC_NAME);if(_E.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Mp.findPs("hdb_express");_E.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await uE.list();_E.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Dp.red(r)),ar.error(r),process.exit(1)}}o(SV,"checkIfRunning");async function fV(e){try{await cV.processDirectives(e)}catch(t){throw Yi("There was an error during the data upgrade. Please check the logs.",or.LOG_LEVELS.ERROR),t}try{await Up.insertHdbUpgradeInfo(e[qc])}catch(t){ar.error("Error updating the 'hdb_info' system table."),ar.error(t)}}o(fV,"runUpgrade");function Yi(e,t=void 0){t||(t=ar.info),ar[t](e),console.log(Dp.magenta(e))}o(Yi,"printToLogAndConsole")});var qp=f((Wj,Gp)=>{"use strict";var{promises:dE,createReadStream:hV,createWriteStream:TV}=require("fs"),{createGzip:RV}=require("zlib"),{promisify:mV}=require("util"),{pipeline:AV}=require("stream"),gV=mV(AV),pV=require("path"),Cs=H();Cs.initSync();var Is=p(),{CONFIG_PARAMS:$i,ITC_EVENT_TYPES:NV}=T(),{onMessageFromWorkers:OV}=Xr(),IV=6e4,CV="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",bV="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",EE,Bp;Gp.exports=vp;OV(e=>{e.type===NV.RESTART&&(Cs.initSync(!0),clearInterval(Bp),Cs.get($i.LOGGING_ROTATION_ENABLED)&&vp())});async function vp(){try{let e=Is.getLogFilePath(),t=Cs.get($i.LOGGING_ROTATION_MAXSIZE),r=Cs.get($i.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Is.error(CV);return}let s=Cs.get($i.LOGGING_ROTATION_PATH);if(!s){Is.error(bV);return}let n;if(t){let a=t.slice(-1),c=t.slice(0,-1);a==="G"?n=c*1e9:a==="M"?n=c*1e6:n=c*1e3}let i;if(r){let a=r.slice(-1),c=r.slice(0,-1);a==="D"?i=c*1440:a==="H"?i=c*60:i=c}EE=Date.now()/6e4,Is.trace("Log rotate enabled, maxSize:",t,"interval:",r),Bp=setInterval(async()=>{if(n){let a;a=await dE.stat(e),a.size>=n&&await Hp(e,s)}i&&Date.now()/6e4-EE>=i&&(await Hp(e,s),EE=Date.now()/6e4)},IV).unref()}catch(e){Is.error(e)}}o(vp,"logRotator");async function Hp(e,t){let r=Cs.get($i.LOGGING_ROTATION_COMPRESS),s=pV.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await gV(hV(e),RV(),TV(s)),await dE.unlink(e)):await dE.rename(e,s),Is.closeLogFile(),Is.notify(`hdb.log rotated, old log moved to ${s}`)}o(Hp,"moveLogFile")});var $p=f((jj,Yp)=>{"use strict";var{startWorker:LV,setMonitorListener:yV}=Xr(),{createServer:wV}=require("net"),MV=H(),DV=T(),Fp=p(),UV=Us(),bs=[];Yp.exports={startHTTPThreads:PV,startSocketServer:HV,updateWorkerIdleness:kp,mostIdleRouting:Vc,remoteAffinityRouting:Vp};MV.initSync();function PV(e=2){for(let t=0;t<e;t++)LV("server/threads/threadHTTPServer.js",{name:DV.THREAD_TYPES.HTTP,onStarted(r){bs.push(r),r.expectedIdle=1,r.lastIdle=0,r.requests=1,r.on("message",n=>{if(n.requestId){let i=xc.get(n.requestId);i&&i(n)}}),r.on("exit",s),r.on("shutdown",s);function s(){let n=bs.indexOf(r);n>-1&&bs.splice(n,1)}o(s,"removeWorker")}});return bs}o(PV,"startHTTPThreads");function HV(e,t=0,r){let s;r?r==="ip"?s=Vp:s=BV(r):s=Vc;let n=wV({allowHalfOpen:!0,pauseOnConnect:!s.readsData},i=>{s(i,(a,c)=>{if(!a)return Fp.error("No HTTP workers found");a.requests++,i._handle.fd>=0?a.postMessage({type:e,fd:i._handle.fd,data:c}):qV(i,a,e)})}).listen(t);return Fp.info(`HarperDB ${UV.version} Server running on port ${t}`),n}o(HV,"startSocketServer");var Fc=0;function Vc(e,t){let r,s=0;for(let n of bs){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Fc)return Fc=i,t(r);s=i}Fc=0,t(r)}o(Vc,"findMostIdleWorker");var xp=36e5,hn=new Map;function Vp(e,t){let r=e.remoteAddress,s=hn.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Vc(e,i=>{hn.set(r,{worker:i,lastUsed:n}),t(i)})}o(Vp,"findByRemoteAddressAffinity");function BV(e){let t=new RegExp(`${e}:s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],_=hn.get(c),u=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=u,n(_.worker);Vc(s,l=>{hn.set(c,{worker:l,lastUsed:u}),n(l,i)})})}o(r,"findByHeaderAffinity")}o(BV,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of hn)r.lastUsed+xp<e&&hn.delete(t)},xp).unref();var vV=1e3;function kp(){Fc=0;for(let e of bs)e.expectedIdle=e.recentELU.idle+vV,e.requests=1;bs.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}o(kp,"updateWorkerIdleness");yV(kp);var xc=new Map,GV=1;function qV(e,t,r){let s=GV++;t.postMessage({type:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({type:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({type:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({type:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({type:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({type:r,requestId:s,event:"end"})}).resume(),xc.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),xc.delete(s)),n.event=="destroy"&&(e.destroy(),xc.delete(s))})}o(qV,"proxySocket")});var Yc=f((eJ,zp)=>{"use strict";var Ie=H();Ie.initSync();var Xj=yl(),X=T(),ae=p(),Ls=require("fs-extra"),Tn=require("path"),FV=Ml(),xV=oE(),SE=require("chalk"),VV=Us(),kV=aE(),Nt=O(),Qp=Ve(),jp=kr(),YV=tc(),$V=lE(),KV=qp(),WV=require("minimist"),{PACKAGE_ROOT:QV}=T(),{startHTTPThreads:jV,startSocketServer:Kp,mostIdleRouting:Zj,remoteAffinityRouting:zj}=$p(),JV=Hc(),{isMainThread:XV}=require("worker_threads"),ZV=jt(),zV=ti(),ek=Tu(),tk=La(),kc=T(),pt,rk="Upgrade complete. Starting HarperDB.",sk="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",nk="HarperDB not found, starting install process.",ik="There was an error during install, check install_log.log for more details. Exiting.",ok="HarperDB successfully started.";async function Jp(e=!1,t=!1){if(console.log(SE.magenta("Starting HarperDB...")),await uk()===!1){console.log(nk);try{await xV()}catch(n){console.error(ik),ae.error(n),process.exit(1)}}await Ls.writeFile(Tn.join(Ie.get(kc.CONFIG_PARAMS.ROOTPATH),kc.HDB_PID_FILE),`${process.pid}`),ae.info("HarperDB PID",process.pid),pt===void 0&&(pt=on());let r;try{let n=await JV.getVersionUpdateInfo();n!==void 0&&(r=n[X.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await $V.upgrade(n),console.log(rk))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),ae.error(n)):(console.error(sk),ae.error(n)),process.exit(1)}if(!e){let n=jp(Object.keys(X.CONFIG_PARAM_MAP),!0);!Nt.isEmpty(n)&&!Nt.isEmptyOrZeroLength(Object.keys(n))&&Qp.updateConfigValue(void 0,void 0,n,!0,!0)}FV(),await _k(),ck();try{kV.checkPermission()}catch(n){ae.error(n),console.error(n.message),process.exit(1)}Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&XV&&await YV.generateNatsConfig(t)}o(Jp,"initialize");async function Xp(e=!1){try{let t=WV(process.argv);t.ROOTPATH&&Qp.updateConfigObject("settings_path",Tn.join(t.ROOTPATH,X.HDB_CONFIG_FILE)),await Jp(e,!0);let r=Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(Nt.isEmpty(t.service)){jV(Ie.get(kc.CONFIG_PARAMS.HTTP_THREADS));let a=Ie.get(kc.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);Kp(X.SERVICES.HDB_CORE,parseInt(Ie.get(X.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT),10),a),i&&Kp(X.SERVICES.CUSTOM_FUNCTIONS,parseInt(Ie.get(X.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),a),n&&(s||await pt.startClusteringProcesses(),await pt.startClusteringThreads())}else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;ae.error(c),console.log(c),process.exit(1)}let a=t.service.split(",");for(let c of a){let _=c.toLowerCase();if(X.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){ae.error(`Run received unrecognized service command argument: ${_}`);continue}if(_===X.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){ae.error(`${_} is not enabled in settings`);continue}if(_.includes("clustering")&&!r){ae.error(`${_} is not enabled in settings`);continue}_==="clustering"?await pt.startClusteringProcesses():await pt.startService(X.PROCESS_DESCRIPTORS_VALIDATE[_]);let u=`${X.PROCESS_DESCRIPTORS_VALIDATE[_]} successfully started.`;ae.notify(u),console.log(u)}}Ie.get(X.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await KV(),s||Zp()}catch(t){console.error(t),ae.error(t),process.exit(1)}}o(Xp,"main");function Zp(){ae.suppressLogging(()=>{console.log(SE.magenta(""+Ls.readFileSync(Tn.join(QV,"utility/install/ascii_logo.txt")))),console.log(SE.magenta(`|------------- HarperDB ${VV.version} successfully started ------------|`))}),ae.notify(ok)}o(Zp,"started");async function ak(){if(lk())return Xp();try{pt===void 0&&(pt=on()),pt.enterPM2Mode(),await Jp(),Nt.autoCastBoolean(Ie.get(X.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await pt.startClusteringProcesses(),await pt.startService(X.PROCESS_DESCRIPTORS.HDB),Zp(),process.exit(0)}catch(e){console.error(e),ae.error(e),process.exit(1)}}o(ak,"launch");function ck(){let e=Tn.join(Ie.getHdbBasePath(),X.LICENSE_KEY_DIR_NAME,X.LICENSE_FILE_NAME),t=Tn.join(e,X.LICENSE_FILE_NAME),r=Tn.join(e,X.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=jp(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Nt.isEmpty(s)||Nt.isEmpty(n))return;Ls.mkdirpSync(e),Ls.writeFileSync(r,s),Ls.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),ae.error(n)}}o(ck,"writeLicenseFromVars");async function _k(){if(Ie.getHdbBasePath()!==void 0){ae.info("Checking Transaction Audit Environments exist");for(let t of Object.keys(ZV))await Wp(X.SYSTEM_SCHEMA_NAME,t);let e=await zV.describeAll();for(let t of Object.keys(e))for(let r of Object.keys(e[t]))await Wp(t,r);ae.info("Finished checking Transaction Audit Environments exist")}}o(_k,"checkAuditLogEnvironmentsExist");async function Wp(e,t){try{let r=new tk(e,t);await ek(r)}catch(r){let s=`Unable to create the transaction audit environment for ${e}.${t}, due to: ${r.message}`;console.error(s),ae.error(s)}}o(Wp,"openCreateAuditEnvironment");zp.exports={launch:ak,main:Xp};async function uk(){try{await Ls.stat(Nt.getPropsFilePath()),await Ls.stat(Ie.get(X.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(e.code==="ENOENT")return!1;throw ae.error(`Error checking for HDB install - ${e}`),e}return!0}o(uk,"isHdbInstalled");function lk(){return Nt.autoCastBoolean(Ie.get(X.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}o(lk,"getRunInForeground")});var tN=f((rJ,eN)=>{var Ek=oE(),dk=p();eN.exports=Sk;async function Sk(){try{await Ek()}catch(e){console.error("There was an error during the install."),console.error(e),dk.error(e),process.exit(1)}}o(Sk,"install")});var aN=f((nJ,oN)=>{var Kc=Vs(),rN=require("chalk"),qt=p(),sN=aE(),nN=require("prompt"),{promisify:fk}=require("util"),$c=T(),hk=require("fs-extra"),Tk=require("path"),Rk=O(),mk=Yr(),iN=H();iN.initSync();var Ak=require("moment"),gk=fk(nN.get),pk=Tk.join(iN.getHdbBasePath(),$c.LICENSE_KEY_DIR_NAME,$c.LICENSE_FILE_NAME,$c.LICENSE_FILE_NAME);oN.exports={getFingerprint:Ok,setLicense:Nk,parseLicense:fE,register:Ik,getRegistrationInfo:bk};async function Nk(e){if(e&&e.key&&e.company){try{qt.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await fE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw qt.error(r),qt.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Nk,"setLicense");async function Ok(){try{sN.checkPermission()}catch(t){throw qt.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await Kc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw qt.error(r),qt.error(t),new Error(r)}return e}o(Ok,"getFingerprint");async function fE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=Kc.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{qt.info("writing license to disk"),await hk.writeFile(pk,JSON.stringify({license_key:e,company:t}))}catch(s){throw qt.error("Failed to write License"),s}return"Registration successful."}o(fE,"parseLicense");async function Ik(){let e=await Ck();return fE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Ik,"register");async function Ck(){try{sN.checkPermission()}catch(s){return console.error(s.message)}let e=await Kc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:rN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:rN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nN.start()}catch(s){qt.error(s)}let r;try{r=await gk(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(Ck,"promptForRegistration");async function bk(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Kc.getLicense()}catch(r){throw qt.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Rk.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=mk.version(),e.storage_type=$c.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Ak.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(bk,"getRegistrationInfo")});var uN=f((oJ,_N)=>{"use strict";var Lk=aN(),yk=p(),cN="Registration failed.";async function wk(){let e;try{e=await Lk.register()}catch(t){return yk.error(`Registration error ${t}`),cN}return e||cN}o(wk,"register");_N.exports={register:wk}});var SN=f((cJ,dN)=>{"use strict";var Mk=p(),Dk=T(),Uk=require("util"),Pk=require("child_process"),lN=Uk.promisify(Pk.exec),Hk=nn(),Ki=on(),EN="Stopping HarperDB.";dN.exports=Bk;async function Bk(){console.log(EN),Mk.notify(EN),await Ki.isServiceRegistered(Dk.HDB_PROC_DESCRIPTOR)&&Ki.enterPM2Mode();let e=await Ki.getUniqueServicesList();for(let r in e)await Ki.stop(r);await Ki.kill();let t=await Hk.getHDBProcessInfo();t.clustering.forEach(r=>{lN(`kill ${r.pid}`)}),t.core.forEach(r=>{lN(`kill ${r.pid}`)})}o(Bk,"stop")});var hN=f((uJ,fN)=>{"use strict";var{handleHDBError:vk,hdb_errors:Gk}=J(),{HTTP_STATUS_CODES:qk}=Gk,Fk=Es(),xk=Tc(),hE=O(),Wc=require("joi"),Vk=Fe(),kk=2e3,Yk=Wc.object({timeout:Wc.number().min(1),connected_nodes:Wc.boolean(),routes:Wc.boolean()});fN.exports=$k;async function $k(e){xk.checkClusteringEnabled();let t=Vk.validateBySchema(e,Yk);if(t)throw vk(t,t.message,qk.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||hE.autoCastBoolean(s),a=n===void 0||hE.autoCastBoolean(n),c={nodes:[]},_=await Fk.getServerList(r??kk),u={};if(i)for(let l=0,E=_.length;l<E;l++){let d=_[l].statsz;d&&(u[_[l].server.name]=d.routes)}for(let l=0,E=_.length;l<E;l++){if(_[l].statsz)continue;let d=_[l].server,S=_[l].data;if(d.name.endsWith("-hub")){let R={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(R.connected_nodes=u[d.name]?u[d.name].map(m=>m.name.slice(0,-4)):[]),a&&(R.routes=S.cluster?.urls?S.cluster?.urls.map(m=>({host:m.split(":")[0],port:hE.autoCast(m.split(":")[1])})):[]),c.nodes.push(R)}}return c}o($k,"clusterNetwork")});var NN=f((EJ,pN)=>{"use strict";var RE=Tc(),Kk=Es(),mN=H(),Qc=T(),ys=ke(),Wk=O(),TE=p(),{RemotePayloadObject:Qk}=il(),{ErrorCode:TN}=require("nats"),RN=mN.get(Qc.CONFIG_PARAMS.CLUSTERING_ENABLED),AN=mN.get(Qc.CONFIG_PARAMS.CLUSTERING_NODENAME);pN.exports={clusterStatus:jk,buildNodeStatus:gN};async function jk(){let e={node_name:AN,is_enabled:RN,connections:[]};if(!RN)return e;let t=await RE.getAllNodeRecords();if(Wk.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(gN(t[s],e.connections));return await Promise.allSettled(r),e}o(jk,"clusterStatus");async function gN(e,t){let r=e.name,s=new Qk(Qc.OPERATIONS_ENUM.CLUSTER_STATUS,AN,void 0,await RE.getSystemInfo()),n,i,a=ys.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await Kk.request(ys.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===ys.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ys.CLUSTER_STATUS_STATUSES.CLOSED,TE.error(`Error getting node status from ${r} `,n))}catch(_){TE.warn(`Error getting node status from ${r}`,_),_.code===TN.NoResponders?a=ys.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===TN.Timeout?a=ys.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ys.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Jk(r,a,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Qc.PRE_4_0_0_VERSION&&await RE.upsertNodeRecord(_)}catch(_){TE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}o(gN,"buildNodeStatus");function Jk(e,t,r,s,n,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Jk,"NodeStatusObject")});var LN=f((SJ,bN)=>{"use strict";var mE=require("fs-extra"),AE=require("path"),Xk=require("yaml"),Wi=Es(),Qi=T(),ON=ke(),IN=p(),Zk=Nr(),zk=hN(),eY=NN(),tY=nn(),CN=H();CN.initSync();var Ft={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},ve={LEAF:"leaf server",HUB:"hub server"},jc;bN.exports=rY;async function rY(){jc=CN.get(Qi.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:Ft.STOPPED}},t;try{t=Number.parseInt(await mE.readFile(AE.join(jc,Qi.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===Qi.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await tY.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=Ft.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await sY(r),e.clustering[ve.HUB].status===Ft.RUNNING&&e.clustering[ve.LEAF].status===Ft.RUNNING){let s=[],n=await zk({});for(let a of n.nodes){let c={};for(let _ in a)c[_.replace("_"," ")]=a[_];s.push(c)}e.clustering.network=s;let i=await eY.clusterStatus();e.clustering.replication={["node name"]:i.node_name,["is enabled"]:i.is_enabled,connections:[]};for(let a of i.connections){let c={};c["node name"]=a?.node_name,c.status=a?.status,c.ports={clustering:a?.ports?.clustering,"operations api":a?.ports?.operations_api},c["latency ms"]=a?.latency_ms,c.uptime=a?.uptime,c.subscriptions=a?.subscriptions,c["system info"]={"hdb version":a?.system_info?.hdb_version,"node version":a?.system_info?.node_version,platform:a?.system_info?.platform},e.clustering.replication.connections.push(c)}await Wi.closeConnection()}console.log(Xk.stringify(e)),process.exit()}o(rY,"status");async function sY(e){let t={[ve.HUB]:{},[ve.LEAF]:{}};if(e.clustering.length===0)return t[ve.HUB].status=Ft.STOPPED,t[ve.LEAF].status=Ft.STOPPED,t;let{port:r}=Wi.getServerConfig(Qi.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Zk.getClusterUser();try{(await Wi.createConnection(r,s,n,!1)).close(),t[ve.HUB].status=Ft.RUNNING}catch{t[ve.HUB].status=Ft.ERRORED}let{port:i}=Wi.getServerConfig(Qi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Wi.createConnection(i,s,n,!1)).close(),t[ve.LEAF].status=Ft.RUNNING}catch{t[ve.LEAF].status=Ft.ERRORED}try{t[ve.HUB].pid=Number.parseInt(await mE.readFile(AE.join(jc,"clustering",ON.PID_FILES.HUB),"utf8"))}catch(a){IN.error(a),t[ve.HUB].pid=void 0}try{t[ve.LEAF].pid=Number.parseInt(await mE.readFile(AE.join(jc,"clustering",ON.PID_FILES.LEAF),"utf8"))}catch(a){IN.error(a),t[ve.LEAF].pid=void 0}return t}o(sY,"getHubLeafStatus")});var xr=p(),nY=Yr(),Jc=T(),yN=require("fs"),wN=require("path"),iY=require("os"),{PACKAGE_ROOT:MN}=T(),oY=ed(),{SERVICE_ACTIONS_ENUM:xt}=Jc;cY();function aY(){let e=wN.join(MN,"bin",`harperdb.${Jc.CODE_EXTENSION}`),t;try{t=yN.statSync(e)}catch{xr.info("Couldn't find the harperdb executable process.");return}let r=iY.userInfo();if(t&&r.uid>=0&&t.uid!==r.uid){let s="You are not the owner of the HarperDB process. Please log in as the owner and try the command again.";throw xr.error(s),console.log(s),new Error(s)}}o(aY,"checkCallingUserSync");function cY(){let e=oY();if(e)if(e.error){console.error(e.error),xr.error(e.error);return}else e.warn&&(console.warn(e.warn),xr.warn(e.warn));let t;yN.readdir(wN.join(MN,"bin"),r=>{if(r)return xr.error(r);if(process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase()),t!==Jc.SERVICE_ACTIONS_ENUM.INSTALL)try{aY()}catch(n){throw console.log(n.message),n}let s;switch(t){case xt.RUN:console.warn('The "run" command is deprecated, please use "start" instead');case xt.START:s=Yc().launch();break;case xt.INSTALL:tN()().then(()=>Yc().main(!0)).catch(E=>{console.error(E)});break;case xt.REGISTER:uN().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case xt.STOP:SN()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case xt.RESTART:yl().restart({}).then().catch(E=>{xr.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case xt.VERSION:nY.printVersion();break;case xt.UPGRADE:xr.setLogLevel(Jc.LOG_LEVELS.INFO),lE().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{xr.error(`Got an error during upgrade ${E}`)});break;case xt.STATUS:LN()().then().catch(E=>{console.error(E)});break;case void 0:Yc().main();break;default:console.warn(`The "${t}" command is not understood.`);case xt.HELP:console.log(`
|
|
82
82
|
Usage: harperdb [command]
|
|
83
83
|
|
|
84
84
|
With no command, harperdb will simply run HarperDB (in the foreground)
|
|
@@ -90,4 +90,5 @@ Commands:
|
|
|
90
90
|
restart - Restart the harperdb background process
|
|
91
91
|
install - Install harperdb
|
|
92
92
|
register - Register harperdb
|
|
93
|
-
upgrade - Upgrade harperdb
|
|
93
|
+
upgrade - Upgrade harperdb
|
|
94
|
+
status - Print the status of HarperDB and clustering`)}})}o(cY,"harperDBService");
|