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
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var pw=Object.defineProperty;var a=(e,t)=>pw(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var m=f((uX,Lh)=>{"use strict";var Ut=require("path"),gw=require("fs");function Nw(){let e=__dirname;for(;!gw.existsSync(Ut.join(e,"package.json"));){let t=Ut.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Nw,"getHDBPackageRoot");var yr=Nw(),Th="js",ba=Th,Ow="harperdb-config.yaml",Iw="defaultConfig.yaml",bw="hdb",mh=`harperdb.${ba}`,Rh=`customFunctionsServer.${ba}`,ww=`restartHdb.${ba}`,du="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",Cw="Clustering Ingest Service",yw="Clustering Reply Service",Lw="foreground.pid",Uw={HDB:du,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:Cw,CLUSTERING_REPLY_SERVICE:yw,CUSTOM_FUNCTIONS:Ia,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"},Mw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Dw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Pw={harperdb:du,"clustering hub":wa,"clustering leaf":Ca,"custom functions":Ia,custom_functions:Ia,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Bw={CLUSTERING_HUB_PROC_DESCRIPTOR:wa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca},Eu={HDB:Ut.join(yr,"server/harperdb"),CUSTOM_FUNCTIONS:Ut.join(yr,"server/customFunctions"),CLUSTERING_HUB:Ut.join(yr,"server/nats"),CLUSTERING_LEAF:Ut.join(yr,"server/nats")},vw={HDB:Ut.join(Eu.HDB,mh),CUSTOM_FUNCTIONS:Ut.join(Eu.CUSTOM_FUNCTIONS,Rh)},Hw={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ut.join(yr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ut.join(yr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ut.join(yr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},qw={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ah="support@harperdb.io",Gw="customer-success@harperdb.io",ph=1,Fw=4141,gh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",xw="https://www.harperdb.io/product",Vw=`For support, please submit a request at ${gh} or contact ${Ah}`,Nh=`For license support, please contact ${Gw}`,kw="None of the specified records were found.",$w="hash attribute not found",Yw=`Your current license only supports ${ph} role. ${Nh}`,Kw="Your current license only supports 3 connections to a node.",Ww="127.0.0.1",Qw=1,Jw=/^\.$/,Xw=/^\.\.$/,Zw="U+002E",zw=/\//g,jw="U+002F",eC=/U\+002F/g,tC=/^U\+002E$/,rC=/^U\+002EU\+002E$/,sC="d",nC=999999,iC="*",aC="--max-old-space-size=",oC="system",cC="__hdb_hash",_C=".harperdb",uC=".hdb",lC="keys",EC="hdb_boot_properties.file",dC=".updateConfig.json",hC="SIGTSTP",fC=24,SC=6e4,TC=448,mC="blob",RC="trash",AC="schema",pC="transactions",gC=".count",NC="id",OC="PROCESS_NAME",Oh={SETTINGS_PATH_KEY:"settings_path"},Ih=require("lodash"),IC={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"},bC={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},wC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},CC={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"},yC={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"},nt="hdb_internal:",LC={CREATE_SCHEMA:nt+"create_schema",CREATE_TABLE:nt+"create_table",CREATE_ATTRIBUTE:nt+"create_attribute",ADD_USER:nt+"add_user",ALTER_USER:nt+"alter_user",DROP_USER:nt+"drop_user",HDB_NODES:nt+"hdb_nodes",HDB_USERS:nt+"hdb_users",HDB_WORKERS:nt+"hdb_workers",CATCHUP:nt+"catchup",SCHEMA_CATCHUP:nt+"schema_catchup",WORKER_ROOM:nt+"cluster_workers"},UC={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"},MC="060493.ks",DC=".license",PC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},w={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"},BC={CSV:".csv",JSON:".json"},vC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},HC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qn={};qn[w.INSERT]=w.INSERT;qn[w.UPDATE]=w.UPDATE;qn[w.UPSERT]=w.UPSERT;qn[w.DELETE]=w.DELETE;var J=Object.create(null);J[w.DESCRIBE_ALL]=w.DESCRIBE_ALL;J[w.DESCRIBE_TABLE]=w.DESCRIBE_TABLE;J[w.DESCRIBE_SCHEMA]=w.DESCRIBE_SCHEMA;J[w.READ_LOG]=w.READ_LOG;J[w.ADD_NODE]=w.ADD_NODE;J[w.LIST_USERS]=w.LIST_USERS;J[w.LIST_ROLES]=w.LIST_ROLES;J[w.USER_INFO]=w.USER_INFO;J[w.SQL]=w.SQL;J[w.GET_JOB]=w.GET_JOB;J[w.SEARCH_JOBS_BY_START_DATE]=w.SEARCH_JOBS_BY_START_DATE;J[w.DELETE_FILES_BEFORE]=w.DELETE_FILES_BEFORE;J[w.EXPORT_LOCAL]=w.EXPORT_LOCAL;J[w.EXPORT_TO_S3]=w.EXPORT_TO_S3;J[w.CLUSTER_STATUS]=w.CLUSTER_STATUS;J[w.REMOVE_NODE]=w.REMOVE_NODE;J[w.RESTART]=w.RESTART;J[w.CUSTOM_FUNCTIONS_STATUS]=w.CUSTOM_FUNCTIONS_STATUS;J[w.GET_CUSTOM_FUNCTIONS]=w.GET_CUSTOM_FUNCTIONS;J[w.GET_CUSTOM_FUNCTION]=w.GET_CUSTOM_FUNCTION;J[w.SET_CUSTOM_FUNCTION]=w.SET_CUSTOM_FUNCTION;J[w.DROP_CUSTOM_FUNCTION]=w.DROP_CUSTOM_FUNCTION;J[w.ADD_CUSTOM_FUNCTION_PROJECT]=w.ADD_CUSTOM_FUNCTION_PROJECT;J[w.DROP_CUSTOM_FUNCTION_PROJECT]=w.DROP_CUSTOM_FUNCTION_PROJECT;J[w.PACKAGE_CUSTOM_FUNCTION_PROJECT]=w.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[w.DEPLOY_CUSTOM_FUNCTION_PROJECT]=w.DEPLOY_CUSTOM_FUNCTION_PROJECT;var qC={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},GC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},bh={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"},FC=Ih.invert(bh),S={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"},wh={settings_path:Oh.SETTINGS_PATH_KEY,hdb_root_key:S.ROOTPATH,hdb_root:S.ROOTPATH,server_port_key:S.OPERATIONSAPI_NETWORK_PORT,server_port:S.OPERATIONSAPI_NETWORK_PORT,cert_key:S.OPERATIONSAPI_TLS_CERTIFICATE,certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:S.OPERATIONSAPI_NETWORK_HTTPS,https_on:S.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:S.OPERATIONSAPI_NETWORK_CORS,cors_on:S.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:S.LOGGING_LEVEL,log_level:S.LOGGING_LEVEL,log_path_key:S.LOGGING_ROOT,log_path:S.LOGGING_ROOT,props_env_key:S.OPERATIONSAPI_NODEENV,node_env:S.OPERATIONSAPI_NODEENV,clustering_node_name_key:S.CLUSTERING_NODENAME,node_name:S.CLUSTERING_NODENAME,clustering_enabled_key:S.CLUSTERING_ENABLED,clustering:S.CLUSTERING_ENABLED,max_http_threads:S.HTTP_THREADS,max_hdb_processes:S.HTTP_THREADS,server_timeout_key:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:S.LOGGING_AUDITLOG,disable_transaction_log:S.LOGGING_AUDITLOG,operation_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:S.CUSTOMFUNCTIONS_ENABLED,custom_functions:S.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:S.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:S.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:S.HTTP_THREADS,log_to_file:S.LOGGING_FILE,log_to_stdstreams:S.LOGGING_STDSTREAMS,run_in_foreground:S.OPERATIONSAPI_FOREGROUND,local_studio_on:S.LOCALSTUDIO_ENABLED,clustering_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:S.CLUSTERING_USER,clustering_enabled:S.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:S.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:S.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:S.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:S.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:S.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:S.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:S.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:S.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:S.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:S.CLUSTERING_NODENAME,clustering_tls_certificate:S.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:S.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:S.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:S.CLUSTERING_TLS_INSECURE,clustering_tls_verify:S.CLUSTERING_TLS_VERIFY,clustering_loglevel:S.CLUSTERING_LOGLEVEL,clustering_republishmessages:S.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:S.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:S.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:S.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:S.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:S.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:S.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:S.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:S.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:S.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:S.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:S.CUSTOMFUNCTIONS_NODEENV,http_threads:S.HTTP_THREADS,http_session_affinity:S.HTTP_SESSION_AFFINITY,customfunctions_processes:S.HTTP_THREADS,customfunctions_root:S.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:S.LOCALSTUDIO_ENABLED,logging_file:S.LOGGING_FILE,logging_level:S.LOGGING_LEVEL,logging_root:S.LOGGING_ROOT,logging_rotation_enabled:S.LOGGING_ROTATION_ENABLED,logging_rotation_compress:S.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:S.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:S.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:S.LOGGING_ROTATION_PATH,logging_stdstreams:S.LOGGING_STDSTREAMS,logging_auditlog:S.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:S.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:S.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:S.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:S.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:S.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:S.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:S.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:S.OPERATIONSAPI_NODEENV,operationsapi_root:S.ROOTPATH,schemas:S.SCHEMAS,storage_path:S.STORAGE_PATH};for(let e in S){let t=S[e];wh[t.toLowerCase()]=t}var xC={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},VC={csv_file_load:"csv_file_load",csv_data_load:w.CSV_DATA_LOAD,csv_url_load:w.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"},kC={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"},$C={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},YC={FILE_SYSTEM:"fs",LMDB:"lmdb"},KC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},WC={DEVELOPMENT:8192,DEFAULT:512},QC={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"},JC={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"},XC={ENOENT:"ENOENT",EACCES:"EACCES"},Ch={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ZC="__clustering__",zC=Object.values(Ch),jC=15984864e5,yh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},ey=Ih.invert(yh),ty={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"},ry=111,sy=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(cr,"createLogRecord");function Vn(e){ar&&
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:My.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(vy,"findPs")});var Le=f((mX,Jh)=>{"use strict";var Hy="__dbis__",qy="__environment_name__",Gy="__dbi_defintion__",Fy={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"},xy=["__createdtime__","__updatedtime__"],Vy="\uFFFF",Qh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},ky=Object.values(Qh);Jh.exports={INTERNAL_DBIS_NAME:Hy,DBI_DEFINITION_NAME:Gy,SEARCH_TYPES:Fy,TIMESTAMP_NAMES:xy,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qy,TRANSACTIONS_DBI_NAMES_ENUM:Qh,TRANSACTIONS_DBIS:ky,OVERFLOW_MARKER:Vy}});var it=f((RX,nf)=>{"use strict";var Xh=m(),Zh=Le(),zh={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},jh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ef={500:jh("There was an error processing your request."),400:"Invalid request"},$y=ef[zh.INTERNAL_SERVER_ERROR],Yy={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.`},Ky={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Wy={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"},Qy={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 ${Zh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Zh.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"},Jy={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Xh.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 ${Xh.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"},tf={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"},Xy={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."},Zy={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`},zy={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"},jy={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},eL={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`},rf={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.`},sf={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}`},tL={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."},rL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},sL={...tf,...Wy,...Yy,...Xy,...Zy,...zy,...jy,...eL,...Jy,...rf,...sf,...tL,...rL,...Ky};nf.exports={CHECK_LOGS_WRAPPER:jh,HDB_ERROR_MSGS:sL,DEFAULT_ERROR_MSGS:ef,DEFAULT_ERROR_RESP:$y,HTTP_STATUS_CODES:zh,LMDB_ERRORS_ENUM:Qy,AUTHENTICATION_ERROR_MSGS:tf,VALIDATION_ERROR_MSGS:rf,ITC_ERRORS:sf}});var y=f((pX,cf)=>{"use strict";var Qs=it(),nL=I(),iL=m(),kn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,af),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.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&&nL[n](i)}};a(kn,"HdbError");function af(e,t,r,s=iL.LOG_LEVELS.ERROR,n=null,i=!1){if(of(e))return e;let o=new kn(e,t,r,s,n);return i&&delete o.stack,o}a(af,"handleHDBError");function of(e){return e.__proto__.constructor.name===kn.name}a(of,"isHDBError");cf.exports={isHDBError:of,handleHDBError:af,hdb_errors:Qs}});var b=f((OX,gf)=>{"use strict";var os=require("path"),aL=require("fs-extra"),Me=I(),_f=require("fs-extra"),$n=require("os"),oL=require("net"),cL=require("recursive-iterator"),Ue=m(),df=Wh(),uf=require("papaparse"),Pa=require("moment"),{inspect:_L}=require("util"),lf=require("is-number"),NX=require("lodash"),{hdb_errors:Ba}=y(),hf=require("util").promisify(setTimeout),uL=100,lL=5,EL="",dL=4,Ef={true:!0,false:!1,undefined:null,null:null,NaN:NaN};gf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:SL,arrayHasEmptyOrZeroLengthValues:TL,buildFolderPath:mL,isBoolean:ff,errorizeMessage:hL,stripFileExtension:AL,autoCast:pL,autoCastJSON:Sf,autoCastJSONDeep:pu,removeDir:gL,compareVersions:NL,isCompatibleDataVersion:OL,escapeRawValue:IL,unescapeValue:bL,stringifyProps:wL,timeoutPromise:yL,isClusterOperation:UL,getClusterUser:DL,checkGlobalSchemaTable:ML,getHomeDir:mf,getPropsFilePath:CL,promisifyPapaParse:PL,removeBOM:Rf,createEventPromise:BL,checkProcessRunning:vL,checkSchemaTableExist:HL,checkSchemaExists:Af,checkTableExists:pf,getStartOfTomorrowInSeconds:qL,getLimitKey:GL,isObject:RL,isNotEmptyAndHasValue:fL,autoCasterIsNumberCheck:Tf,backtickASTSchemaItems:FL,isPortTaken:LL,stopProcess:xL,createForkArgs:VL,autoCastBoolean:kL,async_set_timeout:hf,getTableHashAttribute:$L,doesSchemaExist:YL,doesTableExist:KL,stringifyObj:WL,ms_to_time:QL,changeExtension:JL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function hL(e){return e instanceof Error?e:new Error(e)}a(hL,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function fL(e){return!at(e)&&(e||e===0||e===""||ff(e))}a(fL,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function SL(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(SL,"arrayHasEmptyValues");function TL(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(TL,"arrayHasEmptyOrZeroLengthValues");function mL(...e){try{return e.join(os.sep)}catch{console.error(e)}}a(mL,"buildFolderPath");function ff(e){return at(e)?!1:e===!0||e===!1}a(ff,"isBoolean");function RL(e){return at(e)?!1:typeof e=="object"}a(RL,"isObject");function AL(e){return kt(e)?EL:e.slice(0,-dL)}a(AL,"stripFileExtension");function pL(e){return at(e)||e===""||typeof e!="string"?e:Ef[e]!==void 0?Ef[e]:Tf(e)===!0?Number(e):e}a(pL,"autoCast");function Sf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Sf,"autoCastJSON");function pu(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=pu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=pu(r);s!==r&&(e[t]=s)}return e}else return Sf(e)}a(pu,"autoCastJSONDeep");function Tf(e){if(e.startsWith("0.")&&lf(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lf(e))}a(Tf,"autoCasterIsNumberCheck");async function gL(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await _f.emptyDir(e),await _f.remove(e)}catch(t){throw Me.error(`Error removing files in ${e} -- ${t}`),t}}a(gL,"removeDir");function NL(e,t){if(kt(e)){Me.info("Invalid current version sent as parameter.");return}if(kt(t)){Me.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(NL,"compareVersions");function OL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(OL,"isCompatibleDataVersion");function IL(e){if(at(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(IL,"escapeRawValue");function bL(e){if(at(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(bL,"unescapeValue");function wL(e,t){if(at(e))return Me.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$n.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+$n.EOL:kt(s)||(r+=s+"="+n+$n.EOL)}catch{Me.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(wL,"stringifyProps");function mf(){let e;try{e=$n.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(mf,"getHomeDir");function CL(){let e=os.join(mf(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return aL.existsSync(e)||(e=os.join(__dirname,"../","hdb_boot_properties.file")),e}a(CL,"getPropsFilePath");function yL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(yL,"timeoutPromise");async function LL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=oL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(LL,"isPortTaken");function UL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Me.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UL,"isClusterOperation");function ML(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ML,"checkGlobalSchemaTable");function DL(e,t){if(at(t)){Me.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){Me.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){Me.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Me.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(DL,"getClusterUser");function PL(){uf.parsePromise=function(e,t){return new Promise(function(r,s){uf.parse(e,{header:!0,transformHeader:Rf,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(PL,"promisifyPapaParse");function Rf(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Rf,"removeBOM");function BL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Me.info(`Got cluster status event response: ${_L(n)}`);try{i.cancel()}catch{Me.error("Error trying to cancel timeout.")}s(n)})})}a(BL,"createEventPromise");async function vL(e){let t=!0,r=0;do await hf(uL*r++),(await df.findPs(e)).length>0&&(t=!1);while(t&&r<lL);if(t)throw new Error(`process ${e} was not started`)}a(vL,"checkProcessRunning");function HL(e,t){let r=Af(e);if(r)return r;let s=pf(e,t);if(s)return s}a(HL,"checkSchemaTableExist");function Af(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Af,"checkSchemaExists");function pf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(pf,"checkTableExists");function qL(){let e=Pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(qL,"getStartOfTomorrowInSeconds");function GL(){return Pa().utc().format("DD-MM-YYYY")}a(GL,"getLimitKey");function FL(e){try{let t=new cL(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){Me.error("Got an error back ticking items."),Me.error(t)}}a(FL,"backtickASTSchemaItems");async function xL(e){let t=$n.userInfo();(await df.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Me.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(xL,"stopProcess");function VL(e){return[e]}a(VL,"createForkArgs");function kL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kL,"autoCastBoolean");function $L(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a($L,"getTableHashAttribute");function YL(e){return global?.hdb_schema?.[e]!==void 0}a(YL,"doesSchemaExist");function KL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(KL,"doesTableExist");function WL(e){try{return JSON.stringify(e)}catch{return e}}a(WL,"stringifyObj");function QL(e){let t=Pa.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(QL,"ms_to_time");function JL(e,t){let r=os.basename(e,os.extname(e));return os.join(os.dirname(e),r+t)}a(JL,"changeExtension")});var cs=f((bX,XL)=>{XL.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 Bf=f((CX,Pf)=>{"use strict";var gu=require("recursive-iterator"),ZL=require("alasql"),Nu=require("clone"),Nf=b(),{handleHDBError:Of,hdb_errors:zL}=y(),{HDB_ERROR_MSGS:If,HTTP_STATUS_CODES:bf}=zL,jL=["DISTINCT_ARRAY"],wf=Symbol("validateTables"),Ou=Symbol("validateTable"),wX=Symbol("getAllColumns"),Cf=Symbol("validateAllColumns"),va=Symbol("findColumn"),yf=Symbol("validateOrderBy"),Yn=Symbol("validateSegment"),Iu=Symbol("validateColumn"),Lf=Symbol("setColumnsForTable"),Uf=Symbol("checkColumnsForAsterisk"),Mf=Symbol("validateGroupBy"),Df=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wf](),this[Uf](),this[Cf]()}[wf](){if(this[Df]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ou](t.table)})}}[Df](){let t=!1,r=new gu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Of(new Error,If.SCHEMA_NOT_FOUND(t.databaseid),bf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Of(new Error,If.TABLE_NOT_FOUND(t.databaseid,t.tableid),bf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Nu(s);n.table=Nu(t),this.attributes.push(n)})}[va](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)}[Uf](){let t=new gu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Lf](r.tableid)}[Lf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new ZL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Cf](){this[Yn](this.statement.columns,!1),this[Yn](this.statement.joins,!1),this[Yn](this.statement.where,!1),this[Mf](this.statement.group,!1),this[Yn](this.statement.order,!0)}[Yn](t,r){if(!t)return;let s=new gu(t),n=[];for(let{node:i,path:o}of s)!Nf.isEmpty(i)&&!Nf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[yf](i):n.push(this[Iu](i)));return n}[Mf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&jL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Nu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,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`}[yf](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[Iu](t)}[Iu](t){let r=this[va](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ha,"SelectValidator");Pf.exports=Ha});var bu=f((LX,vf)=>{"use strict";var qa=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(qa,"BridgeMethods");vf.exports=qa});var _s=f((PX,Vf)=>{"use strict";var Hf=it().LMDB_ERRORS_ENUM,MX=require("lmdb"),eU=Le(),DX=require("buffer").Buffer,{OVERFLOW_MARKER:qf,MAX_SEARCH_KEY_LENGTH:Ga}=eU,Gf=["number","string","symbol","boolean","bigint"];function tU(e){if(e=e?.database||e,!e)throw new Error(Hf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Hf.INVALID_ENVIRONMENT)}a(tU,"validateEnv");function rU(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(rU,"stringifyData");function sU(e){return e instanceof Date?e.valueOf():e}a(sU,"convertKeyValueToWrite");function nU(e){if(e==null)return;if(Gf.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+qf]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Gf.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+qf):t.push(n))}}return t}a(nU,"getIndexedValues");var Fa=0,Ff=0;function xf(){Ff=Date.now()-performance.now()}a(xf,"adjustStartTime");xf();var iU=6e4;setInterval(xf,iU).unref();function aU(){let e=performance.now()+Ff;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(aU,"getNextMonotonicTime");Vf.exports={validateEnv:tU,stringifyData:rU,convertKeyValueToWrite:sU,getNextMonotonicTime:aU,getIndexedValues:nU}});var $f=f((vX,kf)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");kf.exports=xa});var Kf=f((qX,Yf)=>{"use strict";var oU={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))},cU="certificate.pem",_U="privateKey.pem",uU="ca.pem";Yf.exports={CERTIFICATE_VALUES:oU,CERTIFICATE_PEM_NAME:cU,PRIVATEKEY_PEM_NAME:_U,CA_PEM_NAME:uU}});var te=f((GX,Wf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.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};Wf.exports={validateObject:lU,validateObjectAsync:EU,validateBySchema:dU};function lU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(lU,"validateObject");async function EU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(EU,"validateObjectAsync");function dU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(dU,"validateBySchema")});var Cu=f((VX,Zf)=>{"use strict";var hU=require("fs-extra"),P=require("joi"),fU=require("os"),{boolean:re,string:_r,number:Mt,array:wu}=P.types(),{totalmem:Qf}=require("os"),Kn=require("path"),SU=I(),ka=b(),xX=Kf(),TU=m(),mU=te(),Jf="log",RU="custom_functions",AU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",gU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",NU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",OU="rootPath config parameter is undefined",IU="clustering.enabled config parameter is undefined",us=Mt.min(0).required(),$a=wu.items({host:_r.required(),port:us}).empty(null),Ur;Zf.exports={configValidator:bU,routesValidator:MU,route_constraints:$a};function bU(e){if(Ur=e.rootPath,ka.isEmpty(Ur))throw OU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(UU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(wU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(CU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw IU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:us,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:us}).required()}).required(),network:P.object({port:us}).required()}).required(),leafServer:P.object({network:P.object({port:us,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:us,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(LU).optional().empty(null),maxSize:_r.custom(yU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:us,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(bU,"configValidator");function Xf(e){return hU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Xf,"doesPathExist");function wU(e,t){if(e===null)return;let r=Xf(e);return r?t.message(r):e}a(wU,"validatePemFile");function CU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Xf(e);if(r)return t.message(r)}a(CU,"validatePath");function yU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(AU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(gU):e}a(yU,"validateRotationMaxSize");function LU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(NU):e}a(LU,"validateRotationInterval");function UU(e,t){let r=t.state.path.join("."),s=fU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Qf();return i=Math.round(Math.min(i,Qf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),SU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(UU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(Ur))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Kn.join(Ur,RU);case"logging.root":return Kn.join(Ur,Jf);case"clustering.leafServer.streams.path":return Kn.join(Ur,"clustering","leaf");case"storage.path":return Kn.join(Ur,TU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Kn.join(Ur,Jf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function MU(e){let t=P.object({routes:$a});return mU.validateBySchema({routes:e},t)}a(MU,"routesValidator")});var lr=f(($X,oS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:DU,routesValidator:zf}=Cu(),Rt=require("fs-extra"),PU=require("yaml"),$t=require("path"),BU=require("is-number"),eS=require("properties-reader"),vU=require("lodash"),{handleHDBError:HU}=y(),{HTTP_STATUS_CODES:qU,HDB_ERROR_MSGS:Ya}=it(),GU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Wn,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:ur}=At,FU="Unable to get config value because config is uninitialized",xU="Config successfully initialized",VU="Error backing up config file",kU="Empty parameter sent to getConfigValue",tS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),$U="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jf={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"},Ka,Ne;oS.exports={createConfigFile:YU,getDefaultConfig:KU,getConfigValue:sS,initConfig:nS,flattenConfig:ls,updateConfigValue:iS,updateConfigObject:QU,getConfiguration:ZU,setConfiguration:zU,readConfigFile:Mu,getClusteringRoutes:jU,initOldConfig:aS,getConfigFromFile:eM};function YU(e){let t=Js(tS);Ka=ls(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Mr.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&rS(t,r),Uu(t);let s=t.toJSON();Ne=ls(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(YU,"createConfigFile");function rS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Wn.TABLES))for(let i in s[n][Wn.TABLES])for(let o in s[n][Wn.TABLES][i]){let c=s[n][Wn.TABLES][i][o],_=[Mr.SCHEMAS,n,Wn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(rS,"setSchemasConfig");function KU(e){if(Ka===void 0){let r=Js(tS);Ka=ls(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(KU,"getDefaultConfig");function sS(e){if(ot.isEmpty(e)){Te.error(kU);return}if(Ne===void 0){Te.trace(FU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(sS,"getConfigValue");function Lu(e){let t=GU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):eS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Lu,"getConfigFilePath");function nS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Lu(t),s;if(r.includes("config/settings.js"))try{aS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}WU(s,r),Uu(s);let n=s.toJSON();if(Ne=ls(n),Ne.logging_rotation_rotate)for(let i in jf)Ne[i]&&Te.error(`Config ${jf[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(xU)}}a(nS,"initConfig");function WU(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(WU,"checkForUpdatedConfig");function Uu(e){let t=e.toJSON(),r=DU(t);if(r.error)throw Ya.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)}a(Uu,"validateConfig");function QU(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(QU,"updateConfigObject");function iS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&nS();let i=sS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Mr.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Mr.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&rS(c,_),Uu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&JU(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=ls(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(iS,"updateConfigValue");function JU(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(VU),Te.error(r)}}a(JU,"backupConfigFile");var XU=["schemas"];function ls(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!XU.includes(r)){let s=ls(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(ls,"flattenConfig");function yu(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(BU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function ZU(){let e=ot.getPropsFilePath(),t=Lu(e);return Js(t).toJSON()}a(ZU,"getConfiguration");async function zU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return iS(void 0,void 0,n,!0),$U}catch(i){throw typeof i=="string"||i instanceof String?HU(i,i,qU.BAD_REQUEST,void 0,void 0,!0):i}}a(zU,"setConfiguration");function Mu(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Lu(e);return Js(t).toJSON()}a(Mu,"readConfigFile");function Js(e){return PU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function jU(){let e=Mu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=zf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=zf(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(jU,"getClusteringRoutes");function aS(e){let t=eS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Mr.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(aS,"initOldConfig");function eM(e){let t=Mu();return vU.get(t,e.replaceAll("_","."))}a(eM,"getConfigFromFile")});var v=f((KX,_S)=>{"use strict";var Du=require("fs-extra"),Yt=require("path"),tM=require("os"),rM=require("properties-reader"),Qn=I(),Xs=b(),L=m(),Wa=lr(),sM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",cS=!1,nM={[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},Er={};_S.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:iM,setHdbBasePath:aM,get:oM,initSync:_M,setProperty:k,initTestEnvironment:uM};function iM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(iM,"getHdbBasePath");function aM(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(aM,"setHdbBasePath");function oM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(oM,"get");function k(e,t){nM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function cM(){let e;try{e=Xs.getPropsFilePath(),Du.accessSync(e,Du.constants.F_OK|Du.constants.R_OK),cS=!0;let t=rM(e);return Er[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Er[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(cM,"doesPropFileExist");function _M(e=!1){try{(cS||cM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(sM),Qn.error(t),console.error(t),process.exit(1)}}a(_M,"initSync");function uM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,tM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(uM,"initTestEnvironment")});var ES=f((QX,lS)=>{"use strict";var Pu=v(),uS=m();Pu.initSync();var lM=Pu.get(uS.CONFIG_PARAMS.STORAGE_COMPRESSION),EM=Pu.get(uS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=lM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=EM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");lS.exports=Ja});var fS=f((XX,hS)=>{"use strict";var Zs=v(),Jn=m();Zs.initSync();var dM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dS=Zs.get(Jn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),hM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=dM,dS!==void 0&&(this.overlappingSync=dS),this.noReadAhead=hM}};a(Xa,"OpenEnvironmentObject");hS.exports=Xa});var X=f((zX,gS)=>{"use strict";var Bu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=_s(),SS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=$f(),vu=ES(),TS=fS(),Dr=Le(),Pt=Dr.INTERNAL_DBIS_NAME,mS=Dr.DBI_DEFINITION_NAME,fM="data.mdb",SM="lock.mdb",Xn=".mdb",TM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(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 Bu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function Hu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(Hu,"pathEnvNameValidation");async function qu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Xn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,fM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(qu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function mM(e,t,r=!1,s=!1){Hu(e,t),t=t.toString();try{return await qu(e,t,s),Gu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new TS(s?i:i+Xn,!1),c=Bu.open(o);c.dbis=Object.create(null);let _=new vu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Fu(e,t,r);return c[Dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(mM,"createEnvironment");async function RM(e,t,r,s=!0){let n=await Gu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(RM,"copyEnvironment");async function Gu(e,t,r=!1){Hu(e,t),t=t.toString();let s=Fu(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 qu(e,t),i=Dt.join(e,t+Xn),o=n!=i,c=new TS(n,o),_=Bu.open(c);_.dbis=Object.create(null);let u=AS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Gu,"openEnvironment");async function AM(e,t,r=!1){Hu(e,t),t=t.toString();let s=Dt.join(e,t+Xn),n=await qu(e,t);if(global.lmdb_map!==void 0){let i=Fu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+TM:Dt.join(Dt.dirname(n),SM))}a(AM,"deleteEnvironment");async function RS(e){za.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]}a(RS,"closeEnvironment");function Fu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Fu,"getCachedEnvironmentName");function pM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{SS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(pM,"listDBIDefinitions");function AS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(AS,"listDBIs");function gM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{SS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(gM,"getDBIDefinition");function pS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new vu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[mS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(pS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=gM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new vu(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(Oe.DBI_DOES_NOT_EXIST):n}return s[mS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function NM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(NM,"statDBI");async function OM(e,t){try{let r=Dt.join(e,t+Xn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(OM,"environmentDataSize");function IM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(IM,"dropDBI");function bM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)pS(e,n,n!==t,n===t);else throw i}}}a(bM,"initializeDBIs");gS.exports={openDBI:gt,openEnvironment:Gu,createEnvironment:mM,listDBIs:AS,listDBIDefinitions:pM,createDBI:pS,dropDBI:IM,statDBI:NM,deleteEnvironment:AM,initializeDBIs:bM,TransactionCursor:Za,environmentDataSize:OM,copyEnvironment:RM,closeEnvironment:RS}});var OS=f((eZ,NS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");NS.exports=to});var bS=f((rZ,IS)=>{"use strict";var ro=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(ro,"UpdateRecordsResponseObject");IS.exports=ro});var CS=f((nZ,wS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");wS.exports=so});var zs=f((_Z,US)=>{"use strict";var wM=X(),CM=OS(),yM=bS(),LM=CS(),Kt=_s(),Zn=it().LMDB_ERRORS_ENUM,UM=Le(),dr=m(),MM=b(),DM=require("uuid"),aZ=require("lmdb"),{handleHDBError:PM,hdb_errors:BM}=y(),{OVERFLOW_MARKER:oZ,MAX_SEARCH_KEY_LENGTH:cZ}=UM,yS=v();yS.initSync();var no=yS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function vM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new CM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];LS(u,!0,n);let l=HM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return ku(o,c,s,i,n)}a(vM,"insertRecords");function HM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[Es])})}a(HM,"insertRecord");function qM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(qM,"removeSkippedRecords");function LS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Es]))&&(e[Es]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[xu]))&&(e[xu]=r||Kt.getNextMonotonicTime()):delete e[xu]}a(LS,"setTimestamps");function Vu(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),wM.initializeDBIs(e,t,r)}a(Vu,"initializeTransaction");async function GM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new yM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=$u(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return ku(c,_,s,i,n,o)}a(GM,"updateRecords");async function FM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Yu(e,t,r,s)}catch(_){throw PM(_,_.message,BM.HTTP_STATUS_CODES.BAD_REQUEST)}Vu(e,t,r);let i=new LM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;MM.isEmpty(u[t])?(l=DM.v4(),u[t]=l):l=u[t];let E=$u(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return ku(o,c,s,i,n)}a(FM,"upsertRecords");async function ku(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),qM(r,i),s}a(ku,"finalizeWrite");function $u(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(LS(r,!l,o),Number.isInteger(r[Es])&&u[Es]>r[Es])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Es])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:$u(e,t,r,s,n,i,o))}a($u,"updateUpsertRecord");function xM(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(xM,"validateBasic");function Yu(e,t,r,s){if(xM(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Yu,"validateWrite");function io(){}a(io,"noop");US.exports={insertRecords:vM,updateRecords:GM,upsertRecords:FM}});var j=f((lZ,HS)=>{"use strict";var ri=m(),VM=b(),Ye=v(),si=require("path"),kM=require("minimist"),MS=require("fs-extra"),DS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Pr,SCHEMAS_PARAM_CONFIG:zn,SYSTEM_SCHEMA_NAME:ao}=ri,jn,ei,ti;function PS(){if(jn!==void 0)return jn;if(Ye.getHdbBasePath()!==void 0)return jn=Ye.get(Pr.STORAGE_PATH)||si.join(Ye.getHdbBasePath(),ri.SCHEMA_DIR_NAME),jn}a(PS,"getBaseSchemaPath");function BS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=vS(ao),ei}a(BS,"getSystemSchemaPath");function $M(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=Ye.get(ri.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||si.join(Ye.getHdbBasePath(),ri.TRANSACTIONS_DIR_NAME),ti}a($M,"getTransactionAuditStoreBasePath");function YM(e,t){let r=Ye.get(Pr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||si.join($M(),e.toString())}a(YM,"getTransactionAuditStorePath");function vS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(ri.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||si.join(PS(),e)}a(vS,"getSchemaPath");function KM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,kM(process.argv));let s=r[Pr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!VM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Pr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[zn.PATH];if(u)return DS.set(_,[ao,zn.TABLES,t,zn.PATH],u),Ye.setProperty(Pr.SCHEMAS,_),u;let l=c?.[zn.PATH];if(l)return DS.set(_,[ao,zn.PATH],l),Ye.setProperty(Pr.SCHEMAS,_),l}}let n=r[Pr.STORAGE_PATH.toUpperCase()];if(n){if(!MS.pathExistsSync(n))throw new Error(n+" does not exist");let i=si.join(n,e);return MS.mkdirsSync(i),Ye.setProperty(Pr.STORAGE_PATH,n),i}return BS()}a(KM,"initSystemSchemaPaths");function WM(){jn=void 0,ei=void 0,ti=void 0}a(WM,"resetPaths");HS.exports={getBaseSchemaPath:PS,getSystemSchemaPath:BS,getTransactionAuditStorePath:YM,getSchemaPath:vS,initSystemSchemaPaths:KM,resetPaths:WM}});var Wt=f((dZ,FS)=>{"use strict";var GS=b(),qS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ku=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},QM=Ku.alternatives(Ku.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ku.number()).required();function JM(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(JM,"checkValidTable");function XM(e,t){return GS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(XM,"validateSchemaExists");function ZM(e,t){let r=t.state.ancestors[0].schema;return GS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ZM,"validateTableExists");function zM(e,t){return e.toLowerCase()===qS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${qS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(zM,"validateSchemaName");FS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:QM,validateSchemaExists:XM,validateTableExists:ZM,validateSchemaName:zM,checkValidTable:JM}});var _o=f((fZ,xS)=>{var{common_validators:Br}=Wt(),ni=te(),Bt="is required",Z={schema:{presence:!0,format:Br.schema_format,length:Br.schema_length},table:{presence:!0,format:Br.schema_format,length:Br.schema_length},attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length},hash_attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length}};function ii(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ii,"makeAttributesStrings");function jM(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(jM,"schema_object");function eD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(eD,"table_object");function tD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ni.validateObject(e,Z)}a(tD,"create_table_object");function rD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(rD,"attribute_object");function sD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(sD,"describe_table");function nD(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(nD,"validateTableResidence");xS.exports={schema_object:jM,create_table_object:tD,table_object:eD,attribute_object:rD,describe_table:sD,validateTableResidence:nD}});var kS=f((TZ,VS)=>{"use strict";var iD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||iD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");VS.exports=uo});var Eo=f((RZ,$S)=>{"use strict";var aD=kS(),lo=class extends aD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");$S.exports=lo});var KS=f((pZ,YS)=>{"use strict";YS.exports=cD;var oD="inserted";function cD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===oD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(cD,"returnObject")});var ho=f((NZ,ZS)=>{"use strict";var _D=m(),Wu=X(),uD=zs(),{getSystemSchemaPath:lD,getSchemaPath:ED}=j(),dD=cs(),hD=_o(),fD=Eo(),SD=KS(),{handleHDBError:WS,hdb_errors:JS}=y(),QS=b(),{HTTP_STATUS_CODES:TD}=JS,Qu=dD.hdb_attribute,XS=[];for(let e=0;e<Qu.attributes.length;e++)XS.push(Qu.attributes[e].attribute);var mD="inserted";ZS.exports=RD;async function RD(e){let t=hD.attribute_object(e);if(t)throw WS(new Error,t.message,JS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&QS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw WS(new Error,r,TD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=QS.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 fD(e.schema,e.table,e.attribute,e.id);try{let i=await Wu.openEnvironment(ED(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}`);Wu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Wu.openEnvironment(lD(),_D.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await uD.insertRecords(o,Qu.hash_attribute,XS,[n]);return SD(mD,c,{records:[n]},_)}catch(i){throw i}}a(RD,"lmdbCreateAttribute")});var Xu=f((IZ,jS)=>{var{hdb_schema_table:zS}=Wt(),AD=te(),Ju=require("joi"),pD={undefined:"undefined",null:"null"},gD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||pD[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),ND=Ju.object({schema:zS,table:zS,records:Ju.array().items(Ju.object().custom(gD)).required()});jS.exports=function(e){return AD.validateBySchema(e,ND)}});var fo=f((CZ,tT)=>{"use strict";var hr=b(),eT=I(),wZ=Xu();tT.exports=OD;function OD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&hr.isEmptyOrZeroLength(o[r]))throw eT.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw eT.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(OD,"insertUpdateValidate")});var ai=f((LZ,rT)=>{"use strict";var ID=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=ID.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");rT.exports=So});var mo=f((DZ,sT)=>{"use strict";var MZ=ai(),To=m(),zu=b(),Zu=I(),bD=require("uuid"),{handleHDBError:oi,hdb_errors:wD}=y(),{HDB_ERROR_MSGS:ci,HTTP_STATUS_CODES:_i}=wD;sT.exports=CD;function CD(e,t,r){for(let n=0;n<t.length;n++)yD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];LD(i,r,e.operation)}}a(CD,"processRows");function yD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw oi(new Error,ci.ATTR_NAME_LENGTH_ERR(e),_i.BAD_REQUEST,void 0,void 0,!0);if(zu.isEmptyOrZeroLength(e)||zu.isEmpty(e.trim()))throw oi(new Error,ci.ATTR_NAME_NULLISH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(yD,"validateAttribute");function LD(e,t,r){if(!e.hasOwnProperty(t)||zu.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=bD.v4();return}throw Zu.error("Update transaction aborted due to record with no hash value:",e),oi(new Error,ci.RECORD_MISSING_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zu.error(e),oi(new Error,ci.HASH_VAL_LENGTH_ERR,_i.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Zu.error(e),oi(new Error,ci.INVALID_FORWARD_SLASH_IN_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(LD,"validateHash")});var iT=f((BZ,nT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");nT.exports=Ro});var Ao=f((HZ,cT)=>{var UD=require("crypto"),aT=9;function MD(e){let t=PD(aT),r=oT(e+t);return t+r}a(MD,"createHash");function DD(e,t){let r=e.substr(0,aT),s=r+oT(t+r);return e===s}a(DD,"validateHash");function PD(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(PD,"generateSalt");function oT(e){return UD.createHash("md5").update(e).digest("hex")}a(oT,"md5");cT.exports={hash:MD,validate:DD}});var uT=f((GZ,_T)=>{"use strict";var vr=m(),ui=class{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(ui,"BaseLicense");var po=class extends ui{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");_T.exports={BaseLicense:ui,ExtendedLicense:po}});var tn=f((xZ,ST)=>{"use strict";var en=require("fs-extra"),lT=Ao(),ET=require("crypto"),BD=require("moment"),vD=require("uuid").v4,De=I(),el=require("path"),HD=b(),ct=m(),qD=uT().ExtendedLicense,js="invalid license key format",GD="061183",FD="mofi25",xD="aes-256-cbc",VD=16,kD=32,dT=v();dT.initSync();var ju;ST.exports={validateLicense:hT,generateFingerPrint:YD,licenseSearch:fT,getLicense:QD};function tl(){return el.join(dT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(tl,"getLicenseDirPath");function $D(){let e=tl();return el.join(e,ct.LICENSE_FILE_NAME)}a($D,"getLicenseFilePath");function rl(){let e=tl();return el.join(e,ct.REG_KEY_FILE_NAME)}a(rl,"getFingerPrintFilePath");async function YD(){let e=rl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await KD();throw De.error(`Error writing fingerprint file to ${e}`),De.error(t),new Error("There was an error generating the fingerprint")}}a(YD,"generateFingerPrint");async function KD(){let e=vD(),t=lT.hash(e),r=rl();try{await en.mkdirp(tl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw De.error(`Error writing fingerprint file to ${r}`),De.error(s),new Error("There was an error generating the fingerprint")}return t}a(KD,"writeFingerprint");function hT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return De.error("empty license key passed to validate."),r;let s=rl(),n=!1;try{n=en.statSync(s)}catch(i){De.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{De.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(FD),c=o[1];c=Buffer.concat([Buffer.from(c)],VD);let _=Buffer.concat([Buffer.from(i)],kD),u=ET.createDecipheriv(xD,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=WD(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),De.error(js),new Error(js)}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(js),De.error(js),new Error(js)}else r.exp_date=l;r.exp_date<BD().valueOf()&&(r.valid_date=!1),lT.validate(o[1],`${GD}${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||De.error("Invalid licence"),r}a(hT,"validateLicense");function WD(e,t){try{let r=ET.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{De.warn("Check old license failed")}}a(WD,"checkOldLicense");function fT(){let e=new qD;e.api_call=0;let t=[];try{t=en.readFileSync($D(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?De.info("no license file found"):De.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(HD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=hT(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){De.error("There was an error parsing the license string."),De.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),ju=e,e}a(fT,"licenseSearch");async function QD(){return ju||await fT(),ju}a(QD,"getLicense")});var rn=f((kZ,cl)=>{"use strict";var{Worker:JD,MessageChannel:XD,parentPort:fr,isMainThread:RT,threadId:ZD,workerData:zD}=require("worker_threads"),{PACKAGE_ROOT:jD}=m(),{join:eP,isAbsolute:tP,extname:rP}=require("path"),{totalmem:TT}=require("os"),al=m(),AT=v(),sP=tn(),go=I(),nP=m();AT.initSync();var iP=AT.get(al.CONFIG_PARAMS.HTTP_THREADS)||1,aP=1024*1024,Hr=[],ds=[],oP=50,pT=1e4,gT="restart",NT="request_thread_info",OT="resource_report",IT="thread_info",bT="added-port",sl;cl.exports={startWorker:nl,restartWorkers:ol,shutdownWorkers:_P,workers:Hr,setMonitorListener:hP,onMessageFromWorkers:uP,broadcast:lP};function nl(e,t={}){let s=sP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||TT();n=Math.min(n,TT());let i=Math.min(Math.max(Math.floor(n/aP/(1+iP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of ds){let{port1:l,port2:E}=new XD;u.postMessage({type:bT,port:l},[l]),c.push(E)}rP(e)||(e+=".js");let _=new JD(tP(e)?e:eP(jD,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{nl(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{Hr.splice(Hr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<oP?(t.unexpectedRestarts=_.unexpectedRestarts+1,nl(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===gT&&ol(u.workerType),u.type===NT&&EP(_),u.type===OT&&dP(_,u)}),Hr.push(_),SP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(nl,"startWorker");var cP=[al.THREAD_TYPES.HTTP];async function ol(e=null,t=2,r=!0){if(RT){t<1&&(t=t*Hr.length);let s=[];for(let n of Hr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:al.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=cP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),pT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:gT,workerType:e})}a(ol,"restartWorkers");function _P(e){return ol(e,1/0,!1)}a(_P,"shutdownWorkers");var wT=[];function uP(e){wT.push(e)}a(uP,"onMessageFromWorkers");function lP(e){for(let t of ds)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(lP,"broadcast");function EP(e){e.postMessage({type:IT,workers:CT()})}a(EP,"sendThreadInfo");function CT(){let e=Date.now();return Hr.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}))}a(CT,"getChildWorkerInfo");function dP(e,t){e.resources=t,e.resources.updated=Date.now()}a(dP,"recordResourceReport");var il;function hP(e){il=e}a(hP,"setMonitorListener");var fP=1e3,mT=!1;function SP(){mT||(mT=!0,setInterval(()=>{for(let e of Hr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}il&&il()},fP).unref())}a(SP,"startMonitoring");var TP=1e3;if(fr){No(fr);for(let e of zD.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:OT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},TP).unref(),sl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:NT});function r(s){s.type===IT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sl=CT;cl.exports.getThreadInfo=sl;function No(e,t){ds.push(e),e.on("message",r=>{if(r.type===bT)No(r.port);else for(let s of wT)s(r)}).on("close",()=>{ds.splice(ds.indexOf(e),1)}).on("exit",()=>{ds.splice(ds.indexOf(e),1)}),t||e.unref()}a(No,"addPort");RT||fr.on("message",async e=>{let{type:t}=e;t===nP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",ZD),process.exit(0)},pT).unref())})});var UT=f((YZ,LT)=>{"use strict";var _l=X(),mP=I(),yT=it().LMDB_ERRORS_ENUM;LT.exports=RP;async function RP(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 o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await _l.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==yT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await _l.closeEnvironment(global.lmdb_map[s]),await _l.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==yT.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){mP.error(t)}}a(RP,"cleanLMDBMap")});var Ot=f((WZ,PT)=>{"use strict";var Io=Xu(),Nt=b(),AP=require("util"),bo=Qt(),pP=Gr(),ul=I(),{handleHDBError:qr,hdb_errors:gP}=y(),{HTTP_STATUS_CODES:hs}=gP,NP=AP.promisify(pP.getTableSchema),OP="updated",MT="inserted",DT="upserted";PT.exports={insert:bP,update:wP,upsert:CP,validation:IP,flush:yP};async function IP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await NP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ul.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(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ul.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(IP,"validation");async function bP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw qr(new Error,t.message,hs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,hs.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(MT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(bP,"insertData");async function wP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw qr(new Error,t.message,hs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,hs.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(OP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(wP,"updateData");async function CP(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",hs.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw qr(new Error,t.message,hs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,hs.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(DT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw qr(s,null,null,ul.ERR,n)}}a(CP,"upsertData");function Oo(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===MT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===DT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function yP(e){return bo.flush(e.schema,e.table)}a(yP,"flush")});var El=f((JZ,HT)=>{var LP=te(),ll=require("joi"),{hdb_schema_table:BT}=Wt(),vT={schema:BT,table:BT},UP={date:ll.date().iso().required()},MP={timestamp:ll.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};HT.exports=function(e,t){let r=t==="timestamp"?{...vT,...MP}:{...vT,...UP},s=ll.object(r);return LP.validateBySchema(e,s)}});var xT=f((XZ,FT)=>{var DP=te(),qT=require("joi"),{hdb_schema_table:GT}=Wt(),PP=qT.object({schema:GT,table:GT,hash_values:qT.array().required()});FT.exports=function(e){return DP.validateBySchema(e,PP)}});var kT=f((ZZ,VT)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(Co,"NoSQLSeachObject");var yo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(yo,"DeleteResponseObject");VT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ss=f((jZ,QT)=>{"use strict";var YT=El(),BP=xT(),Lo=b(),$T=require("moment"),KT=I(),{promisify:vP,callbackify:HP}=require("util"),fs=m(),qP=Gr(),dl=vP(qP.getTableSchema),hl=Qt(),{DeleteResponseObject:GP}=kT(),{handleHDBError:Fr,hdb_errors:FP}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:xr}=FP,xP="records successfully deleted",VP=HP(WT);QT.exports={delete:VP,deleteRecord:WT,deleteFilesBefore:kP,deleteAuditLogsBefore:$P};async function kP(e){let t=YT(e,"date");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(!$T(e.date,$T.ISO_8601).isValid())throw Fr(new Error,Uo.INVALID_DATE,xr.BAD_REQUEST,fs.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=Lo.checkSchemaTableExist(e.schema,e.table);if(s)throw Fr(new Error,s,xr.NOT_FOUND,fs.LOG_LEVELS.ERROR,s,!0);let n=await hl.deleteRecordsBefore(e);if(await dl(e.schema,e.table),KT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(kP,"deleteFilesBefore");async function $P(e){let t=YT(e,"timestamp");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Fr(new Error,Uo.INVALID_VALUE("Timestamp"),xr.BAD_REQUEST,fs.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,fs.LOG_LEVELS.ERROR,r,!0);let s=await hl.deleteAuditLogsBefore(e);return await dl(e.schema,e.table),KT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a($P,"deleteAuditLogsBefore");async function WT(e){let t=BP(e);if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,fs.LOG_LEVELS.ERROR,r,!0);try{await dl(e.schema,e.table);let s=await hl.deleteRecords(e);return Lo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${xP}`),s}catch(s){if(s.message===fs.SEARCH_NOT_FOUND_MESSAGE){let n=new GP;return n.message=fs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(WT,"deleteRecord")});var XT=f((t3,JT)=>{var fl=te(),Pe={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 YP(e){return Pe.password.presence=!0,Pe.username.presence=!0,Pe.role.presence=!0,Pe.active.presence=!0,fl.validateObject(e,Pe)}a(YP,"addUserValidation");function KP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(KP,"alterUserValidation");function WP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(WP,"dropUserValidation");JT.exports={addUserValidation:YP,alterUserValidation:KP,dropUserValidation:WP}});var Vr=f((s3,em)=>{"use strict";var li=require("crypto"),zT="aes-256-cbc",QP=32,JP=16,Sl=64,jT=32,XP=Sl+jT,ZT=new Map;em.exports={encrypt:ZP,decrypt:zP,createNatsTableStreamName:jP};function ZP(e){let t=li.randomBytes(QP),r=li.randomBytes(JP),s=li.createCipheriv(zT,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(ZP,"encrypt");function zP(e){let t=e.substr(0,Sl),r=e.substr(Sl,jT),s=e.substr(XP,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=li.createDecipheriv(zT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(zP,"decrypt");function jP(e,t){let r=`${e}.${t}`,s=ZT.get(r);return s||(s=li.createHash("md5").update(`${e}.${t}`).digest("hex"),ZT.set(r,s)),s}a(jP,"createNatsTableStreamName")});var ue=f((a3,rm)=>{"use strict";var{platform:i3}=require("os"),eB="nats-server.zip",Tl="nats-server",tB=process.platform==="win32"?`${Tl}.exe`:Tl,ml="HDB",rB=/^[^\s.,*>]+$/,tm="__request__",sB=a(e=>`${e}.${tm}`,"REQUEST_SUBJECT"),nB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},iB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aB={HUB:"hub.pid",LEAF:"leaf.pid"},oB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},cB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ml,deliver_subject:"__HDB__.WORKQUEUE"},_B={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ml,deliver_subject:"HDB.SCHEMAQUEUE"},uB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ml,deliver_subject:"HDB.USERQUEUE"},lB={SUCCESS:"success",ERROR:"error"},EB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dB={TXN:"txn",MSGID:"msgid"},sn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},hB={[sn.ERR]:1,[sn.WRN]:2,[sn.INF]:3,[sn.DBG]:4,[sn.TRC]:5},fB={debug:"-D",trace:"-DVV"};rm.exports={NATS_SERVER_ZIP:eB,NATS_SERVER_NAME:Tl,NATS_BINARY_NAME:tB,PID_FILES:aB,NATS_CONFIG_FILES:iB,SERVER_SUFFIX:oB,WORK_QUEUE_CONSUMER_NAMES:cB,SCHEMA_QUEUE_CONSUMER_NAMES:_B,USER_QUEUE_CONSUMER_NAMES:uB,NATS_TERM_CONSTRAINTS_RX:rB,REQUEST_SUFFIX:tm,UPDATE_REMOTE_RESPONSE_STATUSES:lB,CLUSTER_STATUS_STATUSES:EB,REQUEST_SUBJECT:sB,SUBJECT_PREFIXES:dB,MSG_HEADERS:nB,LOG_LEVELS:sn,LOG_LEVEL_FLAGS:fB,LOG_LEVEL_HIERARCHY:hB}});var Sr=f((_3,Tm)=>{"use strict";var om="username is required",cm="nothing to update, must supply active, role or password to update",_m="password cannot be an empty string",um="If role is specified, it cannot be empty.",lm="active must be true or false";Tm.exports={addUser:NB,alterUser:OB,dropUser:bB,userInfo:wB,listUsers:Do,listUsersExternal:CB,setUsersToGlobal:Ei,findAndValidateUser:UB,getClusterUser:MB,USERNAME_REQUIRED:om,ALTERUSER_NOTHING_TO_UPDATE:cm,EMPTY_PASSWORD:_m,EMPTY_ROLE:um,ACTIVE_BOOLEAN:lm};var Em=Ot(),SB=Ss(),Al=Ao(),dm=XT(),hm=It(),pl=an(),_t=b(),fm=require("validate.js"),M=I(),{promisify:gl}=require("util"),Nl=Vr(),sm=m(),nm=ue(),TB=lr(),c3=v(),mB=tn(),RB=cs(),{handleHDBError:Jt,hdb_errors:AB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Rl,HDB_ERROR_MSGS:nn}=AB,{UserEventMsg:Ol}=kr(),im=require("lodash"),Sm={username:!0,active:!0,role:!0,password:!0},am=new Map,Mo=gl(hm.searchByValue),pB=gl(hm.searchByHash),gB=gl(SB.delete);async function NB(e){let t=fm.cleanAttributes(e,Sm),r=dm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,nn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,nn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Em.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await Ei()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,nn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],pl.signalUserChange(new Ol(process.pid)),`${c.username} successfully added`}a(NB,"addUser");async function OB(e){let t=fm.cleanAttributes(e,Sm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(om);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(cm);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(_m);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(lm);let r=IB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password)),t.role==="")throw new Error(um);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=nn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=nn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Em.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await Ei()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return pl.signalUserChange(new Ol(process.pid)),n}a(OB,"alterUser");function IB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(IB,"isClusterUser");async function bB(e){try{let t=dm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,nn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await gB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await Ei()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return pl.signalUserChange(new Ol(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bB,"dropUser");async function wB(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 pB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(wB,"userInfo");async function CB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(CB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=im.cloneDeep(o);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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=im.cloneDeep(o),o.role=r[o.role],yB(o.role),i.set(o.username,o);return(await mB.getLicense()).enterprise?i:LB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function yB(e){try{if(!e){M.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(RB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(yB,"appendSystemTablesToRole");function LB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(LB,"nonEnterpriseFilter");async function Ei(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(Ei,"setUsersToGlobal");async function UB(e,t,r=!0){global.hdb_users||await Ei();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Rl.USER_INACTIVE,Xt.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(am.get(t)===s.password)return n;if(Al.validate(s.password,t))am.set(t,s.password);else throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(UB,"findAndValidateUser");async function MB(){let e=await Do(),t=TB.getConfigFromFile(sm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===sm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Nl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+nm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+nm.SERVER_SUFFIX.ADMIN,r}a(MB,"getClusterUser")});var Po=f((l3,pm)=>{"use strict";var Ts=I(),ut=m(),DB=UT(),mm=Gr(),PB=ms(),BB=Sr(),{validateEvent:Am}=kr(),di=Qt(),vB=require("process"),HB={[ut.ITC_EVENT_TYPES.SCHEMA]:qB,[ut.ITC_EVENT_TYPES.USER]:FB};async function qB(e){let t=Am(e);if(t){Ts.error(t);return}Ts.trace("ITC schemaHandler received schema event:",e),await DB(e.message),await GB(e.message)}a(qB,"schemaHandler");async function GB(e){try{if(di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 PB.describeTable({schema:e.schema,table:e.table});break;default:mm.setSchemaDataToGlobal(Rm);break}else mm.setSchemaDataToGlobal(Rm)}catch(t){Ts.error(t)}}a(GB,"syncSchemaMetadata");function Rm(e){e&&Ts.error(e)}a(Rm,"handleErrorCallback");async function FB(e){try{di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Am(e);if(t){Ts.error(t);return}Ts.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${vB.pid} received user event:`,e),await BB.setUsersToGlobal()}catch(t){Ts.error(t)}}a(FB,"userHandler");pm.exports=HB});var kr=f((S3,Nm)=>{"use strict";var d3=I(),Il=b(),xB=m(),{ITC_ERRORS:hi}=it(),{parentPort:h3,threadId:VB,isMainThread:kB,workerData:f3}=require("worker_threads"),{onMessageFromWorkers:$B,broadcast:YB}=rn();Nm.exports={sendItcEvent:KB,validateEvent:gm,SchemaEventMsg:WB,UserEventMsg:QB};var Bo;$B(e=>{Bo=Bo||Po(),gm(e),Bo[e.type]&&Bo[e.type](e)});function KB(e){!kB&&e.message&&(e.message.originator=VB),YB(e)}a(KB,"sendItcEvent");function gm(e){if(typeof e!="object")return hi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Il.isEmpty(e.type))return hi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Il.isEmpty(e.message))return hi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Il.isEmpty(e.message.originator))return hi.MISSING_ORIGIN;if(xB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hi.INVALID_EVENT(e.type)}a(gm,"validateEvent");function WB(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(WB,"SchemaEventMsg");function QB(e){this.originator=e}a(QB,"UserEventMsg")});var an=f((R3,wm)=>{"use strict";var Om=m(),m3=b(),vo=I(),Im=iT(),on,{sendItcEvent:bm}=kr();function JB(e){try{vo.trace("signalSchemaChange called with message:",e),on=on||Po();let t=new Im(Om.ITC_EVENT_TYPES.SCHEMA,e);on.schema(t),bm(t)}catch(t){vo.error(t)}}a(JB,"signalSchemaChange");function XB(e){try{vo.trace("signalUserChange called with message:",e),on=on||Po();let t=new Im(Om.ITC_EVENT_TYPES.USER,e);on.user(t),bm(t)}catch(t){vo.error(t)}}a(XB,"signalUserChange");wm.exports={signalSchemaChange:JB,signalUserChange:XB}});var Ho=f((p3,ym)=>{"use strict";var Cm=b(),ZB=m(),zB=I(),jB=ho(),ev=Eo(),tv=an(),{SchemaEventMsg:rv}=kr(),sv="already exists in";ym.exports=nv;async function nv(e,t,r){if(Cm.isEmptyOrZeroLength(r))return r;let s=[];Cm.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 iv(e,t.schema,t.name,i)})),n}a(nv,"lmdbCheckForNewAttributes");async function iv(e,t,r,s){let n=new ev(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await av(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(sv))zB.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(iv,"createNewAttribute");async function av(e){let t;return t=await jB(e),tv.signalSchemaChange(new rv(process.pid,ZB.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(av,"createAttribute")});var cn=f((N3,Lm)=>{"use strict";var qo=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(qo,"LMDBTransactionObject");Lm.exports=qo});var Mm=f((I3,Um)=>{"use strict";var ov=cn(),cv=m().OPERATIONS_ENUM,Go=class extends ov{constructor(t,r,s,n,i=void 0){super(cv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Um.exports=Go});var Pm=f((w3,Dm)=>{"use strict";var _v=cn(),uv=m().OPERATIONS_ENUM,Fo=class extends _v{constructor(t,r,s,n,i,o=void 0){super(uv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Dm.exports=Fo});var vm=f((y3,Bm)=>{"use strict";var lv=cn(),Ev=m().OPERATIONS_ENUM,xo=class extends lv{constructor(t,r,s,n,i,o=void 0){super(Ev.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Bm.exports=xo});var qm=f((U3,Hm)=>{"use strict";var dv=cn(),hv=m().OPERATIONS_ENUM,Vo=class extends dv{constructor(t,r,s,n,i=void 0){super(hv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");Hm.exports=Vo});var fi=f((P3,Vm)=>{"use strict";var D3=require("path"),Gm=X(),fv=Mm(),Sv=Pm(),Tv=vm(),mv=qm(),_n=Le(),Fm=b(),{CONFIG_PARAMS:Rv}=m(),xm=v();xm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Av}=j();Vm.exports=pv;async function pv(e,t){if(xm.get(Rv.LOGGING_AUDITLOG)===!1)return;let r=Av(e.schema,e.table),s=await Gm.openEnvironment(r,e.table,!0),n=gv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Gm.initializeDBIs(s,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Fm.isEmpty(n.user_name)||s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(pv,"writeTransaction");function gv(e,t){let r=Fm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new fv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Sv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Tv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new mv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(gv,"createTransactionObject")});var bl=f((H3,km)=>{"use strict";var Nv=fo(),v3=ai(),Si=m(),Ov=mo(),Iv=zs().insertRecords,bv=X(),wv=I(),Cv=Ho(),{getSchemaPath:yv}=j(),Lv=fi();km.exports=Uv;async function Uv(e){try{let{schema_table:t,attributes:r}=Nv(e);Ov(e,r,t.hash_attribute),e.schema!==Si.SYSTEM_SCHEMA_NAME&&(r.includes(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Cv(e.hdb_auth_header,t,r),n=yv(e.schema,e.table),i=await bv.openEnvironment(n,e.table),o=await Iv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Lv(e,o)}catch(c){wv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Uv,"lmdbCreateRecords")});var Km=f((G3,Ym)=>{"use strict";var $m=m(),Mv=bl(),Dv=ai(),Pv=require("fs-extra"),{getSchemaPath:Bv}=j();Ym.exports=vv;async function vv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Dv($m.SYSTEM_SCHEMA_NAME,$m.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Mv(r),await Pv.mkdirp(Bv(e.schema))}a(vv,"lmdbCreateSchema")});var Qm=f((x3,Wm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Wm.exports=$o});var yl=f((K3,Zm)=>{"use strict";var Jm=X(),wl=_s(),Cl=it().LMDB_ERRORS_ENUM,Hv=Le(),Xm=I(),k3=b(),qv=require("lmdb"),Gv=Qm(),Fv=m(),{OVERFLOW_MARKER:$3,MAX_SEARCH_KEY_LENGTH:Y3}=Hv,xv=Fv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Vv(e,t,r,s){if(wl.validateEnv(e),t===void 0)throw new Error(Cl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cl.IDS_REQUIRED):new Error(Cl.IDS_MUST_BE_ITERABLE);try{let n=Jm.listDBIs(e);Jm.initializeDBIs(e,t,n);let i=new Gv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[xv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,qv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=wl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{Xm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Xm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;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 h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=wl.getNextMonotonicTime(),i}catch(n){throw n}}a(Vv,"deleteRecords");Zm.exports={deleteRecords:Vv}});var Ti=f((Q3,jm)=>{"use strict";var un=b(),kv=yl(),$v=X(),{getSchemaPath:Yv}=j(),Kv=fi(),Wv=I();jm.exports=Qv;async function Qv(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(un.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(un.isEmptyOrZeroLength(e.hash_values)&&!un.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];un.isEmpty(_)||e.hash_values.push(_)}}if(un.isEmptyOrZeroLength(e.hash_values))return zm([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(un.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=Yv(e.schema,e.table),i=await $v.openEnvironment(n,e.table),o=await kv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Kv(e,o)}catch(c){Wv.error(`unable to write transaction due to ${c.message}`)}return zm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Qv,"lmdbDeleteRecords");function zm(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(zm,"createDeleteResponse")});var Ul=f((Z3,eR)=>{"use strict";var Jv=m(),X3=_s();function Ll(e,t){let r=Object.create(null);if(t.length===1&&Jv.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Ll,"parseRow");function Xv(e,t,r,s){let n=Ll(r,e);s.push(n)}a(Xv,"searchAll");function Zv(e,t,r,s){let n=Ll(r,e);s[t]=n}a(Zv,"searchAllToMap");function zv(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zv,"iterateDBI");function Rs(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Rs,"pushResults");function jv(e,t,r,s,n,i){t.toString().endsWith(e)&&Rs(t,r,s,n,i)}a(jv,"endsWith");function eH(e,t,r,s,n,i){t.toString().includes(e)&&Rs(t,r,s,n,i)}a(eH,"contains");function tH(e,t,r,s,n,i){t>e&&Rs(t,r,s,n,i)}a(tH,"greaterThanCompare");function rH(e,t,r,s,n,i){t>=e&&Rs(t,r,s,n,i)}a(rH,"greaterThanEqualCompare");function sH(e,t,r,s,n,i){t<e&&Rs(t,r,s,n,i)}a(sH,"lessThanCompare");function nH(e,t,r,s,n,i){t<=e&&Rs(t,r,s,n,i)}a(nH,"lessThanEqualCompare");eR.exports={parseRow:Ll,searchAll:Xv,searchAllToMap:Zv,iterateDBI:zv,endsWith:jv,contains:eH,greaterThanCompare:tH,greaterThanEqualCompare:rH,lessThanCompare:sH,lessThanEqualCompare:nH,pushResults:Rs}});var ps=f((rz,oR)=>{"use strict";var $r=X(),j3=I(),lt=_s(),Yo=Le(),oe=it().LMDB_ERRORS_ENUM,ez=b(),iH=m(),Ko=Ul(),{parseRow:aH}=Ko,tz=require("lmdb"),{OVERFLOW_MARKER:tR,MAX_SEARCH_KEY_LENGTH:oH}=Yo;function rR(e,t,r,s=!1,n=void 0,i=void 0){return As(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(rR,"iterateFullIndex");function mi(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return As(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(mi,"iterateRangeBetween");function As(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(As,"setupTransaction");function sR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(tR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(sR,"getOverflowCheck");function cH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return As(e,t,t,(o,c,_)=>(Wo(r),r=Ri(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>aH(u.value,r))))}a(cH,"searchAll");function _H(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ri(e.database||e,r);let o=new Map;for(let{key:c,value:_}of rR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(_H,"searchAllToMap");function uH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=rR(e,void 0,t,r,s,n),c=o.transaction,_=sR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(uH,"iterateDBI");function lH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(lH,"countAll");function EH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),As(e,t,r,(c,_,u,l)=>(s=lt.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:o}).map(E=>({key:s,value:E}))))}a(EH,"equals");function dH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(dH,"count");function hH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),As(e,null,r,(c,_)=>{s=lt.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(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.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:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(hH,"startsWith");function fH(e,t,r,s,n=!1,i=void 0,o=void 0){return nR(e,t,r,s,n,i,o,!0)}a(fH,"endsWith");function nR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),As(e,null,r,(_,u,l,E)=>{let d=sR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(tR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(nR,"contains");function SH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!0,!1)}a(SH,"greaterThan");function TH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!1,!1)}a(TH,"greaterThanEqual");function mH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!0)}a(mH,"lessThan");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!1)}a(RH,"lessThanEqual");function AH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(oe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(oe.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(oe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mi(e,t,r,s,n,i,o,c)}a(AH,"between");function pH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ri(n,r),s===void 0)throw new Error(oe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(pH,"searchByHash");function gH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(gH,"checkHashExists");function NH(e,t,r,s,n=[]){return aR(e,t,r,s,n),iR(e,t,r,s,n).map(i=>i[1])}a(NH,"batchSearchByHash");function OH(e,t,r,s,n=[]){aR(e,t,r,s,n);let i=new Map;for(let[o,c]of iR(e,t,r,s,n))i.set(o,c);return i}a(OH,"batchSearchByHashToMap");function iR(e,t,r,s,n=[]){return As(e,t,t,(i,o,c)=>{r=Ri(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(iR,"batchHashSearch");function aR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(oe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(oe.IDS_MUST_BE_ITERABLE)}a(aR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(oe.FETCH_ATTRIBUTES_REQUIRED):new Error(oe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.SEARCH_VALUE_REQUIRED);if(r?.length>oH)throw new Error(oe.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ri(e,t){return t.length===1&&iH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ri,"setGetWholeRowAttributes");oR.exports={searchAll:cH,searchAllToMap:_H,count:dH,countAll:lH,equals:EH,startsWith:hH,endsWith:fH,contains:nR,searchByHash:pH,setGetWholeRowAttributes:Ri,batchSearchByHash:NH,batchSearchByHashToMap:OH,checkHashExists:gH,iterateDBI:uH,greaterThan:SH,greaterThanEqual:TH,lessThan:mH,lessThanEqual:RH,between:AH}});var Ai=f((iz,lR)=>{var cR=require("lodash"),_R=te(),W=require("joi"),IH=b(),{hdb_schema_table:vt,checkValidTable:uR}=Wt(),{handleHDBError:bH,hdb_errors:wH}=y(),{HTTP_STATUS_CODES:CH}=wH,nz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),yH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),LH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});lR.exports=function(e,t){let r=null;switch(t){case"value":r=_R.validateBySchema(e,yH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(uR("schema",e.schema)),i(uR("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=_R.validateBySchema(e,LH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=IH.checkGlobalSchemaTable(e.schema,e.table);if(n)return bH(new Error,n,CH.NOT_FOUND);let o=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 _=cR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!cR.some(o,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 Ml=f((oz,ER)=>{"use strict";var UH=X(),MH=Ai(),{getSchemaPath:DH}=j();ER.exports=PH;function PH(e){let t=MH(e,"hashes");if(t)throw t;let r=DH(e.schema,e.table);return UH.openEnvironment(r,e.table)}a(PH,"initialize")});var Dl=f((_z,dR)=>{"use strict";var BH=ps(),vH=Ml();dR.exports=HH;async function HH(e){let t=await vH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return BH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(HH,"lmdbGetDataByHash")});var ln=f((lz,hR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");hR.exports=Qo});var SR=f((hz,fR)=>{"use strict";var dz=ln(),qH=ps(),GH=Ml();fR.exports=FH;async function FH(e){let t=await GH(e),r=global.hdb_schema[e.schema][e.table];return qH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(FH,"lmdbSearchByHash")});var Ht=f((Sz,TR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,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=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");TR.exports=Jo});var Xo=f((mz,NR)=>{"use strict";var Be=ps(),xH=X(),VH=b(),C=Le(),gs=m(),kH=cs(),mR=it().LMDB_ERRORS_ENUM,{compareKeys:En}=require("ordered-binary"),{getSchemaPath:$H}=j(),Tr=gs.SEARCH_WILDCARDS;async function YH(e,t,r){let s;e.schema===gs.SYSTEM_SCHEMA_NAME?s=kH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=gR(e,s.hash_attribute,r,t);return AR(e,n,s.hash_attribute,r)}a(YH,"prepSearch");async function AR(e,t,r,s){let n=$H(e.schema,e.table),i=await xH.openEnvironment(n,e.table),o=pR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(WH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?RR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?RR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(AR,"executeSearch");function pR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(pR,"searchByType");function KH(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return En(i,s[0])>=0&&En(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>En(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>En(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>En(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>En(n[r],s)<=0;default:return Object.create(null)}}a(KH,"filterByType");function RR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(RR,"createMapFromIterable");function WH(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(WH,"checkToFetchMore");function gR(e,t,r,s){if(VH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(mR.UNKNOWN_SEARCH_TYPE)}else switch(s){case gs.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case gs.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case gs.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case gs.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case gs.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(mR.UNKNOWN_SEARCH_TYPE)}}a(gR,"createSearchTypeFromSearchObject");NR.exports={executeSearch:AR,createSearchTypeFromSearchObject:gR,prepSearch:YH,searchByType:pR,filterByType:KH}});var IR=f((pz,OR)=>{"use strict";var Az=Ht(),QH=Ai(),JH=b(),XH=m(),ZH=Xo();OR.exports=zH;function zH(e,t){if(!JH.isEmpty(t)&&XH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=QH(e,"value");if(s)throw s;let n=!0;return ZH.prepSearch(e,t,n)}a(zH,"lmdbGetDataByValue")});var dn=f((Oz,bR)=>{"use strict";var Nz=Ht(),jH=Ai(),eq=b(),tq=m(),rq=Xo();bR.exports=sq;async function sq(e,t){if(!eq.isEmpty(t)&&tq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=jH(e,"value");if(s)throw s;return rq.prepSearch(e,t,!1)}a(sq,"lmdbSearchByValue")});var CR=f((wz,wR)=>{"use strict";var bz=Le(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");wR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var DR=f((Lz,MR)=>{"use strict";var yz=CR().SearchByConditionsObject,nq=Ht(),iq=Ai(),Pl=ps(),ec=Le(),UR=Xo(),aq=Ul(),oq=require("lodash"),{getSchemaPath:cq}=j(),yR=X(),{handleHDBError:_q,hdb_errors:uq}=y(),{HTTP_STATUS_CODES:lq}=uq,Eq=1e8;MR.exports=dq;async function dq(e){let t=iq(e,"conditions");if(t)throw _q(t,t.message,lq.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=cq(e.schema,e.table),s=await yR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)yR.openDBI(s,u.search_attribute);let i=oq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Pl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Eq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await LR(o,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(UR.filterByType),E=l.length,d=Pl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))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(h=>aq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await LR(o,e,d,n.hash_attribute);c=c.concat(h)}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),_=Pl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(dq,"lmdbSearchByConditions");async function LR(e,t,r,s){let n=new nq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,UR.searchByType(e,n,i,s).map(o=>o.value)}a(LR,"executeConditionSearch")});var pi=f((Mz,PR)=>{"use strict";var hq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=hq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");PR.exports=tc});var Bl=f((Pz,VR)=>{"use strict";var qR=Ht(),GR=pi(),FR=dn(),xR=Ti(),Ke=m(),BR=b(),vR=X(),{getTransactionAuditStorePath:fq,getSchemaPath:Sq}=j(),HR=I();VR.exports=Tq;async function Tq(e){try{if(BR.isEmpty(global.hdb_schema[e.schema])||BR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await mq(e),await Rq(e);let t=Sq(e.schema,e.table);try{await vR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")HR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fq(e.schema,e.table);await vR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")HR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Tq,"lmdbDropTable");async function mq(e){let t=new qR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await FR(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await xR(n)}a(mq,"deleteAttributesFromSystem");async function Rq(e){let t=new qR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await FR(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await xR(n)}catch(i){throw i}}a(Rq,"dropTableFromSystem")});var $R=f((vz,kR)=>{"use strict";var Aq=require("fs-extra"),pq=Ht(),gq=ln(),Nq=pi(),Oq=Bl(),Iq=Ti(),bq=Dl(),wq=dn(),mr=m(),{getSchemaPath:Cq}=j(),{handleHDBError:yq,hdb_errors:Lq}=y(),{HDB_ERROR_MSGS:Uq,HTTP_STATUS_CODES:Mq}=Lq;kR.exports=Dq;async function Dq(e){let t;try{t=await Pq(e.schema);let r=new pq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await wq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Oq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new Nq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Iq(n);let i=Cq(t);await Aq.remove(i)}catch(r){throw r}}a(Dq,"lmdbDropSchema");async function Pq(e){let t=new gq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await bq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw yq(new Error,Uq.SCHEMA_NOT_FOUND(e),Mq.NOT_FOUND,void 0,void 0,!0);return s}a(Pq,"validateDropSchema")});var vl=f((qz,YR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");YR.exports=rc});var WR=f((xz,KR)=>{"use strict";var Bq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:vq}=j(),Hl=Le(),Fz=vl();KR.exports=Hq;async function Hq(e){let t;try{let r=vq(e.schema,e.table);await Bq.mkdirp(r),t=await sc.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{sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Hq,"createTransactionsAuditEnvironment")});var ZR=f((kz,XR)=>{"use strict";var ql=m(),QR=X(),qq=zs(),{getSystemSchemaPath:Gq,getSchemaPath:Fq}=j(),xq=cs(),Vq=ho(),Gl=Eo(),kq=I(),$q=WR(),xl=xq.hdb_table,JR=[];for(let e=0;e<xl.attributes.length;e++)JR.push(xl.attributes[e].attribute);XR.exports=Yq;async function Yq(e,t){let r=Fq(t.schema,t.table),s=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await QR.createEnvironment(r,t.table),e!==void 0){let o=await QR.openEnvironment(Gq(),ql.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await qq.insertRecords(o,xl.hash_attribute,JR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Fl(s),await Fl(n),await Fl(i)}await $q(t)}catch(o){throw o}}a(Yq,"lmdbCreateTable");async function Fl(e){try{await Vq(e)}catch(t){kq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fl,"createAttribute")});var jR=f((Yz,zR)=>{"use strict";var Kq=fo(),Wq=mo(),Qq=Ho(),gi=m(),Jq=zs().updateRecords,Xq=X(),{getSchemaPath:Zq}=j(),zq=fi(),jq=I();zR.exports=eG;async function eG(e){try{let{schema_table:t,attributes:r}=Kq(e);Wq(e,r,t.hash_attribute),e.schema!==gi.SYSTEM_SCHEMA_NAME&&(r.includes(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Qq(e.hdb_auth_header,t,r),n=Zq(e.schema,e.table),i=await Xq.openEnvironment(n,e.table),o=await Jq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zq(e,o)}catch(c){jq.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(eG,"lmdbUpdateRecords")});var tA=f((Wz,eA)=>{"use strict";var tG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=tG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");eA.exports=nc});var sA=f((Xz,rA)=>{"use strict";var Jz=tA(),rG=fo(),sG=mo(),nG=Ho(),Ni=m(),iG=zs().upsertRecords,aG=X(),{getSchemaPath:oG}=j(),cG=fi(),_G=I(),{handleHDBError:uG,hdb_errors:lG}=y();rA.exports=EG;async function EG(e){let t;try{t=rG(e)}catch(_){throw uG(_,_.message,lG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;sG(e,s,r.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(s.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await nG(e.hdb_auth_header,r,s),i=oG(e.schema,e.table),o=await aG.openEnvironment(i,e.table),c=await iG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await cG(e,c)}catch(_){_G.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}}a(EG,"lmdbUpsertRecords")});var _A=f((zz,cA)=>{"use strict";var dG=Ht(),nA=b(),iA=I(),hG=dn(),aA=m(),fG=yl().deleteRecords,SG=X(),{getSchemaPath:TG}=j(),{promisify:mG}=require("util"),RG=mG(setTimeout),oA=1e4,AG=10;cA.exports=pG;async function pG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(nA.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 dG(e.schema,e.table,aA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await hG(n,aA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw iA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return nA.isEmptyOrZeroLength(s)?(iA.trace("No records found to delete"),{message:"No records found to delete"}):await gG(e,s,t)}a(pG,"lmdbDeleteRecordsBefore");async function gG(e,t,r){let s=TG(e.schema,e.table),n=await SG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=oA){let _=t.slice(o,o+oA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await fG(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 RG(AG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(gG,"chunkDeletes")});var lA=f((e2,uA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");uA.exports=ic});var dA=f((r2,EA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");EA.exports=ac});var SA=f((i2,fA)=>{"use strict";var Vl=X(),{getTransactionAuditStorePath:NG}=j(),n2=lA(),Oi=Le(),OG=b(),hA=dA(),IG=require("util").promisify,bG=IG(setTimeout),wG=1e4,CG=100;fA.exports=yG;async function yG(e){let t=NG(e.schema,e.table),r=await Vl.openEnvironment(t,e.table,!0),s=Vl.listDBIs(r);Vl.initializeDBIs(r,Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new hA;do n=await LG(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 bG(CG);while(n.transactions_deleted>0);return i}a(yG,"deleteAuditLogsBefore");async function LG(e,t){let r=new hA;try{let s=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];OG.isEmpty(c)||(n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>wG)break}return await n,r}catch(s){throw s}}a(LG,"deleteTransactions")});var mA=f((o2,TA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");TA.exports=oc});var AA=f((u2,RA)=>{"use strict";var UG=Ht(),MG=pi(),_2=mA(),Zt=m(),DG=b(),kl=X(),PG=cs(),BG=dn(),vG=Ti(),{getSchemaPath:HG}=j();RA.exports=qG;async function qG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=PG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await FG(e),n=HG(e.schema,e.table),i=await kl.openEnvironment(n,e.table);return t===!0&&await GG(e,i,r.hash_attribute),kl.dropDBI(i,e.attribute),s}a(qG,"lmdbDropAttribute");async function GG(e,t,r){let s=kl.openDBI(t,r),n,i=e.attribute;for(let{key:o,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(o,u,_)}await n}a(GG,"removeAttributeFromAllObjects");async function FG(e){let t=new UG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await BG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(DG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new MG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return vG(i)}a(FG,"dropAttributeFromSystem")});var bA=f((d2,IA)=>{"use strict";var $l=X(),hn=Le(),E2=_s(),Yl=m(),pA=b(),{getTransactionAuditStorePath:xG}=j(),VG=ps(),cc=cn(),kG=I();IA.exports=$G;async function $G(e){let t=xG(e.schema,e.table),r=await $l.openEnvironment(t,e.table,!0),s=$l.listDBIs(r);$l.initializeDBIs(r,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gA(r,e.search_values);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,KG(r,e.search_values,n);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return YG(r,e.search_values);default:return gA(r)}}a($G,"readAuditLog");function gA(e,t=[0,Date.now()]){pA.isEmpty(t[0])&&(t[0]=0),pA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hn.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 cc,n))}a(gA,"searchTransactionsByTimestamp");function YG(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,OA(e,i))}return Object.fromEntries(r)}a(YG,"searchTransactionsByUsername");function KG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=VG.equals(e,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.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=OA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);NA(_,"records",r,l,o),NA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(KG,"searchTransactionsByHashValues");function NA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=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 cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(NA,"loopRecords");function OA(e,t){let r=[];try{let s=e.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new cc,i);r.push(o)}}catch(i){kG.warn(i)}return r}catch(s){throw s}}a(OA,"batchSearchTransactions")});var CA=f((f2,wA)=>{"use strict";var{getSchemaPath:WG}=j(),QG=X();wA.exports={writeTransaction:JG};async function JG(e,t,r){let s=WG(e,t);return(await QG.openEnvironment(s,t)).transaction(r)}a(JG,"writeTransaction")});var MA=f((T2,UA)=>{"use strict";var{getSchemaPath:yA}=j(),LA=X();UA.exports={flush:XG,resetReadTxn:ZG};async function XG(e,t){return(await LA.openEnvironment(yA(e,t),t.toString())).flushed}a(XG,"flush");async function ZG(e,t){try{(await LA.openEnvironment(yA(e,t),t.toString())).resetReadTxn()}catch{}}a(ZG,"resetReadTxn")});var BA=f((R2,PA)=>{"use strict";var zG=I(),{handleHDBError:jG}=y(),eF=bu(),tF=ho(),rF=bl(),sF=Km(),nF=Ti(),iF=Dl(),aF=SR(),oF=IR(),cF=dn(),_F=DR(),uF=$R(),lF=ZR(),EF=jR(),dF=sA(),hF=_A(),fF=SA(),SF=Bl(),TF=AA(),mF=bA(),RF=CA(),DA=MA(),_c=class extends eF{async searchByConditions(t){return _F(t)}async getDataByHash(t){return await iF(t)}async searchByHash(t){return await aF(t)}async getDataByValue(t,r){return await oF(t,r)}async searchByValue(t){return await cF(t)}async createSchema(t){return await sF(t)}async dropSchema(t){return await uF(t)}async createTable(t,r){return await lF(t,r)}async dropTable(t){return await SF(t)}async createAttribute(t){return await tF(t)}async createRecords(t){return await rF(t)}async updateRecords(t){return await EF(t)}async upsertRecords(t){try{return await dF(t)}catch(r){throw jG(r,null,null,zG.ERR,r)}}async deleteRecords(t){return await nF(t)}async deleteRecordsBefore(t){return await hF(t)}async dropAttribute(t){return await TF(t)}async deleteAuditLogsBefore(t){return await fF(t)}async readAuditLog(t){return await mF(t)}writeTransaction(t,r,s){return RF.writeTransaction(t,r,s)}flush(t,r){return DA.flush(t,r)}resetReadTxn(t,r){return DA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");PA.exports=_c});var Qt=f((p2,HA)=>{"use strict";var AF=BA(),pF=bu(),gF=v();gF.initSync();var vA;function NF(){return vA instanceof pF?vA:new AF}a(NF,"getBridge");HA.exports=NF()});var xA=f((N2,FA)=>{"use strict";var qA=require("lodash"),Ii=require("mathjs"),OF=require("jsonata"),GA=b();FA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qA.uniqWith(e,qA.isEqual):e,searchJSON:IF,mad:bi.bind(null,Ii.mad),mean:bi.bind(null,Ii.mean),mode:bi.bind(null,Ii.mode),prod:bi.bind(null,Ii.prod),median:bi.bind(null,Ii.median)};function bi(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(bi,"aggregateFunction");function IF(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(GA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),GA.isEmpty(this.__ala__.res[r])){let s=OF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(IF,"searchJSON")});var kA=f((I2,VA)=>{"use strict";var le=require("moment"),Kl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;VA.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Kl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Kl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Kl)}});var WA=f((b2,KA)=>{"use strict";var bF=require("@turf/area"),wF=require("@turf/length"),CF=require("@turf/circle"),yF=require("@turf/difference"),LF=require("@turf/distance"),UF=require("@turf/boolean-contains"),MF=require("@turf/boolean-equal"),DF=require("@turf/boolean-disjoint"),PF=require("@turf/helpers"),$A=m(),G=b();KA.exports={geoArea:BF,geoLength:vF,geoCircle:HF,geoDifference:qF,geoDistance:YA,geoNear:GF,geoContains:FF,geoEqual:xF,geoCrosses:VF,geoConvert:kF};var Wl="geo1 is required",Ql="geo2 is required";function BF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),bF.default(e)}a(BF,"geoArea");function vF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),wF.default(e,{units:t||"kilometers"})}a(vF,"geoLength");function HF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),CF.default(e,t,{units:r||"kilometers"})}a(HF,"geoCircle");function qF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),yF(e,t)}a(qF,"geoDifference");function YA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),LF.default(e,t,{units:r||"kilometers"})}a(YA,"geoDistance");function GF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return YA(e,t,s)<=r}a(GF,"geoNear");function FF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),UF.default(e,t)}a(FF,"geoContains");function xF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),MF.default(e,t)}a(xF,"geoEqual");function VF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!DF.default(e,t)}a(VF,"geoCrosses");function kF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty($A.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($A.GEO_CONVERSION_ENUM).join(",")}`);return PF[t](e,r)}a(kF,"geoConvert")});var uc=f((C2,QA)=>{var Ns=xA(),Et=kA(),zt=WA();QA.exports=e=>{e.aggr.mad=e.aggr.MAD=Ns.mad,e.aggr.mean=e.aggr.MEAN=Ns.mean,e.aggr.mode=e.aggr.MODE=Ns.mode,e.aggr.prod=e.aggr.PROD=Ns.prod,e.aggr.median=e.aggr.MEDIAN=Ns.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ns.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ns.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var ZA=f((y2,XA)=>{"use strict";var wi=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var $F=uc(),JA=require("clone"),lc=require("recursive-iterator"),D=I(),B=b(),fn=Qt(),YF=m(),{hdb_errors:KF}=y(),WF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";$F(Ie);var Ec=class{constructor(t,r){if(B.isEmpty(t))throw D.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(JA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wi.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(B.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!B.isEmpty(YF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.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[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&wi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(JA(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(B.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(WF)>-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=wi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,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===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await fn.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 D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}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 fn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.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 h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await fn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await fn.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,B.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,B.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=wi.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=wi.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await fn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(KF.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"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 o=await fn.getDataByValue(i);for(let[c,_]of o)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(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");XA.exports=Ec});var It=f((U2,jA)=>{"use strict";var QF=Bf();jA.exports={searchByConditions:zF,searchByHash:jF,searchByValue:e0,search:t0};var Jl=Qt(),zA=require("util"),JF=zA.callbackify(Jl.searchByHash),XF=zA.callbackify(Jl.searchByValue),ZF=ZA();async function zF(e){return Jl.searchByConditions(e)}a(zF,"searchByConditions");function jF(e,t){try{JF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(jF,"searchByHash");function e0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),XF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(e0,"searchByValue");function t0(e,t){try{let r=new QF(e);r.validate(),new ZF(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(t0,"search")});var ms=f((D2,op)=>{"use strict";var tp=It(),Kr=I(),rp=_o(),r0=require("lodash"),s0=Vr(),sp=b(),{promisify:np}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:n0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:ip}=n0,i0=v();i0.initSync();var ep=X(),a0=ps(),{getSchemaPath:o0}=j(),Ci=np(tp.searchByValue),c0=np(tp.searchByHash),Sn="name",ap="hash_attribute",Xl="schema",_0="schema_table",u0="attribute";op.exports={describeAll:l0,describeTable:fc,describeSchema:d0};async function l0(e){try{let t=sp.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Sn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[Sn]},i=await Ci(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[ap,z.ID_ATTRIBUTE_STRING,Sn,Xl]},u=await Ci(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}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],o[l[d].schema]&&delete o[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],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(l0,"describeAll");async function fc(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=rp.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Ci(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),ip.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:_0,search_value:r+"."+s,get_attributes:[u0]},E=Array.from(await Ci(l));E=r0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=E0(n)),i.attributes=E,i.clustering_stream_name=s0.createNatsTableStreamName(u.schema,u.name);try{let d=o0(i.schema,i.name),h=await ep.openEnvironment(d,i.name),T=ep.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of a0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function E0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(E0,"getAttrsByPerms");async function d0(e){let t=rp.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Xl,search_value:s,hash_values:[],get_attributes:[ap,z.ID_ATTRIBUTE_STRING,Sn,Xl]},i=Array.from(await Ci(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Sn]},c=Array.from(await c0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),ip.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),sp.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(d0,"describeSchema")});var Gr=f((B2,Ep)=>{var Tn=cs(),{callbackify:up,promisify:h0}=require("util");Ep.exports={setSchemaDataToGlobal:cp,getTableSchema:T0,getSystemSchema:R0,setSchemaDataToGlobalAsync:h0(cp)};var lp=ms(),f0=up(lp.describeAll),S0=up(lp.describeTable);function cp(e){f0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Tn),global.hdb_schema=r,e(null,null)})}a(cp,"setSchemaDataToGlobal");function _p(e,t){return e==="system"?Tn[t]:global.hdb_schema[e][t]}a(_p,"returnSchema");function T0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?m0(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,_p(e,t))}):r(null,_p(e,t))}a(T0,"getTableSchema");function m0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Tn:global.hdb_schema={system:Tn},r();return}S0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Tn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(m0,"setTableDataToGlobal");function R0(){return Tn}a(R0,"getSystemSchema")});var Sc=f((H2,dp)=>{"use strict";var A0=Qt();dp.exports={writeTransaction:p0};function p0(e,t,r){return A0.writeTransaction(e,t,r)}a(p0,"writeTransaction")});var Zl=f((G2,g0)=>{g0.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 ve=f((Q2,Up)=>{"use strict";var pe=v();pe.initSync();var N0=require("fs-extra"),O0=require("semver"),Di=require("path"),{monotonicFactory:I0}=require("ulidx"),rE=I0(),b0=require("util"),fp=require("child_process"),w0=b0.promisify(fp.exec),C0=fp.spawn,V=ue(),Q=m(),Tc=b(),Wr=I(),mc=Vr(),y0=Sc(),yi=lr(),{encode:eE,decode:sE}=require("msgpackr"),{isEmpty:Os}=Tc,Sp=Sr(),Tp=12e10,{connect:L0,StorageType:mp,RetentionPolicy:Rp,AckPolicy:nE,DeliverPolicy:Pi,DiscardPolicy:U0,NatsConnection:F2,JetStreamManager:x2,JetStreamClient:V2,StringCodec:k2,JSONCodec:M0,createInbox:iE,StreamSource:$2,headers:D0,toJsMsg:Ap,nuid:Y2,JetStreamOptions:K2,ErrorCode:hp,nanos:W2}=require("nats"),{PACKAGE_ROOT:P0}=m(),B0=Zl(),pp=M0(),v0="clustering",H0=B0.engines[V.NATS_SERVER_NAME],q0=Di.join(P0,"dependencies"),tE=Di.join(q0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),zl,jl,Li,Ui,Mi,Gt;Up.exports={runCommand:gp,checkNATSServerInstalled:G0,createConnection:aE,getConnection:Rc,getJetStreamManager:Bi,getJetStream:Np,getNATSReferences:dt,getServerList:x0,createLocalStream:oE,listStreams:Op,deleteLocalStream:V0,getServerConfig:vi,listRemoteStreams:k0,viewStream:$0,viewStreamIterator:Y0,publishToStream:K0,createWorkQueueStream:W0,addSourceToWorkStream:bp,request:Q0,removeSourceFromWorkStream:Cp,reloadNATS:cE,reloadNATSHub:J0,reloadNATSLeaf:X0,extractServerName:wp,requestErrorHandler:Z0,updateWorkStream:z0,createLocalTableStream:yp,createTableStreams:j0,purgeTableStream:Lp,purgeSchemaTableStreams:ex,getStreamInfo:tx,updateLocalStreams:sx,closeConnection:F0,getJsmServerName:Hi,addNatsMsgHeader:Ip};async function gp(e,t=void 0){let{stdout:r,stderr:s}=await w0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var Nw=Object.defineProperty;var a=(e,t)=>Nw(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var m=f((dX,Uh)=>{"use strict";var Ut=require("path"),Ow=require("fs");function Iw(){let e=__dirname;for(;!Ow.existsSync(Ut.join(e,"package.json"));){let t=Ut.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Iw,"getHDBPackageRoot");var yr=Iw(),mh="js",ba=mh,bw="harperdb-config.yaml",ww="defaultConfig.yaml",Cw="hdb",Rh=`harperdb.${ba}`,Ah=`customFunctionsServer.${ba}`,yw=`restartHdb.${ba}`,du="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",Lw="Clustering Ingest Service",Uw="Clustering Reply Service",Mw="foreground.pid",Dw="hdb.pid",Pw={HDB:du,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:Lw,CLUSTERING_REPLY_SERVICE:Uw,CUSTOM_FUNCTIONS:Ia,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"},Bw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},vw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Hw={harperdb:du,"clustering hub":wa,"clustering leaf":Ca,"custom functions":Ia,custom_functions:Ia,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},qw={CLUSTERING_HUB_PROC_DESCRIPTOR:wa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca},Eu={HDB:Ut.join(yr,"server/harperdb"),CUSTOM_FUNCTIONS:Ut.join(yr,"server/customFunctions"),CLUSTERING_HUB:Ut.join(yr,"server/nats"),CLUSTERING_LEAF:Ut.join(yr,"server/nats")},Gw={HDB:Ut.join(Eu.HDB,Rh),CUSTOM_FUNCTIONS:Ut.join(Eu.CUSTOM_FUNCTIONS,Ah)},Fw={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ut.join(yr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ut.join(yr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ut.join(yr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},xw={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ph="support@harperdb.io",Vw="customer-success@harperdb.io",gh=1,kw=4141,Nh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",$w="https://www.harperdb.io/product",Yw=`For support, please submit a request at ${Nh} or contact ${ph}`,Oh=`For license support, please contact ${Vw}`,Kw="None of the specified records were found.",Ww="hash attribute not found",Qw=`Your current license only supports ${gh} role. ${Oh}`,Jw="Your current license only supports 3 connections to a node.",Xw="127.0.0.1",Zw=1,zw=/^\.$/,jw=/^\.\.$/,eC="U+002E",tC=/\//g,rC="U+002F",sC=/U\+002F/g,nC=/^U\+002E$/,iC=/^U\+002EU\+002E$/,aC="d",oC=999999,cC="*",_C="--max-old-space-size=",uC="system",lC="__hdb_hash",EC=".harperdb",dC=".hdb",hC="keys",fC="hdb_boot_properties.file",SC=".updateConfig.json",TC="SIGTSTP",mC=24,RC=6e4,AC=448,pC="blob",gC="trash",NC="schema",OC="transactions",IC=".count",bC="id",wC="PROCESS_NAME",Ih={SETTINGS_PATH_KEY:"settings_path"},bh=require("lodash"),CC={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"},yC={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},LC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},UC={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"},MC={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"},nt="hdb_internal:",DC={CREATE_SCHEMA:nt+"create_schema",CREATE_TABLE:nt+"create_table",CREATE_ATTRIBUTE:nt+"create_attribute",ADD_USER:nt+"add_user",ALTER_USER:nt+"alter_user",DROP_USER:nt+"drop_user",HDB_NODES:nt+"hdb_nodes",HDB_USERS:nt+"hdb_users",HDB_WORKERS:nt+"hdb_workers",CATCHUP:nt+"catchup",SCHEMA_CATCHUP:nt+"schema_catchup",WORKER_ROOM:nt+"cluster_workers"},PC={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"},BC="060493.ks",vC=".license",HC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},w={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"},qC={CSV:".csv",JSON:".json"},GC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},FC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qn={};qn[w.INSERT]=w.INSERT;qn[w.UPDATE]=w.UPDATE;qn[w.UPSERT]=w.UPSERT;qn[w.DELETE]=w.DELETE;var J=Object.create(null);J[w.DESCRIBE_ALL]=w.DESCRIBE_ALL;J[w.DESCRIBE_TABLE]=w.DESCRIBE_TABLE;J[w.DESCRIBE_SCHEMA]=w.DESCRIBE_SCHEMA;J[w.READ_LOG]=w.READ_LOG;J[w.ADD_NODE]=w.ADD_NODE;J[w.LIST_USERS]=w.LIST_USERS;J[w.LIST_ROLES]=w.LIST_ROLES;J[w.USER_INFO]=w.USER_INFO;J[w.SQL]=w.SQL;J[w.GET_JOB]=w.GET_JOB;J[w.SEARCH_JOBS_BY_START_DATE]=w.SEARCH_JOBS_BY_START_DATE;J[w.DELETE_FILES_BEFORE]=w.DELETE_FILES_BEFORE;J[w.EXPORT_LOCAL]=w.EXPORT_LOCAL;J[w.EXPORT_TO_S3]=w.EXPORT_TO_S3;J[w.CLUSTER_STATUS]=w.CLUSTER_STATUS;J[w.REMOVE_NODE]=w.REMOVE_NODE;J[w.RESTART]=w.RESTART;J[w.CUSTOM_FUNCTIONS_STATUS]=w.CUSTOM_FUNCTIONS_STATUS;J[w.GET_CUSTOM_FUNCTIONS]=w.GET_CUSTOM_FUNCTIONS;J[w.GET_CUSTOM_FUNCTION]=w.GET_CUSTOM_FUNCTION;J[w.SET_CUSTOM_FUNCTION]=w.SET_CUSTOM_FUNCTION;J[w.DROP_CUSTOM_FUNCTION]=w.DROP_CUSTOM_FUNCTION;J[w.ADD_CUSTOM_FUNCTION_PROJECT]=w.ADD_CUSTOM_FUNCTION_PROJECT;J[w.DROP_CUSTOM_FUNCTION_PROJECT]=w.DROP_CUSTOM_FUNCTION_PROJECT;J[w.PACKAGE_CUSTOM_FUNCTION_PROJECT]=w.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[w.DEPLOY_CUSTOM_FUNCTION_PROJECT]=w.DEPLOY_CUSTOM_FUNCTION_PROJECT;var xC={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},VC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wh={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"},kC=bh.invert(wh),S={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"},Ch={settings_path:Ih.SETTINGS_PATH_KEY,hdb_root_key:S.ROOTPATH,hdb_root:S.ROOTPATH,server_port_key:S.OPERATIONSAPI_NETWORK_PORT,server_port:S.OPERATIONSAPI_NETWORK_PORT,cert_key:S.OPERATIONSAPI_TLS_CERTIFICATE,certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:S.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:S.OPERATIONSAPI_NETWORK_HTTPS,https_on:S.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:S.OPERATIONSAPI_NETWORK_CORS,cors_on:S.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:S.LOGGING_LEVEL,log_level:S.LOGGING_LEVEL,log_path_key:S.LOGGING_ROOT,log_path:S.LOGGING_ROOT,props_env_key:S.OPERATIONSAPI_NODEENV,node_env:S.OPERATIONSAPI_NODEENV,clustering_node_name_key:S.CLUSTERING_NODENAME,node_name:S.CLUSTERING_NODENAME,clustering_enabled_key:S.CLUSTERING_ENABLED,clustering:S.CLUSTERING_ENABLED,max_http_threads:S.HTTP_THREADS,max_hdb_processes:S.HTTP_THREADS,server_timeout_key:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:S.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:S.LOGGING_AUDITLOG,disable_transaction_log:S.LOGGING_AUDITLOG,operation_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:S.CUSTOMFUNCTIONS_ENABLED,custom_functions:S.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:S.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:S.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:S.HTTP_THREADS,log_to_file:S.LOGGING_FILE,log_to_stdstreams:S.LOGGING_STDSTREAMS,run_in_foreground:S.OPERATIONSAPI_FOREGROUND,local_studio_on:S.LOCALSTUDIO_ENABLED,clustering_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:S.CLUSTERING_USER,clustering_enabled:S.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:S.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:S.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:S.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:S.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:S.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:S.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:S.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:S.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:S.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:S.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:S.CLUSTERING_NODENAME,clustering_tls_certificate:S.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:S.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:S.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:S.CLUSTERING_TLS_INSECURE,clustering_tls_verify:S.CLUSTERING_TLS_VERIFY,clustering_loglevel:S.CLUSTERING_LOGLEVEL,clustering_republishmessages:S.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:S.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:S.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:S.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:S.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:S.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:S.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:S.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:S.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:S.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:S.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:S.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:S.CUSTOMFUNCTIONS_NODEENV,http_threads:S.HTTP_THREADS,http_session_affinity:S.HTTP_SESSION_AFFINITY,customfunctions_processes:S.HTTP_THREADS,customfunctions_root:S.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:S.LOCALSTUDIO_ENABLED,logging_file:S.LOGGING_FILE,logging_level:S.LOGGING_LEVEL,logging_root:S.LOGGING_ROOT,logging_rotation_enabled:S.LOGGING_ROTATION_ENABLED,logging_rotation_compress:S.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:S.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:S.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:S.LOGGING_ROTATION_PATH,logging_stdstreams:S.LOGGING_STDSTREAMS,logging_auditlog:S.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:S.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:S.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:S.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:S.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:S.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:S.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:S.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:S.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:S.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:S.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:S.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:S.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:S.OPERATIONSAPI_NODEENV,operationsapi_root:S.ROOTPATH,schemas:S.SCHEMAS,storage_path:S.STORAGE_PATH};for(let e in S){let t=S[e];Ch[t.toLowerCase()]=t}var $C={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},YC={csv_file_load:"csv_file_load",csv_data_load:w.CSV_DATA_LOAD,csv_url_load:w.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"},KC={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"},WC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},QC={FILE_SYSTEM:"fs",LMDB:"lmdb"},JC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},XC={DEVELOPMENT:8192,DEFAULT:512},ZC={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"},zC={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"},jC={ENOENT:"ENOENT",EACCES:"EACCES"},yh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ey="__clustering__",ty=Object.values(yh),ry=15984864e5,Lh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sy=bh.invert(Lh),ny={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"},iy=111,ay=`\r
|
|
2
|
+
`,oy={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cy=["*","%"],_y="unauthorized_access",uy="func_val",ly={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Ey={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dy={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"},hy={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},fy={HTTP:"http"},Sy={STOPPED:"stopped",ONLINE:"online"},Ty="3.x.x";Uh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:ph,HDB_SUPPORT_URL:Nh,HDB_PRICING_URL:$w,SUPPORT_HELP_MSG:Yw,LICENSE_HELP_MSG:Oh,HDB_PROC_NAME:Rh,HDB_PROC_DESCRIPTOR:du,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:uC,HASH_FOLDER_NAME:lC,HDB_HOME_DIR_NAME:EC,UPDATE_FILE_NAME:SC,LICENSE_KEY_DIR_NAME:hC,BOOT_PROPS_FILE_NAME:fC,JOB_TYPE_ENUM:YC,JOB_STATUS_ENUM:HC,SYSTEM_TABLE_NAMES:UC,SYSTEM_TABLE_HASH_ATTRIBUTES:MC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:qC,S3_BUCKET_AUTH_KEYS:GC,VALID_SQL_OPS_ENUM:FC,GEO_CONVERSION_ENUM:VC,HDB_SETTINGS_NAMES:wh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:kC,SERVICE_ACTIONS_ENUM:xC,CLUSTER_MESSAGE_TYPE_ENUM:KC,CLUSTER_CONNECTION_DIRECTION_ENUM:WC,CLUSTER_EVENTS_DEFS_ENUM:ZC,PERIOD_REGEX:zw,DOUBLE_PERIOD_REGEX:jw,UNICODE_PERIOD:eC,FORWARD_SLASH_REGEX:tC,UNICODE_FORWARD_SLASH:rC,ESCAPED_FORWARD_SLASH_REGEX:sC,ESCAPED_PERIOD_REGEX:nC,ESCAPED_DOUBLE_PERIOD_REGEX:iC,REG_KEY_FILE_NAME:BC,RESTART_TIMEOUT_MS:RC,HDB_FILE_PERMISSIONS:AC,SCHEMA_DIR_NAME:NC,TRANSACTIONS_DIR_NAME:OC,LIMIT_COUNT_NAME:IC,ID_ATTRIBUTE_STRING:bC,INSERT_MODULE_ENUM:yC,UPGRADE_JSON_FIELD_NAMES_ENUM:LC,RESTART_CODE:TC,RESTART_CODE_NUM:mC,CLUSTER_OPERATIONS:qn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:PC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:DC,CLUSTERING_MESSAGE_TYPES:ny,HDB_FILE_SUFFIX:dC,BLOB_FOLDER_NAME:pC,HDB_TRASH_DIR:gC,ORIGINATOR_SET_VALUE:iy,LICENSE_VALUES:JC,RAM_ALLOCATION_ENUM:XC,STORAGE_TYPES_ENUM:QC,TIME_STAMP_NAMES_ENUM:yh,TIME_STAMP_NAMES:ty,PERMS_UPDATE_RELEASE_TIMESTAMP:ry,SEARCH_NOT_FOUND_MESSAGE:Kw,SEARCH_ATTRIBUTE_NOT_FOUND:Ww,LICENSE_ROLE_DENIED_RESPONSE:Qw,LICENSE_MAX_CONNS_REACHED:Jw,BASIC_LICENSE_MAX_NON_CU_ROLES:gh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:kw,VALUE_SEARCH_COMPARATORS:Lh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sy,LICENSE_FILE_NAME:vC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:zC,NEW_LINE:ay,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Zw,MOMENT_DAYS_TAG:aC,API_TURNOVER_SEC:oC,LOOPBACK:Xw,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:cC,NODE_ERROR_CODES:jC,JAVASCRIPT_EXTENSION:mh,PERMS_CRUD_ENUM:oy,UNAUTHORIZED_PERMISSION_NAME:_y,SEARCH_WILDCARDS:cy,FUNC_VAL:uy,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:ly,JWT_ENUM:Ey,CLUSTERING_FLAG:ey,ITC_EVENT_TYPES:dy,CUSTOM_FUNCTION_PROC_NAME:Ah,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:hy,THREAD_TYPES:fy,MEM_SETTING_KEY:_C,HDB_RESTART_SCRIPT:yw,PROCESS_DESCRIPTORS:Pw,SERVICE_SERVERS:Gw,SERVICE_SERVERS_CWD:Eu,PROCESS_DESCRIPTORS_VALIDATE:Hw,LAUNCH_SERVICE_SCRIPTS:Fw,LOG_LEVELS:vw,PROCESS_NAME_ENV_PROP:wC,LOG_NAMES:Bw,PM2_PROCESS_STATUSES:Sy,CONFIG_PARAM_MAP:Ch,CONFIG_PARAMS:S,HDB_CONFIG_FILE:bw,HDB_DEFAULT_CONFIG_FILE:ww,ROLE_TYPES_ENUM:xw,BOOT_PROP_PARAMS:Ih,INSTALL_PROMPTS:CC,HDB_ROOT_DIR_NAME:Cw,CLUSTERING_PROCESSES:qw,FOREGROUND_PID_FILE:Mw,PACKAGE_ROOT:yr,PRE_4_0_0_VERSION:Ty,SCHEMAS_PARAM_CONFIG:$C,HDB_PID_FILE:Dw}});var hu=f((fX,Ph)=>{"use strict";var Mh=require("minimist");Ph.exports=my;function my(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Dh(process.env),s=Dh(Mh(process.argv))):(r=process.env,s=Mh(process.argv));let n={};for(let i=0,o=e.length;i<o;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}a(my,"assignCMDENVVariables");function Dh(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Dh,"objKeysToLowerCase")});var I=f((TX,Kh)=>{"use strict";var Ws=require("fs-extra"),{workerData:Ry,threadId:Ay}=require("worker_threads"),Lr=require("path"),Hh=require("yaml"),qh=require("properties-reader"),Ae=m(),Bh=hu(),py=require("os"),{PACKAGE_ROOT:Su}=m(),Gh={};for(let e in console)Gh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Fh={STDOUT:"stdOut",STDERR:"stdErr"},gy=Lr.join(Su,"logs"),Ny=Lr.join(Su,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),Oy=1e4,ar,or,Ve,ya,La,Ua,Fn,Gn;Gn===void 0&&xh();Kh.exports={notify:$h,fatal:Yh,error:xn,warn:Au,info:Ma,debug:Ru,trace:mu,setLogLevel:Uy,log_level:Ve,loggerWithTag:Iy,suppressLogging:by,initLogSettings:xh,setupConsoleLogging:Vh,logCustomLevel:yy,closeLogFile:Tu,getLogFilePath:()=>Ua,OUTPUTS:Fh};function xh(e=!1){try{if(Gn===void 0||e){Tu();let t=Ly();Gn=qh(t);let r=Bh(["ROOTPATH"]);({level:Ve,config_log_path:La,to_file:ar,to_stream:or}=My(r.ROOTPATH?Lr.join(r.ROOTPATH,Ae.HDB_CONFIG_FILE):Gn.get("settings_path"))),ya=Ae.LOG_NAMES.HDB,Ua=Lr.join(La,ya)}}catch(t){if(Gn=void 0,t.code===Ae.NODE_ERROR_CODES.ENOENT){let r=Bh(Object.keys(Ae.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Ae.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===Ae.CONFIG_PARAMS.LOGGING_LEVEL){Ve=_;continue}if(c===Ae.CONFIG_PARAMS.LOGGING_STDSTREAMS){or=_;continue}c===Ae.CONFIG_PARAMS.LOGGING_FILE&&(ar=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Dy();ar=ar===void 0?n:ar,ar=vh(ar),or=or===void 0?i:or,or=vh(or),Ve=Ve===void 0?s:Ve,La=gy,ya=Ae.LOG_NAMES.INSTALL,Ua=Lr.join(La,ya);return}throw xn("Error initializing log settings"),xn(t),t}Vh()}a(xh,"initLogSettings");var fu=!0;function Vh(){Ks("error",xn),Ks("warn",Au),Ks("log",Ma),Ks("info",Ma),Ks("debug",Ru),Ks("trace",mu)}a(Vh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(fu&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Gh[e](...r)}}a(Ks,"logConsole");function Iy(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r($h),fatal:r(Yh),error:r(xn),warn:r(Au),info:r(Ma),debug:r(Ru),trace:r(mu)};function r(s){return function(...n){return s(t,...n)}}}a(Iy,"loggerWithTag");function by(e){try{fu=!1,e()}finally{fu=!0}}a(by,"suppressLogging");var wy=Ry?.name?.replace(/ /g,"-")||"main";function cr(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),o.unshift(_||wy+"/"+Ay);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} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(cr,"createLogRecord");function Vn(e){ar&&kh(e),or&&process.stdout.write(e)}a(Vn,"logStdOut");function Da(e){ar&&kh(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function kh(e){Cy(),Ws.appendFileSync(Fn,e)}a(kh,"logToFile");function Tu(){try{Ws.closeSync(Fn)}catch{}Fn=null}a(Tu,"closeLogFile");function Cy(){Fn||(Fn=Ws.openSync(Ua,"a"),setTimeout(()=>{Tu()},Oy).unref())}a(Cy,"openLogFile");function Ma(...e){ke[Ve]<=ke.info&&Vn(cr("info",e))}a(Ma,"info");function mu(...e){ke[Ve]<=ke.trace&&Vn(cr("trace",e))}a(mu,"trace");function xn(...e){ke[Ve]<=ke.error&&Da(cr("error",e))}a(xn,"error");function Ru(...e){ke[Ve]<=ke.debug&&Vn(cr("debug",e))}a(Ru,"debug");function $h(...e){ke[Ve]<=ke.notify&&Vn(cr("notify",e))}a($h,"notify");function Yh(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a(Yh,"fatal");function Au(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(Au,"warn");function yy(e,t,...r){t===Fh.STDERR?Da(cr(e,r)):Vn(cr(e,r))}a(yy,"logCustomLevel");function Ly(){let e;try{e=py.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Lr.join(e,Ae.HDB_HOME_DIR_NAME,Ae.BOOT_PROPS_FILE_NAME);return Ws.existsSync(t)||(t=Lr.join(Su,"utility/hdb_boot_properties.file")),t}a(Ly,"getPropsFilePath");function Uy(e){Ve=e}a(Uy,"setLogLevel");function vh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(vh,"autoCastBoolean");function My(e){try{if(e.includes("config/settings.js")){let o=qh(e);return{level:o.get(Ae.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Lr.dirname(o.get(Ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Ae.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Hh.parseDocument(Ws.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===Ae.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(My,"getLogConfig");function Dy(){try{let e=Hh.parseDocument(Ws.readFileSync(Ny,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Dy,"getDefaultConfig")});var Qh=f((RX,Wh)=>{"use strict";var Py=require("util"),By=require("path"),vy=require("child_process"),Hy=Py.promisify(vy.execFile),qy=1e3*1e3*10;Wh.exports={findPs:Gy};async function Gy(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Hy("ps",["wwxo",`pid,${r}`],{maxBuffer:qy});for(let n of s.trim().split(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:By.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Gy,"findPs")});var Le=f((pX,Xh)=>{"use strict";var Fy="__dbis__",xy="__environment_name__",Vy="__dbi_defintion__",ky={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"},$y=["__createdtime__","__updatedtime__"],Yy="\uFFFF",Jh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Ky=Object.values(Jh);Xh.exports={INTERNAL_DBIS_NAME:Fy,DBI_DEFINITION_NAME:Vy,SEARCH_TYPES:ky,TIMESTAMP_NAMES:$y,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xy,TRANSACTIONS_DBI_NAMES_ENUM:Jh,TRANSACTIONS_DBIS:Ky,OVERFLOW_MARKER:Yy}});var it=f((gX,af)=>{"use strict";var Zh=m(),zh=Le(),jh={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},ef=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),tf={500:ef("There was an error processing your request."),400:"Invalid request"},Wy=tf[jh.INTERNAL_SERVER_ERROR],Qy={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.`},Jy={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Xy={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"},Zy={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 ${zh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${zh.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"},zy={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Zh.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 ${Zh.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"},rf={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"},jy={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."},eL={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`},tL={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"},rL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},sL={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`},sf={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.`},nf={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}`},nL={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."},iL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},aL={...rf,...Xy,...Qy,...jy,...eL,...tL,...rL,...sL,...zy,...sf,...nf,...nL,...iL,...Jy};af.exports={CHECK_LOGS_WRAPPER:ef,HDB_ERROR_MSGS:aL,DEFAULT_ERROR_MSGS:tf,DEFAULT_ERROR_RESP:Wy,HTTP_STATUS_CODES:jh,LMDB_ERRORS_ENUM:Zy,AUTHENTICATION_ERROR_MSGS:rf,VALIDATION_ERROR_MSGS:sf,ITC_ERRORS:nf}});var y=f((OX,_f)=>{"use strict";var Qs=it(),oL=I(),cL=m(),kn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,of),this.http_resp_code=s||Qs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Qs.DEFAULT_ERROR_MSGS[s]?Qs.DEFAULT_ERROR_MSGS[s]:Qs.DEFAULT_ERROR_MSGS[Qs.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&&oL[n](i)}};a(kn,"HdbError");function of(e,t,r,s=cL.LOG_LEVELS.ERROR,n=null,i=!1){if(cf(e))return e;let o=new kn(e,t,r,s,n);return i&&delete o.stack,o}a(of,"handleHDBError");function cf(e){return e.__proto__.constructor.name===kn.name}a(cf,"isHDBError");_f.exports={isHDBError:cf,handleHDBError:of,hdb_errors:Qs}});var b=f((wX,Nf)=>{"use strict";var cs=require("path"),_L=require("fs-extra"),Me=I(),uf=require("fs-extra"),$n=require("os"),uL=require("net"),lL=require("recursive-iterator"),Ue=m(),hf=Qh(),lf=require("papaparse"),Pa=require("moment"),{inspect:EL}=require("util"),Ef=require("is-number"),bX=require("lodash"),{hdb_errors:Ba}=y(),ff=require("util").promisify(setTimeout),dL=100,hL=5,fL="",SL=4,df={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Nf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:Sf,errorizeMessage:TL,stripFileExtension:NL,autoCast:OL,autoCastJSON:Tf,autoCastJSONDeep:pu,removeDir:IL,compareVersions:bL,isCompatibleDataVersion:wL,escapeRawValue:CL,unescapeValue:yL,stringifyProps:LL,timeoutPromise:ML,isClusterOperation:PL,getClusterUser:vL,checkGlobalSchemaTable:BL,getHomeDir:Rf,getPropsFilePath:UL,promisifyPapaParse:HL,removeBOM:Af,createEventPromise:qL,checkProcessRunning:GL,checkSchemaTableExist:FL,checkSchemaExists:pf,checkTableExists:gf,getStartOfTomorrowInSeconds:xL,getLimitKey:VL,isObject:gL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:mf,backtickASTSchemaItems:kL,isPortTaken:DL,stopProcess:$L,createForkArgs:YL,autoCastBoolean:KL,async_set_timeout:ff,getTableHashAttribute:WL,doesSchemaExist:QL,doesTableExist:JL,stringifyObj:XL,ms_to_time:ZL,changeExtension:zL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function mL(e){return!at(e)&&(e||e===0||e===""||Sf(e))}a(mL,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function RL(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(cs.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function Sf(e){return at(e)?!1:e===!0||e===!1}a(Sf,"isBoolean");function gL(e){return at(e)?!1:typeof e=="object"}a(gL,"isObject");function NL(e){return kt(e)?fL:e.slice(0,-SL)}a(NL,"stripFileExtension");function OL(e){return at(e)||e===""||typeof e!="string"?e:df[e]!==void 0?df[e]:mf(e)===!0?Number(e):e}a(OL,"autoCast");function Tf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Tf,"autoCastJSON");function pu(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=pu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=pu(r);s!==r&&(e[t]=s)}return e}else return Tf(e)}a(pu,"autoCastJSONDeep");function mf(e){if(e.startsWith("0.")&&Ef(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Ef(e))}a(mf,"autoCasterIsNumberCheck");async function IL(e){if(kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await uf.emptyDir(e),await uf.remove(e)}catch(t){throw Me.error(`Error removing files in ${e} -- ${t}`),t}}a(IL,"removeDir");function bL(e,t){if(kt(e)){Me.info("Invalid current version sent as parameter.");return}if(kt(t)){Me.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(bL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function CL(e){if(at(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(CL,"escapeRawValue");function yL(e){if(at(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yL,"unescapeValue");function LL(e,t){if(at(e))return Me.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$n.EOL}!kt(s)&&s[0]===";"?r+=" "+s+n+$n.EOL:kt(s)||(r+=s+"="+n+$n.EOL)}catch{Me.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(LL,"stringifyProps");function Rf(){let e;try{e=$n.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Rf,"getHomeDir");function UL(){let e=cs.join(Rf(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return _L.existsSync(e)||(e=cs.join(__dirname,"../","hdb_boot_properties.file")),e}a(UL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function DL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(DL,"isPortTaken");function PL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Me.error(`Error checking operation against cluster ops ${t}`)}return!1}a(PL,"isClusterOperation");function BL(e,t){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(BL,"checkGlobalSchemaTable");function vL(e,t){if(at(t)){Me.warn("No CLUSTERING_USER defined, clustering disabled");return}if(at(e)||kt(e)){Me.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){Me.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Me.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(vL,"getClusterUser");function HL(){lf.parsePromise=function(e,t){return new Promise(function(r,s){lf.parse(e,{header:!0,transformHeader:Af,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(HL,"promisifyPapaParse");function Af(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Af,"removeBOM");function qL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Me.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{Me.error("Error trying to cancel timeout.")}s(n)})})}a(qL,"createEventPromise");async function GL(e){let t=!0,r=0;do await ff(dL*r++),(await hf.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(GL,"checkProcessRunning");function FL(e,t){let r=pf(e);if(r)return r;let s=gf(e,t);if(s)return s}a(FL,"checkSchemaTableExist");function pf(e){if(!global.hdb_schema[e])return Ba.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(pf,"checkSchemaExists");function gf(e,t){if(!global.hdb_schema[e][t])return Ba.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gf,"checkTableExists");function xL(){let e=Pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function VL(){return Pa().utc().format("DD-MM-YYYY")}a(VL,"getLimitKey");function kL(e){try{let t=new lL(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){Me.error("Got an error back ticking items."),Me.error(t)}}a(kL,"backtickASTSchemaItems");async function $L(e){let t=$n.userInfo();(await hf.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Me.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a($L,"stopProcess");function YL(e){return[e]}a(YL,"createForkArgs");function KL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(KL,"autoCastBoolean");function WL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(WL,"getTableHashAttribute");function QL(e){return global?.hdb_schema?.[e]!==void 0}a(QL,"doesSchemaExist");function JL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(JL,"doesTableExist");function XL(e){try{return JSON.stringify(e)}catch{return e}}a(XL,"stringifyObj");function ZL(e){let t=Pa.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(ZL,"ms_to_time");function zL(e,t){let r=cs.basename(e,cs.extname(e));return cs.join(cs.dirname(e),r+t)}a(zL,"changeExtension")});var _s=f((yX,jL)=>{jL.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 vf=f((UX,Bf)=>{"use strict";var gu=require("recursive-iterator"),eU=require("alasql"),Nu=require("clone"),Of=b(),{handleHDBError:If,hdb_errors:tU}=y(),{HDB_ERROR_MSGS:bf,HTTP_STATUS_CODES:wf}=tU,rU=["DISTINCT_ARRAY"],Cf=Symbol("validateTables"),Ou=Symbol("validateTable"),LX=Symbol("getAllColumns"),yf=Symbol("validateAllColumns"),va=Symbol("findColumn"),Lf=Symbol("validateOrderBy"),Yn=Symbol("validateSegment"),Iu=Symbol("validateColumn"),Uf=Symbol("setColumnsForTable"),Mf=Symbol("checkColumnsForAsterisk"),Df=Symbol("validateGroupBy"),Pf=Symbol("hasColumns"),Ha=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Cf](),this[Mf](),this[yf]()}[Cf](){if(this[Pf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ou](t.table)})}}[Pf](){let t=!1,r=new gu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw If(new Error,bf.SCHEMA_NOT_FOUND(t.databaseid),wf.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw If(new Error,bf.TABLE_NOT_FOUND(t.databaseid,t.tableid),wf.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Nu(s);n.table=Nu(t),this.attributes.push(n)})}[va](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)}[Mf](){let t=new gu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Uf](r.tableid)}[Uf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new eU.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[yf](){this[Yn](this.statement.columns,!1),this[Yn](this.statement.joins,!1),this[Yn](this.statement.where,!1),this[Df](this.statement.group,!1),this[Yn](this.statement.order,!0)}[Yn](t,r){if(!t)return;let s=new gu(t),n=[];for(let{node:i,path:o}of s)!Of.isEmpty(i)&&!Of.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Lf](i):n.push(this[Iu](i)));return n}[Df](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&rU.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Nu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[va](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[va](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,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`}[Lf](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[Iu](t)}[Iu](t){let r=this[va](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Ha,"SelectValidator");Bf.exports=Ha});var bu=f((DX,Hf)=>{"use strict";var qa=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(qa,"BridgeMethods");Hf.exports=qa});var us=f((HX,kf)=>{"use strict";var qf=it().LMDB_ERRORS_ENUM,BX=require("lmdb"),sU=Le(),vX=require("buffer").Buffer,{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:Ga}=sU,Ff=["number","string","symbol","boolean","bigint"];function nU(e){if(e=e?.database||e,!e)throw new Error(qf.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(qf.INVALID_ENVIRONMENT)}a(nU,"validateEnv");function iU(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(iU,"stringifyData");function aU(e){return e instanceof Date?e.valueOf():e}a(aU,"convertKeyValueToWrite");function oU(e){if(e==null)return;if(Ff.includes(typeof e))return e.length>Ga?[e.slice(0,Ga)+Gf]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Ff.includes(typeof n)&&(n.length>Ga?t.push(n.slice(0,Ga)+Gf):t.push(n))}}return t}a(oU,"getIndexedValues");var Fa=0,xf=0;function Vf(){xf=Date.now()-performance.now()}a(Vf,"adjustStartTime");Vf();var cU=6e4;setInterval(Vf,cU).unref();function _U(){let e=performance.now()+xf;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(_U,"getNextMonotonicTime");kf.exports={validateEnv:nU,stringifyData:iU,convertKeyValueToWrite:aU,getNextMonotonicTime:_U,getIndexedValues:oU}});var Yf=f((GX,$f)=>{"use strict";var xa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(xa,"DBIDefinition");$f.exports=xa});var Wf=f((xX,Kf)=>{"use strict";var uU={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))},lU="certificate.pem",EU="privateKey.pem",dU="ca.pem";Kf.exports={CERTIFICATE_VALUES:uU,CERTIFICATE_PEM_NAME:lU,PRIVATEKEY_PEM_NAME:EU,CA_PEM_NAME:dU}});var te=f((VX,Qf)=>{"use strict";var $e=require("validate.js");$e.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||$e.validators.type.checks[t](e)?null:` must be a '${t}' value`};$e.validators.type.checks={Object:function(e){return $e.isObject(e)&&!$e.isArray(e)},Array:$e.isArray,Integer:$e.isInteger,Number:$e.isNumber,String:$e.isString,Date:$e.isDate,Boolean:function(e){return typeof e=="boolean"}};$e.validators.hasValidFileExt=function(e,t){return $e.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};Qf.exports={validateObject:hU,validateObjectAsync:fU,validateBySchema:SU};function hU(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=$e(e,t,{format:"flat"});return r?new Error(r):null}a(hU,"validateObject");async function fU(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await $e.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(fU,"validateObjectAsync");function SU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(SU,"validateBySchema")});var Cu=f((YX,zf)=>{"use strict";var TU=require("fs-extra"),P=require("joi"),mU=require("os"),{boolean:re,string:_r,number:Mt,array:wu}=P.types(),{totalmem:Jf}=require("os"),Kn=require("path"),RU=I(),ka=b(),$X=Wf(),AU=m(),pU=te(),Xf="log",gU="custom_functions",NU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",OU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",IU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",bU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",wU="rootPath config parameter is undefined",CU="clustering.enabled config parameter is undefined",ls=Mt.min(0).required(),$a=wu.items({host:_r.required(),port:ls}).empty(null),Ur;zf.exports={configValidator:yU,routesValidator:BU,route_constraints:$a};function yU(e){if(Ur=e.rootPath,ka.isEmpty(Ur))throw wU;let t=re.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(PU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(LU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=P.string().empty(null).default(Va),_=P.custom(UU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw CU;let l;return u===!0?l=P.object({enabled:t,hubServer:P.object({cluster:P.object({name:P.required().empty(null),network:P.object({port:ls,routes:$a}).required()}).required(),leafNodes:P.object({network:P.object({port:ls}).required()}).required(),network:P.object({port:ls}).required()}).required(),leafServer:P.object({network:P.object({port:ls,routes:$a}).required(),streams:P.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:P.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:re.optional(),tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required(),verify:re.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:re.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}),nodeEnv:r,root:n,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:P.object({enabled:t}).required(),logging:P.object({file:re.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:re.optional(),compress:re.optional(),interval:_r.custom(DU).optional().empty(null),maxSize:_r.custom(MU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:re.required(),auditLog:re.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:re.required(),network:P.object({cors:re.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:re.required(),keepAliveTimeout:Mt.min(1).required(),port:ls,timeout:Mt.min(1).required()}).required(),nodeEnv:r,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:P.object({threads:s}).required(),storage:P.object({writeAsync:re.required(),overlappingSync:re.optional(),caching:re.optional(),compression:re.optional(),noReadAhead:re.optional(),path:_,prefetchWrites:re.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(yU,"configValidator");function Zf(e){return TU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Zf,"doesPathExist");function LU(e,t){if(e===null)return;let r=Zf(e);return r?t.message(r):e}a(LU,"validatePemFile");function UU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Zf(e);if(r)return t.message(r)}a(UU,"validatePath");function MU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(NU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(IU):e}a(MU,"validateRotationMaxSize");function DU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(OU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(bU):e}a(DU,"validateRotationInterval");function PU(e,t){let r=t.state.path.join("."),s=mU.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jf();return i=Math.round(Math.min(i,Jf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),RU.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(PU,"setDefaultThreads");function Va(e,t){if(!ka.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ka.isEmpty(Ur))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Kn.join(Ur,gU);case"logging.root":return Kn.join(Ur,Xf);case"clustering.leafServer.streams.path":return Kn.join(Ur,"clustering","leaf");case"storage.path":return Kn.join(Ur,AU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Kn.join(Ur,Xf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function BU(e){let t=P.object({routes:$a});return pU.validateBySchema({routes:e},t)}a(BU,"routesValidator")});var lr=f((WX,cS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:vU,routesValidator:jf}=Cu(),Rt=require("fs-extra"),HU=require("yaml"),$t=require("path"),qU=require("is-number"),tS=require("properties-reader"),GU=require("lodash"),{handleHDBError:FU}=y(),{HTTP_STATUS_CODES:xU,HDB_ERROR_MSGS:Ya}=it(),VU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Wn,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:ur}=At,kU="Unable to get config value because config is uninitialized",$U="Config successfully initialized",YU="Error backing up config file",KU="Empty parameter sent to getConfigValue",rS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),WU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",eS={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"},Ka,Ne;cS.exports={createConfigFile:QU,getDefaultConfig:JU,getConfigValue:nS,initConfig:iS,flattenConfig:Es,updateConfigValue:aS,updateConfigObject:ZU,getConfiguration:eM,setConfiguration:tM,readConfigFile:Mu,getClusteringRoutes:rM,initOldConfig:oS,getConfigFromFile:sM};function QU(e){let t=Js(rS);Ka=Es(t.toJSON());let r;for(let o in e){let c=ur[o.toLowerCase()];if(c===Mr.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=yu(c,e[o]);try{t.setIn([..._],u)}catch(l){Te.error(l)}}}r&&sS(t,r),Uu(t);let s=t.toJSON();Ne=Es(s);let n=t.getIn(["rootPath"]),i=$t.join(n,At.HDB_CONFIG_FILE);Rt.createFileSync(i),Rt.writeFileSync(i,String(t)),Te.trace(`Config file written to ${i}`)}a(QU,"createConfigFile");function sS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ot.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Wn.TABLES))for(let i in s[n][Wn.TABLES])for(let o in s[n][Wn.TABLES][i]){let c=s[n][Wn.TABLES][i][o],_=[Mr.SCHEMAS,n,Wn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Mr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Te.error("Error parsing schemas CLI/env config arguments",s)}}a(sS,"setSchemasConfig");function JU(e){if(Ka===void 0){let r=Js(rS);Ka=Es(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a(JU,"getDefaultConfig");function nS(e){if(ot.isEmpty(e)){Te.error(KU);return}if(Ne===void 0){Te.trace(kU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(nS,"getConfigValue");function Lu(e){let t=VU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):tS(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Lu,"getConfigFilePath");function iS(e=!1){if(Ne===void 0||e){let t=ot.getPropsFilePath();try{Rt.accessSync(t,Rt.constants.F_OK|Rt.constants.R_OK)}catch(i){throw Te.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=Lu(t),s;if(r.includes("config/settings.js"))try{oS(r);return}catch(i){if(i.code!==At.NODE_ERROR_CODES.ENOENT)throw i}try{s=Js(r)}catch(i){if(i.code===At.NODE_ERROR_CODES.ENOENT){Te.trace(`HarperDB config file not found at ${r}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Te.error(i),new Error(`Error reading HarperDB config file at ${r}`)}XU(s,r),Uu(s);let n=s.toJSON();if(Ne=Es(n),Ne.logging_rotation_rotate)for(let i in eS)Ne[i]&&Te.error(`Config ${eS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace($U)}}a(iS,"initConfig");function XU(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],$t.join(r,At.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],$t.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],$t.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Te.trace("Updating config file with missing config params"),Rt.writeFileSync(t,String(e)))}a(XU,"checkForUpdatedConfig");function Uu(e){let t=e.toJSON(),r=vU(t);if(r.error)throw Ya.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)}a(Uu,"validateConfig");function ZU(e,t){Ne===void 0&&(Ne={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(ZU,"updateConfigObject");function aS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&iS();let i=nS(ur.hdb_root),o=$t.join(i,At.HDB_CONFIG_FILE),c=Js(o),_;if(r===void 0&&e.toLowerCase()===Mr.SCHEMAS)_=t;else if(r===void 0){let E=ur[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=yu(E,t);c.setIn([...d],h)}else for(let E in r){let d=ur[E.toLowerCase()];if(d===Mr.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),T=yu(d,r[E]);try{c.setIn([...h],T)}catch(R){Te.error(R)}}}_&&sS(c,_),Uu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&zU(o,u),Rt.writeFileSync(l,String(c)),n&&(Ne=Es(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aS,"updateConfigValue");function zU(e,t){try{let r=$t.join(t,"backup",`${At.HDB_CONFIG_FILE}.bak`);Rt.copySync(e,r),Te.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Te.error(YU),Te.error(r)}}a(zU,"backupConfigFile");var jU=["schemas"];function Es(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!jU.includes(r)){let s=Es(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Es,"flattenConfig");function yu(e,t){if(e===Mr.CLUSTERING_NODENAME||e===Mr.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(qU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ot.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 ot.autoCast(t)}a(yu,"castConfigValue");function eM(){let e=ot.getPropsFilePath(),t=Lu(e);return Js(t).toJSON()}a(eM,"getConfiguration");async function tM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aS(void 0,void 0,n,!0),WU}catch(i){throw typeof i=="string"||i instanceof String?FU(i,i,xU.BAD_REQUEST,void 0,void 0,!0):i}}a(tM,"setConfiguration");function Mu(){let e=ot.getPropsFilePath();try{Rt.accessSync(e,Rt.constants.F_OK|Rt.constants.R_OK)}catch(s){throw Te.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Lu(e);return Js(t).toJSON()}a(Mu,"readConfigFile");function Js(e){return HU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function rM(){let e=Mu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ot.isEmptyOrZeroLength(t)?[]:t;let r=jf(t);if(r)throw Ya.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ot.isEmptyOrZeroLength(s)?[]:s;let n=jf(s);if(n)throw Ya.CONFIG_VALIDATION(n.message);if(!ot.isEmptyOrZeroLength(s)&&!ot.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ot.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ya.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(rM,"getClusteringRoutes");function oS(e){let t=tS(e);Ne={};for(let r in ur){let s=t.get(r.toUpperCase());if(ot.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ur[r].toLowerCase();n===Mr.LOGGING_ROOT?Ne[n]=$t.dirname(s):Ne[n]=s}return Ne}a(oS,"initOldConfig");function sM(e){let t=Mu();return GU.get(t,e.replaceAll("_","."))}a(sM,"getConfigFromFile")});var v=f((JX,uS)=>{"use strict";var Du=require("fs-extra"),Yt=require("path"),nM=require("os"),iM=require("properties-reader"),Qn=I(),Xs=b(),L=m(),Wa=lr(),aM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",_S=!1,oM={[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},Er={};uS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:cM,setHdbBasePath:_M,get:uM,initSync:EM,setProperty:k,initTestEnvironment:dM};function cM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(cM,"getHdbBasePath");function _M(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(_M,"setHdbBasePath");function uM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(uM,"get");function k(e,t){oM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(k,"setProperty");function lM(){let e;try{e=Xs.getPropsFilePath(),Du.accessSync(e,Du.constants.F_OK|Du.constants.R_OK),_S=!0;let t=iM(e);return Er[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Er[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Er[Qa]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(lM,"doesPropFileExist");function EM(e=!1){try{(_S||lM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(aM),Qn.error(t),console.error(t),process.exit(1)}}a(EM,"initSync");function dM(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Yt.join(__dirname,"../../","unitTests");Er[Qa]=Yt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,nM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),k(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),k(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),k(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),k(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),k(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),k(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(k("CORS_ACCESSLIST",o),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(k(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(k(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(k(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(dM,"initTestEnvironment")});var dS=f((ZX,ES)=>{"use strict";var Pu=v(),lS=m();Pu.initSync();var hM=Pu.get(lS.CONFIG_PARAMS.STORAGE_COMPRESSION),fM=Pu.get(lS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Ja=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=hM&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=fM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");ES.exports=Ja});var SS=f((jX,fS)=>{"use strict";var Zs=v(),Jn=m();Zs.initSync();var SM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",hS=Zs.get(Jn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),TM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Xa=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=SM,hS!==void 0&&(this.overlappingSync=hS),this.noReadAhead=TM}};a(Xa,"OpenEnvironmentObject");fS.exports=Xa});var X=f((tZ,NS)=>{"use strict";var Bu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=us(),TS=I(),Oe=it().LMDB_ERRORS_ENUM,ja=Yf(),vu=dS(),mS=SS(),Dr=Le(),Pt=Dr.INTERNAL_DBIS_NAME,RS=Dr.DBI_DEFINITION_NAME,mM="data.mdb",RM="lock.mdb",Xn=".mdb",AM="-lock",Za=class{constructor(t,r,s=!1){this.dbi=gt(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 Bu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Za,"TransactionCursor");function Hu(e,t){if(e===void 0)throw new Error(Oe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Oe.ENV_NAME_REQUIRED)}a(Hu,"pathEnvNameValidation");async function qu(e,t,r=!0){try{await pt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Oe.INVALID_BASE_PATH):s}try{let s=Dt.join(e,t+Xn);return await pt.access(s,pt.constants.R_OK|pt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await pt.access(Dt.join(e,t,mM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Oe.INVALID_ENVIRONMENT)}else throw new Error(Oe.INVALID_ENVIRONMENT);throw s}}a(qu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Oe.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function pM(e,t,r=!1,s=!1){Hu(e,t),t=t.toString();try{return await qu(e,t,s),Gu(e,t,r)}catch(n){if(n.message===Oe.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new mS(s?i:i+Xn,!1),c=Bu.open(o);c.dbis=Object.create(null);let _=new vu(!1);c.openDB(Pt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Fu(e,t,r);return c[Dr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(pM,"createEnvironment");async function gM(e,t,r,s=!0){let n=await Gu(e,t);if(r===void 0)throw new Error(Oe.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Oe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gM,"copyEnvironment");async function Gu(e,t,r=!1){Hu(e,t),t=t.toString();let s=Fu(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 qu(e,t),i=Dt.join(e,t+Xn),o=n!=i,c=new mS(n,o),_=Bu.open(c);_.dbis=Object.create(null);let u=pS(_);for(let l=0;l<u.length;l++)gt(_,u[l]);return _[Dr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Gu,"openEnvironment");async function NM(e,t,r=!1){Hu(e,t),t=t.toString();let s=Dt.join(e,t+Xn),n=await qu(e,t);if(global.lmdb_map!==void 0){let i=Fu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+AM:Dt.join(Dt.dirname(n),RM))}a(NM,"deleteEnvironment");async function AS(e){za.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]}a(AS,"closeEnvironment");function Fu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Fu,"getCachedEnvironmentName");function OM(e){za.validateEnv(e);let t=Object.create(null),r=gt(e,Pt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Pt)try{t[s]=Object.assign(new ja,n)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(OM,"listDBIDefinitions");function pS(e){za.validateEnv(e);let t=[],r=gt(e,Pt);for(let{key:s}of r.getRange({start:!1}))s!==Pt&&t.push(s);return t}a(pS,"listDBIs");function IM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{TS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(IM,"getDBIDefinition");function gS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Oe.DBI_DOES_NOT_EXIST){let i=new vu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[RS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gS,"createDBI");function gt(e,t){if(eo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Pt?r=IM(e,t):r=new ja,r===void 0)throw new Error(Oe.DBI_DOES_NOT_EXIST);let s;try{let n=new vu(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(Oe.DBI_DOES_NOT_EXIST):n}return s[RS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function bM(e,t){eo(e,t),t=t.toString();let r=gt(e,t),s=r.getStats();return r[Dr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(bM,"statDBI");async function wM(e,t){try{let r=Dt.join(e,t+Xn);return(await pt.stat(r)).size}catch{throw new Error(Oe.INVALID_ENVIRONMENT)}}a(wM,"environmentDataSize");function CM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Oe.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(CM,"dropDBI");function yM(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{gt(e,n)}catch(i){if(i.message===Oe.DBI_DOES_NOT_EXIST)gS(e,n,n!==t,n===t);else throw i}}}a(yM,"initializeDBIs");NS.exports={openDBI:gt,openEnvironment:Gu,createEnvironment:pM,listDBIs:pS,listDBIDefinitions:OM,createDBI:gS,dropDBI:CM,statDBI:bM,deleteEnvironment:NM,initializeDBIs:yM,TransactionCursor:Za,environmentDataSize:wM,copyEnvironment:gM,closeEnvironment:AS}});var IS=f((sZ,OS)=>{"use strict";var to=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(to,"InsertRecordsResponseObject");OS.exports=to});var wS=f((iZ,bS)=>{"use strict";var ro=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(ro,"UpdateRecordsResponseObject");bS.exports=ro});var yS=f((oZ,CS)=>{"use strict";var so=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(so,"UpsertRecordsResponseObject");CS.exports=so});var zs=f((EZ,MS)=>{"use strict";var LM=X(),UM=IS(),MM=wS(),DM=yS(),Kt=us(),Zn=it().LMDB_ERRORS_ENUM,PM=Le(),dr=m(),BM=b(),vM=require("uuid"),_Z=require("lmdb"),{handleHDBError:HM,hdb_errors:qM}=y(),{OVERFLOW_MARKER:uZ,MAX_SEARCH_KEY_LENGTH:lZ}=PM,LS=v();LS.initSync();var no=LS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ds=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new UM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];US(u,!0,n);let l=FM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return ku(o,c,s,i,n)}a(GM,"insertRecords");function FM(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][dr.FUNC_VAL],s[o]=c)}let _=Kt.getIndexedValues(c),u=e.dbis[o];if(_){no&&u.prefetch(_.map(l=>({key:l,value:n})),io);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}no&&e.dbis[t].prefetch([n],io),e.dbis[t].put(n,s,s[ds])})}a(FM,"insertRecord");function xM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xM,"removeSkippedRecords");function US(e,t,r){let s=r>0;(s||!Number.isInteger(e[ds]))&&(e[ds]=r||(r=Kt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[xu]))&&(e[xu]=r||Kt.getNextMonotonicTime()):delete e[xu]}a(US,"setTimestamps");function Vu(e,t,r){r.indexOf(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),LM.initializeDBIs(e,t,r)}a(Vu,"initializeTransaction");async function VM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new MM,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=$u(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return ku(c,_,s,i,n,o)}a(VM,"updateRecords");async function kM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Yu(e,t,r,s)}catch(_){throw HM(_,_.message,qM.HTTP_STATUS_CODES.BAD_REQUEST)}Vu(e,t,r);let i=new DM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;BM.isEmpty(u[t])?(l=vM.v4(),u[t]=l):l=u[t];let E=$u(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return ku(o,c,s,i,n)}a(kM,"upsertRecords");async function ku(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,_=o.length;c<_;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Kt.getNextMonotonicTime(),xM(r,i),s}a(ku,"finalizeWrite");function $u(e,t,r,s,n,i=!1,o){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(US(r,!l,o),Number.isInteger(r[ds])&&u[ds]>r[ds])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let T in r){if(!r.hasOwnProperty(T)||T===t)continue;let R=r[T],g=e.dbis[T];if(g===void 0)continue;let H=u[T];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][dr.FUNC_VAL],r[T]=R)}if(R===H)continue;let x=Kt.getIndexedValues(H);if(x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.remove(x[q],s)}if(x=Kt.getIndexedValues(R),x){no&&g.prefetch(x.map(q=>({key:q,value:s})),io);for(let q=0,ye=x.length;q<ye;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[ds])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:$u(e,t,r,s,n,i,o))}a($u,"updateUpsertRecord");function $M(e,t,r){if(Kt.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a($M,"validateBasic");function Yu(e,t,r,s){if($M(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Yu,"validateWrite");function io(){}a(io,"noop");MS.exports={insertRecords:GM,updateRecords:VM,upsertRecords:kM}});var j=f((hZ,qS)=>{"use strict";var ri=m(),YM=b(),Ye=v(),si=require("path"),KM=require("minimist"),DS=require("fs-extra"),PS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Pr,SCHEMAS_PARAM_CONFIG:zn,SYSTEM_SCHEMA_NAME:ao}=ri,jn,ei,ti;function BS(){if(jn!==void 0)return jn;if(Ye.getHdbBasePath()!==void 0)return jn=Ye.get(Pr.STORAGE_PATH)||si.join(Ye.getHdbBasePath(),ri.SCHEMA_DIR_NAME),jn}a(BS,"getBaseSchemaPath");function vS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=HS(ao),ei}a(vS,"getSystemSchemaPath");function WM(){if(ti!==void 0)return ti;if(Ye.getHdbBasePath()!==void 0)return ti=Ye.get(ri.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||si.join(Ye.getHdbBasePath(),ri.TRANSACTIONS_DIR_NAME),ti}a(WM,"getTransactionAuditStoreBasePath");function QM(e,t){let r=Ye.get(Pr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||si.join(WM(),e.toString())}a(QM,"getTransactionAuditStorePath");function HS(e,t){e=e.toString(),t=t&&t.toString();let r=Ye.get(ri.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||si.join(BS(),e)}a(HS,"getSchemaPath");function JM(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,KM(process.argv));let s=r[Pr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!YM.isObject(s))throw o;i=s}for(let o of i){let c=o[ao];if(!c)continue;let _=Ye.get(Pr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[zn.PATH];if(u)return PS.set(_,[ao,zn.TABLES,t,zn.PATH],u),Ye.setProperty(Pr.SCHEMAS,_),u;let l=c?.[zn.PATH];if(l)return PS.set(_,[ao,zn.PATH],l),Ye.setProperty(Pr.SCHEMAS,_),l}}let n=r[Pr.STORAGE_PATH.toUpperCase()];if(n){if(!DS.pathExistsSync(n))throw new Error(n+" does not exist");let i=si.join(n,e);return DS.mkdirsSync(i),Ye.setProperty(Pr.STORAGE_PATH,n),i}return vS()}a(JM,"initSystemSchemaPaths");function XM(){jn=void 0,ei=void 0,ti=void 0}a(XM,"resetPaths");qS.exports={getBaseSchemaPath:BS,getSystemSchemaPath:vS,getTransactionAuditStorePath:QM,getSchemaPath:HS,initSystemSchemaPaths:JM,resetPaths:XM}});var Wt=f((SZ,xS)=>{"use strict";var FS=b(),GS=m(),co=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ku=require("joi"),oo={schema_format:{pattern:co,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZM=Ku.alternatives(Ku.string().min(1).max(oo.schema_length.maximum).pattern(co).messages({"string.pattern.base":"{:#label} "+oo.schema_format.message}),Ku.number()).required();function zM(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>oo.schema_length.maximum?`'${e}' maximum of 250 characters`:co.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(zM,"checkValidTable");function jM(e,t){return FS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(jM,"validateSchemaExists");function eD(e,t){let r=t.state.ancestors[0].schema;return FS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(eD,"validateTableExists");function tD(e,t){return e.toLowerCase()===GS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${GS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tD,"validateSchemaName");xS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:ZM,validateSchemaExists:jM,validateTableExists:eD,validateSchemaName:tD,checkValidTable:zM}});var _o=f((mZ,VS)=>{var{common_validators:Br}=Wt(),ni=te(),Bt="is required",Z={schema:{presence:!0,format:Br.schema_format,length:Br.schema_length},table:{presence:!0,format:Br.schema_format,length:Br.schema_length},attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length},hash_attribute:{presence:!0,format:Br.schema_format,length:Br.schema_length}};function ii(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ii,"makeAttributesStrings");function rD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(rD,"schema_object");function sD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(sD,"table_object");function nD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Bt},ni.validateObject(e,Z)}a(nD,"create_table_object");function iD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence={message:Bt},Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(iD,"attribute_object");function aD(e){return e=ii(e),Z.schema.presence={message:Bt},Z.table.presence={message:Bt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,ni.validateObject(e,Z)}a(aD,"describe_table");function oD(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(oD,"validateTableResidence");VS.exports={schema_object:rD,create_table_object:nD,table_object:sD,attribute_object:iD,describe_table:aD,validateTableResidence:oD}});var $S=f((AZ,kS)=>{"use strict";var cD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||cD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");kS.exports=uo});var Eo=f((gZ,YS)=>{"use strict";var _D=$S(),lo=class extends _D{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(lo,"LMDBCreateAttributeObject");YS.exports=lo});var WS=f((OZ,KS)=>{"use strict";KS.exports=lD;var uD="inserted";function lD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===uD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(lD,"returnObject")});var ho=f((bZ,zS)=>{"use strict";var ED=m(),Wu=X(),dD=zs(),{getSystemSchemaPath:hD,getSchemaPath:fD}=j(),SD=_s(),TD=_o(),mD=Eo(),RD=WS(),{handleHDBError:QS,hdb_errors:XS}=y(),JS=b(),{HTTP_STATUS_CODES:AD}=XS,Qu=SD.hdb_attribute,ZS=[];for(let e=0;e<Qu.attributes.length;e++)ZS.push(Qu.attributes[e].attribute);var pD="inserted";zS.exports=gD;async function gD(e){let t=TD.attribute_object(e);if(t)throw QS(new Error,t.message,XS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&JS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw QS(new Error,r,AD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=JS.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 mD(e.schema,e.table,e.attribute,e.id);try{let i=await Wu.openEnvironment(fD(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}`);Wu.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Wu.openEnvironment(hD(),ED.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await dD.insertRecords(o,Qu.hash_attribute,ZS,[n]);return RD(pD,c,{records:[n]},_)}catch(i){throw i}}a(gD,"lmdbCreateAttribute")});var Xu=f((CZ,eT)=>{var{hdb_schema_table:jS}=Wt(),ND=te(),Ju=require("joi"),OD={undefined:"undefined",null:"null"},ID=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||OD[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),bD=Ju.object({schema:jS,table:jS,records:Ju.array().items(Ju.object().custom(ID)).required()});eT.exports=function(e){return ND.validateBySchema(e,bD)}});var fo=f((UZ,rT)=>{"use strict";var hr=b(),tT=I(),LZ=Xu();rT.exports=wD;function wD(e){if(hr.isEmpty(e))throw new Error("invalid update parameters defined.");if(hr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(hr.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(hr.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&hr.isEmptyOrZeroLength(o[r]))throw tT.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!hr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw tT.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!hr.isEmpty(o[r])&&o[r]!==""&&s.has(hr.autoCast(o[r]))&&(o.skip=!0),s.add(hr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ai=f((DZ,sT)=>{"use strict";var CD=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=CD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");sT.exports=So});var mo=f((vZ,nT)=>{"use strict";var BZ=ai(),To=m(),zu=b(),Zu=I(),yD=require("uuid"),{handleHDBError:oi,hdb_errors:LD}=y(),{HDB_ERROR_MSGS:ci,HTTP_STATUS_CODES:_i}=LD;nT.exports=UD;function UD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];DD(i,r,e.operation)}}a(UD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw oi(new Error,ci.ATTR_NAME_LENGTH_ERR(e),_i.BAD_REQUEST,void 0,void 0,!0);if(zu.isEmptyOrZeroLength(e)||zu.isEmpty(e.trim()))throw oi(new Error,ci.ATTR_NAME_NULLISH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function DD(e,t,r){if(!e.hasOwnProperty(t)||zu.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=yD.v4();return}throw Zu.error("Update transaction aborted due to record with no hash value:",e),oi(new Error,ci.RECORD_MISSING_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>To.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zu.error(e),oi(new Error,ci.HASH_VAL_LENGTH_ERR,_i.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Zu.error(e),oi(new Error,ci.INVALID_FORWARD_SLASH_IN_HASH_ERR,_i.BAD_REQUEST,void 0,void 0,!0)}a(DD,"validateHash")});var aT=f((qZ,iT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");iT.exports=Ro});var Ao=f((FZ,_T)=>{var PD=require("crypto"),oT=9;function BD(e){let t=HD(oT),r=cT(e+t);return t+r}a(BD,"createHash");function vD(e,t){let r=e.substr(0,oT),s=r+cT(t+r);return e===s}a(vD,"validateHash");function HD(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(HD,"generateSalt");function cT(e){return PD.createHash("md5").update(e).digest("hex")}a(cT,"md5");_T.exports={hash:BD,validate:vD}});var lT=f((VZ,uT)=>{"use strict";var vr=m(),ui=class{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(ui,"BaseLicense");var po=class extends ui{constructor(t=0,r=vr.STORAGE_TYPES_ENUM.LMDB,s=vr.LICENSE_VALUES.API_CALL_DEFAULT,n=vr.RAM_ALLOCATION_ENUM.DEFAULT,i=vr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(po,"ExtendedLicense");uT.exports={BaseLicense:ui,ExtendedLicense:po}});var tn=f(($Z,TT)=>{"use strict";var en=require("fs-extra"),ET=Ao(),dT=require("crypto"),qD=require("moment"),GD=require("uuid").v4,De=I(),el=require("path"),FD=b(),ct=m(),xD=lT().ExtendedLicense,js="invalid license key format",VD="061183",kD="mofi25",$D="aes-256-cbc",YD=16,KD=32,hT=v();hT.initSync();var ju;TT.exports={validateLicense:fT,generateFingerPrint:QD,licenseSearch:ST,getLicense:ZD};function tl(){return el.join(hT.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(tl,"getLicenseDirPath");function WD(){let e=tl();return el.join(e,ct.LICENSE_FILE_NAME)}a(WD,"getLicenseFilePath");function rl(){let e=tl();return el.join(e,ct.REG_KEY_FILE_NAME)}a(rl,"getFingerPrintFilePath");async function QD(){let e=rl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await JD();throw De.error(`Error writing fingerprint file to ${e}`),De.error(t),new Error("There was an error generating the fingerprint")}}a(QD,"generateFingerPrint");async function JD(){let e=GD(),t=ET.hash(e),r=rl();try{await en.mkdirp(tl()),await en.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw De.error(`Error writing fingerprint file to ${r}`),De.error(s),new Error("There was an error generating the fingerprint")}return t}a(JD,"writeFingerprint");function fT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:ct.STORAGE_TYPES_ENUM.LMDB,api_call:ct.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:ct.RAM_ALLOCATION_ENUM.DEFAULT,version:ct.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return De.error("empty license key passed to validate."),r;let s=rl(),n=!1;try{n=en.statSync(s)}catch(i){De.error(i)}if(n){let i;try{i=en.readFileSync(s,"utf8")}catch{De.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(kD),c=o[1];c=Buffer.concat([Buffer.from(c)],YD);let _=Buffer.concat([Buffer.from(i)],KD),u=dT.createDecipheriv($D,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=XD(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(js),De.error(js),new Error(js)}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(js),De.error(js),new Error(js)}else r.exp_date=l;r.exp_date<qD().valueOf()&&(r.valid_date=!1),ET.validate(o[1],`${VD}${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||De.error("Invalid licence"),r}a(fT,"validateLicense");function XD(e,t){try{let r=dT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{De.warn("Check old license failed")}}a(XD,"checkOldLicense");function ST(){let e=new xD;e.api_call=0;let t=[];try{t=en.readFileSync(WD(),"utf-8").split(ct.NEW_LINE)}catch(r){r.code==="ENOENT"?De.info("no license file found"):De.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(FD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=fT(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){De.error("There was an error parsing the license string."),De.error(n),e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=ct.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=ct.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=ct.LICENSE_VALUES.API_CALL_DEFAULT),ju=e,e}a(ST,"licenseSearch");async function ZD(){return ju||await ST(),ju}a(ZD,"getLicense")});var rn=f((KZ,cl)=>{"use strict";var{Worker:zD,MessageChannel:jD,parentPort:fr,isMainThread:AT,threadId:eP,workerData:tP}=require("worker_threads"),{PACKAGE_ROOT:rP}=m(),{join:sP,isAbsolute:nP,extname:iP}=require("path"),{totalmem:mT}=require("os"),al=m(),pT=v(),aP=tn(),go=I(),oP=m();pT.initSync();var cP=pT.get(al.CONFIG_PARAMS.HTTP_THREADS)||1,_P=1024*1024,Hr=[],hs=[],uP=50,gT=1e4,NT="restart",OT="request_thread_info",IT="resource_report",bT="thread_info",wT="added-port",sl;cl.exports={startWorker:nl,restartWorkers:ol,shutdownWorkers:EP,workers:Hr,setMonitorListener:TP,onMessageFromWorkers:dP,broadcast:hP};function nl(e,t={}){let s=aP.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||mT();n=Math.min(n,mT());let i=Math.min(Math.max(Math.floor(n/_P/(1+cP/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of hs){let{port1:l,port2:E}=new jD;u.postMessage({type:wT,port:l},[l]),c.push(E)}iP(e)||(e+=".js");let _=new zD(nP(e)?e:sP(rP,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return No(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{nl(e,t)},_.on("error",u=>{console.error("Worker error:",u),go.error("Worker error:",u)}),_.on("exit",u=>{Hr.splice(Hr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<uP?(t.unexpectedRestarts=_.unexpectedRestarts+1,nl(e,t)):go.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===NT&&ol(u.workerType),u.type===OT&&fP(_),u.type===IT&&SP(_,u)}),Hr.push(_),RP(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(nl,"startWorker");var lP=[al.THREAD_TYPES.HTTP];async function ol(e=null,t=2,r=!0){if(AT){t<1&&(t=t*Hr.length);let s=[];for(let n of Hr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:al.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=lP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),gT*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else fr.postMessage({type:NT,workerType:e})}a(ol,"restartWorkers");function EP(e){return ol(e,1/0,!1)}a(EP,"shutdownWorkers");var CT=[];function dP(e){CT.push(e)}a(dP,"onMessageFromWorkers");function hP(e){for(let t of hs)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(hP,"broadcast");function fP(e){e.postMessage({type:bT,workers:yT()})}a(fP,"sendThreadInfo");function yT(){let e=Date.now();return Hr.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}))}a(yT,"getChildWorkerInfo");function SP(e,t){e.resources=t,e.resources.updated=Date.now()}a(SP,"recordResourceReport");var il;function TP(e){il=e}a(TP,"setMonitorListener");var mP=1e3,RT=!1;function RP(){RT||(RT=!0,setInterval(()=>{for(let e of Hr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}il&&il()},mP).unref())}a(RP,"startMonitoring");var AP=1e3;if(fr){No(fr);for(let e of tP.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:IT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},AP).unref(),sl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:OT});function r(s){s.type===bT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sl=yT;cl.exports.getThreadInfo=sl;function No(e,t){hs.push(e),e.on("message",r=>{if(r.type===wT)No(r.port);else for(let s of CT)s(r)}).on("close",()=>{hs.splice(hs.indexOf(e),1)}).on("exit",()=>{hs.splice(hs.indexOf(e),1)}),t||e.unref()}a(No,"addPort");AT||fr.on("message",async e=>{let{type:t}=e;t===oP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",eP),process.exit(0)},gT).unref())})});var MT=f((QZ,UT)=>{"use strict";var _l=X(),pP=I(),LT=it().LMDB_ERRORS_ENUM;UT.exports=gP;async function gP(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 o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await _l.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LT.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await _l.closeEnvironment(global.lmdb_map[s]),await _l.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LT.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){pP.error(t)}}a(gP,"cleanLMDBMap")});var Ot=f((XZ,BT)=>{"use strict";var Io=Xu(),Nt=b(),NP=require("util"),bo=Qt(),OP=Gr(),ul=I(),{handleHDBError:qr,hdb_errors:IP}=y(),{HTTP_STATUS_CODES:fs}=IP,bP=NP.promisify(OP.getTableSchema),wP="updated",DT="inserted",PT="upserted";BT.exports={insert:yP,update:LP,upsert:UP,validation:CP,flush:MP};async function CP(e){if(Nt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Nt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Nt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await bP(e.schema,e.table),r=Io(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw ul.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(!Nt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ul.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Nt.isEmpty(c[s])&&c[s]!==""&&n.has(Nt.autoCast(c[s]))&&(c.skip=!0),n.add(Nt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(CP,"validation");async function yP(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.createRecords(e);return Oo(DT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(yP,"insertData");async function LP(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);let s=await bo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Oo(wP,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Oo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LP,"updateData");async function UP(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Io(e);if(t)throw qr(new Error,t.message,fs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,fs.BAD_REQUEST);try{let s=await bo.upsertRecords(e);return Oo(PT,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw qr(s,null,null,ul.ERR,n)}}a(UP,"upsertData");function Oo(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===DT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function MP(e){return bo.flush(e.schema,e.table)}a(MP,"flush")});var El=f((zZ,qT)=>{var DP=te(),ll=require("joi"),{hdb_schema_table:vT}=Wt(),HT={schema:vT,table:vT},PP={date:ll.date().iso().required()},BP={timestamp:ll.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qT.exports=function(e,t){let r=t==="timestamp"?{...HT,...BP}:{...HT,...PP},s=ll.object(r);return DP.validateBySchema(e,s)}});var VT=f((jZ,xT)=>{var vP=te(),GT=require("joi"),{hdb_schema_table:FT}=Wt(),HP=GT.object({schema:FT,table:FT,hash_values:GT.array().required()});xT.exports=function(e){return vP.validateBySchema(e,HP)}});var $T=f((e3,kT)=>{"use strict";var wo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(wo,"InsertObject");var Co=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(Co,"NoSQLSeachObject");var yo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(yo,"DeleteResponseObject");kT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ts=f((r3,JT)=>{"use strict";var KT=El(),qP=VT(),Lo=b(),YT=require("moment"),WT=I(),{promisify:GP,callbackify:FP}=require("util"),Ss=m(),xP=Gr(),dl=GP(xP.getTableSchema),hl=Qt(),{DeleteResponseObject:VP}=$T(),{handleHDBError:Fr,hdb_errors:kP}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:xr}=kP,$P="records successfully deleted",YP=FP(QT);JT.exports={delete:YP,deleteRecord:QT,deleteFilesBefore:KP,deleteAuditLogsBefore:WP};async function KP(e){let t=KT(e,"date");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(!YT(e.date,YT.ISO_8601).isValid())throw Fr(new Error,Uo.INVALID_DATE,xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_DATE,!0);let s=Lo.checkSchemaTableExist(e.schema,e.table);if(s)throw Fr(new Error,s,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,s,!0);let n=await hl.deleteRecordsBefore(e);if(await dl(e.schema,e.table),WT.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(KP,"deleteFilesBefore");async function WP(e){let t=KT(e,"timestamp");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Fr(new Error,Uo.INVALID_VALUE("Timestamp"),xr.BAD_REQUEST,Ss.LOG_LEVELS.ERROR,Uo.INVALID_VALUE("Timestamp"),!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);let s=await hl.deleteAuditLogsBefore(e);return await dl(e.schema,e.table),WT.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(WP,"deleteAuditLogsBefore");async function QT(e){let t=qP(e);if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);let r=Lo.checkSchemaTableExist(e.schema,e.table);if(r)throw Fr(new Error,r,xr.NOT_FOUND,Ss.LOG_LEVELS.ERROR,r,!0);try{await dl(e.schema,e.table);let s=await hl.deleteRecords(e);return Lo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${$P}`),s}catch(s){if(s.message===Ss.SEARCH_NOT_FOUND_MESSAGE){let n=new VP;return n.message=Ss.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QT,"deleteRecord")});var ZT=f((n3,XT)=>{var fl=te(),Pe={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 QP(e){return Pe.password.presence=!0,Pe.username.presence=!0,Pe.role.presence=!0,Pe.active.presence=!0,fl.validateObject(e,Pe)}a(QP,"addUserValidation");function JP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(JP,"alterUserValidation");function XP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(XP,"dropUserValidation");XT.exports={addUserValidation:QP,alterUserValidation:JP,dropUserValidation:XP}});var Vr=f((a3,tm)=>{"use strict";var li=require("crypto"),jT="aes-256-cbc",ZP=32,zP=16,Sl=64,em=32,jP=Sl+em,zT=new Map;tm.exports={encrypt:eB,decrypt:tB,createNatsTableStreamName:rB};function eB(e){let t=li.randomBytes(ZP),r=li.randomBytes(zP),s=li.createCipheriv(jT,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(eB,"encrypt");function tB(e){let t=e.substr(0,Sl),r=e.substr(Sl,em),s=e.substr(jP,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=li.createDecipheriv(jT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tB,"decrypt");function rB(e,t){let r=`${e}.${t}`,s=zT.get(r);return s||(s=li.createHash("md5").update(`${e}.${t}`).digest("hex"),zT.set(r,s)),s}a(rB,"createNatsTableStreamName")});var ue=f((_3,sm)=>{"use strict";var{platform:c3}=require("os"),sB="nats-server.zip",Tl="nats-server",nB=process.platform==="win32"?`${Tl}.exe`:Tl,ml="HDB",iB=/^[^\s.,*>]+$/,rm="__request__",aB=a(e=>`${e}.${rm}`,"REQUEST_SUBJECT"),oB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},cB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_B={HUB:"hub.pid",LEAF:"leaf.pid"},uB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},lB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ml,deliver_subject:"__HDB__.WORKQUEUE"},EB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ml,deliver_subject:"HDB.SCHEMAQUEUE"},dB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ml,deliver_subject:"HDB.USERQUEUE"},hB={SUCCESS:"success",ERROR:"error"},fB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},SB={TXN:"txn",MSGID:"msgid"},sn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},TB={[sn.ERR]:1,[sn.WRN]:2,[sn.INF]:3,[sn.DBG]:4,[sn.TRC]:5},mB={debug:"-D",trace:"-DVV"};sm.exports={NATS_SERVER_ZIP:sB,NATS_SERVER_NAME:Tl,NATS_BINARY_NAME:nB,PID_FILES:_B,NATS_CONFIG_FILES:cB,SERVER_SUFFIX:uB,WORK_QUEUE_CONSUMER_NAMES:lB,SCHEMA_QUEUE_CONSUMER_NAMES:EB,USER_QUEUE_CONSUMER_NAMES:dB,NATS_TERM_CONSTRAINTS_RX:iB,REQUEST_SUFFIX:rm,UPDATE_REMOTE_RESPONSE_STATUSES:hB,CLUSTER_STATUS_STATUSES:fB,REQUEST_SUBJECT:aB,SUBJECT_PREFIXES:SB,MSG_HEADERS:oB,LOG_LEVELS:sn,LOG_LEVEL_FLAGS:mB,LOG_LEVEL_HIERARCHY:TB}});var Sr=f((E3,mm)=>{"use strict";var cm="username is required",_m="nothing to update, must supply active, role or password to update",um="password cannot be an empty string",lm="If role is specified, it cannot be empty.",Em="active must be true or false";mm.exports={addUser:bB,alterUser:wB,dropUser:yB,userInfo:LB,listUsers:Do,listUsersExternal:UB,setUsersToGlobal:Ei,findAndValidateUser:PB,getClusterUser:BB,USERNAME_REQUIRED:cm,ALTERUSER_NOTHING_TO_UPDATE:_m,EMPTY_PASSWORD:um,EMPTY_ROLE:lm,ACTIVE_BOOLEAN:Em};var dm=Ot(),RB=Ts(),Al=Ao(),hm=ZT(),fm=It(),pl=an(),_t=b(),Sm=require("validate.js"),M=I(),{promisify:gl}=require("util"),Nl=Vr(),nm=m(),im=ue(),AB=lr(),l3=v(),pB=tn(),gB=_s(),{handleHDBError:Jt,hdb_errors:NB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Rl,HDB_ERROR_MSGS:nn}=NB,{UserEventMsg:Ol}=kr(),am=require("lodash"),Tm={username:!0,active:!0,role:!0,password:!0},om=new Map,Mo=gl(fm.searchByValue),OB=gl(fm.searchByHash),IB=gl(RB.delete);async function bB(e){let t=Sm.cleanAttributes(e,Tm),r=hm.addUserValidation(t);if(r)throw Jt(new Error,r.message,Xt.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 Mo(s),n=n&&Array.from(n)}catch(_){throw M.error("There was an error searching for a role in add user"),M.error(_),_}if(!n||n.length<1)throw Jt(new Error,nn.ROLE_NAME_NOT_FOUND(t.role),Xt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Jt(new Error,nn.DUP_ROLES_FOUND(t.role),Xt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await dm.insert(i)}catch(_){throw M.error("There was an error searching for a user."),M.error(_),_}M.debug(o);try{await Ei()}catch(_){throw M.error("Got an error setting users to global"),M.error(_),_}if(o.skipped_hashes.length===1)throw Jt(new Error,nn.USER_ALREADY_EXISTS(t.username),Xt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],pl.signalUserChange(new Ol(process.pid)),`${c.username} successfully added`}a(bB,"addUser");async function wB(e){let t=Sm.cleanAttributes(e,Tm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(cm);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(_m);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(um);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(Em);let r=CB(t.username);if(!_t.isEmpty(t.password)&&!_t.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Nl.encrypt(t.password)),t.password=Al.hash(t.password)),t.role==="")throw new Error(lm);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Mo(i)||[])}catch(c){throw M.error("Got an error searching for a role."),M.error(c),c}if(!o||o.length===0){let c=nn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw M.error(c),Jt(new Error,c,Xt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=nn.ALTER_USER_DUP_ROLES(t.role);throw M.error(c),Jt(new Error,c,Xt.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await dm.update(s)}catch(i){throw M.error("Error during update."),M.error(i),i}try{await Ei()}catch(i){throw M.error("Got an error setting users to global"),M.error(i),i}return pl.signalUserChange(new Ol(process.pid)),n}a(wB,"alterUser");function CB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(CB,"isClusterUser");async function yB(e){try{let t=hm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(_t.isEmpty(global.hdb_users.get(e.username)))throw Jt(new Error,nn.USER_NOT_EXIST(e.username),Xt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await IB(r)}catch(n){throw M.error("Got an error deleting a user."),M.error(n),n}M.debug(s);try{await Ei()}catch(n){throw M.error("Got an error setting users to global."),M.error(n),n}return pl.signalUserChange(new Ol(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(yB,"dropUser");async function LB(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 OB(r)}catch(n){throw M.error("Got an error searching for a role."),M.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw M.error(r),r}return t}a(LB,"userInfo");async function UB(){let e;try{e=await Do()}catch(t){throw M.error("Got an error listing users."),M.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(UB,"listUsersExternal");async function Do(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Mo(e)}catch(o){throw M.error("Got an error searching for roles."),M.error(o),o}let r={};for(let o of t)r[o.id]=am.cloneDeep(o);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 Mo(s)}catch(o){throw M.error("Got an error searching for users."),M.error(o),o}let i=new Map;for(let o of n)o=am.cloneDeep(o),o.role=r[o.role],MB(o.role),i.set(o.username,o);return(await pB.getLicense()).enterprise?i:DB(Array.from(i.values()))}catch(e){throw M.error("got an error listing users"),M.error(e),_t.errorizeMessage(e)}return null}a(Do,"listUsers");function MB(e){try{if(!e){M.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(gB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){M.error("Got an error trying to set system permissions."),M.error(t)}}a(MB,"appendSystemTablesToRole");function DB(e){try{if(M.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?(M.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return M.error("error filtering users."),M.error(t),new Map}}a(DB,"nonEnterpriseFilter");async function Ei(){try{let e=await Do();global.hdb_users=e}catch(e){throw M.error(e),e}}a(Ei,"setUsersToGlobal");async function PB(e,t,r=!0){global.hdb_users||await Ei();let s=global.hdb_users.get(e);if(!s)throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Jt(new Error,Rl.USER_INACTIVE,Xt.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(om.get(t)===s.password)return n;if(Al.validate(s.password,t))om.set(t,s.password);else throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(PB,"findAndValidateUser");async function BB(){let e=await Do(),t=AB.getConfigFromFile(nm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===nm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Nl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+im.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+im.SERVER_SUFFIX.ADMIN,r}a(BB,"getClusterUser")});var Po=f((h3,gm)=>{"use strict";var ms=I(),ut=m(),vB=MT(),Rm=Gr(),HB=Rs(),qB=Sr(),{validateEvent:pm}=kr(),di=Qt(),GB=require("process"),FB={[ut.ITC_EVENT_TYPES.SCHEMA]:xB,[ut.ITC_EVENT_TYPES.USER]:kB};async function xB(e){let t=pm(e);if(t){ms.error(t);return}ms.trace("ITC schemaHandler received schema event:",e),await vB(e.message),await VB(e.message)}a(xB,"schemaHandler");async function VB(e){try{if(di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.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 HB.describeTable({schema:e.schema,table:e.table});break;default:Rm.setSchemaDataToGlobal(Am);break}else Rm.setSchemaDataToGlobal(Am)}catch(t){ms.error(t)}}a(VB,"syncSchemaMetadata");function Am(e){e&&ms.error(e)}a(Am,"handleErrorCallback");async function kB(e){try{di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),di.resetReadTxn(ut.SYSTEM_SCHEMA_NAME,ut.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=pm(e);if(t){ms.error(t);return}ms.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${GB.pid} received user event:`,e),await qB.setUsersToGlobal()}catch(t){ms.error(t)}}a(kB,"userHandler");gm.exports=FB});var kr=f((R3,Om)=>{"use strict";var S3=I(),Il=b(),$B=m(),{ITC_ERRORS:hi}=it(),{parentPort:T3,threadId:YB,isMainThread:KB,workerData:m3}=require("worker_threads"),{onMessageFromWorkers:WB,broadcast:QB}=rn();Om.exports={sendItcEvent:JB,validateEvent:Nm,SchemaEventMsg:XB,UserEventMsg:ZB};var Bo;WB(e=>{Bo=Bo||Po(),Nm(e),Bo[e.type]&&Bo[e.type](e)});function JB(e){!KB&&e.message&&(e.message.originator=YB),QB(e)}a(JB,"sendItcEvent");function Nm(e){if(typeof e!="object")return hi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Il.isEmpty(e.type))return hi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Il.isEmpty(e.message))return hi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Il.isEmpty(e.message.originator))return hi.MISSING_ORIGIN;if($B.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hi.INVALID_EVENT(e.type)}a(Nm,"validateEvent");function XB(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(XB,"SchemaEventMsg");function ZB(e){this.originator=e}a(ZB,"UserEventMsg")});var an=f((g3,Cm)=>{"use strict";var Im=m(),p3=b(),vo=I(),bm=aT(),on,{sendItcEvent:wm}=kr();function zB(e){try{vo.trace("signalSchemaChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.SCHEMA,e);on.schema(t),wm(t)}catch(t){vo.error(t)}}a(zB,"signalSchemaChange");function jB(e){try{vo.trace("signalUserChange called with message:",e),on=on||Po();let t=new bm(Im.ITC_EVENT_TYPES.USER,e);on.user(t),wm(t)}catch(t){vo.error(t)}}a(jB,"signalUserChange");Cm.exports={signalSchemaChange:zB,signalUserChange:jB}});var Ho=f((O3,Lm)=>{"use strict";var ym=b(),ev=m(),tv=I(),rv=ho(),sv=Eo(),nv=an(),{SchemaEventMsg:iv}=kr(),av="already exists in";Lm.exports=ov;async function ov(e,t,r){if(ym.isEmptyOrZeroLength(r))return r;let s=[];ym.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 cv(e,t.schema,t.name,i)})),n}a(ov,"lmdbCheckForNewAttributes");async function cv(e,t,r,s){let n=new sv(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await _v(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(av))tv.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(cv,"createNewAttribute");async function _v(e){let t;return t=await rv(e),nv.signalSchemaChange(new iv(process.pid,ev.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_v,"createAttribute")});var cn=f((b3,Um)=>{"use strict";var qo=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(qo,"LMDBTransactionObject");Um.exports=qo});var Dm=f((C3,Mm)=>{"use strict";var uv=cn(),lv=m().OPERATIONS_ENUM,Go=class extends uv{constructor(t,r,s,n,i=void 0){super(lv.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");Mm.exports=Go});var Bm=f((L3,Pm)=>{"use strict";var Ev=cn(),dv=m().OPERATIONS_ENUM,Fo=class extends Ev{constructor(t,r,s,n,i,o=void 0){super(dv.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Pm.exports=Fo});var Hm=f((M3,vm)=>{"use strict";var hv=cn(),fv=m().OPERATIONS_ENUM,xo=class extends hv{constructor(t,r,s,n,i,o=void 0){super(fv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");vm.exports=xo});var Gm=f((P3,qm)=>{"use strict";var Sv=cn(),Tv=m().OPERATIONS_ENUM,Vo=class extends Sv{constructor(t,r,s,n,i=void 0){super(Tv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");qm.exports=Vo});var fi=f((H3,km)=>{"use strict";var v3=require("path"),Fm=X(),mv=Dm(),Rv=Bm(),Av=Hm(),pv=Gm(),_n=Le(),xm=b(),{CONFIG_PARAMS:gv}=m(),Vm=v();Vm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Nv}=j();km.exports=Ov;async function Ov(e,t){if(Vm.get(gv.LOGGING_AUDITLOG)===!1)return;let r=Nv(e.schema,e.table),s=await Fm.openEnvironment(r,e.table,!0),n=Iv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Fm.initializeDBIs(s,_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_n.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xm.isEmpty(n.user_name)||s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[_n.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(Ov,"writeTransaction");function Iv(e,t){let r=xm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new mv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new Rv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Av(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new pv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Iv,"createTransactionObject")});var bl=f((F3,$m)=>{"use strict";var bv=fo(),G3=ai(),Si=m(),wv=mo(),Cv=zs().insertRecords,yv=X(),Lv=I(),Uv=Ho(),{getSchemaPath:Mv}=j(),Dv=fi();$m.exports=Pv;async function Pv(e){try{let{schema_table:t,attributes:r}=bv(e);wv(e,r,t.hash_attribute),e.schema!==Si.SYSTEM_SCHEMA_NAME&&(r.includes(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Si.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Uv(e.hdb_auth_header,t,r),n=Mv(e.schema,e.table),i=await yv.openEnvironment(n,e.table),o=await Cv(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Dv(e,o)}catch(c){Lv.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Pv,"lmdbCreateRecords")});var Wm=f((V3,Km)=>{"use strict";var Ym=m(),Bv=bl(),vv=ai(),Hv=require("fs-extra"),{getSchemaPath:qv}=j();Km.exports=Gv;async function Gv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new vv(Ym.SYSTEM_SCHEMA_NAME,Ym.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Bv(r),await Hv.mkdirp(qv(e.schema))}a(Gv,"lmdbCreateSchema")});var Jm=f(($3,Qm)=>{"use strict";var $o=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a($o,"DeleteRecordsResponseObject");Qm.exports=$o});var yl=f((J3,zm)=>{"use strict";var Xm=X(),wl=us(),Cl=it().LMDB_ERRORS_ENUM,Fv=Le(),Zm=I(),K3=b(),xv=require("lmdb"),Vv=Jm(),kv=m(),{OVERFLOW_MARKER:W3,MAX_SEARCH_KEY_LENGTH:Q3}=Fv,$v=kv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Yv(e,t,r,s){if(wl.validateEnv(e),t===void 0)throw new Error(Cl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Cl.IDS_REQUIRED):new Error(Cl.IDS_MUST_BE_ITERABLE);try{let n=Xm.listDBIs(e);Xm.initializeDBIs(e,t,n);let i=new Vv,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let T=e.dbis[t].get(o);if(!T||s&&T[$v]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,xv.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!T.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=T[H];if(q!=null)try{let ye=wl.getIndexedValues(q);if(ye)for(let U=0,$=ye.length;U<$;U++)x.remove(ye[U],o)}catch{Zm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Zm.warn(T),i.skipped.push(o)}let u=[],l=await Promise.all(c);for(let d=0,h=l.length;d<h;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 h=u[d];i.original_records.splice(h-E,1),E++}return i.txn_time=wl.getNextMonotonicTime(),i}catch(n){throw n}}a(Yv,"deleteRecords");zm.exports={deleteRecords:Yv}});var Ti=f((Z3,eR)=>{"use strict";var un=b(),Kv=yl(),Wv=X(),{getSchemaPath:Qv}=j(),Jv=fi(),Xv=I();eR.exports=Zv;async function Zv(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(un.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(un.isEmptyOrZeroLength(e.hash_values)&&!un.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];un.isEmpty(_)||e.hash_values.push(_)}}if(un.isEmptyOrZeroLength(e.hash_values))return jm([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(un.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=Qv(e.schema,e.table),i=await Wv.openEnvironment(n,e.table),o=await Kv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Jv(e,o)}catch(c){Xv.error(`unable to write transaction due to ${c.message}`)}return jm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Zv,"lmdbDeleteRecords");function jm(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(jm,"createDeleteResponse")});var Ul=f((ez,tR)=>{"use strict";var zv=m(),j3=us();function Ll(e,t){let r=Object.create(null);if(t.length===1&&zv.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Ll,"parseRow");function jv(e,t,r,s){let n=Ll(r,e);s.push(n)}a(jv,"searchAll");function eH(e,t,r,s){let n=Ll(r,e);s[t]=n}a(eH,"searchAllToMap");function tH(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(tH,"iterateDBI");function As(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(As,"pushResults");function rH(e,t,r,s,n,i){t.toString().endsWith(e)&&As(t,r,s,n,i)}a(rH,"endsWith");function sH(e,t,r,s,n,i){t.toString().includes(e)&&As(t,r,s,n,i)}a(sH,"contains");function nH(e,t,r,s,n,i){t>e&&As(t,r,s,n,i)}a(nH,"greaterThanCompare");function iH(e,t,r,s,n,i){t>=e&&As(t,r,s,n,i)}a(iH,"greaterThanEqualCompare");function aH(e,t,r,s,n,i){t<e&&As(t,r,s,n,i)}a(aH,"lessThanCompare");function oH(e,t,r,s,n,i){t<=e&&As(t,r,s,n,i)}a(oH,"lessThanEqualCompare");tR.exports={parseRow:Ll,searchAll:jv,searchAllToMap:eH,iterateDBI:tH,endsWith:rH,contains:sH,greaterThanCompare:nH,greaterThanEqualCompare:iH,lessThanCompare:aH,lessThanEqualCompare:oH,pushResults:As}});var gs=f((iz,cR)=>{"use strict";var $r=X(),rz=I(),lt=us(),Yo=Le(),oe=it().LMDB_ERRORS_ENUM,sz=b(),cH=m(),Ko=Ul(),{parseRow:_H}=Ko,nz=require("lmdb"),{OVERFLOW_MARKER:rR,MAX_SEARCH_KEY_LENGTH:uH}=Yo;function sR(e,t,r,s=!1,n=void 0,i=void 0){return ps(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sR,"iterateFullIndex");function mi(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return ps(e,t,r,(l,E,d,h)=>{let x={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return h===r?(x.values=!1,E.getRange(x).map(q=>({value:q}))):E.getRange(x)})}a(mi,"iterateRangeBetween");function ps(e,t,r,s){let n=e.database||e,i=$r.openDBI(n,r);i[Yo.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&$r.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ps,"setupTransaction");function nR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rR)){if(!n)if(r)n=$r.openDBI(e,r);else{let _=$r.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=$r.openDBI(e,_[u]),!n[Yo.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nR,"getOverflowCheck");function lH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return ps(e,t,t,(o,c,_)=>(Wo(r),r=Ri(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>_H(u.value,r))))}a(lH,"searchAll");function EH(e,t,r,s=!1,n=void 0,i=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);Wo(r),r=Ri(e.database||e,r);let o=new Map;for(let{key:c,value:_}of sR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(EH,"searchAllToMap");function dH(e,t,r=!1,s=void 0,n=void 0){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sR(e,void 0,t,r,s,n),c=o.transaction,_=nR(c.database,c,void 0,t);for(let{key:u,value:l}of o){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}a(dH,"iterateDBI");function hH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(hH,"countAll");function fH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,t,r,(c,_,u,l)=>(s=lt.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:o}).map(E=>({key:s,value:E}))))}a(fH,"equals");function SH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(SH,"count");function TH(e,t,r,s,n=!1,i=void 0,o=void 0){return Yr(e,r,s),ps(e,null,r,(c,_)=>{s=lt.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(o)?o++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:o}).map(d=>{let{key:h}=d;if(h!==E){if(h.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:o}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}a(TH,"startsWith");function mH(e,t,r,s,n=!1,i=void 0,o=void 0){return iR(e,t,r,s,n,i,o,!0)}a(mH,"endsWith");function iR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Yr(e,r,s),ps(e,null,r,(_,u,l,E)=>{let d=nR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let T=h.toString();return T.endsWith(rR)?u.getValues(h,{transaction:_}).map(R=>{let g=d(h,R);if(c?g.endsWith(s):g.includes(s))return{key:g,value:R}}).filter(R=>R):(c?T.endsWith(s):T.includes(s))?u[Yo.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:_}).map(R=>({key:h,value:R})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iR,"contains");function RH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!0,!1)}a(RH,"greaterThan");function AH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),mi(e,t,r,s,_,n,i,o,!1,!1)}a(AH,"greaterThanEqual");function pH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!0)}a(pH,"lessThan");function gH(e,t,r,s,n=!1,i=void 0,o=void 0){Yr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!1)}a(gH,"lessThanEqual");function NH(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lt.validateEnv(e),r===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(oe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(oe.END_VALUE_REQUIRED);if(s=lt.convertKeyValueToWrite(s),n=lt.convertKeyValueToWrite(n),s>n)throw new Error(oe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return mi(e,t,r,s,n,i,o,c)}a(NH,"between");function OH(e,t,r,s){lt.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),r=Ri(n,r),s===void 0)throw new Error(oe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Ko.parseRow(c,r)),o}a(OH,"searchByHash");function IH(e,t,r){lt.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(IH,"checkHashExists");function bH(e,t,r,s,n=[]){return oR(e,t,r,s,n),aR(e,t,r,s,n).map(i=>i[1])}a(bH,"batchSearchByHash");function wH(e,t,r,s,n=[]){oR(e,t,r,s,n);let i=new Map;for(let[o,c]of aR(e,t,r,s,n))i.set(o,c);return i}a(wH,"batchSearchByHashToMap");function aR(e,t,r,s,n=[]){return ps(e,t,t,(i,o,c)=>{r=Ri(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,Ko.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(aR,"batchHashSearch");function oR(e,t,r,s,n){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);if(Wo(r),s==null)throw new Error(oe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(oe.IDS_MUST_BE_ITERABLE)}a(oR,"initializeBatchSearchByHash");function Wo(e){if(!Array.isArray(e))throw e===void 0?new Error(oe.FETCH_ATTRIBUTES_REQUIRED):new Error(oe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Wo,"validateFetchAttributes");function Yr(e,t,r){if(lt.validateEnv(e),t===void 0)throw new Error(oe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(oe.SEARCH_VALUE_REQUIRED);if(r?.length>uH)throw new Error(oe.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ri(e,t){return t.length===1&&cH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ri,"setGetWholeRowAttributes");cR.exports={searchAll:lH,searchAllToMap:EH,count:SH,countAll:hH,equals:fH,startsWith:TH,endsWith:mH,contains:iR,searchByHash:OH,setGetWholeRowAttributes:Ri,batchSearchByHash:bH,batchSearchByHashToMap:wH,checkHashExists:IH,iterateDBI:dH,greaterThan:RH,greaterThanEqual:AH,lessThan:pH,lessThanEqual:gH,between:NH}});var Ai=f((cz,ER)=>{var _R=require("lodash"),uR=te(),W=require("joi"),CH=b(),{hdb_schema_table:vt,checkValidTable:lR}=Wt(),{handleHDBError:yH,hdb_errors:LH}=y(),{HTTP_STATUS_CODES:UH}=LH,oz=W.object({schema:vt,table:vt,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(vt).required()}),MH=W.object({schema:vt,table:vt,search_attribute:vt,search_value:W.any().required(),get_attributes:W.array().min(1).items(vt).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),DH=W.object({schema:vt,table:vt,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items(vt).required(),conditions:W.array().min(1).items(W.object({search_attribute:vt,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});ER.exports=function(e,t){let r=null;switch(t){case"value":r=uR.validateBySchema(e,MH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(lR("schema",e.schema)),i(lR("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=uR.validateBySchema(e,DH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=CH.checkGlobalSchemaTable(e.schema,e.table);if(n)return yH(new Error,n,UH.NOT_FOUND);let o=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 _=_R.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!_R.some(o,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 Ml=f((uz,dR)=>{"use strict";var PH=X(),BH=Ai(),{getSchemaPath:vH}=j();dR.exports=HH;function HH(e){let t=BH(e,"hashes");if(t)throw t;let r=vH(e.schema,e.table);return PH.openEnvironment(r,e.table)}a(HH,"initialize")});var Dl=f((Ez,hR)=>{"use strict";var qH=gs(),GH=Ml();hR.exports=FH;async function FH(e){let t=await GH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return qH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FH,"lmdbGetDataByHash")});var ln=f((hz,fR)=>{"use strict";var Qo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Qo,"SearchByHashObject");fR.exports=Qo});var TR=f((Tz,SR)=>{"use strict";var Sz=ln(),xH=gs(),VH=Ml();SR.exports=kH;async function kH(e){let t=await VH(e),r=global.hdb_schema[e.schema][e.table];return xH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kH,"lmdbSearchByHash")});var Ht=f((Rz,mR)=>{"use strict";var Jo=class{constructor(t,r,s,n,i,o,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=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(Jo,"SearchObject");mR.exports=Jo});var Xo=f((pz,OR)=>{"use strict";var Be=gs(),$H=X(),YH=b(),C=Le(),Ns=m(),KH=_s(),RR=it().LMDB_ERRORS_ENUM,{compareKeys:En}=require("ordered-binary"),{getSchemaPath:WH}=j(),Tr=Ns.SEARCH_WILDCARDS;async function QH(e,t,r){let s;e.schema===Ns.SYSTEM_SCHEMA_NAME?s=KH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=NR(e,s.hash_attribute,r,t);return pR(e,n,s.hash_attribute,r)}a(QH,"prepSearch");async function pR(e,t,r,s){let n=WH(e.schema,e.table),i=await $H.openEnvironment(n,e.table),o=gR(i,e,t,r),c=o.transaction||i;if([C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,C.SEARCH_TYPES.SEARCH_ALL,C.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(XH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?AR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?AR(o,E):o.map(E)}let u=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Be.batchSearchByHashToMap(c,r,e.get_attributes,u):Be.batchSearchByHash(c,r,e.get_attributes,u)}a(pR,"executeSearch");function gR(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case C.SEARCH_TYPES.EQUALS:n=Be.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.CONTAINS:n=Be.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:n=Be.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:n=Be.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Be.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Be.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case C.SEARCH_TYPES.SEARCH_ALL:return Be.searchAll(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Be.searchAllToMap(e,s,t.get_attributes,o,c,_);case C.SEARCH_TYPES.BETWEEN:n=Be.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:n=Be.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Be.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:n=Be.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:n=Be.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(gR,"searchByType");function JH(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case C.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case C.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case C.SEARCH_TYPES.ENDS_WITH:case C.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case C.SEARCH_TYPES.STARTS_WITH:case C.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case C.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return En(i,s[0])>=0&&En(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>En(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>En(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>En(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>En(n[r],s)<=0;default:return Object.create(null)}}a(JH,"filterByType");function AR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(AR,"createMapFromIterable");function XH(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(XH,"checkToFetchMore");function NR(e,t,r,s){if(YH.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Tr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Tr[0])<0&&n.indexOf(Tr[1])<0)return c===!0?r===!0?C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:C.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:C.SEARCH_TYPES.EQUALS;if(Tr.indexOf(i)>=0&&Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(Tr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(Tr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(Tr[0])||n.includes(Tr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(RR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ns.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Ns.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ns.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Ns.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(RR.UNKNOWN_SEARCH_TYPE)}}a(NR,"createSearchTypeFromSearchObject");OR.exports={executeSearch:pR,createSearchTypeFromSearchObject:NR,prepSearch:QH,searchByType:gR,filterByType:JH}});var bR=f((Oz,IR)=>{"use strict";var Nz=Ht(),ZH=Ai(),zH=b(),jH=m(),eq=Xo();IR.exports=tq;function tq(e,t){if(!zH.isEmpty(t)&&jH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZH(e,"value");if(s)throw s;let n=!0;return eq.prepSearch(e,t,n)}a(tq,"lmdbGetDataByValue")});var dn=f((wz,wR)=>{"use strict";var bz=Ht(),rq=Ai(),sq=b(),nq=m(),iq=Xo();wR.exports=aq;async function aq(e,t){if(!sq.isEmpty(t)&&nq.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rq(e,"value");if(s)throw s;return iq.prepSearch(e,t,!1)}a(aq,"lmdbSearchByValue")});var yR=f((Lz,CR)=>{"use strict";var yz=Le(),Zo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(Zo,"SearchByConditionsObject");var zo=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(zo,"SearchCondition");var jo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(jo,"SortAttribute");CR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var PR=f((Dz,DR)=>{"use strict";var Mz=yR().SearchByConditionsObject,oq=Ht(),cq=Ai(),Pl=gs(),ec=Le(),MR=Xo(),_q=Ul(),uq=require("lodash"),{getSchemaPath:lq}=j(),LR=X(),{handleHDBError:Eq,hdb_errors:dq}=y(),{HTTP_STATUS_CODES:hq}=dq,fq=1e8;DR.exports=Sq;async function Sq(e){let t=cq(e,"conditions");if(t)throw Eq(t,t.message,hq.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=lq(e.schema,e.table),s=await LR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)LR.openDBI(s,u.search_attribute);let i=uq.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===ec.SEARCH_TYPES.EQUALS?u.estimated_count=Pl.count(s,u.search_attribute,u.search_value):l===ec.SEARCH_TYPES.CONTAINS||l===ec.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=fq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await UR(o,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(MR.filterByType),E=l.length,d=Pl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let T=0;T<E;T++)if(!l[T](h))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(h=>_q.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await UR(o,e,d,n.hash_attribute);c=c.concat(h)}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),_=Pl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(Sq,"lmdbSearchByConditions");async function UR(e,t,r,s){let n=new oq(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===ec.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,MR.searchByType(e,n,i,s).map(o=>o.value)}a(UR,"executeConditionSearch")});var pi=f((Bz,BR)=>{"use strict";var Tq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=Tq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");BR.exports=tc});var Bl=f((Hz,kR)=>{"use strict";var GR=Ht(),FR=pi(),xR=dn(),VR=Ti(),Ke=m(),vR=b(),HR=X(),{getTransactionAuditStorePath:mq,getSchemaPath:Rq}=j(),qR=I();kR.exports=Aq;async function Aq(e){try{if(vR.isEmpty(global.hdb_schema[e.schema])||vR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await pq(e),await gq(e);let t=Rq(e.schema,e.table);try{await HR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mq(e.schema,e.table);await HR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")qR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Aq,"lmdbDropTable");async function pq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await xR(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await VR(n)}a(pq,"deleteAttributesFromSystem");async function gq(e){let t=new GR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ke.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await xR(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new FR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await VR(n)}catch(i){throw i}}a(gq,"dropTableFromSystem")});var YR=f((Gz,$R)=>{"use strict";var Nq=require("fs-extra"),Oq=Ht(),Iq=ln(),bq=pi(),wq=Bl(),Cq=Ti(),yq=Dl(),Lq=dn(),mr=m(),{getSchemaPath:Uq}=j(),{handleHDBError:Mq,hdb_errors:Dq}=y(),{HDB_ERROR_MSGS:Pq,HTTP_STATUS_CODES:Bq}=Dq;$R.exports=vq;async function vq(e){let t;try{t=await Hq(e.schema);let r=new Oq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Lq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await wq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new bq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Cq(n);let i=Uq(t);await Nq.remove(i)}catch(r){throw r}}a(vq,"lmdbDropSchema");async function Hq(e){let t=new Iq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[mr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await yq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Mq(new Error,Pq.SCHEMA_NOT_FOUND(e),Bq.NOT_FOUND,void 0,void 0,!0);return s}a(Hq,"validateDropSchema")});var vl=f((xz,KR)=>{"use strict";var rc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(rc,"CreateTableObject");KR.exports=rc});var QR=f(($z,WR)=>{"use strict";var qq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:Gq}=j(),Hl=Le(),kz=vl();WR.exports=Fq;async function Fq(e){let t;try{let r=Gq(e.schema,e.table);await qq.mkdirp(r),t=await sc.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{sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),sc.createDBI(t,Hl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(Fq,"createTransactionsAuditEnvironment")});var zR=f((Kz,ZR)=>{"use strict";var ql=m(),JR=X(),xq=zs(),{getSystemSchemaPath:Vq,getSchemaPath:kq}=j(),$q=_s(),Yq=ho(),Gl=Eo(),Kq=I(),Wq=QR(),xl=$q.hdb_table,XR=[];for(let e=0;e<xl.attributes.length;e++)XR.push(xl.attributes[e].attribute);ZR.exports=Qq;async function Qq(e,t){let r=kq(t.schema,t.table),s=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Gl(t.schema,t.table,ql.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Gl(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await JR.createEnvironment(r,t.table),e!==void 0){let o=await JR.openEnvironment(Vq(),ql.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await xq.insertRecords(o,xl.hash_attribute,XR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Fl(s),await Fl(n),await Fl(i)}await Wq(t)}catch(o){throw o}}a(Qq,"lmdbCreateTable");async function Fl(e){try{await Yq(e)}catch(t){Kq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fl,"createAttribute")});var eA=f((Qz,jR)=>{"use strict";var Jq=fo(),Xq=mo(),Zq=Ho(),gi=m(),zq=zs().updateRecords,jq=X(),{getSchemaPath:eG}=j(),tG=fi(),rG=I();jR.exports=sG;async function sG(e){try{let{schema_table:t,attributes:r}=Jq(e);Xq(e,r,t.hash_attribute),e.schema!==gi.SYSTEM_SCHEMA_NAME&&(r.includes(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(gi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Zq(e.hdb_auth_header,t,r),n=eG(e.schema,e.table),i=await jq.openEnvironment(n,e.table),o=await zq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tG(e,o)}catch(c){rG.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(sG,"lmdbUpdateRecords")});var rA=f((Xz,tA)=>{"use strict";var nG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=nG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");tA.exports=nc});var nA=f((jz,sA)=>{"use strict";var zz=rA(),iG=fo(),aG=mo(),oG=Ho(),Ni=m(),cG=zs().upsertRecords,_G=X(),{getSchemaPath:uG}=j(),lG=fi(),EG=I(),{handleHDBError:dG,hdb_errors:hG}=y();sA.exports=fG;async function fG(e){let t;try{t=iG(e)}catch(_){throw dG(_,_.message,hG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;aG(e,s,r.hash_attribute),e.schema!==Ni.SYSTEM_SCHEMA_NAME&&(s.includes(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ni.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await oG(e.hdb_auth_header,r,s),i=uG(e.schema,e.table),o=await _G.openEnvironment(i,e.table),c=await cG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await lG(e,c)}catch(_){EG.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}}a(fG,"lmdbUpsertRecords")});var uA=f((t2,_A)=>{"use strict";var SG=Ht(),iA=b(),aA=I(),TG=dn(),oA=m(),mG=yl().deleteRecords,RG=X(),{getSchemaPath:AG}=j(),{promisify:pG}=require("util"),gG=pG(setTimeout),cA=1e4,NG=10;_A.exports=OG;async function OG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(iA.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 SG(e.schema,e.table,oA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await TG(n,oA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw aA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return iA.isEmptyOrZeroLength(s)?(aA.trace("No records found to delete"),{message:"No records found to delete"}):await IG(e,s,t)}a(OG,"lmdbDeleteRecordsBefore");async function IG(e,t,r){let s=AG(e.schema,e.table),n=await RG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=cA){let _=t.slice(o,o+cA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await mG(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 gG(NG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(IG,"chunkDeletes")});var EA=f((s2,lA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");lA.exports=ic});var hA=f((i2,dA)=>{"use strict";var ac=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(ac,"DeleteAuditLogsBeforeResults");dA.exports=ac});var TA=f((c2,SA)=>{"use strict";var Vl=X(),{getTransactionAuditStorePath:bG}=j(),o2=EA(),Oi=Le(),wG=b(),fA=hA(),CG=require("util").promisify,yG=CG(setTimeout),LG=1e4,UG=100;SA.exports=MG;async function MG(e){let t=bG(e.schema,e.table),r=await Vl.openEnvironment(t,e.table,!0),s=Vl.listDBIs(r);Vl.initializeDBIs(r,Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new fA;do n=await DG(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 yG(UG);while(n.transactions_deleted>0);return i}a(MG,"deleteAuditLogsBefore");async function DG(e,t){let r=new fA;try{let s=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];wG.isEmpty(c)||(n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Oi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>LG)break}return await n,r}catch(s){throw s}}a(DG,"deleteTransactions")});var RA=f((u2,mA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");mA.exports=oc});var pA=f((d2,AA)=>{"use strict";var PG=Ht(),BG=pi(),E2=RA(),Zt=m(),vG=b(),kl=X(),HG=_s(),qG=dn(),GG=Ti(),{getSchemaPath:FG}=j();AA.exports=xG;async function xG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=HG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await kG(e),n=FG(e.schema,e.table),i=await kl.openEnvironment(n,e.table);return t===!0&&await VG(e,i,r.hash_attribute),kl.dropDBI(i,e.attribute),s}a(xG,"lmdbDropAttribute");async function VG(e,t,r){let s=kl.openDBI(t,r),n,i=e.attribute;for(let{key:o,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(o,u,_)}await n}a(VG,"removeAttributeFromAllObjects");async function kG(e){let t=new PG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(vG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new BG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return GG(i)}a(kG,"dropAttributeFromSystem")});var wA=f((S2,bA)=>{"use strict";var $l=X(),hn=Le(),f2=us(),Yl=m(),gA=b(),{getTransactionAuditStorePath:$G}=j(),YG=gs(),cc=cn(),KG=I();bA.exports=WG;async function WG(e){let t=$G(e.schema,e.table),r=await $l.openEnvironment(t,e.table,!0),s=$l.listDBIs(r);$l.initializeDBIs(r,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return NA(r,e.search_values);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,JG(r,e.search_values,n);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QG(r,e.search_values);default:return NA(r)}}a(WG,"readAuditLog");function NA(e,t=[0,Date.now()]){gA.isEmpty(t[0])&&(t[0]=0),gA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[hn.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 cc,n))}a(NA,"searchTransactionsByTimestamp");function QG(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IA(e,i))}return Object.fromEntries(r)}a(QG,"searchTransactionsByUsername");function JG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=YG.equals(e,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.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=IA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);OA(_,"records",r,l,o),OA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(JG,"searchTransactionsByHashValues");function OA(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=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 cc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new cc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(OA,"loopRecords");function IA(e,t){let r=[];try{let s=e.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new cc,i);r.push(o)}}catch(i){KG.warn(i)}return r}catch(s){throw s}}a(IA,"batchSearchTransactions")});var yA=f((m2,CA)=>{"use strict";var{getSchemaPath:XG}=j(),ZG=X();CA.exports={writeTransaction:zG};async function zG(e,t,r){let s=XG(e,t);return(await ZG.openEnvironment(s,t)).transaction(r)}a(zG,"writeTransaction")});var DA=f((A2,MA)=>{"use strict";var{getSchemaPath:LA}=j(),UA=X();MA.exports={flush:jG,resetReadTxn:eF};async function jG(e,t){return(await UA.openEnvironment(LA(e,t),t.toString())).flushed}a(jG,"flush");async function eF(e,t){try{(await UA.openEnvironment(LA(e,t),t.toString())).resetReadTxn()}catch{}}a(eF,"resetReadTxn")});var vA=f((g2,BA)=>{"use strict";var tF=I(),{handleHDBError:rF}=y(),sF=bu(),nF=ho(),iF=bl(),aF=Wm(),oF=Ti(),cF=Dl(),_F=TR(),uF=bR(),lF=dn(),EF=PR(),dF=YR(),hF=zR(),fF=eA(),SF=nA(),TF=uA(),mF=TA(),RF=Bl(),AF=pA(),pF=wA(),gF=yA(),PA=DA(),_c=class extends sF{async searchByConditions(t){return EF(t)}async getDataByHash(t){return await cF(t)}async searchByHash(t){return await _F(t)}async getDataByValue(t,r){return await uF(t,r)}async searchByValue(t){return await lF(t)}async createSchema(t){return await aF(t)}async dropSchema(t){return await dF(t)}async createTable(t,r){return await hF(t,r)}async dropTable(t){return await RF(t)}async createAttribute(t){return await nF(t)}async createRecords(t){return await iF(t)}async updateRecords(t){return await fF(t)}async upsertRecords(t){try{return await SF(t)}catch(r){throw rF(r,null,null,tF.ERR,r)}}async deleteRecords(t){return await oF(t)}async deleteRecordsBefore(t){return await TF(t)}async dropAttribute(t){return await AF(t)}async deleteAuditLogsBefore(t){return await mF(t)}async readAuditLog(t){return await pF(t)}writeTransaction(t,r,s){return gF.writeTransaction(t,r,s)}flush(t,r){return PA.flush(t,r)}resetReadTxn(t,r){return PA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");BA.exports=_c});var Qt=f((O2,qA)=>{"use strict";var NF=vA(),OF=bu(),IF=v();IF.initSync();var HA;function bF(){return HA instanceof OF?HA:new NF}a(bF,"getBridge");qA.exports=bF()});var VA=f((b2,xA)=>{"use strict";var GA=require("lodash"),Ii=require("mathjs"),wF=require("jsonata"),FA=b();xA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?GA.uniqWith(e,GA.isEqual):e,searchJSON:CF,mad:bi.bind(null,Ii.mad),mean:bi.bind(null,Ii.mean),mode:bi.bind(null,Ii.mode),prod:bi.bind(null,Ii.prod),median:bi.bind(null,Ii.median)};function bi(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(bi,"aggregateFunction");function CF(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(FA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),FA.isEmpty(this.__ala__.res[r])){let s=wF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(CF,"searchJSON")});var $A=f((C2,kA)=>{"use strict";var le=require("moment"),Kl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;kA.exports={current_date:()=>le().utc().format("YYYY-MM-DD"),current_time:()=>le().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return le(e).utc().format("YYYY");case"month":return le(e).utc().format("MM");case"day":return le(e).utc().format("DD");case"hour":return le(e).utc().format("HH");case"minute":return le(e).utc().format("mm");case"second":return le(e).utc().format("ss");case"millisecond":return le(e).utc().format("SSS");default:break}},date:e=>le(e).utc().format(Kl),date_format:(e,t)=>le(e).utc().format(t),date_add:(e,t,r)=>le(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>le(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=le(e).utc(),n=le(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>le().utc().valueOf(),get_server_time:()=>le().format(Kl),offset_utc:(e,t)=>le(e).utc().utcOffset(t).format(Kl)}});var QA=f((y2,WA)=>{"use strict";var yF=require("@turf/area"),LF=require("@turf/length"),UF=require("@turf/circle"),MF=require("@turf/difference"),DF=require("@turf/distance"),PF=require("@turf/boolean-contains"),BF=require("@turf/boolean-equal"),vF=require("@turf/boolean-disjoint"),HF=require("@turf/helpers"),YA=m(),G=b();WA.exports={geoArea:qF,geoLength:GF,geoCircle:FF,geoDifference:xF,geoDistance:KA,geoNear:VF,geoContains:kF,geoEqual:$F,geoCrosses:YF,geoConvert:KF};var Wl="geo1 is required",Ql="geo2 is required";function qF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),yF.default(e)}a(qF,"geoArea");function GF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),LF.default(e,{units:t||"kilometers"})}a(GF,"geoLength");function FF(e,t,r){if(G.isEmpty(e))throw new Error("point is required");if(G.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),UF.default(e,t,{units:r||"kilometers"})}a(FF,"geoCircle");function xF(e,t){if(G.isEmpty(e))throw new Error("poly1 is required");if(G.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),MF(e,t)}a(xF,"geoDifference");function KA(e,t,r){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),DF.default(e,t,{units:r||"kilometers"})}a(KA,"geoDistance");function VF(e,t,r,s){if(G.isEmpty(e))throw new Error("point1 is required");if(G.isEmpty(t))throw new Error("point2 is required");if(G.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return KA(e,t,s)<=r}a(VF,"geoNear");function kF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),PF.default(e,t)}a(kF,"geoContains");function $F(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),BF.default(e,t)}a($F,"geoEqual");function YF(e,t){if(G.isEmpty(e))throw new Error(Wl);if(G.isEmpty(e))throw new Error(Ql);return typeof e=="string"&&(e=G.autoCastJSON(e)),typeof t=="string"&&(t=G.autoCastJSON(t)),!vF.default(e,t)}a(YF,"geoCrosses");function KF(e,t,r){if(G.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(G.isEmpty(t))throw new Error("geo_type is required");if(G.isEmpty(YA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(YA.GEO_CONVERSION_ENUM).join(",")}`);return HF[t](e,r)}a(KF,"geoConvert")});var uc=f((U2,JA)=>{var Os=VA(),Et=$A(),zt=QA();JA.exports=e=>{e.aggr.mad=e.aggr.MAD=Os.mad,e.aggr.mean=e.aggr.MEAN=Os.mean,e.aggr.mode=e.aggr.MODE=Os.mode,e.aggr.prod=e.aggr.PROD=Os.prod,e.aggr.median=e.aggr.MEDIAN=Os.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Os.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Os.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Et.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Et.current_time,e.fn.extract=e.fn.EXTRACT=Et.extract,e.fn.date=e.fn.DATE=Et.date,e.fn.date_format=e.fn.DATE_FORMAT=Et.date_format,e.fn.date_add=e.fn.DATE_ADD=Et.date_add,e.fn.date_sub=e.fn.DATE_SUB=Et.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Et.date_diff,e.fn.now=e.fn.NOW=Et.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Et.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Et.get_server_time,e.fn.getdate=e.fn.GETDATE=Et.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Et.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=zt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=zt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=zt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=zt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=zt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=zt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=zt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=zt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=zt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=zt.geoNear}});var zA=f((M2,ZA)=>{"use strict";var wi=require("lodash"),Ie=require("alasql");Ie.options.cache=!1;var WF=uc(),XA=require("clone"),lc=require("recursive-iterator"),D=I(),B=b(),fn=Qt(),QF=m(),{hdb_errors:JF}=y(),XF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";WF(Ie);var Ec=class{constructor(t,r){if(B.isEmpty(t))throw D.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(),B.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!B.isEmptyOrZeroLength(s))return D.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw D.error("Error thrown from checkEmptySQL in SQLSearch class method search."),D.error(s),new Error(qt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw D.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),D.error(s),new Error(qt)}if(Object.keys(this.data).length===0)return D.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw D.error("Error thrown from processJoins in SQLSearch class method search."),D.error(s),new Error(qt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw D.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),D.error(s),new Error(qt)}try{return t=await this._finalSQL(),t}catch(s){throw D.error("Error thrown from finalSQL in SQLSearch class method search."),D.error(s),new Error(qt)}}_getColumns(){let t=new lc(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(XA(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wi.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(B.isEmpty(this.statement.where)){D.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new lc(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!B.isEmpty(r)&&r.right)if(B.isNotEmptyAndHasValue(r.right.value)){let s=B.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Ie.yy.LogicValue({value:s}):r.right instanceof Ie.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new Ie.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=B.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Ie.yy.LogicValue({value:i}):s instanceof Ie.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Ie.yy.NumValue({value:i}))});if(t){D.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new lc(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!B.isEmpty(QF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(B.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(B.isEmptyOrZeroLength(r.left.columnid)||B.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(B.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!B.isEmpty(r.right.value)||!B.isEmpty(r.left.value)?s.add(B.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[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from)&&B.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&&wi.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(B.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);B.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(B.isEmptyOrZeroLength(this.all_table_attributes)&&!B.isEmptyOrZeroLength(this.columns.columns))return t;if(B.isEmptyOrZeroLength(this.all_table_attributes)&&B.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Ie.promise(r)}catch(r){throw D.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),D.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(XA(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(B.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(XF)>-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=wi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,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===o&&(_=!0),!B.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!B.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await fn.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 D.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}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 fn.getDataByValue(E);for(let[h,T]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),D.error(l),new Error(qt)}else if(!B.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!B.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 h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let T=await fn.getDataByValue(c,h.operation);if(_)for(let[R]of T)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,B.autoCast(R)));else for(let[R,g]of T)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,g[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(R)))}}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),D.error(l),new Error(qt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await fn.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,B.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,B.autoCast(E)))}catch(l){throw D.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),D.error(l),new Error(qt)}}}_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 Ie.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Ie.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Ie.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 Ie.yy.FuncValue:new Ie.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let T=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(T+=" ON "+h.on.toString()),i.push(T),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let T=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${T}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${T}\` AS "${R}.${T}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,T=this._convertColumnsToIndexes(h,n);d=await Ie.promise(T,t),t=null}catch(h){throw D.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),D.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,T=d.length;h<T;h++){let R=d[h];o.forEach(g=>{R[g.key]!==null&&R[g.key]!==void 0&&g.keys.add(R[g.key])})}o.forEach(h=>{let T=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=wi.difference(T,[...h.keys].map(g=>g.toString()));for(let g=0,H=R.length;g<H;g++){let x=R[g];delete this.data[`${h.schema}_${h.table}`].__merged_data[x]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new lc(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=wi.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 D.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),D.error(i),new Error(qt)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await fn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_.get(d);for(let T=0;T<u;T++){let R=n.columns[T],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw D.error("Error thrown from getDataByHash function in SQLSearch class method getData."),D.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.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();D.trace(`Final SQL: ${n}`),s=await Ie.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),D.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw D.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),D.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 D.error(JF.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),D.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"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 o=await fn.getDataByValue(i);for(let[c,_]of o)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(o){throw D.error("There was an error when processing this SQL operation. Check your logs"),D.error(o),new Error(qt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ec,"SQLSearch");ZA.exports=Ec});var It=f((P2,ep)=>{"use strict";var ZF=vf();ep.exports={searchByConditions:t0,searchByHash:r0,searchByValue:s0,search:n0};var Jl=Qt(),jA=require("util"),zF=jA.callbackify(Jl.searchByHash),jF=jA.callbackify(Jl.searchByValue),e0=zA();async function t0(e){return Jl.searchByConditions(e)}a(t0,"searchByConditions");function r0(e,t){try{zF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(r0,"searchByHash");function s0(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),jF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(s0,"searchByValue");function n0(e,t){try{let r=new ZF(e);r.validate(),new e0(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(n0,"search")});var Rs=f((v2,cp)=>{"use strict";var rp=It(),Kr=I(),sp=_o(),i0=require("lodash"),a0=Vr(),np=b(),{promisify:ip}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:o0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:ap}=o0,c0=v();c0.initSync();var tp=X(),_0=gs(),{getSchemaPath:u0}=j(),Ci=ip(rp.searchByValue),l0=ip(rp.searchByHash),Sn="name",op="hash_attribute",Xl="schema",E0="schema_table",d0="attribute";cp.exports={describeAll:h0,describeTable:fc,describeSchema:S0};async function h0(e){try{let t=np.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Sn,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[Sn]},i=await Ci(n),o={},c={};for(let d of i)o[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:z.ID_ATTRIBUTE_STRING,search_value:z.WILDCARD_SEARCH_VALUE,get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},u=await Ci(_),l=[];for(let d of u)try{let h;if(t||s)h=await fc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let T=r[d.schema].tables[d.name].attribute_permissions;h=await fc({schema:d.schema,table:d.name},T)}h&&l.push(h)}catch(h){Kr.error(h)}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],o[l[d].schema]&&delete o[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],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),dc(new Error,hc.DESCRIBE_ALL_ERR)}}a(h0,"describeAll");async function fc(e,t){let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=sp.describe_table(e);if(o)throw o;if(r===z.SYSTEM_SCHEMA_NAME)return global.hdb_schema[z.SYSTEM_SCHEMA_NAME][s];let c={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Sn,search_value:s,hash_values:[],get_attributes:[z.WILDCARD_SEARCH_VALUE]},_=Array.from(await Ci(c));if(!_||_.length===0)throw dc(new Error,hc.TABLE_NOT_FOUND(e.schema,e.table),ap.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw dc(new Error,hc.INVALID_TABLE_ERR(i));let l={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:E0,search_value:r+"."+s,get_attributes:[d0]},E=Array.from(await Ci(l));E=i0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=f0(n)),i.attributes=E,i.clustering_stream_name=a0.createNatsTableStreamName(u.schema,u.name);try{let d=u0(i.schema,i.name),h=await tp.openEnvironment(d,i.name),T=tp.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of _0.lessThan(h,i.hash_attribute,z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(fc,"descTable");function f0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(f0,"getAttrsByPerms");async function S0(e){let t=sp.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:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Xl,search_value:s,hash_values:[],get_attributes:[op,z.ID_ATTRIBUTE_STRING,Sn,Xl]},i=Array.from(await Ci(n));if(i&&i.length<1){let o={schema:z.SYSTEM_SCHEMA_NAME,table:z.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:z.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Sn]},c=Array.from(await l0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),ap.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),np.isEmpty(_)||_.describe){let u=await fc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(S0,"describeSchema")});var Gr=f((q2,dp)=>{var Tn=_s(),{callbackify:lp,promisify:T0}=require("util");dp.exports={setSchemaDataToGlobal:_p,getTableSchema:A0,getSystemSchema:g0,setSchemaDataToGlobalAsync:T0(_p)};var Ep=Rs(),m0=lp(Ep.describeAll),R0=lp(Ep.describeTable);function _p(e){m0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Tn),global.hdb_schema=r,e(null,null)})}a(_p,"setSchemaDataToGlobal");function up(e,t){return e==="system"?Tn[t]:global.hdb_schema[e][t]}a(up,"returnSchema");function A0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?p0(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,up(e,t))}):r(null,up(e,t))}a(A0,"getTableSchema");function p0(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Tn:global.hdb_schema={system:Tn},r();return}R0(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Tn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(p0,"setTableDataToGlobal");function g0(){return Tn}a(g0,"getSystemSchema")});var Sc=f((F2,hp)=>{"use strict";var N0=Qt();hp.exports={writeTransaction:O0};function O0(e,t,r){return N0.writeTransaction(e,t,r)}a(O0,"writeTransaction")});var Zl=f((V2,I0)=>{I0.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 ve=f((Z2,Mp)=>{"use strict";var pe=v();pe.initSync();var b0=require("fs-extra"),w0=require("semver"),Di=require("path"),{monotonicFactory:C0}=require("ulidx"),rE=C0(),y0=require("util"),Sp=require("child_process"),L0=y0.promisify(Sp.exec),U0=Sp.spawn,V=ue(),Q=m(),Tc=b(),Wr=I(),mc=Vr(),M0=Sc(),yi=lr(),{encode:eE,decode:sE}=require("msgpackr"),{isEmpty:Is}=Tc,Tp=Sr(),mp=12e10,{connect:D0,StorageType:Rp,RetentionPolicy:Ap,AckPolicy:nE,DeliverPolicy:Pi,DiscardPolicy:P0,NatsConnection:k2,JetStreamManager:$2,JetStreamClient:Y2,StringCodec:K2,JSONCodec:B0,createInbox:iE,StreamSource:W2,headers:v0,toJsMsg:pp,nuid:Q2,JetStreamOptions:J2,ErrorCode:fp,nanos:X2}=require("nats"),{PACKAGE_ROOT:H0}=m(),q0=Zl(),gp=B0(),G0="clustering",F0=q0.engines[V.NATS_SERVER_NAME],x0=Di.join(H0,"dependencies"),tE=Di.join(x0,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),zl,jl,Li,Ui,Mi,Gt;Mp.exports={runCommand:Np,checkNATSServerInstalled:V0,createConnection:aE,getConnection:Rc,getJetStreamManager:Bi,getJetStream:Op,getNATSReferences:dt,getServerList:$0,createLocalStream:oE,listStreams:Ip,deleteLocalStream:Y0,getServerConfig:vi,listRemoteStreams:K0,viewStream:W0,viewStreamIterator:Q0,publishToStream:J0,createWorkQueueStream:X0,addSourceToWorkStream:wp,request:Z0,removeSourceFromWorkStream:yp,reloadNATS:cE,reloadNATSHub:z0,reloadNATSLeaf:j0,extractServerName:Cp,requestErrorHandler:ex,updateWorkStream:tx,createLocalTableStream:Lp,createTableStreams:rx,purgeTableStream:Up,purgeSchemaTableStreams:sx,getStreamInfo:nx,updateLocalStreams:ax,closeConnection:k0,getJsmServerName:Hi,addNatsMsgHeader:bp};async function Np(e,t=void 0){let{stdout:r,stderr:s}=await L0(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(gp,"runCommand");async function G0(){try{await N0.access(tE)}catch{return!1}let e=await gp(`${tE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return O0.eq(t,H0)}a(G0,"checkNATSServerInstalled");async function aE(e,t,r,s=!0,n="127.0.0.1"){return L0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(aE,"createConnection");async function F0(){Gt&&(await Gt.drain(),Gt=void 0)}a(F0,"closeConnection");async function Rc(){if(!Gt){let e=await Sp.getClusterUser();if(Os(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await aE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function Bi(){if(Ui)return Ui;Os(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ui=await Gt.jetstreamManager({domain:e}),Ui}a(Bi,"getJetStreamManager");async function Np(){if(Mi)return Mi;Os(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Os(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=Gt.jetstream({domain:e}),Mi}a(Np,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Ui||await Bi(),r=Mi||await Np();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function x0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Sp.getClusterUser(),n=await aE(t,r,s),i=iE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=pp.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 Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(x0,"getServerList");async function oE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:mp.File,retention:Rp.Limits,subjects:t,discard:U0.Old,duplicate_window:Tp,max_msgs:n,max_bytes:i,max_age:s})}a(oE,"createLocalStream");async function Op(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Op,"listStreams");async function V0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(V0,"deleteLocalStream");async function k0(e){let{connection:t}=await dt(),r=[],s=iE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(pp.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(k0,"listRemoteStreams");async function $0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o=[],c={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(c.deliver_policy=Pi.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=Ap(l),d=sE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a($0,"viewStream");async function*Y0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(o.deliver_policy=Pi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=Ap(u),E=sE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.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}}a(Y0,"viewStreamIterator");async function K0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=Ip(s,r);let{js:i}=await dt(),o=await Hi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,eE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await oE(t,[c]),n&&await i.publish(c,eE(s),{headers:r});else throw _}}a(K0,"publishToStream");function Ip(e,t){t===void 0&&(t=D0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${rE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(Ip,"addNatsMsgHeader");function vi(e){e=e.toLowerCase();let t=Di.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),v0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Os(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Di.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),jl;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Os(zl)&&(zl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Di.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),zl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(vi,"getServerConfig");async function W0(e){let{jsm:t}=await dt(),r=await Hi();try{await t.streams.add({name:e.stream_name,storage:mp.File,retention:Rp.Workqueue,duplicate_window:Tp,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:nE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Pi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(W0,"createWorkQueueStream");async function bp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=wp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(bp,"addSourceToWorkStream");function wp(e){return e.split(".")[1]}a(wp,"extractServerName");async function Cp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.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 o.streams.update(t,c.config)}a(Cp,"removeSourceFromWorkStream");async function Q0(e,t,r=2e3,s=iE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=eE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return sE(c.data)}a(Q0,"request");function cE(e){return new Promise(async(t,r)=>{let s=C0(tE,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(cE,"reloadNATS");async function J0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cE(e)}a(J0,"reloadNATSHub");async function X0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cE(e)}a(X0,"reloadNATSLeaf");function Z0(e,t,r){let s;switch(e.code){case hp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case hp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Z0,"requestErrorHandler");async function z0(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await y0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await bp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Cp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(z0,"updateWorkStream");async function yp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await Hi(),n=rx(e,t,s);await oE(r,[n])}a(yp,"createLocalTableStream");async function j0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await yp(s,n)}}a(j0,"createTableStreams");async function Lp(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Lp,"purgeTableStream");async function ex(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Lp(e,t[r])}a(ex,"purgeSchemaTableStreams");async function tx(e){return(await Bi()).streams.info(e)}a(tx,"getStreamInfo");function rx(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(rx,"createSubjectName");async function Hi(){if(Li)return Li;if(Li=(await Bi())?.nc?.info?.server_name,Li===void 0)throw new Error("Unable to get jetstream manager server name");return Li}a(Hi,"getJsmServerName");async function sx(){let e=await Bi(),t=await Hi(),r=await Op();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=nx(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.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}`;Wr.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(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(sx,"updateLocalStreams");function nx(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=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.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}a(nx,"updateStreamLimits")});var _E=f((X2,Mp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Mp.exports=Ac});var qi=f((z2,Dp)=>{"use strict";var ix=b(),uE=v(),Qr=m(),ax=ue(),ox=ve(),jt=I(),cx=_E(),_x=Vr();uE.initSync();Dp.exports={postOperationHandler:lx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=ux(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await ox.publishToStream(`${ax.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,_x.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function ux(e,t,r){if(ix.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(ux,"convertCRUDOperationToTransaction");async function lx(e,t,r){if(!uE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=uE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new cx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(lx,"postOperationHandler")});var qp=f((e4,Hp)=>{"use strict";var Ex=It(),dx=Gr(),Pp=I(),Bp=Ot(),hx=Sc(),fx=require("clone"),EE=require("alasql"),Sx=uc(),vp=require("util"),Tx=vp.promisify(dx.getTableSchema),mx=vp.promisify(Ex.search),Rx=m(),lE=b(),Ax=qi();Sx(EE);Hp.exports={update:gx};var px="There was a problem performing this update. Please check the logs and try again.";async function gx({statement:e,hdb_user:t}){let r=await Tx(e.table.databaseid,e.table.tableid),s=Nx(e.columns);lE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=fx(n),c=lE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=EE.parse(_).statements[0],l=await hx.writeTransaction(r.schema,r.name,async()=>{let E=await mx(u),d=Ox(s,E);return Ix(o,d,t)});return await Bp.flush({schema:r.schema,table:r.name}),l}a(gx,"update");function Nx(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=EE.compile(`SELECT ${r.expression.toString()} AS [${Rx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Pp.error(t),new Error(px)}}a(Nx,"createUpdateRecord");function Ox(e,t){return lE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Ox,"buildUpdateRecords");async function Ix(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Bp.update(s);await Ax.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Pp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Ix,"updateRecords")});var Fp=f((r4,Gp)=>{var bx=require("alasql"),wx=It(),Cx=I(),yx=Qt(),hE=require("util"),dE=b(),Lx=m(),Ux=Gr(),Mx=Sc(),Dx=qi(),Px=Ot(),Bx="record",vx="successfully deleted",Hx=hE.callbackify(xx),qx=hE.promisify(wx.search),Gx=hE.promisify(Ux.getTableSchema);Gp.exports={convertDelete:Hx};function Fx(e){return`${e.deleted_hashes.length} ${Bx}${e.deleted_hashes.length===1?"":"s"} ${vx}`}a(Fx,"generateReturnMessage");async function xx({statement:e,hdb_user:t}){let r=await Gx(e.table.databaseid,e.table.tableid);dE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=bx.parse(o).statements[0],_={operation:Lx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Mx.writeTransaction(r.schema,r.name,async()=>(_.records=await qx(c),yx.deleteRecords(_)));return await Px.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await Dx.postOperationHandler(_,u),dE.isEmptyOrZeroLength(u.message)&&(u.message=Fx(u)),delete u.txn_time,u}catch(u){throw Cx.error(u),u.hdb_code?u.message:u}}a(xx,"convertDelete")});var kp=f((n4,Vp)=>{"use strict";var SE=ms(),{hdb_errors:fE}=y();Vp.exports={checkSchemaExists:xp,checkSchemaTableExists:Vx,schema_describe:SE};async function xp(e){if(!global.hdb_schema[e])try{let t=await SE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return fE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(xp,"checkSchemaExists");async function Vx(e,t){let r=await xp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await SE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Vx,"checkSchemaTableExists")});var Nc=f((o4,Wp)=>{"use strict";var mn=_o(),Is=kp(),kx=I(),$x=require("uuid").v4,a4=require("clone"),Rn=an(),bs=m(),Yx=require("util"),ws=Qt(),{handleHDBError:We,hdb_errors:Kx}=y(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Kx,{SchemaEventMsg:An}=kr(),$p=ve();Wp.exports={createSchema:Wx,createSchemaStructure:Yp,createTable:Qx,createTableStructure:Kp,createAttribute:jx,dropSchema:Jx,dropTable:Xx,dropAttribute:Zx};async function Wx(e){try{let t=await Yp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(Wx,"createSchema");async function Yp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await Is.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,bs.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await ws.createSchema(e),`schema '${e.schema}' successfully created`}a(Yp,"createSchemaStructure");async function Qx(e){let t=await Kp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(Qx,"createTable");async function Kp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await Is.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,bs.LOG_LEVELS.ERROR,r,!0);if(!await Is.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,bs.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:$x(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await ws.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await ws.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Kp,"createTableStructure");async function Jx(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await Is.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,bs.LOG_LEVELS.ERROR,r,!0);let s=await Is.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await ws.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await $p.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(Jx,"dropSchema");async function Xx(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await Is.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,bs.LOG_LEVELS.ERROR,r,!0);return await ws.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await $p.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Xx,"dropTable");async function Zx(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await Is.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,bs.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(bs.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await ws.dropAttribute(e),zx(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw kx.error(`Got an error deleting attribute ${Yx.inspect(e)}.`),s}}a(Zx,"dropAttribute");function zx(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(zx,"dropAttributeFromGlobal");async function jx(e){return await ws.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(jx,"createAttribute")});var Jp=f((_4,Qp)=>{"use strict";var{OPERATIONS_ENUM:eV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=eV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Qp.exports=Oc});var TE=f((E4,eg)=>{"use strict";var tV=Qt(),l4=Jp(),Ic=b(),bc=m(),rV=v(),{handleHDBError:Xp,hdb_errors:sV}=y(),{HDB_ERROR_MSGS:Zp,HTTP_STATUS_CODES:zp}=sV,nV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),jp="To use this operation audit log must be enabled in harperdb-config.yaml";eg.exports=iV;async function iV(e){if(Ic.isEmpty(e.schema))throw new Error(Zp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(Zp.TABLE_REQUIRED_ERR);if(!rV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Xp(new Error,jp,zp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,jp,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Xp(new Error,t,zp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&nV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await tV.readAuditLog(e)}a(iV,"readAuditLog")});var ag=f((h4,ig)=>{var Jr=require("validate.js"),rg=te(),pn=m(),{handleHDBError:aV,hdb_errors:oV}=y(),{HDB_ERROR_MSGS:ce,HTTP_STATUS_CODES:cV}=oV,mE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),_V={STRUCTURE_USER:"structure_user"},tg=Object.values(pn.ROLE_TYPES_ENUM),uV="attribute_permissions",lV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,EV=[uV,...Object.values(gn)],sg=[gn.READ,gn.INSERT,gn.UPDATE],dV=[lV,...sg];function hV(e){let t=mE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ng(e,t)}a(hV,"addRoleValidation");function fV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ng(e,t)}a(fV,"alterRoleValidation");function SV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,rg.validateObject(e,t)}a(SV,"dropRoleValidation");var TV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ng(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)TV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(ce.INVALID_ROLE_JSON_KEYS(n),r);let i=rg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=mV(e);o&&Ee(o,r),tg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(ce.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(tg.indexOf(o)<0){if(o===_V.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(ce.SCHEMA_NOT_FOUND(E),r)}continue}Ee(ce.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(ce.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(ce.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{EV.includes(l)||Ee(ce.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(ce.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(ce.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(ce.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(ce.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!dV.includes(R)&&R!==gn.DELETE&&Ee(ce.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(ce.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(ce.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}sg.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(ce.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(ce.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.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=`${o}.${_}`;Ee(ce.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return RV(r)}a(ng,"customValidate");ig.exports={addRoleValidation:hV,alterRoleValidation:fV,dropRoleValidation:SV};function mV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.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 ce.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return ce.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(mV,"validateNoSUPerms");function RV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ce.ROLE_PERMS_ERROR,...e};return aV(new Error,s,cV.BAD_REQUEST)}else return null}a(RV,"generateRolePermResponse");function Ee(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]}}a(Ee,"addPermError")});var bE=f((S4,Eg)=>{"use strict";var og=Ot(),cg=It(),AV=Ss(),pE=ag(),gE=an(),pV=require("uuid").v4,NE=require("util"),gV=tn(),Rr=m(),_g=b(),OE=NE.promisify(cg.searchByValue),NV=NE.promisify(cg.searchByHash),OV=NE.promisify(AV.delete),IV=Ht(),bV=ln(),{hdb_errors:wV,handleHDBError:Gi}=y(),{HDB_ERROR_MSGS:ug,HTTP_STATUS_CODES:RE}=wV,{UserEventMsg:IE}=kr();Eg.exports={addRole:CV,alterRole:LV,dropRole:UV,listRoles:lg};function AE(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}a(AE,"scrubRoleDetails");async function CV(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await gV.getLicense()).enterprise){let o=await lg();if(yV(e,o))throw new Error(`Your current license only supports ${Rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Rr.SUPPORT_HELP_MSG}`);if(o.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=AE(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 OE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,ug.ROLE_ALREADY_EXISTS(e.role),RE.CONFLICT,void 0,void 0,!0);e.id||(e.id=pV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await og.insert(i),gE.signalUserChange(new IE(process.pid)),e=AE(e),e}a(CV,"addRole");function yV(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!_g.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(yV,"checkClusterUserRole");async function LV(e){let t=pE.alterRoleValidation(e);if(t)throw t;e=AE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await og.update(r)}catch(s){throw Gi(s)}return gE.signalUserChange(new IE(process.pid)),e}a(LV,"alterRole");async function UV(e){let t=pE.dropRoleValidation(e);if(t)throw Gi(new Error,t,RE.BAD_REQUEST,void 0,void 0,!0);let r=new bV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await NV(r));if(s.length===0)throw Gi(new Error,ug.ROLE_NOT_FOUND,RE.NOT_FOUND,void 0,void 0,!0);let n=new IV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OE(n)),o=!1;if(_g.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!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 OV(c),gE.signalUserChange(new IE(process.pid)),`${s[0].role} successfully deleted`}a(UV,"dropRole");async function lg(){return OE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(lg,"listRoles")});var Sg=f((m4,fg)=>{"use strict";var MV=v(),Xr=require("joi"),DV=te(),dg=require("moment"),PV=require("fs-extra"),wE=require("path"),BV=require("lodash"),Fi=m(),{LOG_LEVELS:Cs}=m(),vV="YYYY-MM-DD hh:mm:ss",HV=wE.resolve(__dirname,"../logs");fg.exports=function(e){return DV.validateBySchema(e,qV)};var qV=Xr.object({from:Xr.custom(hg),until:Xr.custom(hg),level:Xr.valid(Cs.NOTIFY,Cs.FATAL,Cs.ERROR,Cs.WARN,Cs.INFO,Cs.DEBUG,Cs.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(GV)});function hg(e,t){if(dg(e,dg.ISO_8601).format(vV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(hg,"validateDatetime");function GV(e,t){if(BV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=MV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?wE.join(HV,Fi.LOG_NAMES.INSTALL):wE.join(s,n);return PV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(GV,"validateReadLogPath")});var yE=f((A4,Tg)=>{"use strict";var wc=m(),FV=I(),xV=v(),VV=Sg(),CE=require("path"),kV=require("fs-extra"),{once:$V}=require("events"),{handleHDBError:YV,hdb_errors:KV}=y(),{PACKAGE_ROOT:WV}=m(),QV=CE.join(WV,"logs"),JV=1e3;Tg.exports=XV;async function XV(e){let t=VV(e);if(t)throw YV(t,t.message,KV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=xV.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?CE.join(QV,wc.LOG_NAMES.INSTALL):CE.join(r,s),i=kV.createReadStream(n);i.on("error",U=>{FV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?JV:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let _e=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(_e,ae.index),ye(q));let[Hn,as,Cr]=ae,Oa=Cr.split("] ["),Rw=Oa[0],Aw=Oa[1];Oa.splice(0,2),q={timestamp:as,thread:Rw,level:Aw,tags:Oa,message:""},_e=ae.index+Hn.length}x=U.slice(_e)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,_e,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),U.level===c&&$>=_e&&$<=ae&&g<T?g++:U.level===c&&$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),_e=new Date(u),U.level===c&&$>=_e&&g<T?g++:U.level===c&&$>=_e&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),$>=_e&&$<=ae&&g<T?g++:$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),_e=new Date(u),$>=_e&&g<T?g++:$>=_e&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await $V(i,"close"),H}a(XV,"readLog");function Zr(e,t,r){t==="desc"?ZV(e,r):t==="asc"?zV(e,r):r.push(e)}a(Zr,"pushLineToResult");function ZV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ZV,"insertDescending");function zV(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(zV,"insertAscending")});var yc=f((O4,Ag)=>{"use strict";var LE=require("joi"),{string:Cc,boolean:mg,date:jV}=LE.types(),ek=te(),{validateSchemaExists:g4,validateTableExists:N4,validateSchemaName:tk}=Wt(),rk=m(),sk=ue(),nk=v(),ik=Cc.invalid(nk.get(rk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(sk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),Rg={operation:Cc.valid("add_node","update_node"),node_name:ik,subscriptions:LE.array().items({table:Cc.required(),schema:Cc.custom(tk).required(),subscribe:mg.required(),publish:mg.required().custom(ok),start_time:jV.iso()}).min(1).required()};function ak(e){return ek.validateBySchema(e,LE.object(Rg))}a(ak,"addUpdateNodeValidator");function ok(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(ok,"checkForFalsy");Ag.exports={addUpdateNodeValidator:ak,validation_schema:Rg}});var gg=f((b4,pg)=>{var ck=te(),_k={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};pg.exports=function(e){return ck.validateObject(e,_k)}});var UE=f((w4,Ng)=>{"use strict";var uk=m().OPERATIONS_ENUM,Lc=class{constructor(t,r,s,n=void 0){this.operation=uk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Lc,"UpdateObject");Ng.exports=Lc});var Ig=f((y4,Og)=>{"use strict";var lk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");Og.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:lk,JWTRSAKeys:Mc}});var vc=f((U4,yg)=>{"use strict";var Vi=require("jsonwebtoken"),ME=require("fs-extra"),DE=b(),bt=m(),{handleHDBError:Je,hdb_errors:Ek}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=Ek,xi=I(),bg=Ao(),vE=Sr(),dk=Ot().update,hk=UE(),fk=an(),{UserEventMsg:Sk}=kr(),zr=v();zr.initSync();var PE=require("path"),{JWTTokens:Tk,JWTRSAKeys:mk,TOKEN_TYPE_ENUM:Dc}=Ig(),Rk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Ak=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",BE;yg.exports={createTokens:pk,validateOperationToken:Nk,refreshOperationToken:gk,validateRefreshToken:Cg};async function pk(e){if(DE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await wg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Ak,algorithm:Pc,subject:Dc.REFRESH}),_=bg.hash(c),u=new hk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await dk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return fk.signalUserChange(new Sk(process.pid)),new Tk(o,c)}a(pk,"createTokens");async function wg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:Rk,algorithm:Pc,subject:Dc.OPERATION})}a(wg,"signOperationToken");async function Bc(){if(BE===void 0)try{let e=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await ME.readFile(e)).toString(),n=(await ME.readFile(t)).toString(),i=(await ME.readFile(r)).toString();BE=new mk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return BE}a(Bc,"getJWTRSAKeys");async function gk(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await Cg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await wg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(gk,"refreshOperationToken");async function Nk(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await vE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(Nk,"validateOperationToken");async function Cg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await vE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!bg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(Cg,"validateRefreshToken")});var Dg=f((P4,Mg)=>{"use strict";var Ok=gg(),Nn=require("passport"),Ik=require("passport-local").Strategy,bk=require("passport-http").BasicStrategy,wk=require("util"),Ck=Sr(),Ug=wk.callbackify(Ck.findAndValidateUser),D4=it(),yk=m(),Lg=vc();Nn.use(new Ik(function(e,t,r){Ug(e,t,r)}));Nn.use(new bk(function(e,t,r){Ug(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function Lk(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===yk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Lg.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Lg.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Lk,"authorize");function Uk(e,t){let r=Ok(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Uk,"checkPermissions");Mg.exports={authorize:Lk,checkPermissions:Uk}});var On=f((v4,Pg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");Pg.exports={Node:Hc,NodeSubscription:qc}});var vg=f((q4,Bg)=>{"use strict";var Mk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Mk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");Bg.exports=Gc});var ki=f((F4,Hg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(xc,"RemotePayloadSubscription");Hg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var Gg=f((V4,qg)=>{"use strict";var Vc=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(Vc,"TableSizeObject");qg.exports=Vc});var xg=f(($4,Fg)=>{"use strict";var Dk=Gg(),Pk=Le(),In=X(),Bk=I(),{getSchemaPath:vk,getTransactionAuditStorePath:Hk}=j();Fg.exports=qk;async function qk(e){let t=new Dk;try{let r=vk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Hk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Pk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.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){Bk.warn(`unable to stat table dbi due to ${r}`)}return t}a(qk,"lmdbGetTableSize")});var kg=f((K4,Vg)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");Vg.exports=kc});var bn=f((Q4,Kg)=>{"use strict";var He=require("systeminformation"),ys=I(),Gk=m(),Fk=xg(),Yg=ms(),{getThreadInfo:$g}=rn(),xk=v();xk.initSync();var Vk=kg(),{openEnvironment:kk}=X(),{getSchemaPath:$k}=j(),$c;Kg.exports={getHDBProcessInfo:FE,getNetworkInfo:VE,getDiskInfo:xE,getMemoryInfo:GE,getCPUInfo:qE,getTimeInfo:HE,getSystemInformation:kE,systemInformation:Yk,getTableSize:$E,getMetrics:YE};function HE(){return He.time()}a(HE,"getTimeInfo");async function qE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:_e,raw_load_system:ae,raw_load_user:Hn,...as}=q;x.cpus.push(as)}),l.current_load=x,l}catch(e){return ys.error(`error in getCPUInfo: ${e}`),{}}}a(qE,"getCPUInfo");async function GE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return ys.error(`error in getMemoryInfo: ${e}`),{}}}a(GE,"getMemoryInfo");async function FE(){let e={core:[],clustering:[]};try{return(await He.processes()).list.forEach(r=>{r.params.includes(Gk.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return ys.error(`error in getHDBProcessInfo: ${t}`),e}}a(FE,"getHDBProcessInfo");async function xE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return ys.error(`error in getDiskInfo: ${t}`),e}}a(xE,"getDiskInfo");async function VE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return ys.error(`error in getNetworkInfo: ${t}`),e}}a(VE,"getNetworkInfo");async function kE(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return ys.error(`error in getSystemInformation: ${t}`),e}}a(kE,"getSystemInformation");async function $E(){let e=[],t=await Yg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Fk(s));return e}a($E,"getTableSize");async function YE(){let e=await Yg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=$k(r,n),c=(await kk(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){ys.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(YE,"getMetrics");async function Yk(e){let t=new Vk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await kE(),t.time=HE(),t.cpu=await qE(),t.memory=await GE(),t.disk=await xE(),t.network=await VE(),t.harperdb_processes=await FE(),t.table_size=await $E(),t.metrics=await YE(),t.threads=await $g(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await kE();break;case"time":t.time=HE();break;case"cpu":t.cpu=await qE();break;case"memory":t.memory=await GE();break;case"disk":t.disk=await xE();break;case"network":t.network=await VE();break;case"harperdb_processes":t.harperdb_processes=await FE();break;case"table_size":t.table_size=await $E();break;case"database_metrics":t.metrics=await YE();break;case"threads":t.threads=await $g();break;default:break}return t}a(Yk,"systemInformation")});var KE=f((z4,Wg)=>{"use strict";var X4=require("fs-extra"),Z4=I();Wg.exports={version:Kk,printVersion:Qk,nodeVersion:Wk};var jr=Zl();function Kk(){if(jr)return jr.version}a(Kk,"version");function Wk(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(Wk,"nodeVersion");function Qk(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(Qk,"printVersion")});var Ar=f((r5,Zg)=>{"use strict";var Jk=Ot(),WE=b(),QE=require("util"),Ls=m(),Qg=v();Qg.initSync();var Xk=Dg(),Jg=It(),{Node:e5,NodeSubscription:t5}=On(),Zk=ln(),zk=vg(),{RemotePayloadObject:jk,RemotePayloadSubscription:e$}=ki(),{handleHDBError:t$,hdb_errors:r$}=y(),{HTTP_STATUS_CODES:s$,HDB_ERROR_MSGS:n$}=r$,i$=Ht(),a$=bn(),o$=KE(),c$=QE.promisify(Xk.authorize),_$=QE.promisify(Jg.searchByHash),u$=QE.promisify(Jg.searchByValue);Zg.exports={authHeaderToUser:l$,isEmpty:E$,getNodeRecord:d$,upsertNodeRecord:h$,buildNodePayloads:f$,checkClusteringEnabled:S$,getAllNodeRecords:T$,getSystemInfo:m$,reverseSubscription:Xg};async function l$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await c$(t,null),e}a(l$,"authHeaderToUser");function E$(e){return e==null}a(E$,"isEmpty");async function d$(e){let t=new Zk(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _$(t)}a(d$,"getNodeRecord");async function h$(e){let t=new zk(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Jk.upsert(t)}a(h$,"upsertNodeRecord");function Xg(e){if(WE.isEmpty(e.subscribe)||WE.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(Xg,"reverseSubscription");function f$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=WE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=Xg(c),h=new e$(_,u,l,d,E,c.start_time);n.push(h)}return new jk(r,t,n,s)}a(f$,"buildNodePayloads");function S$(){if(!Qg.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))throw t$(new Error,n$.CLUSTERING_NOT_ENABLED,s$.BAD_REQUEST,void 0,void 0,!0)}a(S$,"checkClusteringEnabled");async function T$(){let e=new i$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await u$(e))}a(T$,"getAllNodeRecords");async function m$(){let e=await a$.getSystemInformation();return{hdb_version:o$.version(),node_version:e.node_version,platform:e.platform}}a(m$,"getSystemInfo")});var XE=f((n5,sN)=>{"use strict";var JE=ve(),zg=b(),jg=ue(),R$=m(),Yc=I(),eN=Nc(),A$=vl(),{RemotePayloadObject:p$}=ki(),{handleHDBError:tN,hdb_errors:g$}=y(),{HTTP_STATUS_CODES:rN}=g$,{NodeSubscription:N$}=On();sN.exports=O$;async function O$(e,t){let r;try{r=await JE.request(`${t}.${jg.REQUEST_SUFFIX}`,new p$(R$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=JE.requestErrorHandler(o,"add_node",t);throw tN(new Error,c,rN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===jg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw tN(new Error,o,rN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=zg.doesSchemaExist(c),l=s[c]!==void 0,E=zg.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await eN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new A$(c,_,s[c][_].hash_attribute);await eN.createTable(T)}await JE.createLocalTableStream(c,_);let h=new N$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(O$,"reviewSubscriptions")});var Qc=f((a5,aN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:I$}=y(),{HTTP_STATUS_CODES:Wc}=I$,{addUpdateNodeValidator:b$}=yc(),$i=I(),iN=m(),nN=ue(),w$=b(),ZE=ve(),Yi=Ar(),C$=v(),y$=XE(),{Node:L$,NodeSubscription:U$}=On(),M$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",D$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",P$=C$.get(iN.CONFIG_PARAMS.CLUSTERING_NODENAME);aN.exports=B$;async function B$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=b$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!w$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await y$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=M$,o;let c=Yi.buildNodePayloads(n,P$,iN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await ZE.request(`${s}.${nN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=ZE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===nN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await ZE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new U$(h.schema,h.table,h.publish,h.subscribe))}let l=new L$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=D$:o.message=`Successfully added '${s}' to manifest`,o}a(B$,"addNode")});var jE=f((c5,_N)=>{"use strict";var{handleHDBError:Jc,hdb_errors:v$}=y(),{HTTP_STATUS_CODES:Xc}=v$,{addUpdateNodeValidator:H$}=yc(),Ki=I(),cN=m(),oN=ue(),q$=b(),zE=ve(),Wi=Ar(),G$=v(),{cloneDeep:F$}=require("lodash"),x$=XE(),{NodeSubscription:V$}=On(),k$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",$$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y$=G$.get(cN.CONFIG_PARAMS.CLUSTERING_NODENAME);_N.exports=K$;async function K$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=H$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=F$(await Wi.getNodeRecord(r));if(q$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await x$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=k$,o;let c=Wi.buildNodePayloads(n,Y$,cN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await zE.request(`${r}.${oN.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=zE.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===oN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await zE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await W$(s[0],n,_.system_info),i.length>0?o.message=$$:o.message=`Successfully updated '${r}'`,o}a(K$,"updateNode");async function W$(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new V$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(W$,"updateNodeTable")});var hN=f((u5,dN)=>{"use strict";var EN=require("joi"),{string:uN}=EN.types(),Q$=te(),lN=m(),J$=v(),X$=ue();dN.exports=Z$;function Z$(e){let t=uN.invalid(J$.get(lN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(X$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=EN.object({operation:uN.valid(lN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Q$.validateBySchema(e,r)}a(Z$,"removeNodeValidator")});var zc=f((E5,AN)=>{"use strict";var{handleHDBError:fN,hdb_errors:z$}=y(),{HTTP_STATUS_CODES:SN}=z$,j$=hN(),Qi=I(),TN=Ar(),eY=b(),Zc=m(),mN=ue(),RN=ve(),tY=v(),{RemotePayloadObject:rY}=ki(),{NodeSubscription:sY}=On(),nY=pi(),iY=Ss(),aY=tY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);AN.exports=oY;async function oY(e){Qi.trace("removeNode called with:",e),TN.checkClusteringEnabled();let t=j$(e);if(t)throw fN(t,t.message,SN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await TN.getNodeRecord(r);if(eY.isEmptyOrZeroLength(s))throw fN(new Error,`Node '${r}' was not found.`,SN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new rY(Zc.OPERATIONS_ENUM.REMOVE_NODE,aY,[]),i,o=!1;try{i=await RN.request(`${r}.${mN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new sY(l.schema,l.table,!1,!1);await RN.updateWorkStream(E,r)}let c=new nY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await iY.deleteRecord(c),i?.status===mN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(oY,"removeNode")});var NN=f((h5,gN)=>{"use strict";var pN=require("joi"),{string:cY,array:_Y}=pN.types(),uY=te(),lY=yc();gN.exports=EY;function EY(e){let t=pN.object({operation:cY.valid("configure_cluster").required(),connections:_Y.items(lY.validation_schema).required()});return uY.validateBySchema(e,t)}a(EY,"configureClusterValidator")});var ed=f((S5,CN)=>{"use strict";var dY=m(),jc=I(),hY=b(),fY=zc(),SY=Qc(),ON=Ar(),TY=NN(),{handleHDBError:IN,hdb_errors:mY}=y(),{HTTP_STATUS_CODES:bN}=mY,RY="Configure cluster complete.",AY="Failed to configure the cluster. Check the logs for more details.",pY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";CN.exports=gY;async function gY(e){jc.trace("configure cluster called with:",e),ON.checkClusteringEnabled();let t=TY(e);if(t)throw IN(t,t.message,bN.BAD_REQUEST,void 0,void 0,!0);let r=await ON.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(wN(fY,{operation:dY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(wN(SY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(hY.isEmptyOrZeroLength(_))return{message:RY,connections:u};if(l)return{message:pY,failed_nodes:_,connections:u};throw IN(new Error,AY,bN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(gY,"configureCluster");async function wN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(wN,"functionWrapper")});var LN=f((m5,yN)=>{"use strict";var e_=require("joi"),NY=te(),{validateSchemaExists:OY,validateTableExists:IY,validateSchemaName:bY}=Wt(),wY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(OY).custom(bY).required(),table:e_.string().custom(IY).required()});function CY(e){return NY.validateBySchema(e,wY)}a(CY,"purgeStreamValidator");yN.exports=CY});var td=f((A5,UN)=>{"use strict";var{handleHDBError:yY,hdb_errors:LY}=y(),{HTTP_STATUS_CODES:UY}=LY,MY=LN(),DY=ve(),PY=Ar();UN.exports=BY;async function BY(e){let t=MY(e);if(t)throw yY(t,t.message,UY.BAD_REQUEST,void 0,void 0,!0);PY.checkClusteringEnabled();let{schema:r,table:s}=e;return await DY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(BY,"purgeStream")});var nd=f((g5,HN)=>{"use strict";var sd=Ar(),vY=ve(),PN=v(),t_=m(),Us=ue(),HY=b(),rd=I(),{RemotePayloadObject:qY}=ki(),{ErrorCode:MN}=require("nats"),DN=PN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),BN=PN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);HN.exports={clusterStatus:GY,buildNodeStatus:vN};async function GY(){let e={node_name:BN,is_enabled:DN,connections:[]};if(!DN)return e;let t=await sd.getAllNodeRecords();if(HY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(vN(t[s],e.connections));return await Promise.allSettled(r),e}a(GY,"clusterStatus");async function vN(e,t){let r=e.name,s=new qY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,BN,void 0,await sd.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await vY.request(Us.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Us.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Us.CLUSTER_STATUS_STATUSES.CLOSED,rd.error(`Error getting node status from ${r} `,n))}catch(_){rd.warn(`Error getting node status from ${r}`,_),_.code===MN.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===MN.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new FY(r,o,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!==t_.PRE_4_0_0_VERSION&&await sd.upsertNodeRecord(_)}catch(_){rd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(vN,"buildNodeStatus");function FY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(FY,"NodeStatusObject")});var ad=f((O5,qN)=>{"use strict";var{handleHDBError:xY,hdb_errors:VY}=y(),{HTTP_STATUS_CODES:kY}=VY,$Y=ve(),YY=Ar(),id=b(),r_=require("joi"),KY=te(),WY=2e3,QY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});qN.exports=JY;async function JY(e){YY.checkClusteringEnabled();let t=KY.validateBySchema(e,QY);if(t)throw xY(t,t.message,kY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||id.autoCastBoolean(s),o=n===void 0||id.autoCastBoolean(n),c={nodes:[]},_=await $Y.getServerList(r??WY),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,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:id.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(JY,"clusterNetwork")});var VN=f((b5,xN)=>{"use strict";var od=require("joi"),GN=te(),{route_constraints:FN}=Cu();xN.exports={setRoutesValidator:XY,deleteRoutesValidator:ZY};function XY(e){let t=od.object({server:od.valid("hub","leaf").required(),routes:FN.required()});return GN.validateBySchema(e,t)}a(XY,"setRoutesValidator");function ZY(e){let t=od.object({routes:FN.required()});return GN.validateBySchema(e,t)}a(ZY,"deleteRoutesValidator")});var _d=f((C5,KN)=>{"use strict";var Ms=lr(),cd=b(),s_=m(),kN=VN(),{handleHDBError:$N,hdb_errors:zY}=y(),{HTTP_STATUS_CODES:YN}=zY,jY="cluster routes successfully set",eK="cluster routes successfully deleted";KN.exports={setRoutes:tK,getRoutes:rK,deleteRoutes:sK};function tK(e){let t=kN.setRoutesValidator(e);if(t)throw $N(t,t.message,YN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=cd.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),o.push(u))}return e.server==="hub"?Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:jY,set:o,skipped:i}}a(tK,"setRoutes");function rK(){let e=Ms.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(rK,"getRoutes");function sK(e){let t=kN.deleteRoutesValidator(e);if(t)throw $N(t,t.message,YN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=cd.isEmptyOrZeroLength(s)?null:s,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=cd.isEmptyOrZeroLength(n)?null:n,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:eK,deleted:i,skipped:o}}a(sK,"deleteRoutes")});var QN=f((L5,WN)=>{"use strict";var Ji=require("alasql"),Ds=require("recursive-iterator"),Ft=I(),nK=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,aK(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=iK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function iK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(iK,"filterReadRestrictedAttrs");function aK(e,t,r,s,n){oK(e,t,r,s,n)}a(aK,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function oK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?lK(e,t,r):e instanceof Ji.yy.Select?cK(e,t,r,s,n):e instanceof Ji.yy.Update?_K(e,t,r):e instanceof Ji.yy.Delete?uK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(oK,"getRecordAttributesAST");function cK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(nK.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ds(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ds(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ds(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ds(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(cK,"getSelectAttributes");function _K(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ud(e.table.tableid,n,i.columnid,t,r)}a(_K,"getUpdateAttributes");function uK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ds(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ud(e.table.tableid,n,i.columnid,t,r)}a(uK,"getDeleteAttributes");function lK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ud(e.into.tableid,n,i.columnid,t,r)}a(lK,"getInsertAttributes");function ud(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ud,"pushAttribute");WN.exports=n_});var ZN=f((M5,XN)=>{var EK=require("os"),JN=v();XN.exports={checkPermission:dK};function dK(){if(EK.userInfo().username!==JN.get("install_user"))throw new Error(`Error: Must execute as ${JN.get("install_user")}`)}a(dK,"checkPermission")});var Ed=f((P5,rO)=>{var a_=tn(),zN=require("chalk"),er=I(),jN=ZN(),eO=require("prompt"),{promisify:hK}=require("util"),i_=m(),fK=require("fs-extra"),SK=require("path"),TK=b(),mK=KE(),tO=v();tO.initSync();var RK=require("moment"),AK=hK(eO.get),pK=SK.join(tO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);rO.exports={getFingerprint:NK,setLicense:gK,parseLicense:ld,register:OK,getRegistrationInfo:bK};async function gK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await ld(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(gK,"setLicense");async function NK(){try{jN.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(NK,"getFingerprint");async function ld(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.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{er.info("writing license to disk"),await fK.writeFile(pK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(ld,"parseLicense");async function OK(){let e=await IK();return ld(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(OK,"register");async function IK(){try{jN.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:zN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:zN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{eO.start()}catch(s){er.error(s)}let r;try{r=await AK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(IK,"promptForRegistration");async function bK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(TK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=mK.version(),e.storage_type=i_.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=RK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(bK,"getRegistrationInfo")});var nO=f((v5,sO)=>{"use strict";var wK=ue(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+wK.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");sO.exports=o_});var oO=f((q5,aO)=>{"use strict";var iO=ue(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+iO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+iO.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:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");aO.exports=c_});var _O=f((F5,cO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");cO.exports=__});var lO=f((V5,uO)=>{"use strict";var CK=ue(),u_=class{constructor(t,r){this.user=t+CK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");uO.exports=u_});var fd=f(($5,hO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),yK=nO(),LK=oO(),UK=_O(),MK=lO(),dd=Sr(),wn=b(),ze=lr(),d_=m(),l_=ue(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=v(),EO=Vr(),hd=ve(),ji="clustering",DK=1e4,dO=5;hO.exports={generateNatsConfig:PK,removeNatsConfig:BK};async function PK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await hd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await dd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await dd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[as,Cr]of R.entries())Cr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&Cr.active&&(x.push(new MK(Cr.username,EO.decrypt(Cr.hash))),q.push(new UK(Cr.username,EO.decrypt(Cr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let as of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${as.host}:${as.port}`);let $=new yK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let _e=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,Hn=new LK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[_e],[ae],x,q,_,u,l,E);l==null&&delete Hn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,Hn),ea.trace(`Leaf server config written to ${c}`))}a(PK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${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}a(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function BK(e){let{port:t,config_file:r}=hd.getServerConfig(e),{username:s,decrypt_hash:n}=await dd.getClusterUser(),i=0,o=500;for(;i<dO;){try{let u=await hd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=dO)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 wn.async_set_timeout(o*i)}let c="0".repeat(DK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(BK,"removeNatsConfig")});var AO=f((K5,RO)=>{"use strict";var ht=v(),vK=tn(),F=m(),ta=ue(),pr=require("path"),{PACKAGE_ROOT:T_}=m(),fO=v(),Cn="/dev/null",HK=pr.join(T_,"launchServiceScripts"),SO=pr.join(T_,"utility/scripts"),qK=pr.join(SO,F.HDB_RESTART_SCRIPT),TO=pr.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function mO(){let t=vK.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(mO,"generateMainServerConfig");var GK=9930;function FK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=fO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==GK?"-"+s:""),script:TO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(FK,"generateNatsHubServerConfig");var xK=9940;function VK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=fO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==xK?"-"+s:""),script:TO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(VK,"generateNatsLeafServerConfig");function kK(){ht.initSync();let e=pr.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:HK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(kK,"generateClusteringUpgradeV4ServiceConfig");function $K(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:SO},script:qK}}a($K,"generateRestart");function YK(){return{apps:[mO()]}}a(YK,"generateAllServiceConfigs");RO.exports={generateAllServiceConfigs:YK,generateMainServerConfig:mO,generateRestart:$K,generateNatsHubServerConfig:FK,generateNatsLeafServerConfig:VK,generateClusteringUpgradeV4ServiceConfig:kK}});var BO=f((ej,PO)=>{"use strict";var Y=m(),gO=b(),ra=fd(),m_=ve(),tr=ue(),K=require("pm2"),es=AO(),R_=v(),gr=I(),KK=Ar(),{startWorker:Sd,onMessageFromWorkers:WK}=rn(),Q5=bn(),QK=require("util"),NO=require("child_process"),{execFile:JK}=NO,J5=QK.promisify(NO.exec),X5=require("systeminformation");PO.exports={enterPM2Mode:XK,start:Ps,stop:Td,reload:OO,restart:IO,list:md,describe:Rd,connect:Nr,kill:tW,startAllServices:rW,startService:Ad,getUniqueServicesList:wO,restartAllServices:sW,isServiceRegistered:CO,reloadStopStart:yO,restartHdb:bO,deleteProcess:jK,startClusteringProcesses:MO,startClusteringThreads:DO,isHdbRestartRunning:eW,isClusteringRunning:iW,stopClustering:nW,reloadClustering:aW};var{PACKAGE_ROOT:Z5}=m(),z5=m(),{loggerWithTag:j5}=gr,sa=!1;WK(e=>{e.type==="restart"&&R_.initSync(!0)});function XK(){sa=!0}a(XK,"enterPM2Mode");function Nr(){return new Promise((e,t)=>{K.connect((r,s)=>{gr.setupConsoleLogging(),r&&t(r),e(s)})})}a(Nr,"connect");var je,ZK=10,pO;function Ps(e){if(sa)return zK(e);let t=JK(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!pO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ZK&&Ps(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{pO=!0,je&&(je.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)}je.push(t)}a(Ps,"start");function zK(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(zK,"startWithPM2");function Td(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(Td,"stop");function OO(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(OO,"reload");function IO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(IO,"restart");function jK(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(jK,"deleteProcess");async function bO(){await Ps(es.generateRestart())}a(bO,"restartHdb");async function eW(){let e=await md();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(eW,"isHdbRestartRunning");function md(){return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(md,"list");function Rd(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Rd,"describe");function tW(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(tW,"kill");async function rW(){try{await MO(),await DO(),await Ps(es.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(rW,"startAllServices");async function Ad(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=es.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=es.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=es.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=es.generateNatsHubServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=es.generateNatsLeafServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=es.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ps(t)}catch(t){throw K.disconnect(),t}}a(Ad,"startService");async function wO(){try{let e=await md(),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 K.disconnect(),e}}a(wO,"getUniqueServicesList");async function sW(e=[]){try{let t=!1,r=await wO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await IO(o))}t&&await yO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(sW,"restartAllServices");async function CO(e){return je?.find(t=>t.name===e)?!0:!gO.isEmptyOrZeroLength(await Rd(e))}a(CO,"isServiceRegistered");async function yO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Rd(e),s=gO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await Td(e),await Ad(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await bO():await OO(e)}a(yO,"reloadStopStart");var LO,UO;async function MO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await Ad(t)}}a(MO,"startClusteringProcesses");async function DO(){LO=Sd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),UO=Sd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await KK.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){gr.info("Starting clustering upgrade 4.0.0 process"),Sd(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(DO,"startClusteringThreads");async function nW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await LO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await UO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await Td(t)}}a(nW,"stopClustering");async function iW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await CO(t)===!1)return!1}return!0}a(iW,"isClusteringRunning");async function aW(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(aW,"reloadClustering")});var wd=f((rj,xO)=>{"use strict";var oW=require("minimist"),{isMainThread:Nd,parentPort:qO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),Od=b(),A_=fd(),yn=ve(),pd=ue(),GO=lr(),sr=BO(),vO=bn(),cW=hu(),{restartWorkers:p_,onMessageFromWorkers:_W}=rn(),{handleHDBError:uW,hdb_errors:lW}=y(),{HTTP_STATUS_CODES:EW}=lW,g_=v();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,dW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",HO="Clustering is not enabled so cannot be restarted",hW="Invalid service",Bs,xt;xO.exports={restart:FO,restartService:Id};Nd&&_W(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?Id({service:e.workerType}):FO({operation:"restart"}))});async function FO(e){xt=Object.keys(e).length===0,Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=oW(process.argv);if(t.service){await Id(t);return}if(xt&&!Bs){console.error(dW);return}if(xt&&console.log(ia),Bs){sr.enterPM2Mode(),rr.notify(ia);let r=cW(Object.keys(se.CONFIG_PARAM_MAP),!0);return Od.isEmptyOrZeroLength(Object.keys(r))||GO.updateConfigValue(void 0,void 0,r,!0,!0),SW(),ia}return Nd?(rr.notify(ia),await bd(),setTimeout(()=>{p_()},50)):qO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(FO,"restart");async function Id(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw uW(new Error,hW,EW.BAD_REQUEST,void 0,void 0,!0);if(Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Nd)return qO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await bd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=HO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!Bs){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}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),Bs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(Id,"restartService");async function fW(){await yn.publishToStream(`${pd.SUBJECT_PREFIXES.TXN}.${pd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,pd.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(fW,"postDummyNatsMsg");async function SW(){await bd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await Od.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await gd(),xt&&(await yn.closeConnection(),process.exit(0))}a(SW,"restartPM2Mode");async function bd(){if(!GO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await vO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await gd(),xt&&await yn.closeConnection();else{await fW(),await A_.generateNatsConfig(!0),Bs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await vO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Od.async_set_timeout(3e3),await gd(),await yn.updateLocalStreams(),xt&&await yn.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(bd,"restartClustering");async function gd(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(gd,"removeNatsConfig")});var zO=f((ij,ZO)=>{"use strict";var nj=require("lodash"),qe=m(),{handleHDBError:VO,hdb_errors:TW}=y(),{HDB_ERROR_MSGS:mW,HTTP_STATUS_CODES:RW}=TW,Cd=I();ZO.exports={getRolePermissions:pW};var vs=Object.create(null),AW=a(e=>({key:e,perms:{}}),"perms_template_obj"),KO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),WO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),yd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...WO(t,r,s,n)}),"table_perms_template"),kO=a((e,t=WO())=>({attribute_name:e,describe:XO(t),[aa]:t[aa],[Ld]:t[Ld],[Ud]:t[Ud]}),"attr_perms_template"),$O=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Ld,UPDATE:Ud}=qe.PERMS_CRUD_ENUM,QO=Object.values(qe.PERMS_CRUD_ENUM),JO=[aa,Ld,Ud];function pW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vs[t]&&vs[t].key===s)return vs[t].perms;let n=gW(e,r);return vs[t]?vs[t].key=s:vs[t]=AW(s),vs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw Cd.error(s),Cd.debug(r),VO(new Error,mW.OUTDATED_PERMS_TRANSLATION_ERROR,RW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw Cd.error(s),VO(new Error)}}}a(pW,"getRolePermissions");function gW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=NW(t[i]);return}r[i]=KO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=OW(c,_);r[i].describe||QO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=yd()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=yd()})}),r}a(gW,"translateRolePermissions");function NW(e){let t=KO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yd(!0,!0,!0,!0,!0)}),t}a(NW,"createStructureUserPermissions");function OW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=$O(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=kO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=XO(l),n.attribute_permissions.push(l),c||IW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=$O(u):l=kO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=YO(n),n}else return e.describe=YO(e),e}a(OW,"getTableAttrPerms");function YO(e){return QO.filter(t=>e[t]).length>0}a(YO,"getSchemaTableDescribePerm");function XO(e){return JO.filter(t=>e[t]).length>0}a(XO,"getAttributeDescribePerm");function IW(e,t){JO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(IW,"checkForHashPerms")});var iI=f((oj,nI)=>{"use strict";var he=require("joi"),jO=require("fs-extra"),eI=require("path"),Ln=te(),tI=v(),rI=m(),sI=I(),{hdb_errors:bW}=y(),{HDB_ERROR_MSGS:et}=bW,ts=/^[a-zA-Z0-9-_]+$/;nI.exports={getDropCustomFunctionValidator:CW,setCustomFunctionValidator:yW,addCustomFunctionProjectValidator:LW,dropCustomFunctionProjectValidator:UW,packageCustomFunctionProjectValidator:MW,deployCustomFunctionProjectValidator:DW};function oa(e,t,r){try{let s=tI.get(rI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=eI.join(s,t);return jO.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return sI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function wW(e,t,r,s){try{let n=tI.get(rI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=eI.join(n,e,t,r+".js");return jO.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return sI.error(n),s.message(et.VALIDATION_ERR)}}a(wW,"checkFileExists");function CW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(ts).custom(wW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(CW,"getDropCustomFunctionValidator");function yW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(ts).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return Ln.validateBySchema(e,t)}a(yW,"setCustomFunctionValidator");function LW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(LW,"addCustomFunctionProjectValidator");function UW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(UW,"dropCustomFunctionProjectValidator");function MW(e){let t=he.object({project:he.string().pattern(ts).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Ln.validateBySchema(e,t)}a(MW,"packageCustomFunctionProjectValidator");function DW(e){let t=he.object({project:he.string().pattern(ts).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return Ln.validateBySchema(e,t)}a(DW,"deployCustomFunctionProjectValidator")});var vd=f((_j,cI)=>{"use strict";var be=require("fs-extra"),Md=require("fast-glob"),ee=require("path"),aI=require("tar-fs"),oI=require("uuid").v4,Dd=require("normalize-path"),Hs=iI(),ge=I(),ft=m(),St=v(),{PACKAGE_ROOT:PW}=m(),{handleHDBError:Ge,hdb_errors:BW}=y(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:Fe}=BW,vW=ee.join(PW,"custom_function_template"),Pd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Bd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,rs.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(Bd,"isCFEnabled");function HW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,rs.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(HW,"customFunctionsStatus");function qW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Md.sync(Dd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Md.sync(Dd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Md.sync(Dd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,rs.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(qW,"getCustomFunctions");function GW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,rs.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(GW,"getCustomFunction");function FW(e){Bd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,rs.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(FW,"setCustomFunction");function xW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,rs.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a(xW,"dropCustomFunction");function VW(e){Bd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(vW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,rs.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(VW,"addCustomFunctionProject");function kW(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,rs.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(kW,"dropCustomFunctionProject");async function $W(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=oI();if(!be.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}be.ensureDirSync(Pd);let c=ee.join(Pd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),aI.pack(n,_).pipe(be.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=be.readFileSync(c,{encoding:"base64"});return be.unlinkSync(c),{project:s,payload:u,file:c}}a($W,"packageCustomFunctionProject");async function YW(e){Bd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await be.ensureDir(i);let o,c;do o=ee.join(Pd,oI()+".tar"),c=await be.pathExists(o);while(c);await be.outputFile(o,n,{encoding:"base64"});let _=be.createReadStream(o);return _.pipe(aI.extract(i)),await new Promise(u=>_.on("end",u)),await be.unlink(o),`Successfully deployed project: ${s}`}a(YW,"deployCustomFunctionProject");cI.exports={customFunctionsStatus:HW,getCustomFunctions:qW,getCustomFunction:GW,setCustomFunction:FW,dropCustomFunction:xW,addCustomFunctionProject:VW,dropCustomFunctionProject:kW,packageCustomFunctionProject:$W,deployCustomFunctionProject:YW}});var Hd=f((lj,uI)=>{"use strict";var nr=require("joi"),_I=te();uI.exports={readTransactionLogValidator:KW,deleteTransactionLogsBeforeValidator:WW};function KW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return _I.validateBySchema(e,t)}a(KW,"readTransactionLogValidator");function WW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return _I.validateBySchema(e,t)}a(WW,"deleteTransactionLogsBeforeValidator")});var O_=f((dj,fI)=>{"use strict";var qd=m(),N_=ve(),lI=b(),EI=v(),dI=Vr(),{handleHDBError:Un,hdb_errors:QW}=y(),{HTTP_STATUS_CODES:Mn}=QW,{readTransactionLogValidator:JW,deleteTransactionLogsBeforeValidator:XW}=Hd(),hI="This operation relies on clustering and cannot run with it disable.",ZW="Logs successfully deleted from transaction log.",zW="All logs successfully deleted from transaction log.";fI.exports={readTransactionLog:jW,deleteTransactionLogsBefore:eQ};async function*jW(e){let t=JW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!EI.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,hI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=dI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===qd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(jW,"readTransactionLog");async function eQ(e){let t=XW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!EI.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,hI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=dI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=ZW,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=zW):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(eQ,"deleteTransactionLogsBefore")});var Fd=f((fj,II)=>{"use strict";var I_=require("joi"),b_=require("path"),SI=require("fs-extra"),{exec:tQ}=require("child_process"),rQ=require("util"),TI=rQ.promisify(tQ),sQ=m(),{handleHDBError:Dn,hdb_errors:nQ}=y(),{HTTP_STATUS_CODES:Pn}=nQ,mI=v(),iQ=te(),w_=I();mI.initSync();var Gd=mI.get(sQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),RI="npm install --omit=dev --json",aQ=`${RI} --dry-run`;II.exports={installModules:oQ,auditModules:cQ};async function AI(e,t=void 0){let{stdout:r,stderr:s}=await TI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
`,"")}a(Np,"runCommand");async function V0(){try{await b0.access(tE)}catch{return!1}let e=await Np(`${tE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return w0.eq(t,F0)}a(V0,"checkNATSServerInstalled");async function aE(e,t,r,s=!0,n="127.0.0.1"){return D0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:pe.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(aE,"createConnection");async function k0(){Gt&&(await Gt.drain(),Gt=void 0)}a(k0,"closeConnection");async function Rc(){if(!Gt){let e=await Tp.getClusterUser();if(Is(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Gt=await aE(t,e.username,e.decrypt_hash)}return Gt}a(Rc,"getConnection");async function Bi(){if(Ui)return Ui;Is(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ui=await Gt.jetstreamManager({domain:e}),Ui}a(Bi,"getJetStreamManager");async function Op(){if(Mi)return Mi;Is(Gt)&&await Rc();let{domain:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Is(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Mi=Gt.jetstream({domain:e}),Mi}a(Op,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Ui||await Bi(),r=Mi||await Op();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function $0(e){let t=pe.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Tp.getClusterUser(),n=await aE(t,r,s),i=iE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=gp.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 Tc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a($0,"getServerList");async function oE(e,t){let{jsm:r}=await dt(),s=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Rp.File,retention:Ap.Limits,subjects:t,discard:P0.Old,duplicate_window:mp,max_msgs:n,max_bytes:i,max_age:s})}a(oE,"createLocalStream");async function Ip(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Ip,"listStreams");async function Y0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(Y0,"deleteLocalStream");async function K0(e){let{connection:t}=await dt(),r=[],s=iE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(gp.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(K0,"listRemoteStreams");async function W0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o=[],c={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(c.deliver_policy=Pi.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=pp(l),d=sE(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(h.origin=E.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(W0,"viewStream");async function*Q0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await dt(),i=rE(),o={ack_policy:nE.None,durable_name:i,deliver_subject:i,deliver_policy:Pi.All};t&&(o.deliver_policy=Pi.StartTime,o.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,o);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=pp(u),E=sE(l.data);E[0]||(E=[E]);for(let d of E){let h={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(h.origin=l.headers.get(V.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(V.MSG_HEADERS.NATS_MSG_ID)),yield h}_.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}}a(Q0,"viewStreamIterator");async function J0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;pe.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=bp(s,r);let{js:i}=await dt(),o=await Hi(),c=`${e}.${o}`;try{Wr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,eE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await oE(t,[c]),n&&await i.publish(c,eE(s),{headers:r});else throw _}}a(J0,"publishToStream");function bp(e,t){t===void 0&&(t=v0());let r=pe.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Tc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${rE()}`;t.append(V.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(V.MSG_HEADERS.ORIGIN)||t.append(V.MSG_HEADERS.ORIGIN,r),t}a(bp,"addNatsMsgHeader");function vi(e){e=e.toLowerCase();let t=Di.join(pe.get(Q.CONFIG_PARAMS.ROOTPATH),G0);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Is(jl)&&(jl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Di.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),jl;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Is(zl)&&(zl={port:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Di.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),zl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(vi,"getServerConfig");async function X0(e){let{jsm:t}=await dt(),r=await Hi();try{await t.streams.add({name:e.stream_name,storage:Rp.File,retention:Ap.Workqueue,duplicate_window:mp,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:nE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Pi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(X0,"createWorkQueueStream");async function wp(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Cp(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=mc.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,g=n.config.sources.length;R<g;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let T={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(wp,"addSourceToWorkStream");function Cp(e){return e.split(".")[1]}a(Cp,"extractServerName");async function yp(e,t,r){let{schema:s,table:n}=r,i=mc.createNatsTableStreamName(s,n),{jsm:o}=await dt(),c=await o.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 o.streams.update(t,c.config)}a(yp,"removeSourceFromWorkStream");async function Z0(e,t,r=2e3,s=iE()){if(!Tc.isObject(t))throw new Error("data param must be an object");let n=eE(t),{connection:i}=await dt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return sE(c.data)}a(Z0,"request");function cE(e){return new Promise(async(t,r)=>{let s=U0(tE,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(cE,"reloadNATS");async function z0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cE(e)}a(z0,"reloadNATSHub");async function j0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cE(e)}a(j0,"reloadNATSLeaf");function ex(e,t,r){let s;switch(e.code){case fp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case fp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ex,"requestErrorHandler");async function tx(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await M0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await wp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await yp(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(tx,"updateWorkStream");async function Lp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await Hi(),n=ix(e,t,s);await oE(r,[n])}a(Lp,"createLocalTableStream");async function rx(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await Lp(s,n)}}a(rx,"createTableStreams");async function Up(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=mc.createNatsTableStreamName(e,t),{jsm:s}=await dt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Wr.warn(r);else throw r}}a(Up,"purgeTableStream");async function sx(e,t){if(pe.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Up(e,t[r])}a(sx,"purgeSchemaTableStreams");async function nx(e){return(await Bi()).streams.info(e)}a(nx,"getStreamInfo");function ix(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ix,"createSubjectName");async function Hi(){if(Li)return Li;if(Li=(await Bi())?.nc?.info?.server_name,Li===void 0)throw new Error("Unable to get jetstream manager server name");return Li}a(Hi,"getJsmServerName");async function ax(){let e=await Bi(),t=await Hi(),r=await Ip();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=ox(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Wr.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}`;Wr.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(".");Wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(ax,"updateLocalStreams");function ox(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=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=pe.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=pe.get(Q.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}a(ox,"updateStreamLimits")});var _E=f((j2,Dp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Dp.exports=Ac});var qi=f((t4,Pp)=>{"use strict";var cx=b(),uE=v(),Qr=m(),_x=ue(),ux=ve(),jt=I(),lx=_E(),Ex=Vr();uE.initSync();Pp.exports={postOperationHandler:hx};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=dx(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await ux.publishToStream(`${_x.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,Ex.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function dx(e,t,r){if(cx.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Qr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(dx,"convertCRUDOperationToTransaction");async function hx(e,t,r){if(!uE.get(Qr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;jt.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=uE.get(Qr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new lx(t.txn_time,s,n);switch(e.operation){case Qr.OPERATIONS_ENUM.INSERT:try{await pc(e,t.inserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for insert."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.DELETE:try{await pc(e,t.deleted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for delete."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPDATE:try{await pc(e,t.update_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for update."),jt.error(o)}break;case Qr.OPERATIONS_ENUM.UPSERT:try{await pc(e,t.upserted_hashes,i,r)}catch(o){jt.error("There was an error calling clustering postOperationHandler for upsert."),jt.error(o)}break;default:break}return t}a(hx,"postOperationHandler")});var Gp=f((s4,qp)=>{"use strict";var fx=It(),Sx=Gr(),Bp=I(),vp=Ot(),Tx=Sc(),mx=require("clone"),EE=require("alasql"),Rx=uc(),Hp=require("util"),Ax=Hp.promisify(Sx.getTableSchema),px=Hp.promisify(fx.search),gx=m(),lE=b(),Nx=qi();Rx(EE);qp.exports={update:Ix};var Ox="There was a problem performing this update. Please check the logs and try again.";async function Ix({statement:e,hdb_user:t}){let r=await Ax(e.table.databaseid,e.table.tableid),s=bx(e.columns);lE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=mx(n),c=lE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=EE.parse(_).statements[0],l=await Tx.writeTransaction(r.schema,r.name,async()=>{let E=await px(u),d=wx(s,E);return Cx(o,d,t)});return await vp.flush({schema:r.schema,table:r.name}),l}a(Ix,"update");function bx(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=EE.compile(`SELECT ${r.expression.toString()} AS [${gx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Bp.error(t),new Error(Ox)}}a(bx,"createUpdateRecord");function wx(e,t){return lE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(wx,"buildUpdateRecords");async function Cx(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vp.update(s);await Nx.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Bp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Cx,"updateRecords")});var xp=f((i4,Fp)=>{var yx=require("alasql"),Lx=It(),Ux=I(),Mx=Qt(),hE=require("util"),dE=b(),Dx=m(),Px=Gr(),Bx=Sc(),vx=qi(),Hx=Ot(),qx="record",Gx="successfully deleted",Fx=hE.callbackify($x),xx=hE.promisify(Lx.search),Vx=hE.promisify(Px.getTableSchema);Fp.exports={convertDelete:Fx};function kx(e){return`${e.deleted_hashes.length} ${qx}${e.deleted_hashes.length===1?"":"s"} ${Gx}`}a(kx,"generateReturnMessage");async function $x({statement:e,hdb_user:t}){let r=await Vx(e.table.databaseid,e.table.tableid);dE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=dE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=yx.parse(o).statements[0],_={operation:Dx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Bx.writeTransaction(r.schema,r.name,async()=>(_.records=await xx(c),Mx.deleteRecords(_)));return await Hx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await vx.postOperationHandler(_,u),dE.isEmptyOrZeroLength(u.message)&&(u.message=kx(u)),delete u.txn_time,u}catch(u){throw Ux.error(u),u.hdb_code?u.message:u}}a($x,"convertDelete")});var $p=f((o4,kp)=>{"use strict";var SE=Rs(),{hdb_errors:fE}=y();kp.exports={checkSchemaExists:Vp,checkSchemaTableExists:Yx,schema_describe:SE};async function Vp(e){if(!global.hdb_schema[e])try{let t=await SE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return fE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Vp,"checkSchemaExists");async function Yx(e,t){let r=await Vp(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await SE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(Yx,"checkSchemaTableExists")});var Nc=f((u4,Qp)=>{"use strict";var mn=_o(),bs=$p(),Kx=I(),Wx=require("uuid").v4,_4=require("clone"),Rn=an(),ws=m(),Qx=require("util"),Cs=Qt(),{handleHDBError:We,hdb_errors:Jx}=y(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Jx,{SchemaEventMsg:An}=kr(),Yp=ve();Qp.exports={createSchema:Xx,createSchemaStructure:Kp,createTable:Zx,createTableStructure:Wp,createAttribute:rV,dropSchema:zx,dropTable:jx,dropAttribute:eV};async function Xx(e){try{let t=await Kp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(Xx,"createSchema");async function Kp(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);if(!await bs.checkSchemaExists(e.schema))throw We(new Error,gc.SCHEMA_EXISTS_ERR(e.schema),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Cs.createSchema(e),`schema '${e.schema}' successfully created`}a(Kp,"createSchemaStructure");async function Zx(e){let t=await Wp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(Zx,"createTable");async function Wp(e){let t=mn.create_table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);mn.validateTableResidence(e.residence);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(!await bs.checkSchemaTableExists(e.schema,e.table))throw We(new Error,gc.TABLE_EXISTS_ERR(e.schema,e.table),Qe.BAD_REQUEST,ws.LOG_LEVELS.ERROR,gc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Wx(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Cs.createTable(n,e);else throw We(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Qe.BAD_REQUEST);else await Cs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Wp,"createTableStructure");async function zx(e){let t=mn.schema_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaExists(e.schema);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);let s=await bs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Cs.dropSchema(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Yp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(zx,"dropSchema");async function jx(e){let t=mn.table_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);return await Cs.dropTable(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),await Yp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(jx,"dropTable");async function eV(e){let t=mn.attribute_object(e);if(t)throw We(t,t.message,Qe.BAD_REQUEST,void 0,void 0,!0);let r=await bs.checkSchemaTableExists(e.schema,e.table);if(r)throw We(new Error,r,Qe.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw We(new Error,"You cannot drop a hash attribute",Qe.BAD_REQUEST,void 0,void 0,!0);if(ws.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw We(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Qe.BAD_REQUEST,void 0,void 0,!0);try{return await Cs.dropAttribute(e),tV(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Kx.error(`Got an error deleting attribute ${Qx.inspect(e)}.`),s}}a(eV,"dropAttribute");function tV(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(tV,"dropAttributeFromGlobal");async function rV(e){return await Cs.createAttribute(e),Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(rV,"createAttribute")});var Xp=f((E4,Jp)=>{"use strict";var{OPERATIONS_ENUM:sV}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=sV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Jp.exports=Oc});var TE=f((f4,tg)=>{"use strict";var nV=Qt(),h4=Xp(),Ic=b(),bc=m(),iV=v(),{handleHDBError:Zp,hdb_errors:aV}=y(),{HDB_ERROR_MSGS:zp,HTTP_STATUS_CODES:jp}=aV,oV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),eg="To use this operation audit log must be enabled in harperdb-config.yaml";tg.exports=cV;async function cV(e){if(Ic.isEmpty(e.schema))throw new Error(zp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(zp.TABLE_REQUIRED_ERR);if(!iV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Zp(new Error,eg,jp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,eg,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Zp(new Error,t,jp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&oV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await nV.readAuditLog(e)}a(cV,"readAuditLog")});var og=f((T4,ag)=>{var Jr=require("validate.js"),sg=te(),pn=m(),{handleHDBError:_V,hdb_errors:uV}=y(),{HDB_ERROR_MSGS:ce,HTTP_STATUS_CODES:lV}=uV,mE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),EV={STRUCTURE_USER:"structure_user"},rg=Object.values(pn.ROLE_TYPES_ENUM),dV="attribute_permissions",hV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,fV=[dV,...Object.values(gn)],ng=[gn.READ,gn.INSERT,gn.UPDATE],SV=[hV,...ng];function TV(e){let t=mE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ig(e,t)}a(TV,"addRoleValidation");function mV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ig(e,t)}a(mV,"alterRoleValidation");function RV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,sg.validateObject(e,t)}a(RV,"dropRoleValidation");var AV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ig(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)AV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(ce.INVALID_ROLE_JSON_KEYS(n),r);let i=sg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=pV(e);o&&Ee(o,r),rg.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&Ee(ce.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(rg.indexOf(o)<0){if(o===EV.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||Ee(ce.SCHEMA_NOT_FOUND(E),r)}continue}Ee(ce.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Ee(ce.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){Ee(ce.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{fV.includes(l)||Ee(ce.INVALID_PERM_KEY(l),r,o,_)}),Object.values(gn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||Ee(ce.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):Ee(ce.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){Ee(ce.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{Ee(ce.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!SV.includes(R)&&R!==gn.DELETE&&Ee(ce.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){Ee(ce.ATTR_PERM_MISSING_NAME,r,o,_);continue}let T=h.attribute_name;if(!l.includes(T)){Ee(ce.INVALID_ATTRIBUTE_IN_PERMS(T),r,o,_);continue}ng.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||Ee(ce.ATTR_PERM_NOT_BOOLEAN(R,T),r,o,_):Ee(ce.ATTR_PERM_MISSING(R,T),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.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=`${o}.${_}`;Ee(ce.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return gV(r)}a(ig,"customValidate");ag.exports={addRoleValidation:TV,alterRoleValidation:mV,dropRoleValidation:RV};function pV(e){let{operation:t,permission:r}=e;if(t===pn.OPERATIONS_ENUM.ADD_ROLE||t===pn.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 ce.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pn.ROLE_TYPES_ENUM.SUPER_USER:pn.ROLE_TYPES_ENUM.CLUSTER_USER;return ce.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(pV,"validateNoSUPerms");function gV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ce.ROLE_PERMS_ERROR,...e};return _V(new Error,s,lV.BAD_REQUEST)}else return null}a(gV,"generateRolePermResponse");function Ee(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]}}a(Ee,"addPermError")});var bE=f((R4,dg)=>{"use strict";var cg=Ot(),_g=It(),NV=Ts(),pE=og(),gE=an(),OV=require("uuid").v4,NE=require("util"),IV=tn(),Rr=m(),ug=b(),OE=NE.promisify(_g.searchByValue),bV=NE.promisify(_g.searchByHash),wV=NE.promisify(NV.delete),CV=Ht(),yV=ln(),{hdb_errors:LV,handleHDBError:Gi}=y(),{HDB_ERROR_MSGS:lg,HTTP_STATUS_CODES:RE}=LV,{UserEventMsg:IE}=kr();dg.exports={addRole:UV,alterRole:DV,dropRole:PV,listRoles:Eg};function AE(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}a(AE,"scrubRoleDetails");async function UV(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await IV.getLicense()).enterprise){let o=await Eg();if(MV(e,o))throw new Error(`Your current license only supports ${Rr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Rr.SUPPORT_HELP_MSG}`);if(o.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=AE(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 OE(s)||[])}catch(o){throw Gi(o)}if(n&&n.length>0)throw Gi(new Error,lg.ROLE_ALREADY_EXISTS(e.role),RE.CONFLICT,void 0,void 0,!0);e.id||(e.id=OV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await cg.insert(i),gE.signalUserChange(new IE(process.pid)),e=AE(e),e}a(UV,"addRole");function MV(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(!ug.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(MV,"checkClusterUserRole");async function DV(e){let t=pE.alterRoleValidation(e);if(t)throw t;e=AE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await cg.update(r)}catch(s){throw Gi(s)}return gE.signalUserChange(new IE(process.pid)),e}a(DV,"alterRole");async function PV(e){let t=pE.dropRoleValidation(e);if(t)throw Gi(new Error,t,RE.BAD_REQUEST,void 0,void 0,!0);let r=new yV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await bV(r));if(s.length===0)throw Gi(new Error,lg.ROLE_NOT_FOUND,RE.NOT_FOUND,void 0,void 0,!0);let n=new CV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await OE(n)),o=!1;if(ug.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!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 wV(c),gE.signalUserChange(new IE(process.pid)),`${s[0].role} successfully deleted`}a(PV,"dropRole");async function Eg(){return OE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Eg,"listRoles")});var Tg=f((p4,Sg)=>{"use strict";var BV=v(),Xr=require("joi"),vV=te(),hg=require("moment"),HV=require("fs-extra"),wE=require("path"),qV=require("lodash"),Fi=m(),{LOG_LEVELS:ys}=m(),GV="YYYY-MM-DD hh:mm:ss",FV=wE.resolve(__dirname,"../logs");Sg.exports=function(e){return vV.validateBySchema(e,xV)};var xV=Xr.object({from:Xr.custom(fg),until:Xr.custom(fg),level:Xr.valid(ys.NOTIFY,ys.FATAL,ys.ERROR,ys.WARN,ys.INFO,ys.DEBUG,ys.TRACE),order:Xr.valid("asc","desc"),limit:Xr.number().min(1),start:Xr.number().min(0),log_name:Xr.custom(VV)});function fg(e,t){if(hg(e,hg.ISO_8601).format(GV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fg,"validateDatetime");function VV(e,t){if(qV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=BV.get(Fi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Fi.LOG_NAMES.HDB:e,i=n===Fi.LOG_NAMES.INSTALL?wE.join(FV,Fi.LOG_NAMES.INSTALL):wE.join(s,n);return HV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(VV,"validateReadLogPath")});var yE=f((N4,mg)=>{"use strict";var wc=m(),kV=I(),$V=v(),YV=Tg(),CE=require("path"),KV=require("fs-extra"),{once:WV}=require("events"),{handleHDBError:QV,hdb_errors:JV}=y(),{PACKAGE_ROOT:XV}=m(),ZV=CE.join(XV,"logs"),zV=1e3;mg.exports=jV;async function jV(e){let t=YV(e);if(t)throw QV(t,t.message,JV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=$V.get(wc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?wc.LOG_NAMES.HDB:e.log_name,n=s===wc.LOG_NAMES.INSTALL?CE.join(ZV,wc.LOG_NAMES.INSTALL):CE.join(r,s),i=KV.createReadStream(n);i.on("error",U=>{kV.error(U)});let o=e.level!==void 0,c=o?e.level:void 0,_=e.from!==void 0,u=_?new Date(e.from):void 0,l=e.until!==void 0,E=l?new Date(e.until):void 0,d=e.limit===void 0?zV:e.limit,h=e.order===void 0?void 0:e.order,T=e.start===void 0?0:e.start,R=T+d,g=0,H=[],x="",q;i.on("data",U=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=x+U;let _e=0,ae;for(;(ae=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(_e,ae.index),ye(q));let[Hn,os,Cr]=ae,Oa=Cr.split("] ["),pw=Oa[0],gw=Oa[1];Oa.splice(0,2),q={timestamp:os,thread:pw,level:gw,tags:Oa,message:""},_e=ae.index+Hn.length}x=U.slice(_e)}),i.on("end",U=>{i.destroyed||q&&(q.message=x.trim(),ye(q))}),i.resume();function ye(U){let $,_e,ae;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),U.level===c&&$>=_e&&$<=ae&&g<T?g++:U.level===c&&$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(U.timestamp),_e=new Date(u),U.level===c&&$>=_e&&g<T?g++:U.level===c&&$>=_e&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(U.timestamp),ae=new Date(E),U.level===c&&$<=ae&&g<T?g++:U.level===c&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),_e=new Date(u),ae=new Date(E),$>=_e&&$<=ae&&g<T?g++:$>=_e&&$<=ae&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case o:U.level===c&&g<T?g++:U.level===c&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(U.timestamp),_e=new Date(u),$>=_e&&g<T?g++:$>=_e&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(U.timestamp),ae=new Date(E),$<=ae&&g<T?g++:$<=ae&&g>=T&&(Zr(U,h,H),g++,g===R&&i.destroy());break;default:g<T?g++:(Zr(U,h,H),g++,g===R&&i.destroy())}}return a(ye,"onLogMessage"),await WV(i,"close"),H}a(jV,"readLog");function Zr(e,t,r){t==="desc"?ek(e,r):t==="asc"?tk(e,r):r.push(e)}a(Zr,"pushLineToResult");function ek(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ek,"insertDescending");function tk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(tk,"insertAscending")});var yc=f((w4,pg)=>{"use strict";var LE=require("joi"),{string:Cc,boolean:Rg,date:rk}=LE.types(),sk=te(),{validateSchemaExists:I4,validateTableExists:b4,validateSchemaName:nk}=Wt(),ik=m(),ak=ue(),ok=v(),ck=Cc.invalid(ok.get(ik.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ak.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),Ag={operation:Cc.valid("add_node","update_node"),node_name:ck,subscriptions:LE.array().items({table:Cc.required(),schema:Cc.custom(nk).required(),subscribe:Rg.required(),publish:Rg.required().custom(uk),start_time:rk.iso()}).min(1).required()};function _k(e){return sk.validateBySchema(e,LE.object(Ag))}a(_k,"addUpdateNodeValidator");function uk(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(uk,"checkForFalsy");pg.exports={addUpdateNodeValidator:_k,validation_schema:Ag}});var Ng=f((y4,gg)=>{var lk=te(),Ek={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};gg.exports=function(e){return lk.validateObject(e,Ek)}});var UE=f((L4,Og)=>{"use strict";var dk=m().OPERATIONS_ENUM,Lc=class{constructor(t,r,s,n=void 0){this.operation=dk.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Lc,"UpdateObject");Og.exports=Lc});var bg=f((M4,Ig)=>{"use strict";var hk={OPERATION:"operation",REFRESH:"refresh"},Uc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Uc,"JWTTokens");var Mc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Mc,"JWTRSAKeys");Ig.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:hk,JWTRSAKeys:Mc}});var vc=f((P4,Lg)=>{"use strict";var Vi=require("jsonwebtoken"),ME=require("fs-extra"),DE=b(),bt=m(),{handleHDBError:Je,hdb_errors:fk}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=fk,xi=I(),wg=Ao(),vE=Sr(),Sk=Ot().update,Tk=UE(),mk=an(),{UserEventMsg:Rk}=kr(),zr=v();zr.initSync();var PE=require("path"),{JWTTokens:Ak,JWTRSAKeys:pk,TOKEN_TYPE_ENUM:Dc}=bg(),gk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Nk=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",BE;Lg.exports={createTokens:Ok,validateOperationToken:bk,refreshOperationToken:Ik,validateRefreshToken:yg};async function Ok(e){if(DE.isEmpty(e)||typeof e!="object")throw Je(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.username))throw Je(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(DE.isEmpty(e.password))throw Je(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vE.findAndValidateUser(e.username,e.password),!t)throw Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw xi.error(d),Je(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Bc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await Cg(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Nk,algorithm:Pc,subject:Dc.REFRESH}),_=wg.hash(c),u=new Tk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await Sk(u)}catch(d){xi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw Je(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return mk.signalUserChange(new Rk(process.pid)),new Ak(o,c)}a(Ok,"createTokens");async function Cg(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:gk,algorithm:Pc,subject:Dc.OPERATION})}a(Cg,"signOperationToken");async function Bc(){if(BE===void 0)try{let e=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=PE.join(zr.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await ME.readFile(e)).toString(),n=(await ME.readFile(t)).toString(),i=(await ME.readFile(r)).toString();BE=new pk(i,n,s)}catch(e){throw xi.error(e),Je(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return BE}a(Bc,"getJWTRSAKeys");async function Ik(e){if(!e)throw Je(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Je(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await yg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Cg({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Ik,"refreshOperationToken");async function bk(e){try{let t=await Bc(),r=await Vi.verify(e,t.public_key,{algorithms:Pc,subject:Dc.OPERATION});return await vE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xi.warn(t),t.name&&t.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(bk,"validateOperationToken");async function yg(e){let t;try{let r=await Bc(),s=await Vi.verify(e,r.public_key,{algorithms:Pc,subject:Dc.REFRESH});t=await vE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xi.warn(r),r.name&&r.name==="TokenExpiredError"?Je(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!wg.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(yg,"validateRefreshToken")});var Pg=f((H4,Dg)=>{"use strict";var wk=Ng(),Nn=require("passport"),Ck=require("passport-local").Strategy,yk=require("passport-http").BasicStrategy,Lk=require("util"),Uk=Sr(),Mg=Lk.callbackify(Uk.findAndValidateUser),v4=it(),Mk=m(),Ug=vc();Nn.use(new Ck(function(e,t,r){Mg(e,t,r)}));Nn.use(new yk(function(e,t,r){Mg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function Dk(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Nn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===Mk.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Ug.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Ug.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Nn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Dk,"authorize");function Pk(e,t){let r=wk(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Pk,"checkPermissions");Dg.exports={authorize:Dk,checkPermissions:Pk}});var On=f((G4,Bg)=>{"use strict";var Hc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Hc,"Node");var qc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(qc,"NodeSubscription");Bg.exports={Node:Hc,NodeSubscription:qc}});var Hg=f((x4,vg)=>{"use strict";var Bk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Bk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");vg.exports=Gc});var ki=f((k4,qg)=>{"use strict";var Fc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Fc,"RemotePayloadObject");var xc=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(xc,"RemotePayloadSubscription");qg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var Fg=f((Y4,Gg)=>{"use strict";var Vc=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(Vc,"TableSizeObject");Gg.exports=Vc});var Vg=f((W4,xg)=>{"use strict";var vk=Fg(),Hk=Le(),In=X(),qk=I(),{getSchemaPath:Gk,getTransactionAuditStorePath:Fk}=j();xg.exports=xk;async function xk(e){let t=new vk;try{let r=Gk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=Fk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Hk.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await In.environmentDataSize(r,e.name),u=await In.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){qk.warn(`unable to stat table dbi due to ${r}`)}return t}a(xk,"lmdbGetTableSize")});var $g=f((J4,kg)=>{"use strict";var kc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(kc,"SystemInformationObject");kg.exports=kc});var bn=f((Z4,Qg)=>{"use strict";var Vk=require("fs-extra"),kk=require("path"),He=require("systeminformation"),jr=I(),HE=m(),$k=Vg(),Kg=Rs(),{getThreadInfo:Yg}=rn(),Wg=v();Wg.initSync();var Yk=$g(),{openEnvironment:Kk}=X(),{getSchemaPath:Wk}=j(),$c;Qg.exports={getHDBProcessInfo:xE,getNetworkInfo:kE,getDiskInfo:VE,getMemoryInfo:FE,getCPUInfo:GE,getTimeInfo:qE,getSystemInformation:$E,systemInformation:Qk,getTableSize:YE,getMetrics:KE};function qE(){return He.time()}a(qE,"getTimeInfo");async function GE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await He.cpu();l.cpu_speed=await He.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:T,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await He.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:ye,raw_load_idle:U,raw_load_irq:$,raw_load_nice:_e,raw_load_system:ae,raw_load_user:Hn,...os}=q;x.cpus.push(os)}),l.current_load=x,l}catch(e){return jr.error(`error in getCPUInfo: ${e}`),{}}}a(GE,"getCPUInfo");async function FE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await He.mem();return Object.assign(n,process.memoryUsage())}catch(e){return jr.error(`error in getMemoryInfo: ${e}`),{}}}a(FE,"getMemoryInfo");async function xE(){let e={core:[],clustering:[]};try{let t=await He.processes(),r;try{r=Number.parseInt(await Vk.readFile(kk.join(Wg.get(HE.CONFIG_PARAMS.ROOTPATH),HE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===HE.NODE_ERROR_CODES.ENOENT)jr.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 jr.error(`error in getHDBProcessInfo: ${t}`),e}}a(xE,"getHDBProcessInfo");async function VE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await He.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await He.fsStats();return e.read_write=u,e.size=await He.fsSize(),e}catch(t){return jr.error(`error in getDiskInfo: ${t}`),e}}a(VE,"getDiskInfo");async function kE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await He.networkInterfaceDefault(),e.latency=await He.inetChecksite("google.com"),(await He.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await He.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return jr.error(`error in getNetworkInfo: ${t}`),e}}a(kE,"getNetworkInfo");async function $E(){if($c!==void 0)return $c;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await He.osInfo();e=c;let _=await He.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,$c=e,$c}catch(t){return jr.error(`error in getSystemInformation: ${t}`),e}}a($E,"getSystemInformation");async function YE(){let e=[],t=await Kg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await $k(s));return e}a(YE,"getTableSize");async function KE(){let e=await Kg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Wk(r,n),c=(await Kk(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){jr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(KE,"getMetrics");async function Qk(e){let t=new Yk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $E(),t.time=qE(),t.cpu=await GE(),t.memory=await FE(),t.disk=await VE(),t.network=await kE(),t.harperdb_processes=await xE(),t.table_size=await YE(),t.metrics=await KE(),t.threads=await Yg(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $E();break;case"time":t.time=qE();break;case"cpu":t.cpu=await GE();break;case"memory":t.memory=await FE();break;case"disk":t.disk=await VE();break;case"network":t.network=await kE();break;case"harperdb_processes":t.harperdb_processes=await xE();break;case"table_size":t.table_size=await YE();break;case"database_metrics":case"metrics":t.metrics=await KE();break;case"threads":t.threads=await Yg();break;default:break}return t}a(Qk,"systemInformation")});var WE=f((t5,Jg)=>{"use strict";var j4=require("fs-extra"),e5=I();Jg.exports={version:Jk,printVersion:Zk,nodeVersion:Xk};var es=Zl();function Jk(){if(es)return es.version}a(Jk,"version");function Xk(){if(es&&es.engines&&es.engines["preferred-node"])return es.engines["preferred-node"]}a(Xk,"nodeVersion");function Zk(){es&&console.log(`HarperDB Version ${es.version}`)}a(Zk,"printVersion")});var Ar=f((i5,jg)=>{"use strict";var zk=Ot(),QE=b(),JE=require("util"),Ls=m(),Xg=v();Xg.initSync();var jk=Pg(),Zg=It(),{Node:s5,NodeSubscription:n5}=On(),e$=ln(),t$=Hg(),{RemotePayloadObject:r$,RemotePayloadSubscription:s$}=ki(),{handleHDBError:n$,hdb_errors:i$}=y(),{HTTP_STATUS_CODES:a$,HDB_ERROR_MSGS:o$}=i$,c$=Ht(),_$=bn(),u$=WE(),l$=JE.promisify(jk.authorize),E$=JE.promisify(Zg.searchByHash),d$=JE.promisify(Zg.searchByValue);jg.exports={authHeaderToUser:h$,isEmpty:f$,getNodeRecord:S$,upsertNodeRecord:T$,buildNodePayloads:m$,checkClusteringEnabled:R$,getAllNodeRecords:A$,getSystemInfo:p$,reverseSubscription:zg};async function h$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await l$(t,null),e}a(h$,"authHeaderToUser");function f$(e){return e==null}a(f$,"isEmpty");async function S$(e){let t=new e$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return E$(t)}a(S$,"getNodeRecord");async function T$(e){let t=new t$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return zk.upsert(t)}a(T$,"upsertNodeRecord");function zg(e){if(QE.isEmpty(e.subscribe)||QE.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(zg,"reverseSubscription");function m$(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=QE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=zg(c),h=new s$(_,u,l,d,E,c.start_time);n.push(h)}return new r$(r,t,n,s)}a(m$,"buildNodePayloads");function R$(){if(!Xg.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))throw n$(new Error,o$.CLUSTERING_NOT_ENABLED,a$.BAD_REQUEST,void 0,void 0,!0)}a(R$,"checkClusteringEnabled");async function A$(){let e=new c$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await d$(e))}a(A$,"getAllNodeRecords");async function p$(){let e=await _$.getSystemInformation();return{hdb_version:u$.version(),node_version:e.node_version,platform:e.platform}}a(p$,"getSystemInfo")});var ZE=f((o5,iN)=>{"use strict";var XE=ve(),eN=b(),tN=ue(),g$=m(),Yc=I(),rN=Nc(),N$=vl(),{RemotePayloadObject:O$}=ki(),{handleHDBError:sN,hdb_errors:I$}=y(),{HTTP_STATUS_CODES:nN}=I$,{NodeSubscription:b$}=On();iN.exports=w$;async function w$(e,t){let r;try{r=await XE.request(`${t}.${tN.REQUEST_SUFFIX}`,new O$(g$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Yc.trace("Response from remote describe all request:",r)}catch(o){Yc.error(`addNode received error from describe all request to remote node: ${o}`);let c=XE.requestErrorHandler(o,"add_node",t);throw sN(new Error,c,nN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===tN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw sN(new Error,o,nN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=eN.doesSchemaExist(c),l=s[c]!==void 0,E=eN.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Yc.trace(`addNode creating schema: ${c}`),await rN.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new N$(c,_,s[c][_].hash_attribute);await rN.createTable(T)}await XE.createLocalTableStream(c,_);let h=new b$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(w$,"reviewSubscriptions")});var Qc=f((_5,cN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:C$}=y(),{HTTP_STATUS_CODES:Wc}=C$,{addUpdateNodeValidator:y$}=yc(),$i=I(),oN=m(),aN=ue(),L$=b(),zE=ve(),Yi=Ar(),U$=v(),M$=ZE(),{Node:D$,NodeSubscription:P$}=On(),B$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",v$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",H$=U$.get(oN.CONFIG_PARAMS.CLUSTERING_NODENAME);cN.exports=q$;async function q$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=y$(e);if(r)throw Kc(r,r.message,Wc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Yi.getNodeRecord(s);if(!L$.isEmptyOrZeroLength(E))throw Kc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Wc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await M$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=B$,o;let c=Yi.buildNodePayloads(n,H$,oN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await zE.request(`${s}.${aN.REQUEST_SUFFIX}`,c)}catch(E){$i.error(`addNode received error from request: ${E}`);let d=zE.requestErrorHandler(E,"add_node",s);throw Kc(new Error,d,Wc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===aN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Kc(new Error,E,Wc.INTERNAL_SERVER_ERROR,"error",E)}$i.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];$i.trace("Add node updating work stream for node:",s,"subscriptions:",h),await zE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new P$(h.schema,h.table,h.publish,h.subscribe))}let l=new D$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=v$:o.message=`Successfully added '${s}' to manifest`,o}a(q$,"addNode")});var ed=f((l5,lN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:G$}=y(),{HTTP_STATUS_CODES:Xc}=G$,{addUpdateNodeValidator:F$}=yc(),Ki=I(),uN=m(),_N=ue(),x$=b(),jE=ve(),Wi=Ar(),V$=v(),{cloneDeep:k$}=require("lodash"),$$=ZE(),{NodeSubscription:Y$}=On(),K$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",W$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Q$=V$.get(uN.CONFIG_PARAMS.CLUSTERING_NODENAME);lN.exports=J$;async function J$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=F$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=k$(await Wi.getNodeRecord(r));if(x$.isEmptyOrZeroLength(s))throw Jc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await $$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=K$,o;let c=Wi.buildNodePayloads(n,Q$,uN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await jE.request(`${r}.${_N.REQUEST_SUFFIX}`,c)}catch(u){Ki.error(`updateNode received error from request: ${u}`);let l=jE.requestErrorHandler(u,"update_node",r);throw Jc(new Error,l,Xc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===_N.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Jc(new Error,u,Xc.INTERNAL_SERVER_ERROR,"error",u)}Ki.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Ki.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await jE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await X$(s[0],n,_.system_info),i.length>0?o.message=W$:o.message=`Successfully updated '${r}'`,o}a(J$,"updateNode");async function X$(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Y$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(X$,"updateNodeTable")});var SN=f((d5,fN)=>{"use strict";var hN=require("joi"),{string:EN}=hN.types(),Z$=te(),dN=m(),z$=v(),j$=ue();fN.exports=eY;function eY(e){let t=EN.invalid(z$.get(dN.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(j$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=hN.object({operation:EN.valid(dN.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Z$.validateBySchema(e,r)}a(eY,"removeNodeValidator")});var zc=f((f5,gN)=>{"use strict";var{handleHDBError:TN,hdb_errors:tY}=y(),{HTTP_STATUS_CODES:mN}=tY,rY=SN(),Qi=I(),RN=Ar(),sY=b(),Zc=m(),AN=ue(),pN=ve(),nY=v(),{RemotePayloadObject:iY}=ki(),{NodeSubscription:aY}=On(),oY=pi(),cY=Ts(),_Y=nY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);gN.exports=uY;async function uY(e){Qi.trace("removeNode called with:",e),RN.checkClusteringEnabled();let t=rY(e);if(t)throw TN(t,t.message,mN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await RN.getNodeRecord(r);if(sY.isEmptyOrZeroLength(s))throw TN(new Error,`Node '${r}' was not found.`,mN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new iY(Zc.OPERATIONS_ENUM.REMOVE_NODE,_Y,[]),i,o=!1;try{i=await pN.request(`${r}.${AN.REQUEST_SUFFIX}`,n),Qi.trace("Remove node reply from remote node:",r,i)}catch(_){Qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new aY(l.schema,l.table,!1,!1);await pN.updateWorkStream(E,r)}let c=new oY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await cY.deleteRecord(c),i?.status===AN.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Qi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(uY,"removeNode")});var IN=f((T5,ON)=>{"use strict";var NN=require("joi"),{string:lY,array:EY}=NN.types(),dY=te(),hY=yc();ON.exports=fY;function fY(e){let t=NN.object({operation:lY.valid("configure_cluster").required(),connections:EY.items(hY.validation_schema).required()});return dY.validateBySchema(e,t)}a(fY,"configureClusterValidator")});var td=f((R5,LN)=>{"use strict";var SY=m(),jc=I(),TY=b(),mY=zc(),RY=Qc(),bN=Ar(),AY=IN(),{handleHDBError:wN,hdb_errors:pY}=y(),{HTTP_STATUS_CODES:CN}=pY,gY="Configure cluster complete.",NY="Failed to configure the cluster. Check the logs for more details.",OY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";LN.exports=IY;async function IY(e){jc.trace("configure cluster called with:",e),bN.checkClusteringEnabled();let t=AY(e);if(t)throw wN(t,t.message,CN.BAD_REQUEST,void 0,void 0,!0);let r=await bN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(yN(mY,{operation:SY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);jc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(yN(RY,h,h.node_name))}let c=await Promise.allSettled(i);jc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let T=E[d];T.status==="rejected"&&(jc.error(T.reason),_.includes(T.reason.node_name)||_.push(T.reason.node_name)),T.status==="fulfilled"&&(l=!0);let R=T?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||T.status==="rejected"||u.push({node_name:T?.value?.node_name,subscriptions:T?.value?.result})}if(TY.isEmptyOrZeroLength(_))return{message:gY,connections:u};if(l)return{message:OY,failed_nodes:_,connections:u};throw wN(new Error,NY,CN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(IY,"configureCluster");async function yN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(yN,"functionWrapper")});var MN=f((p5,UN)=>{"use strict";var e_=require("joi"),bY=te(),{validateSchemaExists:wY,validateTableExists:CY,validateSchemaName:yY}=Wt(),LY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(wY).custom(yY).required(),table:e_.string().custom(CY).required()});function UY(e){return bY.validateBySchema(e,LY)}a(UY,"purgeStreamValidator");UN.exports=UY});var rd=f((N5,DN)=>{"use strict";var{handleHDBError:MY,hdb_errors:DY}=y(),{HTTP_STATUS_CODES:PY}=DY,BY=MN(),vY=ve(),HY=Ar();DN.exports=qY;async function qY(e){let t=BY(e);if(t)throw MY(t,t.message,PY.BAD_REQUEST,void 0,void 0,!0);HY.checkClusteringEnabled();let{schema:r,table:s}=e;return await vY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(qY,"purgeStream")});var id=f((I5,GN)=>{"use strict";var nd=Ar(),GY=ve(),vN=v(),t_=m(),Us=ue(),FY=b(),sd=I(),{RemotePayloadObject:xY}=ki(),{ErrorCode:PN}=require("nats"),BN=vN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),HN=vN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);GN.exports={clusterStatus:VY,buildNodeStatus:qN};async function VY(){let e={node_name:HN,is_enabled:BN,connections:[]};if(!BN)return e;let t=await nd.getAllNodeRecords();if(FY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(qN(t[s],e.connections));return await Promise.allSettled(r),e}a(VY,"clusterStatus");async function qN(e,t){let r=e.name,s=new xY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,HN,void 0,await nd.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await GY.request(Us.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Us.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Us.CLUSTER_STATUS_STATUSES.CLOSED,sd.error(`Error getting node status from ${r} `,n))}catch(_){sd.warn(`Error getting node status from ${r}`,_),_.code===PN.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===PN.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new kY(r,o,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!==t_.PRE_4_0_0_VERSION&&await nd.upsertNodeRecord(_)}catch(_){sd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(qN,"buildNodeStatus");function kY(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(kY,"NodeStatusObject")});var od=f((w5,FN)=>{"use strict";var{handleHDBError:$Y,hdb_errors:YY}=y(),{HTTP_STATUS_CODES:KY}=YY,WY=ve(),QY=Ar(),ad=b(),r_=require("joi"),JY=te(),XY=2e3,ZY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});FN.exports=zY;async function zY(e){QY.checkClusteringEnabled();let t=JY.validateBySchema(e,ZY);if(t)throw $Y(t,t.message,KY.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ad.autoCastBoolean(s),o=n===void 0||ad.autoCastBoolean(n),c={nodes:[]},_=await WY.getServerList(r??XY),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,h=_[l].data;if(d.name.endsWith("-hub")){let T={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(T.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(T.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:ad.autoCast(R.split(":")[1])})):[]),c.nodes.push(T)}}return c}a(zY,"clusterNetwork")});var $N=f((y5,kN)=>{"use strict";var cd=require("joi"),xN=te(),{route_constraints:VN}=Cu();kN.exports={setRoutesValidator:jY,deleteRoutesValidator:eK};function jY(e){let t=cd.object({server:cd.valid("hub","leaf").required(),routes:VN.required()});return xN.validateBySchema(e,t)}a(jY,"setRoutesValidator");function eK(e){let t=cd.object({routes:VN.required()});return xN.validateBySchema(e,t)}a(eK,"deleteRoutesValidator")});var ud=f((U5,QN)=>{"use strict";var Ms=lr(),_d=b(),s_=m(),YN=$N(),{handleHDBError:KN,hdb_errors:tK}=y(),{HTTP_STATUS_CODES:WN}=tK,rK="cluster routes successfully set",sK="cluster routes successfully deleted";QN.exports={setRoutes:nK,getRoutes:iK,deleteRoutes:aK};function nK(e){let t=YN.setRoutesValidator(e);if(t)throw KN(t,t.message,WN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=_d.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),o.push(u))}return e.server==="hub"?Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:rK,set:o,skipped:i}}a(nK,"setRoutes");function iK(){let e=Ms.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(iK,"getRoutes");function aK(e){let t=YN.deleteRoutesValidator(e);if(t)throw KN(t,t.message,WN.BAD_REQUEST,void 0,void 0,!0);let r=Ms.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,T=s.length;h<T;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let T=0,R=n.length;T<R;T++){let g=n[T];if(E.host===g.host&&E.port===g.port){n.splice(T,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=_d.isEmptyOrZeroLength(s)?null:s,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=_d.isEmptyOrZeroLength(n)?null:n,Ms.updateConfigValue(s_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:sK,deleted:i,skipped:o}}a(aK,"deleteRoutes")});var XN=f((D5,JN)=>{"use strict";var Ji=require("alasql"),Ds=require("recursive-iterator"),Ft=I(),oK=b(),Xi=m(),n_=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,_K(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Xi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Xi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Xi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=cK(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Xi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Ji.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(n_,"sql_statement_bucket");function cK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(cK,"filterReadRestrictedAttrs");function _K(e,t,r,s,n){uK(e,t,r,s,n)}a(_K,"interpretAST");function Zi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Zi,"addSchemaTableToMap");function uK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?hK(e,t,r):e instanceof Ji.yy.Select?lK(e,t,r,s,n):e instanceof Ji.yy.Update?EK(e,t,r):e instanceof Ji.yy.Delete?dK(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(uK,"getRecordAttributesAST");function lK(e,t,r,s,n){if(!e){Ft.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(oK.isEmptyOrZeroLength(i)){Ft.error("No schema specified");return}e.from.forEach(c=>{Zi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Zi(c.table,t,r,s,n)});let o=new Ds(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Ft.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Ds(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Ds(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Ft.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Ds(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Ft.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(lK,"getSelectAttributes");function EK(e,t,r){if(!e){Ft.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(EK,"getUpdateAttributes");function dK(e,t,r){if(!e){Ft.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ds(e.where),n=e.table.databaseid;Zi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.table.tableid,n,i.columnid,t,r)}a(dK,"getDeleteAttributes");function hK(e,t,r){if(!e){Ft.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ds(e.columns),n=e.into.databaseid;Zi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ld(e.into.tableid,n,i.columnid,t,r)}a(hK,"getInsertAttributes");function ld(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ld,"pushAttribute");JN.exports=n_});var jN=f((B5,zN)=>{var fK=require("os"),ZN=v();zN.exports={checkPermission:SK};function SK(){if(fK.userInfo().username!==ZN.get("install_user"))throw new Error(`Error: Must execute as ${ZN.get("install_user")}`)}a(SK,"checkPermission")});var dd=f((H5,nO)=>{var a_=tn(),eO=require("chalk"),er=I(),tO=jN(),rO=require("prompt"),{promisify:TK}=require("util"),i_=m(),mK=require("fs-extra"),RK=require("path"),AK=b(),pK=WE(),sO=v();sO.initSync();var gK=require("moment"),NK=TK(rO.get),OK=RK.join(sO.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);nO.exports={getFingerprint:bK,setLicense:IK,parseLicense:Ed,register:wK,getRegistrationInfo:yK};async function IK(e){if(e&&e.key&&e.company){try{er.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Ed(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw er.error(r),er.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(IK,"setLicense");async function bK(){try{tO.checkPermission()}catch(t){throw er.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await a_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw er.error(r),er.error(t),new Error(r)}return e}a(bK,"getFingerprint");async function Ed(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=a_.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{er.info("writing license to disk"),await mK.writeFile(OK,JSON.stringify({license_key:e,company:t}))}catch(s){throw er.error("Failed to write License"),s}return"Registration successful."}a(Ed,"parseLicense");async function wK(){let e=await CK();return Ed(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wK,"register");async function CK(){try{tO.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:eO.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:eO.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rO.start()}catch(s){er.error(s)}let r;try{r=await NK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(CK,"promptForRegistration");async function yK(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await a_.getLicense()}catch(r){throw er.error(`There was an error when searching licenses due to: ${r.message}`),r}if(AK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=pK.version(),e.storage_type=i_.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=gK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(yK,"getRegistrationInfo")});var aO=f((G5,iO)=>{"use strict";var LK=ue(),o_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,T){this.port=t,o===null&&(o=void 0),this.server_name=r+LK.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:_}},this.accounts={SYS:{users:h},HDB:{users:T}},this.system_account="SYS"}};a(o_,"HubConfigObject");iO.exports=o_});var _O=f((x5,cO)=>{"use strict";var oO=ue(),c_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+oO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+oO.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:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(c_,"LeafConfigObject");cO.exports=c_});var lO=f((k5,uO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");uO.exports=__});var dO=f((Y5,EO)=>{"use strict";var UK=ue(),u_=class{constructor(t,r){this.user=t+UK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");EO.exports=u_});var Sd=f((W5,SO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),MK=aO(),DK=_O(),PK=lO(),BK=dO(),hd=Sr(),wn=b(),ze=lr(),d_=m(),l_=ue(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=v(),hO=Vr(),fd=ve(),ji="clustering",vK=1e4,fO=5;SO.exports={generateNatsConfig:HK,removeNatsConfig:qK};async function HK(e=!1,t=void 0){f_.initSync();let r=f_.get(de.ROOTPATH),s=zi.join(r,ji,l_.PID_FILES.HUB),n=zi.join(r,ji,l_.PID_FILES.LEAF),i=ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=zi.join(r,ji,l_.NATS_CONFIG_FILES.HUB_SERVER),c=zi.join(r,ji,l_.NATS_CONFIG_FILES.LEAF_SERVER),_=ze.getConfigFromFile(de.CLUSTERING_TLS_CERTIFICATE),u=ze.getConfigFromFile(de.CLUSTERING_TLS_PRIVATEKEY),l=ze.getConfigFromFile(de.CLUSTERING_TLS_CERT_AUTH),E=ze.getConfigFromFile(de.CLUSTERING_TLS_INSECURE),d=ze.getConfigFromFile(de.CLUSTERING_TLS_VERIFY),h=ze.getConfigFromFile(de.CLUSTERING_NODENAME),T=ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fd.checkNATSServerInstalled()||S_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await hd.listUsers(),g=ze.getConfigFromFile(de.CLUSTERING_USER),H=await hd.getClusterUser();(wn.isEmpty(H)||H.active!==!0)&&S_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await E_(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await E_(de.CLUSTERING_HUBSERVER_NETWORK_PORT),await E_(de.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[os,Cr]of R.entries())Cr.role.role===d_.ROLE_TYPES_ENUM.CLUSTER_USER&&Cr.active&&(x.push(new BK(Cr.username,hO.decrypt(Cr.hash))),q.push(new PK(Cr.username,hO.decrypt(Cr.hash))));let ye=[],{hub_routes:U}=ze.getClusteringRoutes();if(!wn.isEmptyOrZeroLength(U))for(let os of U)ye.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${os.host}:${os.port}`);let $=new MK(ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,T,ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NAME),ze.getConfigFromFile(de.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),ye,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=wn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await h_.writeJson(o,$),ea.trace(`Hub server config written to ${o}`));let _e=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,ae=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,Hn=new DK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[_e],[ae],x,q,_,u,l,E);l==null&&delete Hn.tls.ca_file,(t===void 0||t===d_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await h_.writeJson(c,Hn),ea.trace(`Leaf server config written to ${c}`))}a(HK,"generateNatsConfig");async function E_(e){let t=f_.get(e);return wn.isEmpty(t)&&S_(`port undefined for '${e}'`),await wn.isPortTaken(t)&&S_(`'${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}a(E_,"isPortAvailable");function S_(e){let t=`Error generating clustering config: ${e}`;ea.error(t),console.error(t),process.exit(1)}a(S_,"generateNatsConfigError");async function qK(e){let{port:t,config_file:r}=fd.getServerConfig(e),{username:s,decrypt_hash:n}=await hd.getClusterUser(),i=0,o=500;for(;i<fO;){try{let u=await fd.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ea.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=fO)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 wn.async_set_timeout(o*i)}let c="0".repeat(vK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(qK,"removeNatsConfig")});var gO=f((J5,pO)=>{"use strict";var ht=v(),GK=tn(),F=m(),ta=ue(),pr=require("path"),{PACKAGE_ROOT:T_}=m(),TO=v(),Cn="/dev/null",FK=pr.join(T_,"launchServiceScripts"),mO=pr.join(T_,"utility/scripts"),xK=pr.join(mO,F.HDB_RESTART_SCRIPT),RO=pr.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function AO(){let t=GK.licenseSearch().ram_allocation||F.RAM_ALLOCATION_ENUM.DEFAULT,r=F.MEM_SETTING_KEY+t;return{name:F.PROCESS_DESCRIPTORS.HDB,script:F.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:T_}}a(AO,"generateMainServerConfig");var VK=9930;function kK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.HUB_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=TO.get(F.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==VK?"-"+s:""),script:RO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(kK,"generateNatsHubServerConfig");var $K=9940;function YK(){ht.initSync(!0);let e=ht.get(F.CONFIG_PARAMS.ROOTPATH),t=pr.join(e,"clustering",ta.NATS_CONFIG_FILES.LEAF_SERVER),r=pr.join(ht.get(F.HDB_SETTINGS_NAMES.LOG_PATH_KEY),F.LOG_NAMES.HDB),s=TO.get(F.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ta.LOG_LEVEL_FLAGS[ht.get(F.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==$K?"-"+s:""),script:RO,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Cn,i.error_file=Cn),i}a(YK,"generateNatsLeafServerConfig");function KK(){ht.initSync();let e=pr.join(ht.get(F.CONFIG_PARAMS.LOGGING_ROOT),F.LOG_NAMES.HDB),t={name:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:F.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:FK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(KK,"generateClusteringUpgradeV4ServiceConfig");function WK(){return{...{name:F.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[F.PROCESS_NAME_ENV_PROP]:F.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:mO},script:xK}}a(WK,"generateRestart");function QK(){return{apps:[AO()]}}a(QK,"generateAllServiceConfigs");pO.exports={generateAllServiceConfigs:QK,generateMainServerConfig:AO,generateRestart:WK,generateNatsHubServerConfig:kK,generateNatsLeafServerConfig:YK,generateClusteringUpgradeV4ServiceConfig:KK}});var HO=f((sj,vO)=>{"use strict";var Y=m(),OO=b(),ra=Sd(),m_=ve(),tr=ue(),K=require("pm2"),ts=gO(),R_=v(),gr=I(),JK=Ar(),{startWorker:Td,onMessageFromWorkers:XK}=rn(),Z5=bn(),ZK=require("util"),IO=require("child_process"),{execFile:zK}=IO,z5=ZK.promisify(IO.exec),j5=require("systeminformation");vO.exports={enterPM2Mode:jK,start:Ps,stop:md,reload:bO,restart:wO,list:Rd,describe:Ad,connect:Nr,kill:nW,startAllServices:iW,startService:pd,getUniqueServicesList:yO,restartAllServices:aW,isServiceRegistered:LO,reloadStopStart:UO,restartHdb:CO,deleteProcess:rW,startClusteringProcesses:PO,startClusteringThreads:BO,isHdbRestartRunning:sW,isClusteringRunning:cW,stopClustering:oW,reloadClustering:_W};var{PACKAGE_ROOT:ej}=m(),tj=m(),{loggerWithTag:rj}=gr,sa=!1;XK(e=>{e.type==="restart"&&R_.initSync(!0)});function jK(){sa=!0}a(jK,"enterPM2Mode");function Nr(){return new Promise((e,t)=>{K.connect((r,s)=>{gr.setupConsoleLogging(),r&&t(r),e(s)})})}a(Nr,"connect");var je,eW=10,NO;function Ps(e){if(sa)return tW(e);let t=zK(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=je.indexOf(t);i>-1&&je.splice(i,1),!NO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<eW&&Ps(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=R_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=tr.LOG_LEVELS[E]}if(tr.LOG_LEVEL_HIERARCHY[i]>=tr.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===tr.LOG_LEVELS.ERR||u===tr.LOG_LEVELS.WRN?gr.OUTPUTS.STDERR:gr.OUTPUTS.STDOUT;gr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!je){je=[];let n=a(()=>{NO=!0,je&&(je.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)}je.push(t)}a(Ps,"start");function tW(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(tW,"startWithPM2");function md(e){if(!sa){for(let t of je||[])t.name===e&&(je.splice(je.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.stop(e,async(s,n)=>{s&&(K.disconnect(),r(s)),K.delete(e,(i,o)=>{i&&(K.disconnect(),r(s)),K.disconnect(),t(o)})})})}a(md,"stop");function bO(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(bO,"reload");function wO(e){if(!sa)for(let t of je||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(wO,"restart");function rW(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(rW,"deleteProcess");async function CO(){await Ps(ts.generateRestart())}a(CO,"restartHdb");async function sW(){let e=await Rd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(sW,"isHdbRestartRunning");function Rd(){return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Rd,"list");function Ad(e){return new Promise(async(t,r)=>{try{await Nr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Ad,"describe");function nW(){if(!sa){for(let e of je||[])e.kill();je=[];return}return new Promise(async(e,t)=>{try{await Nr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(nW,"kill");async function iW(){try{await PO(),await BO(),await Ps(ts.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(iW,"startAllServices");async function pd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ts.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ts.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ts.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ts.generateNatsHubServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ts.generateNatsLeafServerConfig(),await Ps(t),await ra.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ts.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ps(t)}catch(t){throw K.disconnect(),t}}a(pd,"startService");async function yO(){try{let e=await Rd(),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 K.disconnect(),e}}a(yO,"getUniqueServicesList");async function aW(e=[]){try{let t=!1,r=await yO();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Y.PROCESS_DESCRIPTORS.HDB?t=!0:await wO(o))}t&&await UO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(aW,"restartAllServices");async function LO(e){return je?.find(t=>t.name===e)?!0:!OO.isEmptyOrZeroLength(await Ad(e))}a(LO,"isServiceRegistered");async function UO(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?R_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):R_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ad(e),s=OO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await md(e),await pd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await CO():await bO(e)}a(UO,"reloadStopStart");var MO,DO;async function PO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await pd(t)}}a(PO,"startClusteringProcesses");async function BO(){MO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),DO=Td(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await m_.createWorkQueueStream(tr.WORK_QUEUE_CONSUMER_NAMES),await m_.updateLocalStreams();let e=await JK.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){gr.info("Starting clustering upgrade 4.0.0 process"),Td(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(BO,"startClusteringThreads");async function oW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await MO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await DO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await md(t)}}a(oW,"stopClustering");async function cW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await LO(t)===!1)return!1}return!0}a(cW,"isClusteringRunning");async function _W(){await ra.generateNatsConfig(!0),await m_.reloadNATSHub(),await m_.reloadNATSLeaf(),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ra.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_W,"reloadClustering")});var Cd=f((ij,kO)=>{"use strict";var uW=require("minimist"),{isMainThread:Od,parentPort:FO}=require("worker_threads"),se=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=se,rr=I(),Id=b(),A_=Sd(),yn=ve(),gd=ue(),xO=lr(),sr=HO(),qO=bn(),lW=hu(),{restartWorkers:p_,onMessageFromWorkers:EW}=rn(),{handleHDBError:dW,hdb_errors:hW}=y(),{HTTP_STATUS_CODES:fW}=hW,g_=v();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${se.RESTART_TIMEOUT_MS/1e3} seconds.`,SW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",GO="Clustering is not enabled so cannot be restarted",TW="Invalid service",Bs,xt;kO.exports={restart:VO,restartService:bd};Od&&EW(e=>{e.type===se.ITC_EVENT_TYPES.RESTART&&(e.workerType?bd({service:e.workerType}):VO({operation:"restart"}))});async function VO(e){xt=Object.keys(e).length===0,Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR);let t=uW(process.argv);if(t.service){await bd(t);return}if(xt&&!Bs){console.error(SW);return}if(xt&&console.log(ia),Bs){sr.enterPM2Mode(),rr.notify(ia);let r=lW(Object.keys(se.CONFIG_PARAM_MAP),!0);return Id.isEmptyOrZeroLength(Object.keys(r))||xO.updateConfigValue(void 0,void 0,r,!0,!0),RW(),ia}return Od?(rr.notify(ia),await wd(),setTimeout(()=>{p_()},50)):FO.postMessage({type:se.ITC_EVENT_TYPES.RESTART}),ia}a(VO,"restart");async function bd(e){let{service:t}=e;if(se.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw dW(new Error,TW,fW.BAD_REQUEST,void 0,void 0,!0);if(Bs=await sr.isServiceRegistered(se.HDB_PROC_DESCRIPTOR),!Od)return FO.postMessage({type:se.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await wd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=GO;break}xt&&console.log("Restarting clustering_config"),rr.notify("Restarting clustering_config"),await sr.reloadClustering();break;case"custom_functions":case"custom functions":case na.harperdb:case na.http_workers:if(xt&&!Bs){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}xt&&console.log("Restarting http_workers"),rr.notify("Restarting http_workers"),Bs?await sr.restart(se.HDB_PROC_DESCRIPTOR):setTimeout(()=>{p_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(rr.error(r),xt&&console.error(r),r):`Restarting ${t}`}a(bd,"restartService");async function mW(){await yn.publishToStream(`${gd.SUBJECT_PREFIXES.TXN}.${gd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,gd.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(mW,"postDummyNatsMsg");async function RW(){await wd(),await sr.restart(se.HDB_PROC_DESCRIPTOR),await Id.async_set_timeout(2e3),g_.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Nd(),xt&&(await yn.closeConnection(),process.exit(0))}a(RW,"restartPM2Mode");async function wd(){if(!xO.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await qO.getHDBProcessInfo()).clustering.length===0)rr.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await sr.startClusteringProcesses(),await sr.startClusteringThreads(),await Nd(),xt&&await yn.closeConnection();else{await mW(),await A_.generateNatsConfig(!0),Bs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await qO.getHDBProcessInfo()).clustering.forEach(n=>{rr.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Id.async_set_timeout(3e3),await Nd(),await yn.updateLocalStreams(),xt&&await yn.closeConnection(),rr.trace("Restart clustering restarting ingest and reply service threads");let t=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(se.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(wd,"restartClustering");async function Nd(){await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Nd,"removeNatsConfig")});var eI=f((cj,jO)=>{"use strict";var oj=require("lodash"),qe=m(),{handleHDBError:$O,hdb_errors:AW}=y(),{HDB_ERROR_MSGS:pW,HTTP_STATUS_CODES:gW}=AW,yd=I();jO.exports={getRolePermissions:OW};var vs=Object.create(null),NW=a(e=>({key:e,perms:{}}),"perms_template_obj"),QO=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),JO=a((e=!1,t=!1,r=!1,s=!1)=>({[qe.PERMS_CRUD_ENUM.READ]:e,[qe.PERMS_CRUD_ENUM.INSERT]:t,[qe.PERMS_CRUD_ENUM.UPDATE]:r,[qe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Ld=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...JO(t,r,s,n)}),"table_perms_template"),YO=a((e,t=JO())=>({attribute_name:e,describe:zO(t),[aa]:t[aa],[Ud]:t[Ud],[Md]:t[Md]}),"attr_perms_template"),KO=a((e,t=!1)=>({attribute_name:e,describe:t,[aa]:t}),"timestamp_attr_perms_template"),{READ:aa,INSERT:Ud,UPDATE:Md}=qe.PERMS_CRUD_ENUM,XO=Object.values(qe.PERMS_CRUD_ENUM),ZO=[aa,Ud,Md];function OW(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[qe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vs[t]&&vs[t].key===s)return vs[t].perms;let n=IW(e,r);return vs[t]?vs[t].key=s:vs[t]=NW(s),vs[t].perms=n,n}catch(r){if(!e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw yd.error(s),yd.debug(r),$O(new Error,pW.OUTDATED_PERMS_TRANSLATION_ERROR,gW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw yd.error(s),$O(new Error)}}}a(OW,"getRolePermissions");function IW(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[qe.SYSTEM_SCHEMA_NAME]=s[qe.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=bW(t[i]);return}r[i]=QO(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=wW(c,_);r[i].describe||XO.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Ld()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Ld()})}),r}a(IW,"translateRolePermissions");function bW(e){let t=QO(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Ld(!0,!0,!0,!0,!0)}),t}a(bW,"createStructureUserPermissions");function wW(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return qe.TIME_STAMP_NAMES.includes(E)&&(d=KO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=YO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=zO(l),n.attribute_permissions.push(l),c||CW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=KO(u):l=YO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=WO(n),n}else return e.describe=WO(e),e}a(wW,"getTableAttrPerms");function WO(e){return XO.filter(t=>e[t]).length>0}a(WO,"getSchemaTableDescribePerm");function zO(e){return ZO.filter(t=>e[t]).length>0}a(zO,"getAttributeDescribePerm");function CW(e,t){ZO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(CW,"checkForHashPerms")});var oI=f((uj,aI)=>{"use strict";var he=require("joi"),tI=require("fs-extra"),rI=require("path"),Ln=te(),sI=v(),nI=m(),iI=I(),{hdb_errors:yW}=y(),{HDB_ERROR_MSGS:et}=yW,rs=/^[a-zA-Z0-9-_]+$/;aI.exports={getDropCustomFunctionValidator:UW,setCustomFunctionValidator:MW,addCustomFunctionProjectValidator:DW,dropCustomFunctionProjectValidator:PW,packageCustomFunctionProjectValidator:BW,deployCustomFunctionProjectValidator:vW};function oa(e,t,r){try{let s=sI.get(nI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=rI.join(s,t);return tI.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return iI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function LW(e,t,r,s){try{let n=sI.get(nI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=rI.join(n,e,t,r+".js");return tI.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return iI.error(n),s.message(et.VALIDATION_ERR)}}a(LW,"checkFileExists");function UW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).custom(LW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(UW,"getDropCustomFunctionValidator");function MW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return Ln.validateBySchema(e,t)}a(MW,"setCustomFunctionValidator");function DW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!1)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(DW,"addCustomFunctionProjectValidator");function PW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(PW,"dropCustomFunctionProjectValidator");function BW(e){let t=he.object({project:he.string().pattern(rs).custom(oa.bind(null,!0)).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Ln.validateBySchema(e,t)}a(BW,"packageCustomFunctionProjectValidator");function vW(e){let t=he.object({project:he.string().pattern(rs).required().messages({"string.pattern.base":et.BAD_PROJECT_NAME}),payload:he.string().required().messages({"string.pattern.base":et.BAD_PACKAGE})});return Ln.validateBySchema(e,t)}a(vW,"deployCustomFunctionProjectValidator")});var Hd=f((Ej,uI)=>{"use strict";var be=require("fs-extra"),Dd=require("fast-glob"),ee=require("path"),cI=require("tar-fs"),_I=require("uuid").v4,Pd=require("normalize-path"),Hs=oI(),ge=I(),ft=m(),St=v(),{PACKAGE_ROOT:HW}=m(),{handleHDBError:Ge,hdb_errors:qW}=y(),{HDB_ERROR_MSGS:ss,HTTP_STATUS_CODES:Fe}=qW,GW=ee.join(HW,"custom_function_template"),Bd=ee.join(St.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vd(){let e=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,ss.NOT_ENABLED,Fe.BAD_REQUEST,void 0,void 0,!0)}a(vd,"isCFEnabled");function FW(){ge.trace("getting custom api status");let e={};try{e={is_enabled:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,ss.FUNCTION_STATUS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,t)}return e}a(FW,"customFunctionsStatus");function xW(){ge.trace("getting custom api endpoints");let e={},t=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Dd.sync(Pd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Dd.sync(Pd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Dd.sync(Pd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,ss.GET_FUNCTIONS,Fe.INTERNAL_SERVER_ERROR,ge.ERR,r)}return e}a(xW,"getCustomFunctions");function VW(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("getting custom api endpoint file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ee.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,ss.GET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(VW,"getCustomFunction");function kW(e){vd(),e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("setting custom function file content");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(ee.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,ss.SET_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,c)}}a(kW,"setCustomFunction");function $W(e){e.project&&(e.project=ee.parse(e.project).name),e.file&&(e.file=ee.parse(e.file).name);let t=Hs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function file");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(ee.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,ss.DROP_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,o)}}a($W,"dropCustomFunction");function YW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("adding custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(GW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,ss.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(YW,"addCustomFunctionProject");function KW(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("dropping custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ee.join(r,s);return be.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,ss.DROP_FUNCTION_PROJECT,Fe.INTERNAL_SERVER_ERROR,ge.ERR,n)}}a(KW,"dropCustomFunctionProject");async function WW(e){e.project&&(e.project=ee.parse(e.project).name);let t=Hs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("packaging custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ee.join(r,s),i=_I();if(!be.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw ge.error(l),l}be.ensureDirSync(Bd);let c=ee.join(Bd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ee.join(n,"node_modules"))}),cI.pack(n,_).pipe(be.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=be.readFileSync(c,{encoding:"base64"});return be.unlinkSync(c),{project:s,payload:u,file:c}}a(WW,"packageCustomFunctionProject");async function QW(e){vd(),e.project&&(e.project=ee.parse(e.project).name);let t=Hs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,Fe.BAD_REQUEST);ge.trace("deploying custom function project");let r=St.get(ft.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=ee.join(r,s);await be.ensureDir(i);let o,c;do o=ee.join(Bd,_I()+".tar"),c=await be.pathExists(o);while(c);await be.outputFile(o,n,{encoding:"base64"});let _=be.createReadStream(o);return _.pipe(cI.extract(i)),await new Promise(u=>_.on("end",u)),await be.unlink(o),`Successfully deployed project: ${s}`}a(QW,"deployCustomFunctionProject");uI.exports={customFunctionsStatus:FW,getCustomFunctions:xW,getCustomFunction:VW,setCustomFunction:kW,dropCustomFunction:$W,addCustomFunctionProject:YW,dropCustomFunctionProject:KW,packageCustomFunctionProject:WW,deployCustomFunctionProject:QW}});var qd=f((hj,EI)=>{"use strict";var nr=require("joi"),lI=te();EI.exports={readTransactionLogValidator:JW,deleteTransactionLogsBeforeValidator:XW};function JW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),from:nr.date().timestamp(),to:nr.date().timestamp(),limit:nr.number().min(1)});return lI.validateBySchema(e,t)}a(JW,"readTransactionLogValidator");function XW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return lI.validateBySchema(e,t)}a(XW,"deleteTransactionLogsBeforeValidator")});var O_=f((Sj,TI)=>{"use strict";var Gd=m(),N_=ve(),dI=b(),hI=v(),fI=Vr(),{handleHDBError:Un,hdb_errors:ZW}=y(),{HTTP_STATUS_CODES:Mn}=ZW,{readTransactionLogValidator:zW,deleteTransactionLogsBeforeValidator:jW}=qd(),SI="This operation relies on clustering and cannot run with it disable.",eQ="Logs successfully deleted from transaction log.",tQ="All logs successfully deleted from transaction log.";TI.exports={readTransactionLog:rQ,deleteTransactionLogsBefore:sQ};async function*rQ(e){let t=zW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!hI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,SI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=dI.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=fI.createNatsTableStreamName(r,s),o=await N_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let _=Math.floor(c?.nats_timestamp/1e6);if(e.to&&_>e.to)break;let u={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:_,records:c?.entry?.records};c?.entry?.operation===Gd.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(rQ,"readTransactionLog");async function sQ(e){let t=jW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!hI.get(Gd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,SI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=dI.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=fI.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),_=await N_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=eQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=tQ):E=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(sQ,"deleteTransactionLogsBefore")});var xd=f((mj,wI)=>{"use strict";var I_=require("joi"),b_=require("path"),mI=require("fs-extra"),{exec:nQ}=require("child_process"),iQ=require("util"),RI=iQ.promisify(nQ),aQ=m(),{handleHDBError:Dn,hdb_errors:oQ}=y(),{HTTP_STATUS_CODES:Pn}=oQ,AI=v(),cQ=te(),w_=I();AI.initSync();var Fd=AI.get(aQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),pI="npm install --omit=dev --json",_Q=`${pI} --dry-run`;wI.exports={installModules:uQ,auditModules:lQ};async function gI(e,t=void 0){let{stdout:r,stderr:s}=await RI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(gI,"runCommand");async function uQ(e){w_.info(`starting installModules for request: ${e}`);let t=bI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?_Q:pI;await OI(),await II(r);let i={};for(let o=0,c=r.length;o<c;o++){let _=r[o];i[_]={npm_output:null,npm_error:null};let u=b_.join(Fd,_),l,E=null;try{let{stdout:d,stderr:h}=await RI(n,{cwd:u});l=d?d.replace(`
|
|
11
11
|
`,""):null,E=h?h.replace(`
|
|
12
|
-
`,""):null}catch(d){d.stderr?i[_].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(pI,"parseNPMStdErr");async function cQ(e){w_.info(`starting auditModules for request: ${e}`);let t=OI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await gI(),await NI(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=b_.join(Gd,o);s[o]={npm_output:null,npm_error:null};try{let _=await AI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=pI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(cQ,"auditModules");async function gI(){try{return await AI("npm -v"),!0}catch{throw Dn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Pn.BAD_REQUEST,void 0,void 0,!0)}}a(gI,"checkNPMInstalled");async function NI(e){if(!Array.isArray(e)||e.length===0)throw Dn(new Error,"projects argument must be an array with at least 1 element",Pn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=b_.join(Gd,i.toString());if(!await SI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await SI.pathExists(_)||r.push(i)}if(t.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Pn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Pn.BAD_REQUEST,void 0,void 0,!0)}a(NI,"checkProjectPaths");function OI(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return iQ.validateBySchema(e,t)}a(OI,"modulesValidator")});var wI=f((Tj,bI)=>{"use strict";var C_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(C_,"PermissionTableResponseObject");bI.exports=C_});var yI=f((Rj,CI)=>{"use strict";var y_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(y_,"PermissionAttributeResponseObject");CI.exports=y_});var xd=f((pj,UI)=>{"use strict";var LI=wI(),_Q=yI(),{HDB_ERROR_MSGS:uQ}=it(),L_=class{constructor(){this.error=uQ.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new LI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new _Q(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new LI(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(L_,"PermissionResponseObject");UI.exports=L_});var P_=f((Nj,KI)=>{"use strict";var Vd=Ot(),U_=It(),Ct=Nc(),ua=ms(),kd=Ss(),lQ=TE(),la=Sr(),M_=bE(),me=I(),EQ=yE(),dQ=Qc(),hQ=jE(),fQ=zc(),SQ=ed(),TQ=td(),mQ=nd(),RQ=ad(),$d=_d(),Or=b(),AQ=QN(),Yd=Ed(),PI=wd(),wt=m(),BI=zO(),pQ=bn(),vI=vc(),HI=lr(),Ir=vd(),gQ=require("alasql"),qI=O_(),GI=Fd(),FI=xd(),{handleHDBError:tt,hdb_errors:xI}=y(),{HDB_ERROR_MSGS:we,HTTP_STATUS_CODES:ca}=xI,p=new Map,VI="delete",ss="insert",ns="read",qs="update",_a="describe",MI=ua.describeSchema.name,DI=ua.describeTable.name,kI={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},NQ="catchup",OQ="handleGetJob",IQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},bQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],$I={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},N=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(N,"permission");p.set(Vd.insert.name,new N(!1,[ss]));p.set(Vd.update.name,new N(!1,[qs]));p.set(Vd.upsert.name,new N(!1,[ss,qs]));p.set(U_.searchByConditions.name,new N(!1,[ns]));p.set(U_.searchByHash.name,new N(!1,[ns]));p.set(U_.searchByValue.name,new N(!1,[ns]));p.set(U_.search.name,new N(!1,[ns]));p.set(Ct.createSchema.name,new N(!0,[]));p.set(Ct.createTable.name,new N(!0,[]));p.set(Ct.createAttribute.name,new N(!1,[ss]));p.set(Ct.dropSchema.name,new N(!0,[]));p.set(Ct.dropTable.name,new N(!0,[]));p.set(Ct.dropAttribute.name,new N(!0,[]));p.set(ua.describeSchema.name,new N(!1,[ns]));p.set(ua.describeTable.name,new N(!1,[ns]));p.set(kd.deleteRecord.name,new N(!1,[VI]));p.set(la.addUser.name,new N(!0,[]));p.set(la.alterUser.name,new N(!0,[]));p.set(la.dropUser.name,new N(!0,[]));p.set(la.listUsersExternal.name,new N(!0,[]));p.set(M_.listRoles.name,new N(!0,[]));p.set(M_.addRole.name,new N(!0,[]));p.set(M_.alterRole.name,new N(!0,[]));p.set(M_.dropRole.name,new N(!0,[]));p.set(EQ.name,new N(!0,[]));p.set(dQ.name,new N(!0,[]));p.set(hQ.name,new N(!0,[]));p.set(fQ.name,new N(!0,[]));p.set(SQ.name,new N(!0,[]));p.set(TQ.name,new N(!0,[]));p.set($d.setRoutes.name,new N(!0,[]));p.set($d.getRoutes.name,new N(!0,[]));p.set($d.deleteRoutes.name,new N(!0,[]));p.set(HI.setConfiguration.name,new N(!0,[]));p.set(mQ.clusterStatus.name,new N(!0,[]));p.set(RQ.name,new N(!0,[]));p.set(Yd.getFingerprint.name,new N(!0,[]));p.set(Yd.setLicense.name,new N(!0,[]));p.set(kd.deleteFilesBefore.name,new N(!0,[]));p.set(kd.deleteAuditLogsBefore.name,new N(!0,[]));p.set(PI.restart.name,new N(!0,[]));p.set(PI.restartService.name,new N(!0,[]));p.set(lQ.name,new N(!0,[]));p.set(pQ.systemInformation.name,new N(!0,[]));p.set(HI.getConfiguration.name,new N(!0,[]));p.set(qI.readTransactionLog.name,new N(!0,[]));p.set(qI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(GI.installModules.name,new N(!0,[]));p.set(GI.auditModules.name,new N(!0,[]));p.set(vI.createTokens.name,new N(!1,[]));p.set(vI.refreshOperationToken.name,new N(!1,[]));p.set(Ir.customFunctionsStatus.name,new N(!0,[]));p.set(Ir.getCustomFunctions.name,new N(!0,[]));p.set(Ir.getCustomFunction.name,new N(!0,[]));p.set(Ir.setCustomFunction.name,new N(!0,[]));p.set(Ir.dropCustomFunction.name,new N(!0,[]));p.set(Ir.addCustomFunctionProject.name,new N(!0,[]));p.set(Ir.dropCustomFunctionProject.name,new N(!0,[]));p.set(Ir.packageCustomFunctionProject.name,new N(!0,[]));p.set(Ir.deployCustomFunctionProject.name,new N(!0,[]));p.set(Yd.getRegistrationInfo.name,new N(!1,[]));p.set(la.userInfo.name,new N(!1,[]));p.set(ua.describeAll.name,new N(!1,[]));p.set(OQ,new N(!1,[]));p.set(IQ,new N(!0,[]));p.set(NQ,new N(!0,[]));p.set(D_.CSV_DATA_LOAD,new N(!1,[ss,qs]));p.set(D_.CSV_URL_LOAD,new N(!1,[ss,qs]));p.set(D_.CSV_FILE_LOAD,new N(!1,[ss,qs]));p.set(D_.IMPORT_FROM_S3,new N(!1,[ss,qs]));p.set($I.EXPORT_TO_S3,new N(!0,[]));p.set($I.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[VI]));p.set(wt.VALID_SQL_OPS_ENUM.SELECT,new N(!1,[ns]));p.set(wt.VALID_SQL_OPS_ENUM.INSERT,new N(!1,[ss]));p.set(wt.VALID_SQL_OPS_ENUM.UPDATE,new N(!1,[qs]));KI.exports={verifyPerms:CQ,verifyPermsAst:wQ,verifyBulkLoadAttributePerms:LQ};function wQ(e,t,r){if(Or.isEmptyOrZeroLength(e))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Or.isEmptyOrZeroLength(t))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Or.isEmptyOrZeroLength(r))throw me.info("verify_perms_ast has a null operation parameter"),tt(new Error);try{let s=new FI,n=new AQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw me.info("No schemas defined in verifyPermsAst(), will not continue."),tt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&kI[r])throw tt(new Error,we.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=BI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof gQ.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=YI(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let T=n.getAttributesBySchemaTableName(d,E[h]),R=Wd(t.role.permission,d,E[h]);Kd(T,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw tt(s)}}a(wQ,"verifyPermsAst");function CQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw me.info("null required parameter in verifyPerms"),tt(new Error,we.DEFAULT_INVALID_REQUEST,ca.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new FI;if(Or.isEmptyOrZeroLength(e.hdb_user.role)||Or.isEmptyOrZeroLength(e.hdb_user.role.permission))return me.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(we.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(wt.SYSTEM_SCHEMA_NAME)||n===wt.SYSTEM_SCHEMA_NAME;if(l&&kI[r])throw tt(new Error,we.DROP_SYSTEM,ca.FORBIDDEN);if(_&&!l||u===!0&&(r===Ct.createSchema.name||r===Ct.dropSchema.name))return null;if(bQ.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=BI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===MI||r===DI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(we.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===MI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(we.SCHEMA_NOT_FOUND(n));if(r===DI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(we.TABLE_NOT_FOUND(n,i))}}let d=YI(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&wt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[wt.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[wt.PERMS_CRUD_ENUM.READ]).forEach(x=>{R.push(x.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(H=>H.attribute),e.get_attributes=R)}let h=yQ(e),T=Wd(e.hdb_user.role.permission,n,i);return Kd(h,T,r,i,n,c,s),c.getPermsResponse()}a(CQ,"verifyPerms");function YI(e,t,r,s,n){if(Or.arrayHasEmptyValues([e,t,r]))throw me.info("hasPermissions has an invalid parameter"),tt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw me.info(`operation ${t} not found.`),tt(new Error,we.OP_NOT_FOUND(t),ca.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return me.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(we.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][_a]===!1){s.addInvalidItem(we.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(we.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[_a]===!1)s.addInvalidItem(we.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Or.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let T=0;T<h.length;T++){let R=h[T],g=E[R];(g==null||g===!1)&&(me.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=we.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw me.error(h),me.error(d),tt(xI.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(YI,"hasPermissions");function Kd(e,t,r,s,n,i,o){if(!e||!t)throw me.info("no attributes specified in checkAttributePerms."),tt(new Error);let c=p.get(r).perms;if(!c||c==="")throw me.info(`no permissions found for ${r} in checkAttributePerms().`),tt(new Error);if(Or.isEmptyOrZeroLength(t))return me.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[_a]===!1){i.addInvalidItem(we.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(wt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==ns)throw tt(new Error,we.SYSTEM_TIMESTAMP_PERMS_ERR,ca.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(we.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(Kd,"checkAttributePerms");function yQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===wt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){me.info(r)}return t}a(yQ,"getRecordAttributes");function Wd(e,t,r){let s=new Map;if(Or.isEmpty(e))return me.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{me.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Wd,"getAttributePermissions");function LQ(e,t,r,s,n,i,o){let c=new Set(i),_=Wd(e,s,n);Kd(c,_,t,n,s,o,r)}a(LQ,"verifyBulkLoadAttributePerms")});var v_=f((Ij,ZI)=>{"use strict";ZI.exports={evaluateSQL:YQ,processAST:XI,convertSQLToAST:JI,checkASTPermissions:QI};var WI=Ot(),Xd=require("util"),UQ=Xd.callbackify(WI.insert),MQ=It().search,DQ=qp().update,PQ=Xd.callbackify(DQ),BQ=Fp().convertDelete,is=require("alasql"),vQ=P_(),da=I(),HQ=uc(),qQ=b(),Ea=m(),{hdb_errors:GQ,handleHDBError:Qd}=y(),{HTTP_STATUS_CODES:Jd}=GQ,FQ=qi();function xQ(e,t){return Promise.all([FQ.postOperationHandler(e,t,void 0),WI.flush(e)])}a(xQ,"postWrite");var VQ=Xd.callbackify(xQ);HQ(is);var kQ=403,$Q="There was a problem performing this insert. Please check the logs and try again.",B_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(B_,"ParsedSQLObject");function YQ(e,t){let r=e.parsed_sql_object;if(!r){r=JI(e.sql);let s,n=r.ast.statements[0];if(n instanceof is.yy.Insert?s=n.into.databaseid:n instanceof is.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof is.yy.Update||n instanceof is.yy.Delete?s=n.table.databaseid:da.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof is.yy.Select)&&qQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}XI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(YQ,"evaluateSQL");function QI(e,t){let r;try{r=vQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(QI,"checkASTPermissions");function JI(e){let t=new B_;if(!e)throw Qd(new Error,"The 'sql' parameter is missing from the request body",Jd.BAD_REQUEST);try{let r=e.trim(),s=is.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?Qd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Jd.BAD_REQUEST):Qd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Jd.BAD_REQUEST)}return t}a(JI,"convertSQLToAST");function XI(e,t,r){try{let s=KQ;if(!e.bypass_auth&&!t.permissions_checked){let i=QI(e,t);if(i&&i.length>0)return r(kQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=MQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=WQ;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=PQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=BQ;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(XI,"processAST");function KQ(e,t){da.info(e),t("unknown sql statement")}a(KQ,"nullFunction");function WQ({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=QQ(i,e.values)}catch(o){return r(o)}UQ(n,(o,c)=>{if(o)return r(o);VQ(n,c,_=>{_&&da.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){da.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(WQ,"convertInsert");function QQ(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=is.compile(`SELECT ${n.toString()} AS [${Ea.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw da.error(r),new Error($Q)}}a(QQ,"createDataObjects")});var eh=f((wj,rb)=>{var V_=require("clone"),k_=te(),JQ=b(),F_=m(),XQ=I(),H_=require("fs"),Zd=require("joi"),{string:x_}=Zd.types(),{hdb_errors:ZQ,handleHDBError:ha}=y(),{HDB_ERROR_MSGS:zQ,HTTP_STATUS_CODES:q_}=ZQ,{common_validators:G_}=Wt(),zI=1e9,jI=" is required",jQ=["insert","update","upsert"],zd={schema:{presence:!0,format:G_.schema_format,length:G_.schema_length},table:{presence:!0,format:G_.schema_format,length:G_.schema_length},action:{inclusion:{within:jQ,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},e1={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:t1,AWS_SECRET:r1,AWS_BUCKET:s1,AWS_FILE_KEY:n1,REGION:i1}=F_.S3_BUCKET_AUTH_KEYS,a1={s3:{presence:!0},[`s3.${t1}`]:{presence:!0,type:"String"},[`s3.${r1}`]:{presence:!0,type:"String"},[`s3.${s1}`]:{presence:!0,type:"String"},[`s3.${n1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${i1}`]:{presence:!0,type:"String"}},eb=V_(zd);eb.data.presence={message:jI};var tb=V_(zd);tb.file_path.presence={message:jI};var o1=Object.assign(V_(zd),a1),jd=V_(e1);jd.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();jd.passthrough_headers=Zd.object();function c1(e){let t=k_.validateObject(e,eb);return $_(e,t)}a(c1,"dataObject");function _1(e){let t=k_.validateBySchema(e,Zd.object(jd));return $_(e,t)}a(_1,"urlObject");function u1(e){let t=k_.validateObject(e,tb);return $_(e,t)}a(u1,"fileObject");function l1(e){let t=k_.validateObject(e,o1);return $_(e,t)}a(l1,"s3FileObject");function $_(e,t){if(!t){let r=JQ.checkGlobalSchemaTable(e.schema,e.table);if(r)return ha(new Error,r,q_.BAD_REQUEST);if(e.operation===F_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{H_.accessSync(e.file_path,H_.constants.R_OK|H_.constants.F_OK)}catch(s){return s.code===F_.NODE_ERROR_CODES.ENOENT?ha(s,`No such file or directory ${s.path}`,q_.BAD_REQUEST):s.code===F_.NODE_ERROR_CODES.EACCES?ha(s,`Permission denied ${s.path}`,q_.BAD_REQUEST):ha(s)}try{let s=H_.statSync(e.file_path).size;if(s>zI)return ha(new Error,zQ.MAX_FILE_SIZE_ERR(s,zI),q_.BAD_REQUEST)}catch(s){XQ.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");rb.exports={dataObject:c1,urlObject:_1,fileObject:u1,s3FileObject:l1}});var th=f((yj,sb)=>{"use strict";var fa=I(),Y_=m();async function E1(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Y_.OPERATIONS_ENUM.INSERT||t.operation===Y_.OPERATIONS_ENUM.UPDATE||t.operation===Y_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Y_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(fa.info(i.message),i):i.http_resp_msg?(fa.error(`Error calling operation: ${e.name}`),fa.error(i.http_resp_msg),i):(fa.error(`Error calling operation: ${e.name}`),fa.error(i),i)}}a(E1,"callOperationFunctionAsAwait");sb.exports={callOperationFunctionAsAwait:E1}});var rh=f((Uj,ib)=>{"use strict";var{S3:d1,GetObjectCommand:h1}=require("@aws-sdk/client-s3");ib.exports={getFileStreamFromS3:f1,getS3AuthObj:nb};async function f1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nb(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new h1(r))).Body}a(f1,"getFileStreamFromS3");function nb(e,t,r){return new d1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(nb,"getS3AuthObj")});var ob=f((Dj,ab)=>{"use strict";var K_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(K_,"BulkLoadFileObject");var W_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(W_,"BulkLoadDataObject");ab.exports={BulkLoadFileObject:K_,BulkLoadDataObject:W_}});var oh=f((Bj,Ob)=>{"use strict";var Q_=Ot(),Z_=eh(),S1=require("needle"),Tt=m(),T1=ue(),Sa=b(),{handleHDBError:ne,hdb_errors:Sb}=y(),{HTTP_STATUS_CODES:Ce,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:xs}=Sb,Fs=I(),J_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),m1=require("path"),{chain:cb}=require("stream-chain"),_b=require("stream-json/streamers/StreamArray"),ub=require("stream-json/utils/Batch"),lb=require("stream-chain/utils/comp"),{finished:Eb}=require("stream"),sh=v(),Tb=th(),R1=rh(),{BulkLoadFileObject:nh,BulkLoadDataObject:A1}=ob(),ih=xd(),{verifyBulkLoadAttributePerms:mb}=P_(),p1=_E(),g1=ve(),N1=Vr(),db="No records parsed from csv file.",Gs=`${sh.get("HDB_ROOT")}/tmp`,{schema_regex:O1}=Wt(),hb=1024*1024*5,fb=5e3,I1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Ob.exports={csvDataLoad:b1,csvURLLoad:w1,csvFileLoad:C1,importFromS3:y1};async function b1(e,t){let r=Z_.dataObject(e);if(r)throw ne(r,r.message,Ce.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=J_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new ih;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&mb(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ne(new Error,o,Ce.BAD_REQUEST,void 0,void 0,!0);let c=new A1(e.action,e.schema,e.table,n.data);return s=await Tb.callOperationFunctionAsAwait(pb,c,gb.bind(null,n.meta.fields),t),s.message===db?db:Nb(s.records,s.number_written)}catch(n){throw Vs(n)}}a(b1,"csvDataLoad");async function w1(e){let t=Z_.urlObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Gs}/${r}`;try{await L1(e,r)}catch(n){throw Fs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),ne(n,xs(Re.DOWNLOAD_FILE_ERR(r)))}try{let n=new nh(this.job_operation_function.name,e.action,e.schema,e.table,s,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await ah(n);return await X_(s),i}catch(n){throw await X_(s),Vs(n)}}a(w1,"csvURLLoad");async function C1(e){let t=Z_.fileObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r=new nh(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await ah(r)}catch(s){throw Vs(s)}}a(C1,"csvFileLoad");async function y1(e){let t=Z_.s3FileObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=m1.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Gs}/${n}`;let i=new nh(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await U1(n,e);let o=await ah(i);return await X_(r),o}catch(s){throw await X_(r),Vs(s)}}a(y1,"importFromS3");async function L1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await S1("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ne(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}D1(r,e.csv_url),await M1(t,r.raw)}a(L1,"downloadCSVFile");async function U1(e,t){try{let r=`${Gs}/${e}`;await Vt.mkdirp(Gs),await Vt.writeFile(`${Gs}/${e}`,"",{flag:"a+"});let s=await Vt.createWriteStream(r),n=await R1.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Fs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Fs.error(Re.S3_DOWNLOAD_ERR+" - "+r),ne(r,xs(Re.S3_DOWNLOAD_ERR))}}a(U1,"downloadFileFromS3");async function M1(e,t){try{await Vt.mkdirp(Gs),await Vt.writeFile(`${Gs}/${e}`,t)}catch(r){throw Fs.error(Re.WRITE_TEMP_FILE_ERR),ne(r,xs(Re.DEFAULT_BULK_LOAD_ERR))}}a(M1,"writeFileToTempFolder");async function X_(e){if(e)try{await Vt.access(e),await Vt.unlink(e)}catch{Fs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(X_,"deleteTempFile");function D1(e,t){if(e.statusCode!==Sb.HTTP_STATUS_CODES.OK)throw ne(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ce.BAD_REQUEST);if(!I1[e.headers["content-type"]])throw ne(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ce.BAD_REQUEST);if(!e.raw)throw ne(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ce.BAD_REQUEST)}a(D1,"validateURLResponse");async function ah(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await P1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await B1(e);break;default:throw ne(new Error,Re.DEFAULT_BULK_LOAD_ERR,Ce.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return Nb(t.records,t.number_written)}catch(t){throw Vs(t)}}a(ah,"fileLoad");async function Rb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Q_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&mb(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ne(c);r(_)}}a(Rb,"validateChunk");async function Ab(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Sa.isEmpty(c)&&!Sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await Tb.callOperationFunctionAsAwait(pb,c,gb.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ne(c,xs(Re.INSERT_CSV_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(Ab,"insertChunk");async function P1(e){let t={records:0,number_written:0};try{let r=new ih,s=Vt.createReadStream(e.file_path,{highWaterMark:hb});s.setEncoding("utf8"),await J_.parsePromise(s,Rb.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ne(new Error,n,Ce.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:hb}),s.setEncoding("utf8"),await J_.parsePromise(s,Ab.bind(null,e,t)),s.destroy(),t}catch(r){throw ne(r,xs(Re.PAPA_PARSE_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(P1,"callPapaParse");async function B1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ih,n=cb([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),_b.withParser(),c=>c.value,new ub({batchSize:fb}),lb(async c=>{await Rb(e,s,r,c)})]);await new Promise((c,_)=>{Eb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ne(new Error,i,Ce.BAD_REQUEST);let o=cb([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),_b.withParser(),c=>c.value,new ub({batchSize:fb}),lb(async c=>{await Ab(e,t,r,c)})]);return await new Promise((c,_)=>{Eb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ne(s,xs(Re.INSERT_JSON_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(B1,"insertJson");async function pb(e){let t={};try{e.data&&e.data.length>0&&v1(e.data[0])?t=await H1(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Fs.info(t.message))}catch(r){throw Vs(r)}return t}a(pb,"callBulkFileLoad");function v1(e){let t=Object.keys(e);for(let r of t)if(!O1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(v1,"validateColumnNames");async function H1(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Q_.insert;break;case"update":i=Q_.update;break;case"upsert":i=Q_.upsert;break;default:throw ne(new Error,Re.INVALID_ACTION_PARAM_ERR(s),Ce.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=Sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Vs(o)}}a(H1,"bulkFileLoad");async function gb(e,t,r,s){try{if(t.data.length===0||!sh.get(Tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=J_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new p1(r.txn_time,i,sh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await g1.publishToStream(`${T1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,N1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){Fs.error(n)}}a(gb,"postCSVLoadFunction");function Nb(e,t){return`successfully loaded ${t} of ${e} records`}a(Nb,"buildResponseMsg");function Vs(e){return ne(e,xs(Re.DEFAULT_BULK_LOAD_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Vs,"buildTopLevelErrMsg")});var Cb=f((Hj,wb)=>{"use strict";var{Readable:q1}=require("stream"),G1=1e4;wb.exports={streamAsJSON(e){return new z_({value:e})}};var z_=class extends q1{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),Ib)}catch(n){yield Ib(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);bb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>G1?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return bb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(z_,"JSONStream");function Ib(e){return console.error(e),JSON.stringify(e.toString())}a(Ib,"handleError");function bb(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(bb,"when")});var _h=f((Gj,Hb)=>{"use strict";var Ub=It(),F1=v_(),x1=rh(),{AsyncParser:V1,Transform:k1}=require("json2csv"),ma=require("stream"),mt=b(),ch=require("fs-extra"),$1=require("path"),yt=I(),{promisify:j_}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:Y1}=y(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=Y1,{streamAsJSON:K1}=Cb(),{Upload:W1}=require("@aws-sdk/lib-storage"),yb=["search_by_value","search_by_hash","sql"],Lb=["json","csv"],Mb="json",Db="csv",Q1="Successfully exported JSON locally.",J1="Successfully exported CSV locally.",X1=1e3,Z1=j_(Ub.searchByHash),z1=j_(Ub.searchByValue),j1=j_(F1.evaluateSQL),eJ=j_(ma.finished);Hb.exports={export_to_s3:nJ,export_local:tJ,toCsvStream:Pb};async function tJ(e){yt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Bb(e);if(!mt.isEmpty(t))throw yt.error(t),fe(new Error,t,Se.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw yt.error(rt.MISSING_VALUE("path")),fe(new Error,rt.MISSING_VALUE("path"),Se.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith($1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await rJ(e.path);let n=await vb(e);return await sJ(s,e.format,n)}a(tJ,"export_local");async function rJ(e){if(yt.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw fe(new Error,`Invalid path: ${e}`,Se.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ch.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,yt.error(s),fe(new Error,s,Se.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw yt.error(r),fe(new Error,r,Se.BAD_REQUEST,void 0,void 0,!0)}return!0}a(rJ,"confirmPath");async function sJ(e,t,r){if(yt.trace("in saveToLocal"),Ta.isEmptyOrZeroLength(e))throw fe(new Error,rt.INVALID_VALUE("file_path"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmptyOrZeroLength(t))throw fe(new Error,rt.INVALID_VALUE("Source format"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmpty(r))throw fe(new Error,rt.NOT_FOUND("Data"),Se.BAD_REQUEST,void 0,void 0,!0);if(t===Mb){let s=ch.createWriteStream(e);return K1(r).pipe(s),await eJ(s),{message:Q1,path:e}}else if(t===Db){let s=ch.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new V1(i,o).fromInput(n).toOutput(s).promise(!1),{message:J1,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(sJ,"saveToLocal");async function nJ(e){if(!e.s3||Object.keys(e.s3).length===0)throw fe(new Error,rt.MISSING_VALUE("S3 object"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw fe(new Error,rt.MISSING_VALUE("aws_access_key_id"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw fe(new Error,rt.MISSING_VALUE("aws_secret_access_key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw fe(new Error,rt.MISSING_VALUE("bucket"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw fe(new Error,rt.MISSING_VALUE("key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw fe(new Error,rt.MISSING_VALUE("region"),Se.BAD_REQUEST);let t=Bb(e);if(!mt.isEmpty(t))throw fe(new Error,t,Se.BAD_REQUEST);yt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vb(e)}catch(_){throw yt.error(_),_}let s,n=await x1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===Db){i=e.s3.key+".csv";let _=Pb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Mb){i=e.s3.key+".json";let _=new ma.Readable;_.pipe(o),_.on("error",E=>{throw E}),_.push("[");let u=r.length,l="";for(let[E,d]of r.entries()){let h=E===u-1?JSON.stringify(d):JSON.stringify(d)+",";l+=h,E!==0&&E%X1===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST);return new W1({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(nJ,"export_to_s3");function Pb(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new k1(r,s);return t.pipe(n)}a(Pb,"toCsvStream");function Bb(e){if(yt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Lb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Lb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(yb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yb.join(", ")}`}a(Bb,"exportCoreValidation");async function vb(e){yt.trace("in getRecords");let t,r;if(Ta.isEmpty(e.search_operation)||Ta.isEmptyOrZeroLength(e.search_operation.operation))throw fe(new Error,rt.INVALID_VALUE("Search operation"),Se.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=z1;break;case"search_by_hash":t=Z1;break;case"sql":t=j1;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,yt.error(r),fe(new Error,r,Se.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(vb,"getRecords")});var Gb=f((xj,qb)=>{"use strict";var eu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(eu,"SqlSearchObject");qb.exports=eu});var Vb=f((kj,xb)=>{"use strict";var iJ=m(),Fb=require("moment"),aJ=require("uuid").v4,tu=class{constructor(){this.id=aJ(),this.type=void 0,this.start_datetime=Fb().valueOf(),this.created_datetime=Fb().valueOf(),this.end_datetime=void 0,this.status=iJ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(tu,"JobObject");xb.exports=tu});var su=f((Yj,Qb)=>{"use strict";var oJ=require("uuid").v4,Yb=Ot(),Kb=It(),cJ=Ht(),_J=ln(),uJ=Gb(),ie=m(),lJ=Vb(),EJ=UE(),Lt=I(),dJ=ai(),Bn=b(),{promisify:uh}=require("util"),ks=require("moment"),hJ=v_(),ru=eh(),kb=El(),{deleteTransactionLogsBeforeValidator:fJ}=Hd(),{handleHDBError:SJ,hdb_errors:TJ}=y(),{HTTP_STATUS_CODES:mJ}=TJ,$b=uh(Kb.searchByValue),RJ=uh(Kb.searchByHash),AJ=Yb.insert,pJ=uh(hJ.evaluateSQL),gJ=Yb.update;Qb.exports={addJob:IJ,updateJob:wJ,handleGetJob:NJ,handleGetJobsByStartDate:OJ,getJobById:Wb};async function NJ(e){try{let t=await Wb(e.id);return Bn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Lt.error(r),new Error(r)}}a(NJ,"handleGetJob");async function OJ(e){try{let t=await bJ(e);if(Lt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=ks(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ks(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Lt.error(r),new Error(r)}}a(OJ,"handleGetJobsByStartDate");async function IJ(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Bn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Lt.info(l),t.error=l,t}if(!ie.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ie.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ru.fileObject(e);break;case ie.OPERATIONS_ENUM.CSV_URL_LOAD:s=ru.urlObject(e);break;case ie.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ru.dataObject(e);break;case ie.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ru.s3FileObject(e);break;case ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=kb(e,"date");break;case ie.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=kb(e,"timestamp");break;case ie.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=fJ(e);break;default:break}if(s)throw SJ(s,s.message,mJ.BAD_REQUEST,void 0,void 0,!0);let n=new lJ;n.type=e.operation===ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new cJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await $b(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=oJ();try{o=await $b(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new dJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await AJ(_)}catch(l){return Lt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Lt.trace(l)}return t}a(IJ,"addJob");async function bJ(e){let t=ks(e.from_date,ks.ISO_8601),r=ks(e.to_date,ks.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new uJ(s,e.hdb_user);try{return await pJ(n)}catch(i){throw Lt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(bJ,"getJobsInDateRange");async function Wb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new _J(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await RJ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lt.error(s),Bn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Wb,"getJobById");async function wJ(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Bn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ie.JOB_STATUS_ENUM.COMPLETE||e.status===ie.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ks().valueOf());let t=new EJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await gJ(t)}catch(s){throw new Error(s)}return r}a(wJ,"updateJob")});var ew=f((Wj,jb)=>{"use strict";var Jb=b(),st=m(),CJ=require("moment"),nu=oh(),iu=I(),Xb=su(),Zb=_h(),zb=Ss(),yJ=rn(),LJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function UJ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Jb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Jb.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case st.JOB_TYPE_ENUM.csv_file_load:await br(e,nu.csvFileLoad);break;case st.JOB_TYPE_ENUM.csv_url_load:await br(e,nu.csvURLLoad);break;case st.JOB_TYPE_ENUM.csv_data_load:await br(e,nu.csvDataLoad);break;case st.JOB_TYPE_ENUM.import_from_s3:await br(e,nu.importFromS3);break;case st.JOB_TYPE_ENUM.empty_trash:break;case st.JOB_TYPE_ENUM.export_local:await br(e,Zb.export_local);break;case st.JOB_TYPE_ENUM.export_to_s3:await br(e,Zb.export_to_s3);break;case st.JOB_TYPE_ENUM.delete_files_before:case st.JOB_TYPE_ENUM.delete_records_before:await br(e,zb.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await br(e,zb.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await br(e,LJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(UJ,"parseMessage");async function br(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=CJ().valueOf(),await Xb.updateJob(e.job),await MJ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):iu.error(`There was an error running ${t.name} job with id ${e.job.id}`),iu.error(s),e.job.message=s,e.job.status=st.JOB_STATUS_ENUM.ERROR;try{await Xb.updateJob(e.job)}catch(n){throw iu.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(br,"runJob");async function MJ(e){iu.trace("launching job thread:",e),yJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(MJ,"launchJobThread");jb.exports={parseMessage:UJ,RunnerMessage:au}});var rw=f((Jj,tw)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");tw.exports=ou});var fw=f((Zj,hw)=>{"use strict";var uu=It(),hh=v_(),cu=oh(),vn=Nc(),lh=ms(),Aa=Ss(),DJ=TE(),Ra=Sr(),_u=bE(),wr=vd(),xe=I(),PJ=yE(),BJ=Qc(),vJ=jE(),HJ=zc(),qJ=ed(),GJ=td(),FJ=nd(),xJ=ad(),Eh=_d(),sw=_h(),VJ=P_(),fh=su(),A=m(),{hdb_errors:ga,handleHDBError:pa}=y(),{HTTP_STATUS_CODES:nw}=ga,dh=Ed(),iw=wd(),lu=require("util"),$s=Ot(),kJ=Gr(),$J=bn(),Ew=qi(),aw=ew(),ow=vc(),cw=lr(),_w=O_(),uw=Fd(),YJ=th(),KJ=lu.promisify(uu.searchByHash),WJ=lu.promisify(uu.searchByValue),QJ=lu.promisify(uu.search),JJ=lu.promisify(hh.evaluateSQL),XJ={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},O=rw();function ZJ(e,t,r){return Promise.all([Ew.postOperationHandler(e,t,r),e.table?$s.flush(e):null])}a(ZJ,"postWrite");async function zJ(e,t){try{if(e.body.operation!=="read_log"&&(xe.log_level===A.LOG_LEVELS.INFO||xe.log_level===A.LOG_LEVELS.DEBUG||xe.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;xe.info(c)}}catch(n){xe.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:ZJ,s=await YJ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return XJ[e.body.operation]&&kJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(zJ,"processLocalTransaction");var lw=tX();hw.exports={chooseOperation:jJ,getOperationFunction:dw,processLocalTransaction:zJ};function jJ(e){let t;try{t=dw(e)}catch(n){throw xe.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=hh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=hh.checkASTPermissions(e,i);if(o)throw xe.error(`${nw.FORBIDDEN} from operation ${e.search_operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=VJ.verifyPerms(i,n);if(o)throw xe.error(`${nw.FORBIDDEN} from operation ${e.operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw pa(n,"There was an error when trying to choose an operation path")}return r}a(jJ,"chooseOperation");function dw(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),lw.has(e.operation))return lw.get(e.operation);throw pa(new Error,ga.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ga.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(dw,"getOperationFunction");async function eX(e){xe.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await $s.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await $s.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await $s.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Aa.deleteRecord(i);break;default:xe.warn("invalid operation in catchup");break}await Ew.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(eX,"catchup");async function ir(e){let t,r;try{r=await fh.addJob(e),t=r.createdJob;let s=new aw.RunnerMessage(t,e);return await aw.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw xe.error(n),pa(s,n)}}a(ir,"executeJob");function tX(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new O($s.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new O($s.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new O($s.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new O(uu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new O(KJ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(WJ)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(QJ)),e.set(A.OPERATIONS_ENUM.SQL,new O(JJ)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new O(ir,cu.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new O(ir,cu.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new O(ir,cu.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new O(ir,cu.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new O(vn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new O(vn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new O(vn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new O(vn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new O(vn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new O(vn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new O(lh.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new O(lh.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new O(lh.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new O(Aa.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new O(Ra.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new O(Ra.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new O(Ra.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new O(Ra.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new O(_u.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new O(_u.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new O(_u.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new O(_u.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new O(Ra.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new O(PJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(BJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O(vJ)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(HJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(qJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O(GJ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(cw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O(FJ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O(xJ)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new O(Eh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new O(Eh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new O(Eh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new O(ir,sw.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new O(ir,sw.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new O(fh.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new O(fh.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new O(dh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new O(dh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new O(dh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new O(iw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(iw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(eX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O($J.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new O(ir,Aa.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new O(DJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(ow.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(ow.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(cw.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new O(wr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new O(wr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new O(wr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new O(wr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new O(wr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new O(wr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new O(wr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new O(wr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new O(wr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new O(_w.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,_w.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(uw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(uw.auditModules)),e}a(tX,"initializeOperationFunctionMap")});var Sh=m(),Sw=b(),Na=I(),rX=Gr(),sX=Sr(),nX=require("util").promisify,iX=nX(rX.setSchemaDataToGlobal),aX=fw(),Tw=require("moment"),mw=su(),{cloneDeep:oX}=require("lodash"),cX=process.env[Sh.PROCESS_NAME_ENV_PROP],Ys=cX.substring(4);a(async function(){let t={id:Ys,request:void 0};try{Na.notify("Starting job:",Ys),await iX(),await sX.setUsersToGlobal();let r=await mw.getJobById(Ys);if(Sw.isEmptyOrZeroLength(r))throw new Error(`Unable to find a record in hdb_job for job: ${Ys}`);let{request:s}=r[0];if(Sw.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=oX(s);let n=aX.getOperationFunction(s);Na.trace("Running operation:",s.operation,"for job",Ys);let i=await n.job_operation_function(s);Na.trace("Result from job:",Ys,i),t.status=Sh.JOB_STATUS_ENUM.COMPLETE,t.message=i,t.end_datetime=Tw().valueOf(),Na.notify("Successfully completed job:",Ys)}catch(r){Na.error(r),t.status=Sh.JOB_STATUS_ENUM.ERROR,t.message=r.message?r.message:r,t.end_datetime=Tw().valueOf()}finally{await mw.updateJob(t)}},"job")();
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=NI(d.stderr):i[_].npm_error=d.message;continue}try{i[_].npm_output=JSON.parse(l)}catch{i[_].npm_output=l}try{i[_].npm_error=JSON.parse(E)}catch{i[_].npm_error=E}}return w_.info(`finished installModules with response ${i}`),i}a(uQ,"installModules");function NI(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
13
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(NI,"parseNPMStdErr");async function lQ(e){w_.info(`starting auditModules for request: ${e}`);let t=bI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await OI(),await II(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=b_.join(Fd,o);s[o]={npm_output:null,npm_error:null};try{let _=await gI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=NI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(lQ,"auditModules");async function OI(){try{return await gI("npm -v"),!0}catch{throw Dn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Pn.BAD_REQUEST,void 0,void 0,!0)}}a(OI,"checkNPMInstalled");async function II(e){if(!Array.isArray(e)||e.length===0)throw Dn(new Error,"projects argument must be an array with at least 1 element",Pn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=b_.join(Fd,i.toString());if(!await mI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await mI.pathExists(_)||r.push(i)}if(t.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Pn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Dn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Pn.BAD_REQUEST,void 0,void 0,!0)}a(II,"checkProjectPaths");function bI(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return cQ.validateBySchema(e,t)}a(bI,"modulesValidator")});var yI=f((Aj,CI)=>{"use strict";var C_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(C_,"PermissionTableResponseObject");CI.exports=C_});var UI=f((gj,LI)=>{"use strict";var y_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(y_,"PermissionAttributeResponseObject");LI.exports=y_});var Vd=f((Oj,DI)=>{"use strict";var MI=yI(),EQ=UI(),{HDB_ERROR_MSGS:dQ}=it(),L_=class{constructor(){this.error=dQ.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new MI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new EQ(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new MI(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(L_,"PermissionResponseObject");DI.exports=L_});var P_=f((bj,QI)=>{"use strict";var kd=Ot(),U_=It(),Ct=Nc(),ua=Rs(),$d=Ts(),hQ=TE(),la=Sr(),M_=bE(),me=I(),fQ=yE(),SQ=Qc(),TQ=ed(),mQ=zc(),RQ=td(),AQ=rd(),pQ=id(),gQ=od(),Yd=ud(),Or=b(),NQ=XN(),Kd=dd(),vI=Cd(),wt=m(),HI=eI(),OQ=bn(),qI=vc(),GI=lr(),Ir=Hd(),IQ=require("alasql"),FI=O_(),xI=xd(),VI=Vd(),{handleHDBError:tt,hdb_errors:kI}=y(),{HDB_ERROR_MSGS:we,HTTP_STATUS_CODES:ca}=kI,p=new Map,$I="delete",ns="insert",is="read",qs="update",_a="describe",PI=ua.describeSchema.name,BI=ua.describeTable.name,YI={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},bQ="catchup",wQ="handleGetJob",CQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},yQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],KI={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},N=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(N,"permission");p.set(kd.insert.name,new N(!1,[ns]));p.set(kd.update.name,new N(!1,[qs]));p.set(kd.upsert.name,new N(!1,[ns,qs]));p.set(U_.searchByConditions.name,new N(!1,[is]));p.set(U_.searchByHash.name,new N(!1,[is]));p.set(U_.searchByValue.name,new N(!1,[is]));p.set(U_.search.name,new N(!1,[is]));p.set(Ct.createSchema.name,new N(!0,[]));p.set(Ct.createTable.name,new N(!0,[]));p.set(Ct.createAttribute.name,new N(!1,[ns]));p.set(Ct.dropSchema.name,new N(!0,[]));p.set(Ct.dropTable.name,new N(!0,[]));p.set(Ct.dropAttribute.name,new N(!0,[]));p.set(ua.describeSchema.name,new N(!1,[is]));p.set(ua.describeTable.name,new N(!1,[is]));p.set($d.deleteRecord.name,new N(!1,[$I]));p.set(la.addUser.name,new N(!0,[]));p.set(la.alterUser.name,new N(!0,[]));p.set(la.dropUser.name,new N(!0,[]));p.set(la.listUsersExternal.name,new N(!0,[]));p.set(M_.listRoles.name,new N(!0,[]));p.set(M_.addRole.name,new N(!0,[]));p.set(M_.alterRole.name,new N(!0,[]));p.set(M_.dropRole.name,new N(!0,[]));p.set(fQ.name,new N(!0,[]));p.set(SQ.name,new N(!0,[]));p.set(TQ.name,new N(!0,[]));p.set(mQ.name,new N(!0,[]));p.set(RQ.name,new N(!0,[]));p.set(AQ.name,new N(!0,[]));p.set(Yd.setRoutes.name,new N(!0,[]));p.set(Yd.getRoutes.name,new N(!0,[]));p.set(Yd.deleteRoutes.name,new N(!0,[]));p.set(GI.setConfiguration.name,new N(!0,[]));p.set(pQ.clusterStatus.name,new N(!0,[]));p.set(gQ.name,new N(!0,[]));p.set(Kd.getFingerprint.name,new N(!0,[]));p.set(Kd.setLicense.name,new N(!0,[]));p.set($d.deleteFilesBefore.name,new N(!0,[]));p.set($d.deleteAuditLogsBefore.name,new N(!0,[]));p.set(vI.restart.name,new N(!0,[]));p.set(vI.restartService.name,new N(!0,[]));p.set(hQ.name,new N(!0,[]));p.set(OQ.systemInformation.name,new N(!0,[]));p.set(GI.getConfiguration.name,new N(!0,[]));p.set(FI.readTransactionLog.name,new N(!0,[]));p.set(FI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(xI.installModules.name,new N(!0,[]));p.set(xI.auditModules.name,new N(!0,[]));p.set(qI.createTokens.name,new N(!1,[]));p.set(qI.refreshOperationToken.name,new N(!1,[]));p.set(Ir.customFunctionsStatus.name,new N(!0,[]));p.set(Ir.getCustomFunctions.name,new N(!0,[]));p.set(Ir.getCustomFunction.name,new N(!0,[]));p.set(Ir.setCustomFunction.name,new N(!0,[]));p.set(Ir.dropCustomFunction.name,new N(!0,[]));p.set(Ir.addCustomFunctionProject.name,new N(!0,[]));p.set(Ir.dropCustomFunctionProject.name,new N(!0,[]));p.set(Ir.packageCustomFunctionProject.name,new N(!0,[]));p.set(Ir.deployCustomFunctionProject.name,new N(!0,[]));p.set(Kd.getRegistrationInfo.name,new N(!1,[]));p.set(la.userInfo.name,new N(!1,[]));p.set(ua.describeAll.name,new N(!1,[]));p.set(wQ,new N(!1,[]));p.set(CQ,new N(!0,[]));p.set(bQ,new N(!0,[]));p.set(D_.CSV_DATA_LOAD,new N(!1,[ns,qs]));p.set(D_.CSV_URL_LOAD,new N(!1,[ns,qs]));p.set(D_.CSV_FILE_LOAD,new N(!1,[ns,qs]));p.set(D_.IMPORT_FROM_S3,new N(!1,[ns,qs]));p.set(KI.EXPORT_TO_S3,new N(!0,[]));p.set(KI.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[$I]));p.set(wt.VALID_SQL_OPS_ENUM.SELECT,new N(!1,[is]));p.set(wt.VALID_SQL_OPS_ENUM.INSERT,new N(!1,[ns]));p.set(wt.VALID_SQL_OPS_ENUM.UPDATE,new N(!1,[qs]));QI.exports={verifyPerms:UQ,verifyPermsAst:LQ,verifyBulkLoadAttributePerms:DQ};function LQ(e,t,r){if(Or.isEmptyOrZeroLength(e))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Or.isEmptyOrZeroLength(t))throw me.info("verify_perms_ast has an empty user parameter"),tt(new Error);if(Or.isEmptyOrZeroLength(r))throw me.info("verify_perms_ast has a null operation parameter"),tt(new Error);try{let s=new VI,n=new NQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw me.info("No schemas defined in verifyPermsAst(), will not continue."),tt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&YI[r])throw tt(new Error,we.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=HI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof IQ.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=WI(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let T=n.getAttributesBySchemaTableName(d,E[h]),R=Qd(t.role.permission,d,E[h]);Wd(T,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw tt(s)}}a(LQ,"verifyPermsAst");function UQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw me.info("null required parameter in verifyPerms"),tt(new Error,we.DEFAULT_INVALID_REQUEST,ca.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new VI;if(Or.isEmptyOrZeroLength(e.hdb_user.role)||Or.isEmptyOrZeroLength(e.hdb_user.role.permission))return me.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(we.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(wt.SYSTEM_SCHEMA_NAME)||n===wt.SYSTEM_SCHEMA_NAME;if(l&&YI[r])throw tt(new Error,we.DROP_SYSTEM,ca.FORBIDDEN);if(_&&!l||u===!0&&(r===Ct.createSchema.name||r===Ct.dropSchema.name))return null;if(yQ.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=HI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===PI||r===BI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(we.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===PI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(we.SCHEMA_NOT_FOUND(n));if(r===BI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(we.TABLE_NOT_FOUND(n,i))}}let d=WI(e.hdb_user,r,o,c,s);if(d)return d;if(p.get(r)&&p.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&wt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[wt.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[wt.PERMS_CRUD_ENUM.READ]).forEach(x=>{R.push(x.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(H=>H.attribute),e.get_attributes=R)}let h=MQ(e),T=Qd(e.hdb_user.role.permission,n,i);return Wd(h,T,r,i,n,c,s),c.getPermsResponse()}a(UQ,"verifyPerms");function WI(e,t,r,s,n){if(Or.arrayHasEmptyValues([e,t,r]))throw me.info("hasPermissions has an invalid parameter"),tt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw me.info(`operation ${t} not found.`),tt(new Error,we.OP_NOT_FOUND(t),ca.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return me.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(we.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][_a]===!1){s.addInvalidItem(we.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(we.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[_a]===!1)s.addInvalidItem(we.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Or.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let T=0;T<h.length;T++){let R=h[T],g=E[R];(g==null||g===!1)&&(me.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=we.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw me.error(h),me.error(d),tt(kI.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(WI,"hasPermissions");function Wd(e,t,r,s,n,i,o){if(!e||!t)throw me.info("no attributes specified in checkAttributePerms."),tt(new Error);let c=p.get(r).perms;if(!c||c==="")throw me.info(`no permissions found for ${r} in checkAttributePerms().`),tt(new Error);if(Or.isEmptyOrZeroLength(t))return me.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[_a]===!1){i.addInvalidItem(we.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(wt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==is)throw tt(new Error,we.SYSTEM_TIMESTAMP_PERMS_ERR,ca.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(we.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(Wd,"checkAttributePerms");function MQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===wt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){me.info(r)}return t}a(MQ,"getRecordAttributes");function Qd(e,t,r){let s=new Map;if(Or.isEmpty(e))return me.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{me.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Qd,"getAttributePermissions");function DQ(e,t,r,s,n,i,o){let c=new Set(i),_=Qd(e,s,n);Wd(c,_,t,n,s,o,r)}a(DQ,"verifyBulkLoadAttributePerms")});var v_=f((Cj,jI)=>{"use strict";jI.exports={evaluateSQL:QQ,processAST:zI,convertSQLToAST:ZI,checkASTPermissions:XI};var JI=Ot(),Zd=require("util"),PQ=Zd.callbackify(JI.insert),BQ=It().search,vQ=Gp().update,HQ=Zd.callbackify(vQ),qQ=xp().convertDelete,as=require("alasql"),GQ=P_(),da=I(),FQ=uc(),xQ=b(),Ea=m(),{hdb_errors:VQ,handleHDBError:Jd}=y(),{HTTP_STATUS_CODES:Xd}=VQ,kQ=qi();function $Q(e,t){return Promise.all([kQ.postOperationHandler(e,t,void 0),JI.flush(e)])}a($Q,"postWrite");var YQ=Zd.callbackify($Q);FQ(as);var KQ=403,WQ="There was a problem performing this insert. Please check the logs and try again.",B_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(B_,"ParsedSQLObject");function QQ(e,t){let r=e.parsed_sql_object;if(!r){r=ZI(e.sql);let s,n=r.ast.statements[0];if(n instanceof as.yy.Insert?s=n.into.databaseid:n instanceof as.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof as.yy.Update||n instanceof as.yy.Delete?s=n.table.databaseid:da.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof as.yy.Select)&&xQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}zI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(QQ,"evaluateSQL");function XI(e,t){let r;try{r=GQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(XI,"checkASTPermissions");function ZI(e){let t=new B_;if(!e)throw Jd(new Error,"The 'sql' parameter is missing from the request body",Xd.BAD_REQUEST);try{let r=e.trim(),s=as.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
+
`);throw s[1]?Jd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Xd.BAD_REQUEST):Jd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Xd.BAD_REQUEST)}return t}a(ZI,"convertSQLToAST");function zI(e,t,r){try{let s=JQ;if(!e.bypass_auth&&!t.permissions_checked){let i=XI(e,t);if(i&&i.length>0)return r(KQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=BQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=XQ;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=HQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=qQ;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(zI,"processAST");function JQ(e,t){da.info(e),t("unknown sql statement")}a(JQ,"nullFunction");function XQ({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=ZQ(i,e.values)}catch(o){return r(o)}PQ(n,(o,c)=>{if(o)return r(o);YQ(n,c,_=>{_&&da.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){da.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(XQ,"convertInsert");function ZQ(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=as.compile(`SELECT ${n.toString()} AS [${Ea.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw da.error(r),new Error(WQ)}}a(ZQ,"createDataObjects")});var th=f((Lj,nb)=>{var V_=require("clone"),k_=te(),zQ=b(),F_=m(),jQ=I(),H_=require("fs"),zd=require("joi"),{string:x_}=zd.types(),{hdb_errors:e1,handleHDBError:ha}=y(),{HDB_ERROR_MSGS:t1,HTTP_STATUS_CODES:q_}=e1,{common_validators:G_}=Wt(),eb=1e9,tb=" is required",r1=["insert","update","upsert"],jd={schema:{presence:!0,format:G_.schema_format,length:G_.schema_length},table:{presence:!0,format:G_.schema_format,length:G_.schema_length},action:{inclusion:{within:r1,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},s1={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:n1,AWS_SECRET:i1,AWS_BUCKET:a1,AWS_FILE_KEY:o1,REGION:c1}=F_.S3_BUCKET_AUTH_KEYS,_1={s3:{presence:!0},[`s3.${n1}`]:{presence:!0,type:"String"},[`s3.${i1}`]:{presence:!0,type:"String"},[`s3.${a1}`]:{presence:!0,type:"String"},[`s3.${o1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${c1}`]:{presence:!0,type:"String"}},rb=V_(jd);rb.data.presence={message:tb};var sb=V_(jd);sb.file_path.presence={message:tb};var u1=Object.assign(V_(jd),_1),eh=V_(s1);eh.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();eh.passthrough_headers=zd.object();function l1(e){let t=k_.validateObject(e,rb);return $_(e,t)}a(l1,"dataObject");function E1(e){let t=k_.validateBySchema(e,zd.object(eh));return $_(e,t)}a(E1,"urlObject");function d1(e){let t=k_.validateObject(e,sb);return $_(e,t)}a(d1,"fileObject");function h1(e){let t=k_.validateObject(e,u1);return $_(e,t)}a(h1,"s3FileObject");function $_(e,t){if(!t){let r=zQ.checkGlobalSchemaTable(e.schema,e.table);if(r)return ha(new Error,r,q_.BAD_REQUEST);if(e.operation===F_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{H_.accessSync(e.file_path,H_.constants.R_OK|H_.constants.F_OK)}catch(s){return s.code===F_.NODE_ERROR_CODES.ENOENT?ha(s,`No such file or directory ${s.path}`,q_.BAD_REQUEST):s.code===F_.NODE_ERROR_CODES.EACCES?ha(s,`Permission denied ${s.path}`,q_.BAD_REQUEST):ha(s)}try{let s=H_.statSync(e.file_path).size;if(s>eb)return ha(new Error,t1.MAX_FILE_SIZE_ERR(s,eb),q_.BAD_REQUEST)}catch(s){jQ.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");nb.exports={dataObject:l1,urlObject:E1,fileObject:d1,s3FileObject:h1}});var rh=f((Mj,ib)=>{"use strict";var fa=I(),Y_=m();async function f1(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Y_.OPERATIONS_ENUM.INSERT||t.operation===Y_.OPERATIONS_ENUM.UPDATE||t.operation===Y_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Y_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(fa.info(i.message),i):i.http_resp_msg?(fa.error(`Error calling operation: ${e.name}`),fa.error(i.http_resp_msg),i):(fa.error(`Error calling operation: ${e.name}`),fa.error(i),i)}}a(f1,"callOperationFunctionAsAwait");ib.exports={callOperationFunctionAsAwait:f1}});var sh=f((Pj,ob)=>{"use strict";var{S3:S1,GetObjectCommand:T1}=require("@aws-sdk/client-s3");ob.exports={getFileStreamFromS3:m1,getS3AuthObj:ab};async function m1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ab(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new T1(r))).Body}a(m1,"getFileStreamFromS3");function ab(e,t,r){return new S1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ab,"getS3AuthObj")});var _b=f((vj,cb)=>{"use strict";var K_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(K_,"BulkLoadFileObject");var W_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(W_,"BulkLoadDataObject");cb.exports={BulkLoadFileObject:K_,BulkLoadDataObject:W_}});var ch=f((qj,bb)=>{"use strict";var Q_=Ot(),Z_=th(),R1=require("needle"),Tt=m(),A1=ue(),Sa=b(),{handleHDBError:ne,hdb_errors:mb}=y(),{HTTP_STATUS_CODES:Ce,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:xs}=mb,Fs=I(),J_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),p1=require("path"),{chain:ub}=require("stream-chain"),lb=require("stream-json/streamers/StreamArray"),Eb=require("stream-json/utils/Batch"),db=require("stream-chain/utils/comp"),{finished:hb}=require("stream"),nh=v(),Rb=rh(),g1=sh(),{BulkLoadFileObject:ih,BulkLoadDataObject:N1}=_b(),ah=Vd(),{verifyBulkLoadAttributePerms:Ab}=P_(),O1=_E(),I1=ve(),b1=Vr(),fb="No records parsed from csv file.",Gs=`${nh.get("HDB_ROOT")}/tmp`,{schema_regex:w1}=Wt(),Sb=1024*1024*5,Tb=5e3,C1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};bb.exports={csvDataLoad:y1,csvURLLoad:L1,csvFileLoad:U1,importFromS3:M1};async function y1(e,t){let r=Z_.dataObject(e);if(r)throw ne(r,r.message,Ce.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=J_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new ah;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Ab(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ne(new Error,o,Ce.BAD_REQUEST,void 0,void 0,!0);let c=new N1(e.action,e.schema,e.table,n.data);return s=await Rb.callOperationFunctionAsAwait(Nb,c,Ob.bind(null,n.meta.fields),t),s.message===fb?fb:Ib(s.records,s.number_written)}catch(n){throw Vs(n)}}a(y1,"csvDataLoad");async function L1(e){let t=Z_.urlObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Gs}/${r}`;try{await D1(e,r)}catch(n){throw Fs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),ne(n,xs(Re.DOWNLOAD_FILE_ERR(r)))}try{let n=new ih(this.job_operation_function.name,e.action,e.schema,e.table,s,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await oh(n);return await X_(s),i}catch(n){throw await X_(s),Vs(n)}}a(L1,"csvURLLoad");async function U1(e){let t=Z_.fileObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r=new ih(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Tt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await oh(r)}catch(s){throw Vs(s)}}a(U1,"csvFileLoad");async function M1(e){let t=Z_.s3FileObject(e);if(t)throw ne(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=p1.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Gs}/${n}`;let i=new ih(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await P1(n,e);let o=await oh(i);return await X_(r),o}catch(s){throw await X_(r),Vs(s)}}a(M1,"importFromS3");async function D1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await R1("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw ne(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}v1(r,e.csv_url),await B1(t,r.raw)}a(D1,"downloadCSVFile");async function P1(e,t){try{let r=`${Gs}/${e}`;await Vt.mkdirp(Gs),await Vt.writeFile(`${Gs}/${e}`,"",{flag:"a+"});let s=await Vt.createWriteStream(r),n=await g1.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Fs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Fs.error(Re.S3_DOWNLOAD_ERR+" - "+r),ne(r,xs(Re.S3_DOWNLOAD_ERR))}}a(P1,"downloadFileFromS3");async function B1(e,t){try{await Vt.mkdirp(Gs),await Vt.writeFile(`${Gs}/${e}`,t)}catch(r){throw Fs.error(Re.WRITE_TEMP_FILE_ERR),ne(r,xs(Re.DEFAULT_BULK_LOAD_ERR))}}a(B1,"writeFileToTempFolder");async function X_(e){if(e)try{await Vt.access(e),await Vt.unlink(e)}catch{Fs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(X_,"deleteTempFile");function v1(e,t){if(e.statusCode!==mb.HTTP_STATUS_CODES.OK)throw ne(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ce.BAD_REQUEST);if(!C1[e.headers["content-type"]])throw ne(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ce.BAD_REQUEST);if(!e.raw)throw ne(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ce.BAD_REQUEST)}a(v1,"validateURLResponse");async function oh(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await H1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await q1(e);break;default:throw ne(new Error,Re.DEFAULT_BULK_LOAD_ERR,Ce.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return Ib(t.records,t.number_written)}catch(t){throw Vs(t)}}a(oh,"fileLoad");async function pb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Q_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Ab(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ne(c);r(_)}}a(pb,"validateChunk");async function gb(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Sa.isEmpty(c)&&!Sa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await Rb.callOperationFunctionAsAwait(Nb,c,Ob.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ne(c,xs(Re.INSERT_CSV_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(gb,"insertChunk");async function H1(e){let t={records:0,number_written:0};try{let r=new ah,s=Vt.createReadStream(e.file_path,{highWaterMark:Sb});s.setEncoding("utf8"),await J_.parsePromise(s,pb.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ne(new Error,n,Ce.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:Sb}),s.setEncoding("utf8"),await J_.parsePromise(s,gb.bind(null,e,t)),s.destroy(),t}catch(r){throw ne(r,xs(Re.PAPA_PARSE_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(H1,"callPapaParse");async function q1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ah,n=ub([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),lb.withParser(),c=>c.value,new Eb({batchSize:Tb}),db(async c=>{await pb(e,s,r,c)})]);await new Promise((c,_)=>{hb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ne(new Error,i,Ce.BAD_REQUEST);let o=ub([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),lb.withParser(),c=>c.value,new Eb({batchSize:Tb}),db(async c=>{await gb(e,t,r,c)})]);return await new Promise((c,_)=>{hb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ne(s,xs(Re.INSERT_JSON_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(q1,"insertJson");async function Nb(e){let t={};try{e.data&&e.data.length>0&&G1(e.data[0])?t=await F1(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Fs.info(t.message))}catch(r){throw Vs(r)}return t}a(Nb,"callBulkFileLoad");function G1(e){let t=Object.keys(e);for(let r of t)if(!w1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(G1,"validateColumnNames");async function F1(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Q_.insert;break;case"update":i=Q_.update;break;case"upsert":i=Q_.upsert;break;default:throw ne(new Error,Re.INVALID_ACTION_PARAM_ERR(s),Ce.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=Sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Vs(o)}}a(F1,"bulkFileLoad");async function Ob(e,t,r,s){try{if(t.data.length===0||!nh.get(Tt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=J_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new O1(r.txn_time,i,nh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await I1.publishToStream(`${A1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,b1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){Fs.error(n)}}a(Ob,"postCSVLoadFunction");function Ib(e,t){return`successfully loaded ${t} of ${e} records`}a(Ib,"buildResponseMsg");function Vs(e){return ne(e,xs(Re.DEFAULT_BULK_LOAD_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Vs,"buildTopLevelErrMsg")});var Lb=f((Fj,yb)=>{"use strict";var{Readable:x1}=require("stream"),V1=1e4;yb.exports={streamAsJSON(e){return new z_({value:e})}};var z_=class extends x1{constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),wb)}catch(n){yield wb(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Cb(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>V1?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return Cb(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};a(z_,"JSONStream");function wb(e){return console.error(e),JSON.stringify(e.toString())}a(wb,"handleError");function Cb(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Cb,"when")});var uh=f((Vj,Gb)=>{"use strict";var Db=It(),k1=v_(),$1=sh(),{AsyncParser:Y1,Transform:K1}=require("json2csv"),ma=require("stream"),mt=b(),_h=require("fs-extra"),W1=require("path"),yt=I(),{promisify:j_}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:Q1}=y(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=Q1,{streamAsJSON:J1}=Lb(),{Upload:X1}=require("@aws-sdk/lib-storage"),Ub=["search_by_value","search_by_hash","sql"],Mb=["json","csv"],Pb="json",Bb="csv",Z1="Successfully exported JSON locally.",z1="Successfully exported CSV locally.",j1=1e3,eJ=j_(Db.searchByHash),tJ=j_(Db.searchByValue),rJ=j_(k1.evaluateSQL),sJ=j_(ma.finished);Gb.exports={export_to_s3:oJ,export_local:nJ,toCsvStream:vb};async function nJ(e){yt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Hb(e);if(!mt.isEmpty(t))throw yt.error(t),fe(new Error,t,Se.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw yt.error(rt.MISSING_VALUE("path")),fe(new Error,rt.MISSING_VALUE("path"),Se.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(W1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await iJ(e.path);let n=await qb(e);return await aJ(s,e.format,n)}a(nJ,"export_local");async function iJ(e){if(yt.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw fe(new Error,`Invalid path: ${e}`,Se.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await _h.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,yt.error(s),fe(new Error,s,Se.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw yt.error(r),fe(new Error,r,Se.BAD_REQUEST,void 0,void 0,!0)}return!0}a(iJ,"confirmPath");async function aJ(e,t,r){if(yt.trace("in saveToLocal"),Ta.isEmptyOrZeroLength(e))throw fe(new Error,rt.INVALID_VALUE("file_path"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmptyOrZeroLength(t))throw fe(new Error,rt.INVALID_VALUE("Source format"),Se.BAD_REQUEST,void 0,void 0,!0);if(Ta.isEmpty(r))throw fe(new Error,rt.NOT_FOUND("Data"),Se.BAD_REQUEST,void 0,void 0,!0);if(t===Pb){let s=_h.createWriteStream(e);return J1(r).pipe(s),await sJ(s),{message:Z1,path:e}}else if(t===Bb){let s=_h.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new Y1(i,o).fromInput(n).toOutput(s).promise(!1),{message:z1,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(aJ,"saveToLocal");async function oJ(e){if(!e.s3||Object.keys(e.s3).length===0)throw fe(new Error,rt.MISSING_VALUE("S3 object"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw fe(new Error,rt.MISSING_VALUE("aws_access_key_id"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw fe(new Error,rt.MISSING_VALUE("aws_secret_access_key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw fe(new Error,rt.MISSING_VALUE("bucket"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw fe(new Error,rt.MISSING_VALUE("key"),Se.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw fe(new Error,rt.MISSING_VALUE("region"),Se.BAD_REQUEST);let t=Hb(e);if(!mt.isEmpty(t))throw fe(new Error,t,Se.BAD_REQUEST);yt.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await qb(e)}catch(_){throw yt.error(_),_}let s,n=await $1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===Bb){i=e.s3.key+".csv";let _=vb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Pb){i=e.s3.key+".json";let _=new ma.Readable;_.pipe(o),_.on("error",E=>{throw E}),_.push("[");let u=r.length,l="";for(let[E,d]of r.entries()){let h=E===u-1?JSON.stringify(d):JSON.stringify(d)+",";l+=h,E!==0&&E%j1===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST);return new X1({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(oJ,"export_to_s3");function vb(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new K1(r,s);return t.pipe(n)}a(vb,"toCsvStream");function Hb(e){if(yt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Mb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Mb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(Ub.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Ub.join(", ")}`}a(Hb,"exportCoreValidation");async function qb(e){yt.trace("in getRecords");let t,r;if(Ta.isEmpty(e.search_operation)||Ta.isEmptyOrZeroLength(e.search_operation.operation))throw fe(new Error,rt.INVALID_VALUE("Search operation"),Se.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=tJ;break;case"search_by_hash":t=eJ;break;case"sql":t=rJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,yt.error(r),fe(new Error,r,Se.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(qb,"getRecords")});var xb=f(($j,Fb)=>{"use strict";var eu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(eu,"SqlSearchObject");Fb.exports=eu});var $b=f((Kj,kb)=>{"use strict";var cJ=m(),Vb=require("moment"),_J=require("uuid").v4,tu=class{constructor(){this.id=_J(),this.type=void 0,this.start_datetime=Vb().valueOf(),this.created_datetime=Vb().valueOf(),this.end_datetime=void 0,this.status=cJ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(tu,"JobObject");kb.exports=tu});var su=f((Qj,Xb)=>{"use strict";var uJ=require("uuid").v4,Wb=Ot(),Qb=It(),lJ=Ht(),EJ=ln(),dJ=xb(),ie=m(),hJ=$b(),fJ=UE(),Lt=I(),SJ=ai(),Bn=b(),{promisify:lh}=require("util"),ks=require("moment"),TJ=v_(),ru=th(),Yb=El(),{deleteTransactionLogsBeforeValidator:mJ}=qd(),{handleHDBError:RJ,hdb_errors:AJ}=y(),{HTTP_STATUS_CODES:pJ}=AJ,Kb=lh(Qb.searchByValue),gJ=lh(Qb.searchByHash),NJ=Wb.insert,OJ=lh(TJ.evaluateSQL),IJ=Wb.update;Xb.exports={addJob:CJ,updateJob:LJ,handleGetJob:bJ,handleGetJobsByStartDate:wJ,getJobById:Jb};async function bJ(e){try{let t=await Jb(e.id);return Bn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Lt.error(r),new Error(r)}}a(bJ,"handleGetJob");async function wJ(e){try{let t=await yJ(e);if(Lt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=ks(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ks(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Lt.error(r),new Error(r)}}a(wJ,"handleGetJobsByStartDate");async function CJ(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Bn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Lt.info(l),t.error=l,t}if(!ie.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ie.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ru.fileObject(e);break;case ie.OPERATIONS_ENUM.CSV_URL_LOAD:s=ru.urlObject(e);break;case ie.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ru.dataObject(e);break;case ie.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ru.s3FileObject(e);break;case ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=Yb(e,"date");break;case ie.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=Yb(e,"timestamp");break;case ie.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=mJ(e);break;default:break}if(s)throw RJ(s,s.message,pJ.BAD_REQUEST,void 0,void 0,!0);let n=new hJ;n.type=e.operation===ie.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ie.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new lJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await Kb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=uJ();try{o=await Kb(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Lt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new SJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await NJ(_)}catch(l){return Lt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Lt.trace(l)}return t}a(CJ,"addJob");async function yJ(e){let t=ks(e.from_date,ks.ISO_8601),r=ks(e.to_date,ks.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new dJ(s,e.hdb_user);try{return await OJ(n)}catch(i){throw Lt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(yJ,"getJobsInDateRange");async function Jb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new EJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await gJ(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lt.error(s),Bn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Jb,"getJobById");async function LJ(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Bn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ie.JOB_STATUS_ENUM.COMPLETE||e.status===ie.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ks().valueOf());let t=new fJ(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await IJ(t)}catch(s){throw new Error(s)}return r}a(LJ,"updateJob")});var rw=f((Xj,tw)=>{"use strict";var Zb=b(),st=m(),UJ=require("moment"),nu=ch(),iu=I(),zb=su(),jb=uh(),ew=Ts(),MJ=rn(),DJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function PJ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(Zb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Zb.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case st.JOB_TYPE_ENUM.csv_file_load:await br(e,nu.csvFileLoad);break;case st.JOB_TYPE_ENUM.csv_url_load:await br(e,nu.csvURLLoad);break;case st.JOB_TYPE_ENUM.csv_data_load:await br(e,nu.csvDataLoad);break;case st.JOB_TYPE_ENUM.import_from_s3:await br(e,nu.importFromS3);break;case st.JOB_TYPE_ENUM.empty_trash:break;case st.JOB_TYPE_ENUM.export_local:await br(e,jb.export_local);break;case st.JOB_TYPE_ENUM.export_to_s3:await br(e,jb.export_to_s3);break;case st.JOB_TYPE_ENUM.delete_files_before:case st.JOB_TYPE_ENUM.delete_records_before:await br(e,ew.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await br(e,ew.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await br(e,DJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(PJ,"parseMessage");async function br(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=UJ().valueOf(),await zb.updateJob(e.job),await BJ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):iu.error(`There was an error running ${t.name} job with id ${e.job.id}`),iu.error(s),e.job.message=s,e.job.status=st.JOB_STATUS_ENUM.ERROR;try{await zb.updateJob(e.job)}catch(n){throw iu.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(br,"runJob");async function BJ(e){iu.trace("launching job thread:",e),MJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(BJ,"launchJobThread");tw.exports={parseMessage:PJ,RunnerMessage:au}});var nw=f((zj,sw)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");sw.exports=ou});var Tw=f((e8,Sw)=>{"use strict";var uu=It(),fh=v_(),cu=ch(),vn=Nc(),Eh=Rs(),Aa=Ts(),vJ=TE(),Ra=Sr(),_u=bE(),wr=Hd(),xe=I(),HJ=yE(),qJ=Qc(),GJ=ed(),FJ=zc(),xJ=td(),VJ=rd(),kJ=id(),$J=od(),dh=ud(),iw=uh(),YJ=P_(),Sh=su(),A=m(),{hdb_errors:ga,handleHDBError:pa}=y(),{HTTP_STATUS_CODES:aw}=ga,hh=dd(),ow=Cd(),lu=require("util"),$s=Ot(),KJ=Gr(),WJ=bn(),hw=qi(),cw=rw(),_w=vc(),uw=lr(),lw=O_(),Ew=xd(),QJ=rh(),JJ=lu.promisify(uu.searchByHash),XJ=lu.promisify(uu.searchByValue),ZJ=lu.promisify(uu.search),zJ=lu.promisify(fh.evaluateSQL),jJ={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},O=nw();function eX(e,t,r){return Promise.all([hw.postOperationHandler(e,t,r),e.table?$s.flush(e):null])}a(eX,"postWrite");async function tX(e,t){try{if(e.body.operation!=="read_log"&&(xe.log_level===A.LOG_LEVELS.INFO||xe.log_level===A.LOG_LEVELS.DEBUG||xe.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;xe.info(c)}}catch(n){xe.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:eX,s=await QJ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return jJ[e.body.operation]&&KJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(tX,"processLocalTransaction");var dw=nX();Sw.exports={chooseOperation:rX,getOperationFunction:fw,processLocalTransaction:tX};function rX(e){let t;try{t=fw(e)}catch(n){throw xe.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=fh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=fh.checkASTPermissions(e,i);if(o)throw xe.error(`${aw.FORBIDDEN} from operation ${e.search_operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=YJ.verifyPerms(i,n);if(o)throw xe.error(`${aw.FORBIDDEN} from operation ${e.operation}`),pa(new Error,o,ga.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw pa(n,"There was an error when trying to choose an operation path")}return r}a(rX,"chooseOperation");function fw(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),dw.has(e.operation))return dw.get(e.operation);throw pa(new Error,ga.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ga.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(fw,"getOperationFunction");async function sX(e){xe.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await $s.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await $s.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await $s.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Aa.deleteRecord(i);break;default:xe.warn("invalid operation in catchup");break}await hw.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(sX,"catchup");async function ir(e){let t,r;try{r=await Sh.addJob(e),t=r.createdJob;let s=new cw.RunnerMessage(t,e);return await cw.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw xe.error(n),pa(s,n)}}a(ir,"executeJob");function nX(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new O($s.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new O($s.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new O($s.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new O(uu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new O(JJ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(XJ)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(ZJ)),e.set(A.OPERATIONS_ENUM.SQL,new O(zJ)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new O(ir,cu.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new O(ir,cu.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new O(ir,cu.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new O(ir,cu.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new O(vn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new O(vn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new O(vn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new O(vn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new O(vn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new O(vn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new O(Eh.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new O(Eh.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new O(Eh.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new O(Aa.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new O(Ra.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new O(Ra.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new O(Ra.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new O(Ra.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new O(_u.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new O(_u.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new O(_u.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new O(_u.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new O(Ra.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new O(HJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(qJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O(GJ)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(FJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(xJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O(VJ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(uw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O(kJ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O($J)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new O(dh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new O(dh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new O(dh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new O(ir,iw.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new O(ir,Aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new O(ir,iw.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new O(Sh.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new O(Sh.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new O(hh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new O(hh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new O(hh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new O(ow.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(ow.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(sX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O(WJ.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new O(ir,Aa.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new O(vJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(_w.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(_w.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(uw.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new O(wr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new O(wr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new O(wr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new O(wr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new O(wr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new O(wr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new O(wr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new O(wr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new O(wr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new O(lw.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,lw.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(Ew.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(Ew.auditModules)),e}a(nX,"initializeOperationFunctionMap")});var Th=m(),mw=b(),Na=I(),iX=Gr(),aX=Sr(),oX=require("util").promisify,cX=oX(iX.setSchemaDataToGlobal),_X=Tw(),Rw=require("moment"),Aw=su(),{cloneDeep:uX}=require("lodash"),lX=process.env[Th.PROCESS_NAME_ENV_PROP],Ys=lX.substring(4);a(async function(){let t={id:Ys,request:void 0};try{Na.notify("Starting job:",Ys),await cX(),await aX.setUsersToGlobal();let r=await Aw.getJobById(Ys);if(mw.isEmptyOrZeroLength(r))throw new Error(`Unable to find a record in hdb_job for job: ${Ys}`);let{request:s}=r[0];if(mw.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=uX(s);let n=_X.getOperationFunction(s);Na.trace("Running operation:",s.operation,"for job",Ys);let i=await n.job_operation_function(s);Na.trace("Result from job:",Ys,i),t.status=Th.JOB_STATUS_ENUM.COMPLETE,t.message=i,t.end_datetime=Rw().valueOf(),Na.notify("Successfully completed job:",Ys)}catch(r){Na.error(r),t.status=Th.JOB_STATUS_ENUM.ERROR,t.message=r.message?r.message:r,t.end_datetime=Rw().valueOf()}finally{await Aw.updateJob(t)}},"job")();
|