harperdb 4.1.0 → 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.
@@ -1,14 +1,14 @@
1
- "use strict";var Rw=Object.defineProperty;var a=(e,t)=>Rw(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var m=f((_X,Lh)=>{"use strict";var Ut=require("path"),Aw=require("fs");function pw(){let e=__dirname;for(;!Aw.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(pw,"getHDBPackageRoot");var yr=pw(),Th="js",ba=Th,gw="harperdb-config.yaml",Nw="defaultConfig.yaml",Ow="hdb",mh=`harperdb.${ba}`,Rh=`customFunctionsServer.${ba}`,Iw=`restartHdb.${ba}`,du="HarperDB",Ia="Custom Functions",wa="Clustering Hub",Ca="Clustering Leaf",bw="Clustering Ingest Service",ww="Clustering Reply Service",Cw="foreground.pid",yw={HDB:du,CLUSTERING_HUB:wa,CLUSTERING_LEAF:Ca,CLUSTERING_INGEST_SERVICE:bw,CLUSTERING_REPLY_SERVICE:ww,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"},Lw={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Uw={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Mw={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"},Dw={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")},Pw={HDB:Ut.join(Eu.HDB,mh),CUSTOM_FUNCTIONS:Ut.join(Eu.CUSTOM_FUNCTIONS,Rh)},Bw={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")},vw={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Ah="support@harperdb.io",Hw="customer-success@harperdb.io",ph=1,qw=4141,gh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Gw="https://www.harperdb.io/product",Fw=`For support, please submit a request at ${gh} or contact ${Ah}`,Nh=`For license support, please contact ${Hw}`,xw="None of the specified records were found.",Vw="hash attribute not found",kw=`Your current license only supports ${ph} role. ${Nh}`,$w="Your current license only supports 3 connections to a node.",Yw="127.0.0.1",Kw=1,Ww=/^\.$/,Qw=/^\.\.$/,Jw="U+002E",Xw=/\//g,Zw="U+002F",zw=/U\+002F/g,jw=/^U\+002E$/,eC=/^U\+002EU\+002E$/,tC="d",rC=999999,sC="*",nC="--max-old-space-size=",iC="system",aC="__hdb_hash",oC=".harperdb",cC=".hdb",_C="keys",uC="hdb_boot_properties.file",lC=".updateConfig.json",EC="SIGTSTP",dC=24,hC=6e4,fC=448,SC="blob",TC="trash",mC="schema",RC="transactions",AC=".count",pC="id",gC="PROCESS_NAME",Oh={SETTINGS_PATH_KEY:"settings_path"},Ih=require("lodash"),NC={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"},OC={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},IC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bC={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"},wC={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:",CC={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"},yC={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"},LC="060493.ks",UC=".license",MC={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"},DC={CSV:".csv",JSON:".json"},PC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},BC={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 vC={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},HC={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"},qC=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",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,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 GC={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},FC={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"},xC={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"},VC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kC={FILE_SYSTEM:"fs",LMDB:"lmdb"},$C={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},YC={DEVELOPMENT:8192,DEFAULT:512},KC={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"},WC={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"},QC={ENOENT:"ENOENT",EACCES:"EACCES"},Ch={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},JC="__clustering__",XC=Object.values(Ch),ZC=15984864e5,yh={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},zC=Ih.invert(yh),jC={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"},ey=111,ty=`\r
2
- `,ry={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},sy=["*","%"],ny="unauthorized_access",iy="func_val",ay={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},oy={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cy={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"},_y={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},uy={HTTP:"http"},ly={STOPPED:"stopped",ONLINE:"online"},Ey="3.x.x";Lh.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Ah,HDB_SUPPORT_URL:gh,HDB_PRICING_URL:Gw,SUPPORT_HELP_MSG:Fw,LICENSE_HELP_MSG:Nh,HDB_PROC_NAME:mh,HDB_PROC_DESCRIPTOR:du,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ca,CLUSTERING_HUB_PROC_DESCRIPTOR:wa,SYSTEM_SCHEMA_NAME:iC,HASH_FOLDER_NAME:aC,HDB_HOME_DIR_NAME:oC,UPDATE_FILE_NAME:lC,LICENSE_KEY_DIR_NAME:_C,BOOT_PROPS_FILE_NAME:uC,JOB_TYPE_ENUM:FC,JOB_STATUS_ENUM:MC,SYSTEM_TABLE_NAMES:bC,SYSTEM_TABLE_HASH_ATTRIBUTES:wC,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:DC,S3_BUCKET_AUTH_KEYS:PC,VALID_SQL_OPS_ENUM:BC,GEO_CONVERSION_ENUM:HC,HDB_SETTINGS_NAMES:bh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:qC,SERVICE_ACTIONS_ENUM:vC,CLUSTER_MESSAGE_TYPE_ENUM:xC,CLUSTER_CONNECTION_DIRECTION_ENUM:VC,CLUSTER_EVENTS_DEFS_ENUM:KC,PERIOD_REGEX:Ww,DOUBLE_PERIOD_REGEX:Qw,UNICODE_PERIOD:Jw,FORWARD_SLASH_REGEX:Xw,UNICODE_FORWARD_SLASH:Zw,ESCAPED_FORWARD_SLASH_REGEX:zw,ESCAPED_PERIOD_REGEX:jw,ESCAPED_DOUBLE_PERIOD_REGEX:eC,REG_KEY_FILE_NAME:LC,RESTART_TIMEOUT_MS:hC,HDB_FILE_PERMISSIONS:fC,SCHEMA_DIR_NAME:mC,TRANSACTIONS_DIR_NAME:RC,LIMIT_COUNT_NAME:AC,ID_ATTRIBUTE_STRING:pC,INSERT_MODULE_ENUM:OC,UPGRADE_JSON_FIELD_NAMES_ENUM:IC,RESTART_CODE:EC,RESTART_CODE_NUM:dC,CLUSTER_OPERATIONS:qn,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yC,HDB_INTERNAL_SC_CHANNEL_PREFIX:nt,INTERNAL_SC_CHANNELS:CC,CLUSTERING_MESSAGE_TYPES:jC,HDB_FILE_SUFFIX:cC,BLOB_FOLDER_NAME:SC,HDB_TRASH_DIR:TC,ORIGINATOR_SET_VALUE:ey,LICENSE_VALUES:$C,RAM_ALLOCATION_ENUM:YC,STORAGE_TYPES_ENUM:kC,TIME_STAMP_NAMES_ENUM:Ch,TIME_STAMP_NAMES:XC,PERMS_UPDATE_RELEASE_TIMESTAMP:ZC,SEARCH_NOT_FOUND_MESSAGE:xw,SEARCH_ATTRIBUTE_NOT_FOUND:Vw,LICENSE_ROLE_DENIED_RESPONSE:kw,LICENSE_MAX_CONNS_REACHED:$w,BASIC_LICENSE_MAX_NON_CU_ROLES:ph,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:qw,VALUE_SEARCH_COMPARATORS:yh,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:zC,LICENSE_FILE_NAME:UC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:WC,NEW_LINE:ty,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Kw,MOMENT_DAYS_TAG:tC,API_TURNOVER_SEC:rC,LOOPBACK:Yw,CODE_EXTENSION:ba,WILDCARD_SEARCH_VALUE:sC,NODE_ERROR_CODES:QC,JAVASCRIPT_EXTENSION:Th,PERMS_CRUD_ENUM:ry,UNAUTHORIZED_PERMISSION_NAME:ny,SEARCH_WILDCARDS:sy,FUNC_VAL:iy,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:ay,JWT_ENUM:oy,CLUSTERING_FLAG:JC,ITC_EVENT_TYPES:cy,CUSTOM_FUNCTION_PROC_NAME:Rh,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ia,SERVICES:_y,THREAD_TYPES:uy,MEM_SETTING_KEY:nC,HDB_RESTART_SCRIPT:Iw,PROCESS_DESCRIPTORS:yw,SERVICE_SERVERS:Pw,SERVICE_SERVERS_CWD:Eu,PROCESS_DESCRIPTORS_VALIDATE:Mw,LAUNCH_SERVICE_SCRIPTS:Bw,LOG_LEVELS:Uw,PROCESS_NAME_ENV_PROP:gC,LOG_NAMES:Lw,PM2_PROCESS_STATUSES:ly,CONFIG_PARAM_MAP:wh,CONFIG_PARAMS:S,HDB_CONFIG_FILE:gw,HDB_DEFAULT_CONFIG_FILE:Nw,ROLE_TYPES_ENUM:vw,BOOT_PROP_PARAMS:Oh,INSTALL_PROMPTS:NC,HDB_ROOT_DIR_NAME:Ow,CLUSTERING_PROCESSES:Dw,FOREGROUND_PID_FILE:Cw,PACKAGE_ROOT:yr,PRE_4_0_0_VERSION:Ey,SCHEMAS_PARAM_CONFIG:GC}});var hu=f((lX,Dh)=>{"use strict";var Uh=require("minimist");Dh.exports=dy;function dy(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Mh(process.env),s=Mh(Uh(process.argv))):(r=process.env,s=Uh(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(dy,"assignCMDENVVariables");function Mh(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Mh,"objKeysToLowerCase")});var I=f((dX,Yh)=>{"use strict";var Ws=require("fs-extra"),{workerData:hy,threadId:fy}=require("worker_threads"),Lr=require("path"),vh=require("yaml"),Hh=require("properties-reader"),Ae=m(),Ph=hu(),Sy=require("os"),{PACKAGE_ROOT:Su}=m(),qh={};for(let e in console)qh[e]=console[e];var ke={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Gh={STDOUT:"stdOut",STDERR:"stdErr"},Ty=Lr.join(Su,"logs"),my=Lr.join(Su,"config/yaml/",Ae.HDB_DEFAULT_CONFIG_FILE),Ry=1e4,ar,or,Ve,ya,La,Ua,Fn,Gn;Gn===void 0&&Fh();Yh.exports={notify:kh,fatal:$h,error:xn,warn:Au,info:Ma,debug:Ru,trace:mu,setLogLevel:by,log_level:Ve,loggerWithTag:Ay,suppressLogging:py,initLogSettings:Fh,setupConsoleLogging:xh,logCustomLevel:Oy,closeLogFile:Tu,getLogFilePath:()=>Ua,OUTPUTS:Gh};function Fh(e=!1){try{if(Gn===void 0||e){Tu();let t=Iy();Gn=Hh(t);let r=Ph(["ROOTPATH"]);({level:Ve,config_log_path:La,to_file:ar,to_stream:or}=wy(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=Ph(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}=Cy();ar=ar===void 0?n:ar,ar=Bh(ar),or=or===void 0?i:or,or=Bh(or),Ve=Ve===void 0?s:Ve,La=Ty,ya=Ae.LOG_NAMES.INSTALL,Ua=Lr.join(La,ya);return}throw xn("Error initializing log settings"),xn(t),t}xh()}a(Fh,"initLogSettings");var fu=!0;function xh(){Ks("error",xn),Ks("warn",Au),Ks("log",Ma),Ks("info",Ma),Ks("debug",Ru),Ks("trace",mu)}a(xh,"setupConsoleLogging");function Ks(e,t){console[e]=function(...r){if(fu&&t(...r),!/PM2 log:|App \[/.test(r[0]))return qh[e](...r)}}a(Ks,"logConsole");function Ay(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(kh),fatal:r($h),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(Ay,"loggerWithTag");function py(e){try{fu=!1,e()}finally{fu=!0}}a(py,"suppressLogging");var gy=hy?.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(_||gy+"/"+fy);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&&Vh(e),or&&process.stdout.write(e)}a(Vn,"logStdOut");function Da(e){ar&&Vh(e),or&&process.stderr.write(e)}a(Da,"logStdErr");function Vh(e){Ny(),Ws.appendFileSync(Fn,e)}a(Vh,"logToFile");function Tu(){try{Ws.closeSync(Fn)}catch{}Fn=null}a(Tu,"closeLogFile");function Ny(){Fn||(Fn=Ws.openSync(Ua,"a"),setTimeout(()=>{Tu()},Ry).unref())}a(Ny,"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 kh(...e){ke[Ve]<=ke.notify&&Vn(cr("notify",e))}a(kh,"notify");function $h(...e){ke[Ve]<=ke.fatal&&Da(cr("fatal",e))}a($h,"fatal");function Au(...e){ke[Ve]<=ke.warn&&Da(cr("warn",e))}a(Au,"warn");function Oy(e,t,...r){t===Gh.STDERR?Da(cr(e,r)):Vn(cr(e,r))}a(Oy,"logCustomLevel");function Iy(){let e;try{e=Sy.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(Iy,"getPropsFilePath");function by(e){Ve=e}a(by,"setLogLevel");function Bh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Bh,"autoCastBoolean");function wy(e){try{if(e.includes("config/settings.js")){let o=Hh(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=vh.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(wy,"getLogConfig");function Cy(){try{let e=vh.parseDocument(Ws.readFileSync(my,"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(Cy,"getDefaultConfig")});var Wh=f((fX,Kh)=>{"use strict";var yy=require("util"),Ly=require("path"),Uy=require("child_process"),My=yy.promisify(Uy.execFile),Dy=1e3*1e3*10;Kh.exports={findPs:Py};async function Py(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await My("ps",["wwxo",`pid,${r}`],{maxBuffer:Dy});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:Ly.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(Py,"findPs")});var Le=f((TX,Jh)=>{"use strict";var By="__dbis__",vy="__environment_name__",Hy="__dbi_defintion__",qy={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"},Gy=["__createdtime__","__updatedtime__"],Fy="\uFFFF",Qh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},xy=Object.values(Qh);Jh.exports={INTERNAL_DBIS_NAME:By,DBI_DEFINITION_NAME:Hy,SEARCH_TYPES:qy,TIMESTAMP_NAMES:Gy,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:vy,TRANSACTIONS_DBI_NAMES_ENUM:Qh,TRANSACTIONS_DBIS:xy,OVERFLOW_MARKER:Fy}});var it=f((mX,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"},Vy=ef[zh.INTERNAL_SERVER_ERROR],ky={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.`},$y={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Yy={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"},Ky={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"},Wy={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"},Qy={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."},Jy={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`},Xy={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"},Zy={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zy={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}`},jy={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."},eL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tL={...tf,...Yy,...ky,...Qy,...Jy,...Xy,...Zy,...zy,...Wy,...rf,...sf,...jy,...eL,...$y};nf.exports={CHECK_LOGS_WRAPPER:jh,HDB_ERROR_MSGS:tL,DEFAULT_ERROR_MSGS:ef,DEFAULT_ERROR_RESP:Vy,HTTP_STATUS_CODES:zh,LMDB_ERRORS_ENUM:Ky,AUTHENTICATION_ERROR_MSGS:tf,VALIDATION_ERROR_MSGS:rf,ITC_ERRORS:sf}});var y=f((AX,cf)=>{"use strict";var Qs=it(),rL=I(),sL=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&&rL[n](i)}};a(kn,"HdbError");function af(e,t,r,s=sL.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((NX,gf)=>{"use strict";var os=require("path"),nL=require("fs-extra"),Me=I(),_f=require("fs-extra"),$n=require("os"),iL=require("net"),aL=require("recursive-iterator"),Ue=m(),df=Wh(),uf=require("papaparse"),Pa=require("moment"),{inspect:oL}=require("util"),lf=require("is-number"),gX=require("lodash"),{hdb_errors:Ba}=y(),hf=require("util").promisify(setTimeout),cL=100,_L=5,uL="",lL=4,Ef={true:!0,false:!1,undefined:null,null:null,NaN:NaN};gf.exports={isEmpty:at,isEmptyOrZeroLength:kt,arrayHasEmptyValues:hL,arrayHasEmptyOrZeroLengthValues:fL,buildFolderPath:SL,isBoolean:ff,errorizeMessage:EL,stripFileExtension:mL,autoCast:RL,autoCastJSON:Sf,autoCastJSONDeep:pu,removeDir:AL,compareVersions:pL,isCompatibleDataVersion:gL,escapeRawValue:NL,unescapeValue:OL,stringifyProps:IL,timeoutPromise:wL,isClusterOperation:yL,getClusterUser:UL,checkGlobalSchemaTable:LL,getHomeDir:mf,getPropsFilePath:bL,promisifyPapaParse:ML,removeBOM:Rf,createEventPromise:DL,checkProcessRunning:PL,checkSchemaTableExist:BL,checkSchemaExists:Af,checkTableExists:pf,getStartOfTomorrowInSeconds:vL,getLimitKey:HL,isObject:TL,isNotEmptyAndHasValue:dL,autoCasterIsNumberCheck:Tf,backtickASTSchemaItems:qL,isPortTaken:CL,stopProcess:GL,createForkArgs:FL,autoCastBoolean:xL,async_set_timeout:hf,getTableHashAttribute:VL,doesSchemaExist:kL,doesTableExist:$L,stringifyObj:YL,ms_to_time:KL,changeExtension:WL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function EL(e){return e instanceof Error?e:new Error(e)}a(EL,"errorizeMessage");function at(e){return e==null}a(at,"isEmpty");function dL(e){return!at(e)&&(e||e===0||e===""||ff(e))}a(dL,"isNotEmptyAndHasValue");function kt(e){return at(e)||e.length===0||e.size===0}a(kt,"isEmptyOrZeroLength");function hL(e){if(at(e))return!0;for(let t=0;t<e.length;t++)if(at(e[t]))return!0;return!1}a(hL,"arrayHasEmptyValues");function fL(e){if(kt(e))return!0;for(let t=0;t<e.length;t++)if(kt(e[t]))return!0;return!1}a(fL,"arrayHasEmptyOrZeroLengthValues");function SL(...e){try{return e.join(os.sep)}catch{console.error(e)}}a(SL,"buildFolderPath");function ff(e){return at(e)?!1:e===!0||e===!1}a(ff,"isBoolean");function TL(e){return at(e)?!1:typeof e=="object"}a(TL,"isObject");function mL(e){return kt(e)?uL:e.slice(0,-lL)}a(mL,"stripFileExtension");function RL(e){return at(e)||e===""||typeof e!="string"?e:Ef[e]!==void 0?Ef[e]:Tf(e)===!0?Number(e):e}a(RL,"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 AL(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(AL,"removeDir");function pL(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(pL,"compareVersions");function gL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(gL,"isCompatibleDataVersion");function NL(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(NL,"escapeRawValue");function OL(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(OL,"unescapeValue");function IL(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(IL,"stringifyProps");function mf(){let e;try{e=$n.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(mf,"getHomeDir");function bL(){let e=os.join(mf(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return nL.existsSync(e)||(e=os.join(__dirname,"../","hdb_boot_properties.file")),e}a(bL,"getPropsFilePath");function wL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wL,"timeoutPromise");async function CL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=iL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(CL,"isPortTaken");function yL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Me.error(`Error checking operation against cluster ops ${t}`)}return!1}a(yL,"isClusterOperation");function LL(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(LL,"checkGlobalSchemaTable");function UL(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(UL,"getClusterUser");function ML(){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(ML,"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 DL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Me.info(`Got cluster status event response: ${oL(n)}`);try{i.cancel()}catch{Me.error("Error trying to cancel timeout.")}s(n)})})}a(DL,"createEventPromise");async function PL(e){let t=!0,r=0;do await hf(cL*r++),(await df.findPs(e)).length>0&&(t=!1);while(t&&r<_L);if(t)throw new Error(`process ${e} was not started`)}a(PL,"checkProcessRunning");function BL(e,t){let r=Af(e);if(r)return r;let s=pf(e,t);if(s)return s}a(BL,"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 vL(){let e=Pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=Pa().utc().unix();return e-t}a(vL,"getStartOfTomorrowInSeconds");function HL(){return Pa().utc().format("DD-MM-YYYY")}a(HL,"getLimitKey");function qL(e){try{let t=new aL(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(qL,"backtickASTSchemaItems");async function GL(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(GL,"stopProcess");function FL(e){return[e]}a(FL,"createForkArgs");function xL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xL,"autoCastBoolean");function VL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(VL,"getTableHashAttribute");function kL(e){return global?.hdb_schema?.[e]!==void 0}a(kL,"doesSchemaExist");function $L(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a($L,"doesTableExist");function YL(e){try{return JSON.stringify(e)}catch{return e}}a(YL,"stringifyObj");function KL(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(KL,"ms_to_time");function WL(e,t){let r=os.basename(e,os.extname(e));return os.join(os.dirname(e),r+t)}a(WL,"changeExtension")});var cs=f((IX,QL)=>{QL.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((wX,Pf)=>{"use strict";var gu=require("recursive-iterator"),JL=require("alasql"),Nu=require("clone"),Nf=b(),{handleHDBError:Of,hdb_errors:XL}=y(),{HDB_ERROR_MSGS:If,HTTP_STATUS_CODES:bf}=XL,ZL=["DISTINCT_ARRAY"],wf=Symbol("validateTables"),Ou=Symbol("validateTable"),bX=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 JL.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&&ZL.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((yX,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((DX,Vf)=>{"use strict";var Hf=it().LMDB_ERRORS_ENUM,UX=require("lmdb"),zL=Le(),MX=require("buffer").Buffer,{OVERFLOW_MARKER:qf,MAX_SEARCH_KEY_LENGTH:Ga}=zL,Gf=["number","string","symbol","boolean","bigint"];function jL(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(jL,"validateEnv");function eU(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(eU,"stringifyData");function tU(e){return e instanceof Date?e.valueOf():e}a(tU,"convertKeyValueToWrite");function rU(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(rU,"getIndexedValues");var Fa=0,Ff=0;function xf(){Ff=Date.now()-performance.now()}a(xf,"adjustStartTime");xf();var sU=6e4;setInterval(xf,sU).unref();function nU(){let e=performance.now()+Ff;return e>Fa?(Fa=e,e):(Fa+=488e-6,Fa)}a(nU,"getNextMonotonicTime");Vf.exports={validateEnv:jL,stringifyData:eU,convertKeyValueToWrite:tU,getNextMonotonicTime:nU,getIndexedValues:rU}});var $f=f((BX,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((HX,Yf)=>{"use strict";var iU={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))},aU="certificate.pem",oU="privateKey.pem",cU="ca.pem";Yf.exports={CERTIFICATE_VALUES:iU,CERTIFICATE_PEM_NAME:aU,PRIVATEKEY_PEM_NAME:oU,CA_PEM_NAME:cU}});var te=f((qX,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:_U,validateObjectAsync:uU,validateBySchema:lU};function _U(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(_U,"validateObject");async function uU(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(uU,"validateObjectAsync");function lU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lU,"validateBySchema")});var Cu=f((xX,Xf)=>{"use strict";var EU=require("fs-extra"),P=require("joi"),dU=require("os"),{boolean:ae,string:_r,number:Mt,array:wu}=P.types(),Kn=require("path"),hU=I(),ka=b(),FX=Kf(),fU=m(),SU=te(),Qf="log",TU="custom_functions",mU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",RU="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",AU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pU="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gU="rootPath config parameter is undefined",NU="clustering.enabled config parameter is undefined",us=Mt.min(0).required(),$a=wu.items({host:_r.required(),port:us}).empty(null),Ur;Xf.exports={configValidator:OU,routesValidator:LU,route_constraints:$a};function OU(e){if(Ur=e.rootPath,ka.isEmpty(Ur))throw gU;let t=ae.required(),r=P.valid("production","development").required(),s=Mt.min(1).max(1e3).empty(null).default(yU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Va),i=P.custom(IU).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(bU).empty(null).default(Va),u=e.clustering?.enabled;if(ka.isEmpty(u))throw NU;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,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required(),verify:ae.optional()}),user:_r.optional().empty(null)}).required():l=P.object({enabled:t,tls:P.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ae.required()})}).required(),P.object({clustering:l,customFunctions:P.object({enabled:t,network:P.object({cors:ae.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:ae.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:ae.required(),level:P.valid("notify","fatal","error","warn","info","debug","trace"),rotation:P.object({enabled:ae.optional(),compress:ae.optional(),interval:_r.custom(CU).optional().empty(null),maxSize:_r.custom(wU).optional().empty(null),path:_r.optional().empty(null).default(Va)}).required(),root:n,stdStreams:ae.required(),auditLog:ae.required()}).required(),operationsApi:P.object({authentication:P.object({operationTokenTimeout:P.required(),refreshTokenTimeout:P.required()}).required(),foreground:ae.required(),network:P.object({cors:ae.required(),corsAccessList:wu.required(),headersTimeout:Mt.min(1).required(),https:ae.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:ae.required(),overlappingSync:ae.optional(),caching:ae.optional(),compression:ae.optional(),noReadAhead:ae.optional(),path:_,prefetchWrites:ae.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(OU,"configValidator");function Jf(e){return EU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Jf,"doesPathExist");function IU(e,t){if(e===null)return;let r=Jf(e);return r?t.message(r):e}a(IU,"validatePemFile");function bU(e,t){P.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Jf(e);if(r)return t.message(r)}a(bU,"validatePath");function wU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(AU):e}a(wU,"validateRotationMaxSize");function CU(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(RU);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pU):e}a(CU,"validateRotationInterval");function yU(e,t){let r=t.state.path.join("."),s=dU.cpus().length,n=s-1;return n<=2&&(n=2),hU.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(yU,"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,TU);case"logging.root":return Kn.join(Ur,Qf);case"clustering.leafServer.streams.path":return Kn.join(Ur,"clustering","leaf");case"storage.path":return Kn.join(Ur,fU.SCHEMA_DIR_NAME);case"logging.rotation.path":return Kn.join(Ur,Qf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Va,"setDefaultRoot");function LU(e){let t=P.object({routes:$a});return SU.validateBySchema({routes:e},t)}a(LU,"routesValidator")});var lr=f((kX,aS)=>{"use strict";var At=m(),ot=b(),Te=I(),{configValidator:UU,routesValidator:Zf}=Cu(),Rt=require("fs-extra"),MU=require("yaml"),$t=require("path"),DU=require("is-number"),jf=require("properties-reader"),PU=require("lodash"),{handleHDBError:BU}=y(),{HTTP_STATUS_CODES:vU,HDB_ERROR_MSGS:Ya}=it(),HU=require("minimist"),{SCHEMAS_PARAM_CONFIG:Wn,CONFIG_PARAMS:Mr,CONFIG_PARAM_MAP:ur}=At,qU="Unable to get config value because config is uninitialized",GU="Config successfully initialized",FU="Error backing up config file",xU="Empty parameter sent to getConfigValue",eS=$t.join(At.PACKAGE_ROOT,"config","yaml",At.HDB_DEFAULT_CONFIG_FILE),VU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zf={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,ge;aS.exports={createConfigFile:kU,getDefaultConfig:$U,getConfigValue:rS,initConfig:sS,flattenConfig:ls,updateConfigValue:nS,updateConfigObject:KU,getConfiguration:JU,setConfiguration:XU,readConfigFile:Mu,getClusteringRoutes:ZU,initOldConfig:iS,getConfigFromFile:zU};function kU(e){let t=Js(eS);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&&tS(t,r),Uu(t);let s=t.toJSON();ge=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(kU,"createConfigFile");function tS(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(tS,"setSchemasConfig");function $U(e){if(Ka===void 0){let r=Js(eS);Ka=ls(r.toJSON())}let t=ur[e.toLowerCase()];if(t!==void 0)return Ka[t.toLowerCase()]}a($U,"getDefaultConfig");function rS(e){if(ot.isEmpty(e)){Te.error(xU);return}if(ge===void 0){Te.trace(qU);return}let t=ur[e.toLowerCase()];if(t!==void 0)return ge[t.toLowerCase()]}a(rS,"getConfigValue");function Lu(e){let t=HU(process.argv);return t.ROOTPATH?$t.join(t.ROOTPATH,At.HDB_CONFIG_FILE):jf(e).get(At.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Lu,"getConfigFilePath");function sS(e=!1){if(ge===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{iS(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}`)}YU(s,r),Uu(s);let n=s.toJSON();if(ge=ls(n),ge.logging_rotation_rotate)for(let i in zf)ge[i]&&Te.error(`Config ${zf[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Te.trace(GU)}}a(sS,"initConfig");function YU(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(YU,"checkForUpdatedConfig");function Uu(e){let t=e.toJSON(),r=UU(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 KU(e,t){ge===void 0&&(ge={});let r=ur[e.toLowerCase()];if(r===void 0){Te.trace(`Unable to update config object because config param '${e}' does not exist`);return}ge[r.toLowerCase()]=t}a(KU,"updateConfigObject");function nS(e,t,r=void 0,s=!1,n=!1){ge===void 0&&sS();let i=rS(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)}}}_&&tS(c,_),Uu(c);let u=c.getIn(["rootPath"]),l=$t.join(u,At.HDB_CONFIG_FILE);s===!0&&WU(o,u),Rt.writeFileSync(l,String(c)),n&&(ge=ls(c.toJSON())),Te.trace(`Config parameter: ${e} updated with value: ${t}`)}a(nS,"updateConfigValue");function WU(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(FU),Te.error(r)}}a(WU,"backupConfigFile");var QU=["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])&&!QU.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(DU(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 JU(){let e=ot.getPropsFilePath(),t=Lu(e);return Js(t).toJSON()}a(JU,"getConfiguration");async function XU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return nS(void 0,void 0,n,!0),VU}catch(i){throw typeof i=="string"||i instanceof String?BU(i,i,vU.BAD_REQUEST,void 0,void 0,!0):i}}a(XU,"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 MU.parseDocument(Rt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Js,"parseYamlDoc");function ZU(){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(ZU,"getClusteringRoutes");function iS(e){let t=jf(e);ge={};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?ge[n]=$t.dirname(s):ge[n]=s}return ge}a(iS,"initOldConfig");function zU(e){let t=Mu();return PU.get(t,e.replaceAll("_","."))}a(zU,"getConfigFromFile")});var v=f((YX,cS)=>{"use strict";var Du=require("fs-extra"),Yt=require("path"),jU=require("os"),eM=require("properties-reader"),Qn=I(),Xs=b(),L=m(),Wa=lr(),tM="Error initializing environment manager",Qa="BOOT_PROPS_FILE_PATH",oS=!1,rM={[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={};cS.exports={BOOT_PROPS_FILE_PATH:Qa,getHdbBasePath:sM,setHdbBasePath:nM,get:iM,initSync:oM,setProperty:V,initTestEnvironment:cM};function sM(){return Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(sM,"getHdbBasePath");function nM(e){Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nM,"setHdbBasePath");function iM(e){let t=Wa.getConfigValue(e);return t===void 0?Er[e]:t}a(iM,"get");function V(e,t){rM[e]&&(Er[e]=t),Wa.updateConfigObject(e,t)}a(V,"setProperty");function aM(){let e;try{e=Xs.getPropsFilePath(),Du.accessSync(e,Du.constants.F_OK|Du.constants.R_OK),oS=!0;let t=eM(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(aM,"doesPropFileExist");function oM(e=!1){try{(oS||aM())&&(Wa.initConfig(e),Er[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Wa.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(tM),Qn.error(t),console.error(t),process.exit(1)}}a(oM,"initSync");function cM(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"),V(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Yt.join(_,"settings.test")),V(L.HDB_SETTINGS_NAMES.INSTALL_USER,jU.userInfo().username),V(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),V(L.HDB_SETTINGS_NAMES.CERT_KEY,Yt.join(_,"envDir","utility","keys","certificate.pem")),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Yt.join(_,"envDir","utility","keys","privateKey.pem")),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Yt.join(_,"envDir","utility","keys","certificate.pem")),V(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),V(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Yt.join(_,"envDir","log")),V(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),V(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),V(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),V(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Yt.join(_,"envDir")),V(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Xs.isEmpty(n)?!0:n),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Xs.isEmpty(n)?!0:n),V(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),V(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Xs.isEmpty(i)?!1:i),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Xs.isEmpty(i)?!1:i),V(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),V(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),V(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Yt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),V(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Xs.isEmpty(c)?!1:c),o&&(V("CORS_ACCESSLIST",o),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(V(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(V(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(V(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),V(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Qa}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(cM,"initTestEnvironment")});var lS=f((WX,uS)=>{"use strict";var Pu=v(),_S=m();Pu.initSync();var _M=Pu.get(_S.CONFIG_PARAMS.STORAGE_COMPRESSION),uM=Pu.get(_S.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=_M&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=uM&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ja,"OpenDBIObject");uS.exports=Ja});var hS=f((JX,dS)=>{"use strict";var Zs=v(),Jn=m();Zs.initSync();var lM=Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Zs.get(Jn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",ES=Zs.get(Jn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),EM=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=lM,ES!==void 0&&(this.overlappingSync=ES),this.noReadAhead=EM}};a(Xa,"OpenEnvironmentObject");dS.exports=Xa});var X=f((ZX,pS)=>{"use strict";var Bu=require("lmdb"),pt=require("fs-extra"),Dt=require("path"),za=_s(),fS=I(),Ne=it().LMDB_ERRORS_ENUM,ja=$f(),vu=lS(),SS=hS(),Dr=Le(),Pt=Dr.INTERNAL_DBIS_NAME,TS=Dr.DBI_DEFINITION_NAME,dM="data.mdb",hM="lock.mdb",Xn=".mdb",fM="-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(Ne.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ne.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(Ne.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,dM),pt.constants.R_OK|pt.constants.F_OK),Dt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ne.INVALID_ENVIRONMENT)}else throw new Error(Ne.INVALID_ENVIRONMENT);throw s}}a(qu,"validateEnvironmentPath");function eo(e,t){if(za.validateEnv(e),t===void 0)throw new Error(Ne.DBI_NAME_REQUIRED)}a(eo,"validateEnvDBIName");async function SM(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===Ne.INVALID_ENVIRONMENT){let i=Dt.join(e,t);await pt.mkdirp(s?i:e);let o=new SS(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(SM,"createEnvironment");async function TM(e,t,r,s=!0){let n=await Gu(e,t);if(r===void 0)throw new Error(Ne.DESTINATION_PATH_REQUIRED);try{await pt.access(Dt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ne.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(TM,"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 SS(n,o),_=Bu.open(c);_.dbis=Object.create(null);let u=RS(_);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 mM(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 mS(o),delete global.lmdb_map[i]}}await pt.remove(n),await pt.remove(n===s?n+fM:Dt.join(Dt.dirname(n),hM))}a(mM,"deleteEnvironment");async function mS(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(mS,"closeEnvironment");function Fu(e,t,r=!1){let n=`${Dt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Fu,"getCachedEnvironmentName");function RM(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{fS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(RM,"listDBIDefinitions");function RS(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(RS,"listDBIs");function AM(e,t){let s=gt(e,Pt).getEntry(t),n=new ja;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{fS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(AM,"getDBIDefinition");function AS(e,t,r,s=!1){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Ne.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gt(e,t)}catch(n){if(n.message===Ne.DBI_DOES_NOT_EXIST){let i=new vu(r,s===!0),o=e.openDB(t,i),c=new ja(r===!0,s);return o[TS]=c,gt(e,Pt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AS,"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=AM(e,t):r=new ja,r===void 0)throw new Error(Ne.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(Ne.DBI_DOES_NOT_EXIST):n}return s[TS]=r,e.dbis[t]=s,s}a(gt,"openDBI");function pM(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(pM,"statDBI");async function gM(e,t){try{let r=Dt.join(e,t+Xn);return(await pt.stat(r)).size}catch{throw new Error(Ne.INVALID_ENVIRONMENT)}}a(gM,"environmentDataSize");function NM(e,t){if(eo(e,t),t=t.toString(),t===Pt)throw new Error(Ne.CANNOT_DROP_INTERNAL_DBIS_NAME);gt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gt(e,Pt).removeSync(t)}a(NM,"dropDBI");function OM(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===Ne.DBI_DOES_NOT_EXIST)AS(e,n,n!==t,n===t);else throw i}}}a(OM,"initializeDBIs");pS.exports={openDBI:gt,openEnvironment:Gu,createEnvironment:SM,listDBIs:RS,listDBIDefinitions:RM,createDBI:AS,dropDBI:NM,statDBI:pM,deleteEnvironment:mM,initializeDBIs:OM,TransactionCursor:Za,environmentDataSize:gM,copyEnvironment:TM,closeEnvironment:mS}});var NS=f((jX,gS)=>{"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");gS.exports=to});var IS=f((tZ,OS)=>{"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");OS.exports=ro});var wS=f((sZ,bS)=>{"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");bS.exports=so});var zs=f((cZ,LS)=>{"use strict";var IM=X(),bM=NS(),wM=IS(),CM=wS(),Kt=_s(),Zn=it().LMDB_ERRORS_ENUM,yM=Le(),dr=m(),LM=b(),UM=require("uuid"),iZ=require("lmdb"),{handleHDBError:MM,hdb_errors:DM}=y(),{OVERFLOW_MARKER:aZ,MAX_SEARCH_KEY_LENGTH:oZ}=yM,CS=v();CS.initSync();var no=CS.get(dr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xu=dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Es=dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function PM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new bM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];yS(u,!0,n);let l=BM(e,t,r,u),E=u[t];o.push(l),c.push(E)}return ku(o,c,s,i,n)}a(PM,"insertRecords");function BM(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(BM,"insertRecord");function vM(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(vM,"removeSkippedRecords");function yS(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(yS,"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),IM.initializeDBIs(e,t,r)}a(Vu,"initializeTransaction");async function HM(e,t,r,s,n=Kt.getNextMonotonicTime()){Yu(e,t,r,s),Vu(e,t,r);let i=new wM,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(HM,"updateRecords");async function qM(e,t,r,s,n=Kt.getNextMonotonicTime()){try{Yu(e,t,r,s)}catch(_){throw MM(_,_.message,DM.HTTP_STATUS_CODES.BAD_REQUEST)}Vu(e,t,r);let i=new CM,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;LM.isEmpty(u[t])?(l=UM.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(qM,"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(),vM(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(yS(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 GM(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(GM,"validateBasic");function Yu(e,t,r,s){if(GM(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");LS.exports={insertRecords:PM,updateRecords:HM,upsertRecords:qM}});var j=f((uZ,vS)=>{"use strict";var ri=m(),FM=b(),Ye=v(),si=require("path"),xM=require("minimist"),US=require("fs-extra"),MS=require("lodash");Ye.initSync();var{CONFIG_PARAMS:Pr,SCHEMAS_PARAM_CONFIG:zn,SYSTEM_SCHEMA_NAME:ao}=ri,jn,ei,ti;function DS(){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(DS,"getBaseSchemaPath");function PS(){if(ei!==void 0)return ei;if(Ye.getHdbBasePath()!==void 0)return ei=BS(ao),ei}a(PS,"getSystemSchemaPath");function VM(){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(VM,"getTransactionAuditStoreBasePath");function kM(e,t){let r=Ye.get(Pr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||si.join(VM(),e.toString())}a(kM,"getTransactionAuditStorePath");function BS(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(DS(),e)}a(BS,"getSchemaPath");function $M(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,xM(process.argv));let s=r[Pr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!FM.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 MS.set(_,[ao,zn.TABLES,t,zn.PATH],u),Ye.setProperty(Pr.SCHEMAS,_),u;let l=c?.[zn.PATH];if(l)return MS.set(_,[ao,zn.PATH],l),Ye.setProperty(Pr.SCHEMAS,_),l}}let n=r[Pr.STORAGE_PATH.toUpperCase()];if(n){if(!US.pathExistsSync(n))throw new Error(n+" does not exist");let i=si.join(n,e);return US.mkdirsSync(i),Ye.setProperty(Pr.STORAGE_PATH,n),i}return PS()}a($M,"initSystemSchemaPaths");function YM(){jn=void 0,ei=void 0,ti=void 0}a(YM,"resetPaths");vS.exports={getBaseSchemaPath:DS,getSystemSchemaPath:PS,getTransactionAuditStorePath:kM,getSchemaPath:BS,initSystemSchemaPaths:$M,resetPaths:YM}});var Wt=f((EZ,GS)=>{"use strict";var qS=b(),HS=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"}},KM=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 WM(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(WM,"checkValidTable");function QM(e,t){return qS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(QM,"validateSchemaExists");function JM(e,t){let r=t.state.ancestors[0].schema;return qS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(JM,"validateTableExists");function XM(e,t){return e.toLowerCase()===HS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${HS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(XM,"validateSchemaName");GS.exports={common_validators:oo,schema_regex:co,hdb_schema_table:KM,validateSchemaExists:QM,validateTableExists:JM,validateSchemaName:XM,checkValidTable:WM}});var _o=f((hZ,FS)=>{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 ZM(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(ZM,"schema_object");function zM(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(zM,"table_object");function jM(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(jM,"create_table_object");function eD(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(eD,"attribute_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=!1,ni.validateObject(e,Z)}a(tD,"describe_table");function rD(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(rD,"validateTableResidence");FS.exports={schema_object:ZM,create_table_object:jM,table_object:zM,attribute_object:eD,describe_table:tD,validateTableResidence:rD}});var VS=f((SZ,xS)=>{"use strict";var sD=require("uuid"),uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||sD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(uo,"CreateAttributeObject");xS.exports=uo});var Eo=f((mZ,kS)=>{"use strict";var nD=VS(),lo=class extends nD{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");kS.exports=lo});var YS=f((AZ,$S)=>{"use strict";$S.exports=aD;var iD="inserted";function aD(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===iD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(aD,"returnObject")});var ho=f((gZ,XS)=>{"use strict";var oD=m(),Wu=X(),cD=zs(),{getSystemSchemaPath:_D,getSchemaPath:uD}=j(),lD=cs(),ED=_o(),dD=Eo(),hD=YS(),{handleHDBError:KS,hdb_errors:QS}=y(),WS=b(),{HTTP_STATUS_CODES:fD}=QS,Qu=lD.hdb_attribute,JS=[];for(let e=0;e<Qu.attributes.length;e++)JS.push(Qu.attributes[e].attribute);var SD="inserted";XS.exports=TD;async function TD(e){let t=ED.attribute_object(e);if(t)throw KS(new Error,t.message,QS.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&WS.checkGlobalSchemaTable(e.schema,e.table);if(r)throw KS(new Error,r,fD.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=WS.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 dD(e.schema,e.table,e.attribute,e.id);try{let i=await Wu.openEnvironment(uD(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(_D(),oD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await cD.insertRecords(o,Qu.hash_attribute,JS,[n]);return hD(SD,c,{records:[n]},_)}catch(i){throw i}}a(TD,"lmdbCreateAttribute")});var Xu=f((OZ,zS)=>{var{hdb_schema_table:ZS}=Wt(),mD=te(),Ju=require("joi"),RD={undefined:"undefined",null:"null"},AD=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||RD[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"),pD=Ju.object({schema:ZS,table:ZS,records:Ju.array().items(Ju.object().custom(AD)).required()});zS.exports=function(e){return mD.validateBySchema(e,pD)}});var fo=f((wZ,eT)=>{"use strict";var hr=b(),jS=I(),bZ=Xu();eT.exports=gD;function gD(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 jS.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 jS.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(gD,"insertUpdateValidate")});var ai=f((yZ,tT)=>{"use strict";var ND=m().OPERATIONS_ENUM,So=class{constructor(t,r,s,n,i=void 0){this.operation=ND.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(So,"InsertObject");tT.exports=So});var mo=f((MZ,rT)=>{"use strict";var UZ=ai(),To=m(),zu=b(),Zu=I(),OD=require("uuid"),{handleHDBError:oi,hdb_errors:ID}=y(),{HDB_ERROR_MSGS:ci,HTTP_STATUS_CODES:_i}=ID;rT.exports=bD;function bD(e,t,r){for(let n=0;n<t.length;n++)wD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];CD(i,r,e.operation)}}a(bD,"processRows");function wD(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(wD,"validateAttribute");function CD(e,t,r){if(!e.hasOwnProperty(t)||zu.isEmptyOrZeroLength(e[t])){if(r===To.OPERATIONS_ENUM.INSERT||r===To.OPERATIONS_ENUM.UPSERT){e[t]=OD.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(CD,"validateHash")});var nT=f((PZ,sT)=>{"use strict";var Ro=class{constructor(t,r){this.type=t,this.message=r}};a(Ro,"ITCEventObject");sT.exports=Ro});var Ao=f((vZ,oT)=>{var yD=require("crypto"),iT=9;function LD(e){let t=MD(iT),r=aT(e+t);return t+r}a(LD,"createHash");function UD(e,t){let r=e.substr(0,iT),s=r+aT(t+r);return e===s}a(UD,"validateHash");function MD(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(MD,"generateSalt");function aT(e){return yD.createHash("md5").update(e).digest("hex")}a(aT,"md5");oT.exports={hash:LD,validate:UD}});var _T=f((qZ,cT)=>{"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");cT.exports={BaseLicense:ui,ExtendedLicense:po}});var tn=f((FZ,fT)=>{"use strict";var en=require("fs-extra"),uT=Ao(),lT=require("crypto"),DD=require("moment"),PD=require("uuid").v4,De=I(),el=require("path"),BD=b(),ct=m(),vD=_T().ExtendedLicense,js="invalid license key format",HD="061183",qD="mofi25",GD="aes-256-cbc",FD=16,xD=32,ET=v();ET.initSync();var ju;fT.exports={validateLicense:dT,generateFingerPrint:kD,licenseSearch:hT,getLicense:KD};function tl(){return el.join(ET.getHdbBasePath(),ct.LICENSE_KEY_DIR_NAME,ct.LICENSE_FILE_NAME)}a(tl,"getLicenseDirPath");function VD(){let e=tl();return el.join(e,ct.LICENSE_FILE_NAME)}a(VD,"getLicenseFilePath");function rl(){let e=tl();return el.join(e,ct.REG_KEY_FILE_NAME)}a(rl,"getFingerPrintFilePath");async function kD(){let e=rl();try{return await en.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $D();throw De.error(`Error writing fingerprint file to ${e}`),De.error(t),new Error("There was an error generating the fingerprint")}}a(kD,"generateFingerPrint");async function $D(){let e=PD(),t=uT.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($D,"writeFingerprint");function dT(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(qD),c=o[1];c=Buffer.concat([Buffer.from(c)],FD);let _=Buffer.concat([Buffer.from(i)],xD),u=lT.createDecipheriv(GD,_,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=YD(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<DD().valueOf()&&(r.valid_date=!1),uT.validate(o[1],`${HD}${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(dT,"validateLicense");function YD(e,t){try{let r=lT.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(YD,"checkOldLicense");function hT(){let e=new vD;e.api_call=0;let t=[];try{t=en.readFileSync(VD(),"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(BD.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=dT(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(hT,"licenseSearch");async function KD(){return ju||await hT(),ju}a(KD,"getLicense")});var rn=f((VZ,cl)=>{"use strict";var{Worker:WD,MessageChannel:QD,parentPort:fr,isMainThread:TT,threadId:JD,workerData:XD}=require("worker_threads"),{PACKAGE_ROOT:ZD}=m(),{join:zD,isAbsolute:jD,extname:eP}=require("path"),{totalmem:tP}=require("os"),al=m(),mT=v(),rP=tn(),go=I(),sP=m();mT.initSync();var nP=mT.get(al.CONFIG_PARAMS.HTTP_THREADS)||1,iP=1024*1024,Hr=[],ds=[],aP=50,RT=1e4,AT="restart",pT="request_thread_info",gT="resource_report",NT="thread_info",OT="added-port",sl;cl.exports={startWorker:nl,restartWorkers:ol,shutdownWorkers:cP,workers:Hr,setMonitorListener:dP,onMessageFromWorkers:_P,broadcast:uP};function nl(e,t={}){let s=rP.licenseSearch().ram_allocation,n=Math.min(Math.max(Math.floor(tP()/iP/(1+nP/4)),512),s||1/0),i=Math.min(Math.max(n>>7,16),64),o=[];for(let _ of ds){let{port1:u,port2:l}=new QD;_.postMessage({type:OT,port:u},[u]),o.push(l)}eP(e)||(e+=".js");let c=new WD(jD(e)?e:zD(ZD,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:i},argv:process.argv.slice(2),workerData:{addPorts:o,name:t.name},transferList:o},t));return No(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>{nl(e,t)},c.on("error",_=>{console.error("Worker error:",_),go.error("Worker error:",_)}),c.on("exit",_=>{Hr.splice(Hr.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<aP?(t.unexpectedRestarts=c.unexpectedRestarts+1,nl(e,t)):go.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",_=>{_.type===AT&&ol(_.workerType),_.type===pT&&lP(c),_.type===gT&&EP(c,_)}),Hr.push(c),fP(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(nl,"startWorker");var oP=[al.THREAD_TYPES.HTTP];async function ol(e=null,t=2,r=!0){if(TT){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=oP.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),RT*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:AT,workerType:e})}a(ol,"restartWorkers");function cP(e){return ol(e,1/0,!1)}a(cP,"shutdownWorkers");var IT=[];function _P(e){IT.push(e)}a(_P,"onMessageFromWorkers");function uP(e){for(let t of ds)try{t.postMessage(e)}catch(r){go.error("Unable to send message to worker",r)}}a(uP,"broadcast");function lP(e){e.postMessage({type:NT,workers:bT()})}a(lP,"sendThreadInfo");function bT(){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(bT,"getChildWorkerInfo");function EP(e,t){e.resources=t,e.resources.updated=Date.now()}a(EP,"recordResourceReport");var il;function dP(e){il=e}a(dP,"setMonitorListener");var hP=1e3,ST=!1;function fP(){ST||(ST=!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()},hP).unref())}a(fP,"startMonitoring");var SP=1e3;if(fr){No(fr);for(let e of XD.addPorts)No(e);setInterval(()=>{let e=process.memoryUsage();fr.postMessage({type:gT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},SP).unref(),sl=a(()=>new Promise((e,t)=>{fr.on("message",r),fr.postMessage({type:pT});function r(s){s.type===NT&&(fr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else sl=bT;cl.exports.getThreadInfo=sl;function No(e,t){ds.push(e),e.on("message",r=>{if(r.type===OT)No(r.port);else for(let s of IT)s(r)}).on("close",()=>{ds.splice(ds.indexOf(e),1)}).on("exit",()=>{ds.splice(ds.indexOf(e),1)}),t||e.unref()}a(No,"addPort");TT||fr.on("message",async e=>{let{type:t}=e;t===sP.ITC_EVENT_TYPES.SHUTDOWN&&(fr.unref(),setTimeout(()=>{go.warn("Thread did not voluntarily terminate",JD),process.exit(0)},RT).unref())})});var yT=f(($Z,CT)=>{"use strict";var _l=X(),TP=I(),wT=it().LMDB_ERRORS_ENUM;CT.exports=mP;async function mP(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!==wT.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!==wT.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){TP.error(t)}}a(mP,"cleanLMDBMap")});var Ot=f((KZ,MT)=>{"use strict";var Io=Xu(),Nt=b(),RP=require("util"),bo=Qt(),AP=Gr(),ul=I(),{handleHDBError:qr,hdb_errors:pP}=y(),{HTTP_STATUS_CODES:hs}=pP,gP=RP.promisify(AP.getTableSchema),NP="updated",LT="inserted",UT="upserted";MT.exports={insert:IP,update:bP,upsert:wP,validation:OP,flush:CP};async function OP(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 gP(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(OP,"validation");async function IP(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(LT,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(IP,"insertData");async function bP(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(NP,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(bP,"updateData");async function wP(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(UT,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(wP,"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===LT?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===UT?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Oo,"returnObject");function CP(e){return bo.flush(e.schema,e.table)}a(CP,"flush")});var El=f((QZ,BT)=>{var yP=te(),ll=require("joi"),{hdb_schema_table:DT}=Wt(),PT={schema:DT,table:DT},LP={date:ll.date().iso().required()},UP={timestamp:ll.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};BT.exports=function(e,t){let r=t==="timestamp"?{...PT,...UP}:{...PT,...LP},s=ll.object(r);return yP.validateBySchema(e,s)}});var GT=f((JZ,qT)=>{var MP=te(),vT=require("joi"),{hdb_schema_table:HT}=Wt(),DP=vT.object({schema:HT,table:HT,hash_values:vT.array().required()});qT.exports=function(e){return MP.validateBySchema(e,DP)}});var xT=f((XZ,FT)=>{"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");FT.exports={InsertObject:wo,NoSQLSeachObject:Co,DeleteResponseObject:yo}});var Ss=f((zZ,KT)=>{"use strict";var kT=El(),PP=GT(),Lo=b(),VT=require("moment"),$T=I(),{promisify:BP,callbackify:vP}=require("util"),fs=m(),HP=Gr(),dl=BP(HP.getTableSchema),hl=Qt(),{DeleteResponseObject:qP}=xT(),{handleHDBError:Fr,hdb_errors:GP}=y(),{HDB_ERROR_MSGS:Uo,HTTP_STATUS_CODES:xr}=GP,FP="records successfully deleted",xP=vP(YT);KT.exports={delete:xP,deleteRecord:YT,deleteFilesBefore:VP,deleteAuditLogsBefore:kP};async function VP(e){let t=kT(e,"date");if(t)throw Fr(t,t.message,xr.BAD_REQUEST,void 0,void 0,!0);if(!VT(e.date,VT.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),$T.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(VP,"deleteFilesBefore");async function kP(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,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),$T.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(kP,"deleteAuditLogsBefore");async function YT(e){let t=PP(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} ${FP}`),s}catch(s){if(s.message===fs.SEARCH_NOT_FOUND_MESSAGE){let n=new qP;return n.message=fs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(YT,"deleteRecord")});var QT=f((e3,WT)=>{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 $P(e){return Pe.password.presence=!0,Pe.username.presence=!0,Pe.role.presence=!0,Pe.active.presence=!0,fl.validateObject(e,Pe)}a($P,"addUserValidation");function YP(e){return Pe.password.presence=!1,Pe.username.presence=!0,Pe.role.presence=!1,Pe.active.presence=!1,fl.validateObject(e,Pe)}a(YP,"alterUserValidation");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,"dropUserValidation");WT.exports={addUserValidation:$P,alterUserValidation:YP,dropUserValidation:KP}});var Vr=f((r3,zT)=>{"use strict";var li=require("crypto"),XT="aes-256-cbc",WP=32,QP=16,Sl=64,ZT=32,JP=Sl+ZT,JT=new Map;zT.exports={encrypt:XP,decrypt:ZP,createNatsTableStreamName:zP};function XP(e){let t=li.randomBytes(WP),r=li.randomBytes(QP),s=li.createCipheriv(XT,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(XP,"encrypt");function ZP(e){let t=e.substr(0,Sl),r=e.substr(Sl,ZT),s=e.substr(JP,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=li.createDecipheriv(XT,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(ZP,"decrypt");function zP(e,t){let r=`${e}.${t}`,s=JT.get(r);return s||(s=li.createHash("md5").update(`${e}.${t}`).digest("hex"),JT.set(r,s)),s}a(zP,"createNatsTableStreamName")});var ue=f((i3,em)=>{"use strict";var{platform:n3}=require("os"),jP="nats-server.zip",Tl="nats-server",eB=process.platform==="win32"?`${Tl}.exe`:Tl,ml="HDB",tB=/^[^\s.,*>]+$/,jT="__request__",rB=a(e=>`${e}.${jT}`,"REQUEST_SUBJECT"),sB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},nB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},iB={HUB:"hub.pid",LEAF:"leaf.pid"},aB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},oB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ml,deliver_subject:"__HDB__.WORKQUEUE"},cB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ml,deliver_subject:"HDB.SCHEMAQUEUE"},_B={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ml,deliver_subject:"HDB.USERQUEUE"},uB={SUCCESS:"success",ERROR:"error"},lB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},EB={TXN:"txn",MSGID:"msgid"},sn={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},dB={[sn.ERR]:1,[sn.WRN]:2,[sn.INF]:3,[sn.DBG]:4,[sn.TRC]:5},hB={debug:"-D",trace:"-DVV"};em.exports={NATS_SERVER_ZIP:jP,NATS_SERVER_NAME:Tl,NATS_BINARY_NAME:eB,PID_FILES:iB,NATS_CONFIG_FILES:nB,SERVER_SUFFIX:aB,WORK_QUEUE_CONSUMER_NAMES:oB,SCHEMA_QUEUE_CONSUMER_NAMES:cB,USER_QUEUE_CONSUMER_NAMES:_B,NATS_TERM_CONSTRAINTS_RX:tB,REQUEST_SUFFIX:jT,UPDATE_REMOTE_RESPONSE_STATUSES:uB,CLUSTER_STATUS_STATUSES:lB,REQUEST_SUBJECT:rB,SUBJECT_PREFIXES:EB,MSG_HEADERS:sB,LOG_LEVELS:sn,LOG_LEVEL_FLAGS:hB,LOG_LEVEL_HIERARCHY:dB}});var Sr=f((c3,fm)=>{"use strict";var im="username is required",am="nothing to update, must supply active, role or password to update",om="password cannot be an empty string",cm="If role is specified, it cannot be empty.",_m="active must be true or false";fm.exports={addUser:gB,alterUser:NB,dropUser:IB,userInfo:bB,listUsers:Do,listUsersExternal:wB,setUsersToGlobal:Ei,findAndValidateUser:LB,getClusterUser:UB,USERNAME_REQUIRED:im,ALTERUSER_NOTHING_TO_UPDATE:am,EMPTY_PASSWORD:om,EMPTY_ROLE:cm,ACTIVE_BOOLEAN:_m};var um=Ot(),fB=Ss(),Al=Ao(),lm=QT(),Em=It(),pl=an(),_t=b(),dm=require("validate.js"),M=I(),{promisify:gl}=require("util"),Nl=Vr(),tm=m(),rm=ue(),SB=lr(),o3=v(),TB=tn(),mB=cs(),{handleHDBError:Jt,hdb_errors:RB}=y(),{HTTP_STATUS_CODES:Xt,AUTHENTICATION_ERROR_MSGS:Rl,HDB_ERROR_MSGS:nn}=RB,{UserEventMsg:Ol}=kr(),sm=require("lodash"),hm={username:!0,active:!0,role:!0,password:!0},nm=new Map,Mo=gl(Em.searchByValue),AB=gl(Em.searchByHash),pB=gl(fB.delete);async function gB(e){let t=dm.cleanAttributes(e,hm),r=lm.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 um.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(gB,"addUser");async function NB(e){let t=dm.cleanAttributes(e,hm);if(_t.isEmptyOrZeroLength(t.username))throw new Error(im);if(_t.isEmptyOrZeroLength(t.password)&&_t.isEmptyOrZeroLength(t.role)&&_t.isEmptyOrZeroLength(t.active))throw new Error(am);if(!_t.isEmpty(t.password)&&_t.isEmptyOrZeroLength(t.password.trim()))throw new Error(om);if(!_t.isEmpty(t.active)&&!_t.isBoolean(t.active))throw new Error(_m);let r=OB(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(cm);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 um.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(NB,"alterUser");function OB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OB,"isClusterUser");async function IB(e){try{let t=lm.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 pB(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(IB,"dropUser");async function bB(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 AB(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(bB,"userInfo");async function wB(){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(wB,"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]=sm.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=sm.cloneDeep(o),o.role=r[o.role],CB(o.role),i.set(o.username,o);return(await TB.getLicense()).enterprise?i:yB(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 CB(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(mB)){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(CB,"appendSystemTablesToRole");function yB(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(yB,"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 LB(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(nm.get(t)===s.password)return n;if(Al.validate(s.password,t))nm.set(t,s.password);else throw Jt(new Error,Rl.GENERIC_AUTH_FAIL,Xt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(LB,"findAndValidateUser");async function UB(){let e=await Do(),t=SB.getConfigFromFile(tm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!_t.isEmpty(r)&&r?.role?.role===tm.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+rm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+rm.SERVER_SUFFIX.ADMIN,r}a(UB,"getClusterUser")});var Po=f((u3,Rm)=>{"use strict";var Ts=I(),ut=m(),MB=yT(),Sm=Gr(),DB=ms(),PB=Sr(),{validateEvent:mm}=kr(),di=Qt(),BB=require("process"),vB={[ut.ITC_EVENT_TYPES.SCHEMA]:HB,[ut.ITC_EVENT_TYPES.USER]:GB};async function HB(e){let t=mm(e);if(t){Ts.error(t);return}Ts.trace("ITC schemaHandler received schema event:",e),await MB(e.message),await qB(e.message)}a(HB,"schemaHandler");async function qB(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 DB.describeTable({schema:e.schema,table:e.table});break;default:Sm.setSchemaDataToGlobal(Tm);break}else Sm.setSchemaDataToGlobal(Tm)}catch(t){Ts.error(t)}}a(qB,"syncSchemaMetadata");function Tm(e){e&&Ts.error(e)}a(Tm,"handleErrorCallback");async function GB(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=mm(e);if(t){Ts.error(t);return}Ts.trace(`ITC userHandler ${ut.HDB_ITC_CLIENT_PREFIX}${BB.pid} received user event:`,e),await PB.setUsersToGlobal()}catch(t){Ts.error(t)}}a(GB,"userHandler");Rm.exports=vB});var kr=f((f3,pm)=>{"use strict";var E3=I(),Il=b(),FB=m(),{ITC_ERRORS:hi}=it(),{parentPort:d3,threadId:xB,isMainThread:VB,workerData:h3}=require("worker_threads"),{onMessageFromWorkers:kB,broadcast:$B}=rn();pm.exports={sendItcEvent:YB,validateEvent:Am,SchemaEventMsg:KB,UserEventMsg:WB};var Bo;kB(e=>{Bo=Bo||Po(),Am(e),Bo[e.type]&&Bo[e.type](e)});function YB(e){!VB&&e.message&&(e.message.originator=xB),$B(e)}a(YB,"sendItcEvent");function Am(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(FB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return hi.INVALID_EVENT(e.type)}a(Am,"validateEvent");function KB(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(KB,"SchemaEventMsg");function WB(e){this.originator=e}a(WB,"UserEventMsg")});var an=f((m3,Im)=>{"use strict";var gm=m(),T3=b(),vo=I(),Nm=nT(),on,{sendItcEvent:Om}=kr();function QB(e){try{vo.trace("signalSchemaChange called with message:",e),on=on||Po();let t=new Nm(gm.ITC_EVENT_TYPES.SCHEMA,e);on.schema(t),Om(t)}catch(t){vo.error(t)}}a(QB,"signalSchemaChange");function JB(e){try{vo.trace("signalUserChange called with message:",e),on=on||Po();let t=new Nm(gm.ITC_EVENT_TYPES.USER,e);on.user(t),Om(t)}catch(t){vo.error(t)}}a(JB,"signalUserChange");Im.exports={signalSchemaChange:QB,signalUserChange:JB}});var Ho=f((A3,wm)=>{"use strict";var bm=b(),XB=m(),ZB=I(),zB=ho(),jB=Eo(),ev=an(),{SchemaEventMsg:tv}=kr(),rv="already exists in";wm.exports=sv;async function sv(e,t,r){if(bm.isEmptyOrZeroLength(r))return r;let s=[];bm.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 nv(e,t.schema,t.name,i)})),n}a(sv,"lmdbCheckForNewAttributes");async function nv(e,t,r,s){let n=new jB(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await iv(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(rv))ZB.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(nv,"createNewAttribute");async function iv(e){let t;return t=await zB(e),ev.signalSchemaChange(new tv(process.pid,XB.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(iv,"createAttribute")});var cn=f((g3,Cm)=>{"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");Cm.exports=qo});var Lm=f((O3,ym)=>{"use strict";var av=cn(),ov=m().OPERATIONS_ENUM,Go=class extends av{constructor(t,r,s,n,i=void 0){super(ov.INSERT,r,s,n,i),this.records=t}};a(Go,"LMDBInsertTransactionObject");ym.exports=Go});var Mm=f((b3,Um)=>{"use strict";var cv=cn(),_v=m().OPERATIONS_ENUM,Fo=class extends cv{constructor(t,r,s,n,i,o=void 0){super(_v.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Fo,"LMDBUpdateTransactionObject");Um.exports=Fo});var Pm=f((C3,Dm)=>{"use strict";var uv=cn(),lv=m().OPERATIONS_ENUM,xo=class extends uv{constructor(t,r,s,n,i,o=void 0){super(lv.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(xo,"LMDBUpsertTransactionObject");Dm.exports=xo});var vm=f((L3,Bm)=>{"use strict";var Ev=cn(),dv=m().OPERATIONS_ENUM,Vo=class extends Ev{constructor(t,r,s,n,i=void 0){super(dv.DELETE,s,n,t,i),this.original_records=r}};a(Vo,"LMDBDeleteTransactionObject");Bm.exports=Vo});var fi=f((D3,Fm)=>{"use strict";var M3=require("path"),Hm=X(),hv=Lm(),fv=Mm(),Sv=Pm(),Tv=vm(),_n=Le(),qm=b(),{CONFIG_PARAMS:mv}=m(),Gm=v();Gm.initSync();var ko=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:Rv}=j();Fm.exports=Av;async function Av(e,t){if(Gm.get(mv.LOGGING_AUDITLOG)===!1)return;let r=Rv(e.schema,e.table),s=await Hm.openEnvironment(r,e.table,!0),n=pv(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Hm.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),qm.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(Av,"writeTransaction");function pv(e,t){let r=qm.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ko.INSERT)return new hv(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPDATE)return new fv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.UPSERT)return new Sv(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ko.DELETE)return new Tv(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(pv,"createTransactionObject")});var bl=f((v3,xm)=>{"use strict";var gv=fo(),B3=ai(),Si=m(),Nv=mo(),Ov=zs().insertRecords,Iv=X(),bv=I(),wv=Ho(),{getSchemaPath:Cv}=j(),yv=fi();xm.exports=Lv;async function Lv(e){try{let{schema_table:t,attributes:r}=gv(e);Nv(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 wv(e.hdb_auth_header,t,r),n=Cv(e.schema,e.table),i=await Iv.openEnvironment(n,e.table),o=await Ov(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yv(e,o)}catch(c){bv.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(Lv,"lmdbCreateRecords")});var $m=f((q3,km)=>{"use strict";var Vm=m(),Uv=bl(),Mv=ai(),Dv=require("fs-extra"),{getSchemaPath:Pv}=j();km.exports=Bv;async function Bv(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Mv(Vm.SYSTEM_SCHEMA_NAME,Vm.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Uv(r),await Dv.mkdirp(Pv(e.schema))}a(Bv,"lmdbCreateSchema")});var Km=f((F3,Ym)=>{"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");Ym.exports=$o});var yl=f((Y3,Jm)=>{"use strict";var Wm=X(),wl=_s(),Cl=it().LMDB_ERRORS_ENUM,vv=Le(),Qm=I(),V3=b(),Hv=require("lmdb"),qv=Km(),Gv=m(),{OVERFLOW_MARKER:k3,MAX_SEARCH_KEY_LENGTH:$3}=vv,Fv=Gv.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function xv(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=Wm.listDBIs(e);Wm.initializeDBIs(e,t,n);let i=new qv,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[Fv]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,Hv.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{Qm.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(T)}catch(T){Qm.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(xv,"deleteRecords");Jm.exports={deleteRecords:xv}});var Ti=f((W3,Zm)=>{"use strict";var un=b(),Vv=yl(),kv=X(),{getSchemaPath:$v}=j(),Yv=fi(),Kv=I();Zm.exports=Wv;async function Wv(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 Xm([],[]);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=$v(e.schema,e.table),i=await kv.openEnvironment(n,e.table),o=await Vv.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Yv(e,o)}catch(c){Kv.error(`unable to write transaction due to ${c.message}`)}return Xm(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Wv,"lmdbDeleteRecords");function Xm(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(Xm,"createDeleteResponse")});var Ul=f((X3,zm)=>{"use strict";var Qv=m(),J3=_s();function Ll(e,t){let r=Object.create(null);if(t.length===1&&Qv.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 Xv(e,t,r,s){let n=Ll(r,e);s[t]=n}a(Xv,"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 zv(e,t,r,s,n,i){t.toString().endsWith(e)&&Rs(t,r,s,n,i)}a(zv,"endsWith");function jv(e,t,r,s,n,i){t.toString().includes(e)&&Rs(t,r,s,n,i)}a(jv,"contains");function eH(e,t,r,s,n,i){t>e&&Rs(t,r,s,n,i)}a(eH,"greaterThanCompare");function tH(e,t,r,s,n,i){t>=e&&Rs(t,r,s,n,i)}a(tH,"greaterThanEqualCompare");function rH(e,t,r,s,n,i){t<e&&Rs(t,r,s,n,i)}a(rH,"lessThanCompare");function sH(e,t,r,s,n,i){t<=e&&Rs(t,r,s,n,i)}a(sH,"lessThanEqualCompare");zm.exports={parseRow:Ll,searchAll:Jv,searchAllToMap:Xv,iterateDBI:Zv,endsWith:zv,contains:jv,greaterThanCompare:eH,greaterThanEqualCompare:tH,lessThanCompare:rH,lessThanEqualCompare:sH,pushResults:Rs}});var ps=f((tz,iR)=>{"use strict";var $r=X(),z3=I(),lt=_s(),Yo=Le(),oe=it().LMDB_ERRORS_ENUM,j3=b(),nH=m(),Ko=Ul(),{parseRow:iH}=Ko,ez=require("lmdb"),{OVERFLOW_MARKER:jm,MAX_SEARCH_KEY_LENGTH:aH}=Yo;function eR(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(eR,"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 tR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(jm)){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(tR,"getOverflowCheck");function oH(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=>iH(u.value,r))))}a(oH,"searchAll");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);Wo(r),r=Ri(e.database||e,r);let o=new Map;for(let{key:c,value:_}of eR(e,t,t,s,n,i))o.set(c,Ko.parseRow(_,r));return o}a(cH,"searchAllToMap");function _H(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=eR(e,void 0,t,r,s,n),c=o.transaction,_=tR(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(_H,"iterateDBI");function uH(e,t){if(lt.validateEnv(e),t===void 0)throw new Error(oe.HASH_ATTRIBUTE_REQUIRED);return $r.statDBI(e,t).entryCount}a(uH,"countAll");function lH(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(lH,"equals");function EH(e,t,r){return Yr(e,t,r),$r.openDBI(e,t).getValuesCount(r)}a(EH,"count");function dH(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(dH,"startsWith");function hH(e,t,r,s,n=!1,i=void 0,o=void 0){return rR(e,t,r,s,n,i,o,!0)}a(hH,"endsWith");function rR(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=tR(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(jm)?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(rR,"contains");function fH(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(fH,"greaterThan");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,!1,!1)}a(SH,"greaterThanEqual");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"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),mi(e,t,r,_,s,n,i,o,!1,!0)}a(TH,"lessThan");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,!1)}a(mH,"lessThanEqual");function RH(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(RH,"between");function AH(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(AH,"searchByHash");function pH(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(pH,"checkHashExists");function gH(e,t,r,s,n=[]){return nR(e,t,r,s,n),sR(e,t,r,s,n).map(i=>i[1])}a(gH,"batchSearchByHash");function NH(e,t,r,s,n=[]){nR(e,t,r,s,n);let i=new Map;for(let[o,c]of sR(e,t,r,s,n))i.set(o,c);return i}a(NH,"batchSearchByHashToMap");function sR(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(sR,"batchHashSearch");function nR(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(nR,"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>aH)throw new Error(oe.SEARCH_VALUE_TOO_LARGE)}a(Yr,"validateComparisonFunctions");function Ri(e,t){return t.length===1&&nH.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=$r.listDBIs(e)),t}a(Ri,"setGetWholeRowAttributes");iR.exports={searchAll:oH,searchAllToMap:cH,count:EH,countAll:uH,equals:lH,startsWith:dH,endsWith:hH,contains:rR,searchByHash:AH,setGetWholeRowAttributes:Ri,batchSearchByHash:gH,batchSearchByHashToMap:NH,checkHashExists:pH,iterateDBI:_H,greaterThan:fH,greaterThanEqual:SH,lessThan:TH,lessThanEqual:mH,between:RH}});var Ai=f((nz,_R)=>{var aR=require("lodash"),oR=te(),W=require("joi"),OH=b(),{hdb_schema_table:vt,checkValidTable:cR}=Wt(),{handleHDBError:IH,hdb_errors:bH}=y(),{HTTP_STATUS_CODES:wH}=bH,sz=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()}),CH=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)}),yH=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()});_R.exports=function(e,t){let r=null;switch(t){case"value":r=oR.validateBySchema(e,CH);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(cR("schema",e.schema)),i(cR("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=oR.validateBySchema(e,yH);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=OH.checkGlobalSchemaTable(e.schema,e.table);if(n)return IH(new Error,n,wH.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 _=aR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!aR.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((az,uR)=>{"use strict";var LH=X(),UH=Ai(),{getSchemaPath:MH}=j();uR.exports=DH;function DH(e){let t=UH(e,"hashes");if(t)throw t;let r=MH(e.schema,e.table);return LH.openEnvironment(r,e.table)}a(DH,"initialize")});var Dl=f((cz,lR)=>{"use strict";var PH=ps(),BH=Ml();lR.exports=vH;async function vH(e){let t=await BH(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return PH.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(vH,"lmdbGetDataByHash")});var ln=f((uz,ER)=>{"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");ER.exports=Qo});var hR=f((dz,dR)=>{"use strict";var Ez=ln(),HH=ps(),qH=Ml();dR.exports=GH;async function GH(e){let t=await qH(e),r=global.hdb_schema[e.schema][e.table];return HH.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(GH,"lmdbSearchByHash")});var Ht=f((fz,fR)=>{"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");fR.exports=Jo});var Xo=f((Tz,pR)=>{"use strict";var Be=ps(),FH=X(),xH=b(),C=Le(),gs=m(),VH=cs(),SR=it().LMDB_ERRORS_ENUM,{compareKeys:En}=require("ordered-binary"),{getSchemaPath:kH}=j(),Tr=gs.SEARCH_WILDCARDS;async function $H(e,t,r){let s;e.schema===gs.SYSTEM_SCHEMA_NAME?s=VH[e.table]:s=global.hdb_schema[e.schema][e.table];let n=AR(e,s.hash_attribute,r,t);return mR(e,n,s.hash_attribute,r)}a($H,"prepSearch");async function mR(e,t,r,s){let n=kH(e.schema,e.table),i=await FH.openEnvironment(n,e.table),o=RR(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(KH(e,r)===!1){let l=e.search_attribute;if(l===r)return s?TR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?TR(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(mR,"executeSearch");function RR(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(RR,"searchByType");function YH(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(YH,"filterByType");function TR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(TR,"createMapFromIterable");function KH(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(KH,"checkToFetchMore");function AR(e,t,r,s){if(xH.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(SR.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(SR.UNKNOWN_SEARCH_TYPE)}}a(AR,"createSearchTypeFromSearchObject");pR.exports={executeSearch:mR,createSearchTypeFromSearchObject:AR,prepSearch:$H,searchByType:RR,filterByType:YH}});var NR=f((Az,gR)=>{"use strict";var Rz=Ht(),WH=Ai(),QH=b(),JH=m(),XH=Xo();gR.exports=ZH;function ZH(e,t){if(!QH.isEmpty(t)&&JH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WH(e,"value");if(s)throw s;let n=!0;return XH.prepSearch(e,t,n)}a(ZH,"lmdbGetDataByValue")});var dn=f((Nz,OR)=>{"use strict";var gz=Ht(),zH=Ai(),jH=b(),eq=m(),tq=Xo();OR.exports=rq;async function rq(e,t){if(!jH.isEmpty(t)&&eq.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;return tq.prepSearch(e,t,!1)}a(rq,"lmdbSearchByValue")});var bR=f((bz,IR)=>{"use strict";var Iz=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");IR.exports={SearchByConditionsObject:Zo,SearchCondition:zo,SortAttribute:jo}});var UR=f((yz,LR)=>{"use strict";var Cz=bR().SearchByConditionsObject,sq=Ht(),nq=Ai(),Pl=ps(),ec=Le(),yR=Xo(),iq=Ul(),aq=require("lodash"),{getSchemaPath:oq}=j(),wR=X(),{handleHDBError:cq,hdb_errors:_q}=y(),{HTTP_STATUS_CODES:uq}=_q,lq=1e8;LR.exports=Eq;async function Eq(e){let t=nq(e,"conditions");if(t)throw cq(t,t.message,uq.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=oq(e.schema,e.table),s=await wR.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)wR.openDBI(s,u.search_attribute);let i=aq.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=lq}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await CR(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(yR.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=>iq.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await CR(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(Eq,"lmdbSearchByConditions");async function CR(e,t,r,s){let n=new sq(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,yR.searchByType(e,n,i,s).map(o=>o.value)}a(CR,"executeConditionSearch")});var pi=f((Uz,MR)=>{"use strict";var dq=m().OPERATIONS_ENUM,tc=class{constructor(t,r,s,n=void 0){this.operation=dq.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(tc,"DeleteObject");MR.exports=tc});var Bl=f((Dz,FR)=>{"use strict";var vR=Ht(),HR=pi(),qR=dn(),GR=Ti(),Ke=m(),DR=b(),PR=X(),{getTransactionAuditStorePath:hq,getSchemaPath:fq}=j(),BR=I();FR.exports=Sq;async function Sq(e){try{if(DR.isEmpty(global.hdb_schema[e.schema])||DR.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Tq(e),await mq(e);let t=fq(e.schema,e.table);try{await PR.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")BR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=hq(e.schema,e.table);await PR.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")BR.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Sq,"lmdbDropTable");async function Tq(e){let t=new vR(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 qR(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 HR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await GR(n)}a(Tq,"deleteAttributesFromSystem");async function mq(e){let t=new vR(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 qR(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 HR(Ke.SYSTEM_SCHEMA_NAME,Ke.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await GR(n)}catch(i){throw i}}a(mq,"dropTableFromSystem")});var VR=f((Bz,xR)=>{"use strict";var Rq=require("fs-extra"),Aq=Ht(),pq=ln(),gq=pi(),Nq=Bl(),Oq=Ti(),Iq=Dl(),bq=dn(),mr=m(),{getSchemaPath:wq}=j(),{handleHDBError:Cq,hdb_errors:yq}=y(),{HDB_ERROR_MSGS:Lq,HTTP_STATUS_CODES:Uq}=yq;xR.exports=Mq;async function Mq(e){let t;try{t=await Dq(e.schema);let r=new Aq(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 bq(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await Nq(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new gq(mr.SYSTEM_SCHEMA_NAME,mr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await Oq(n);let i=wq(t);await Rq.remove(i)}catch(r){throw r}}a(Mq,"lmdbDropSchema");async function Dq(e){let t=new pq(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 Iq(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw Cq(new Error,Lq.SCHEMA_NOT_FOUND(e),Uq.NOT_FOUND,void 0,void 0,!0);return s}a(Dq,"validateDropSchema")});var vl=f((Hz,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 YR=f((Fz,$R)=>{"use strict";var Pq=require("fs-extra"),sc=X(),{getTransactionAuditStorePath:Bq}=j(),Hl=Le(),Gz=vl();$R.exports=vq;async function vq(e){let t;try{let r=Bq(e.schema,e.table);await Pq.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(vq,"createTransactionsAuditEnvironment")});var JR=f((Vz,QR)=>{"use strict";var ql=m(),KR=X(),Hq=zs(),{getSystemSchemaPath:qq,getSchemaPath:Gq}=j(),Fq=cs(),xq=ho(),Gl=Eo(),Vq=I(),kq=YR(),xl=Fq.hdb_table,WR=[];for(let e=0;e<xl.attributes.length;e++)WR.push(xl.attributes[e].attribute);QR.exports=$q;async function $q(e,t){let r=Gq(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 KR.createEnvironment(r,t.table),e!==void 0){let o=await KR.openEnvironment(qq(),ql.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Hq.insertRecords(o,xl.hash_attribute,WR,[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 kq(t)}catch(o){throw o}}a($q,"lmdbCreateTable");async function Fl(e){try{await xq(e)}catch(t){Vq.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Fl,"createAttribute")});var ZR=f(($z,XR)=>{"use strict";var Yq=fo(),Kq=mo(),Wq=Ho(),gi=m(),Qq=zs().updateRecords,Jq=X(),{getSchemaPath:Xq}=j(),Zq=fi(),zq=I();XR.exports=jq;async function jq(e){try{let{schema_table:t,attributes:r}=Yq(e);Kq(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 Wq(e.hdb_auth_header,t,r),n=Xq(e.schema,e.table),i=await Jq.openEnvironment(n,e.table),o=await Qq(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Zq(e,o)}catch(c){zq.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(jq,"lmdbUpdateRecords")});var jR=f((Kz,zR)=>{"use strict";var eG=m().OPERATIONS_ENUM,nc=class{constructor(t,r,s,n=void 0){this.operation=eG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(nc,"UpsertObject");zR.exports=nc});var tA=f((Jz,eA)=>{"use strict";var Qz=jR(),tG=fo(),rG=mo(),sG=Ho(),Ni=m(),nG=zs().upsertRecords,iG=X(),{getSchemaPath:aG}=j(),oG=fi(),cG=I(),{handleHDBError:_G,hdb_errors:uG}=y();eA.exports=lG;async function lG(e){let t;try{t=tG(e)}catch(_){throw _G(_,_.message,uG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;rG(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 sG(e.hdb_auth_header,r,s),i=aG(e.schema,e.table),o=await iG.openEnvironment(i,e.table),c=await nG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await oG(e,c)}catch(_){cG.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(lG,"lmdbUpsertRecords")});var oA=f((Zz,aA)=>{"use strict";var EG=Ht(),rA=b(),sA=I(),dG=dn(),nA=m(),hG=yl().deleteRecords,fG=X(),{getSchemaPath:SG}=j(),{promisify:TG}=require("util"),mG=TG(setTimeout),iA=1e4,RG=10;aA.exports=AG;async function AG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(rA.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 EG(e.schema,e.table,nA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await dG(n,nA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw sA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return rA.isEmptyOrZeroLength(s)?(sA.trace("No records found to delete"),{message:"No records found to delete"}):await pG(e,s,t)}a(AG,"lmdbDeleteRecordsBefore");async function pG(e,t,r){let s=SG(e.schema,e.table),n=await fG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=iA){let _=t.slice(o,o+iA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await hG(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 mG(RG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(pG,"chunkDeletes")});var _A=f((jz,cA)=>{"use strict";var ic=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(ic,"DeleteBeforeObject");cA.exports=ic});var lA=f((t2,uA)=>{"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");uA.exports=ac});var hA=f((n2,dA)=>{"use strict";var Vl=X(),{getTransactionAuditStorePath:gG}=j(),s2=_A(),Oi=Le(),NG=b(),EA=lA(),OG=require("util").promisify,IG=OG(setTimeout),bG=1e4,wG=100;dA.exports=CG;async function CG(e){let t=gG(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 EA;do n=await yG(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 IG(wG);while(n.transactions_deleted>0);return i}a(CG,"deleteAuditLogsBefore");async function yG(e,t){let r=new EA;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];NG.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>bG)break}return await n,r}catch(s){throw s}}a(yG,"deleteTransactions")});var SA=f((a2,fA)=>{"use strict";var oc=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(oc,"DropAttributeObject");fA.exports=oc});var mA=f((_2,TA)=>{"use strict";var LG=Ht(),UG=pi(),c2=SA(),Zt=m(),MG=b(),kl=X(),DG=cs(),PG=dn(),BG=Ti(),{getSchemaPath:vG}=j();TA.exports=HG;async function HG(e,t=!0){let r;e.schema===Zt.SYSTEM_SCHEMA_NAME?r=DG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await GG(e),n=vG(e.schema,e.table),i=await kl.openEnvironment(n,e.table);return t===!0&&await qG(e,i,r.hash_attribute),kl.dropDBI(i,e.attribute),s}a(HG,"lmdbDropAttribute");async function qG(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(qG,"removeAttributeFromAllObjects");async function GG(e){let t=new LG(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 PG(t)).filter(o=>o[Zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(MG.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 UG(Zt.SYSTEM_SCHEMA_NAME,Zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return BG(i)}a(GG,"dropAttributeFromSystem")});var OA=f((E2,NA)=>{"use strict";var $l=X(),hn=Le(),l2=_s(),Yl=m(),RA=b(),{getTransactionAuditStorePath:FG}=j(),xG=ps(),cc=cn(),VG=I();NA.exports=kG;async function kG(e){let t=FG(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 AA(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,YG(r,e.search_values,n);case Yl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return $G(r,e.search_values);default:return AA(r)}}a(kG,"readAuditLog");function AA(e,t=[0,Date.now()]){RA.isEmpty(t[0])&&(t[0]=0),RA.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(AA,"searchTransactionsByTimestamp");function $G(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,gA(e,i))}return Object.fromEntries(r)}a($G,"searchTransactionsByUsername");function YG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=xG.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=gA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);pA(_,"records",r,l,o),pA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(YG,"searchTransactionsByHashValues");function pA(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(pA,"loopRecords");function gA(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){VG.warn(i)}return r}catch(s){throw s}}a(gA,"batchSearchTransactions")});var bA=f((h2,IA)=>{"use strict";var{getSchemaPath:KG}=j(),WG=X();IA.exports={writeTransaction:QG};async function QG(e,t,r){let s=KG(e,t);return(await WG.openEnvironment(s,t)).transaction(r)}a(QG,"writeTransaction")});var LA=f((S2,yA)=>{"use strict";var{getSchemaPath:wA}=j(),CA=X();yA.exports={flush:JG,resetReadTxn:XG};async function JG(e,t){return(await CA.openEnvironment(wA(e,t),t.toString())).flushed}a(JG,"flush");async function XG(e,t){try{(await CA.openEnvironment(wA(e,t),t.toString())).resetReadTxn()}catch{}}a(XG,"resetReadTxn")});var DA=f((m2,MA)=>{"use strict";var ZG=I(),{handleHDBError:zG}=y(),jG=bu(),eF=ho(),tF=bl(),rF=$m(),sF=Ti(),nF=Dl(),iF=hR(),aF=NR(),oF=dn(),cF=UR(),_F=VR(),uF=JR(),lF=ZR(),EF=tA(),dF=oA(),hF=hA(),fF=Bl(),SF=mA(),TF=OA(),mF=bA(),UA=LA(),_c=class extends jG{async searchByConditions(t){return cF(t)}async getDataByHash(t){return await nF(t)}async searchByHash(t){return await iF(t)}async getDataByValue(t,r){return await aF(t,r)}async searchByValue(t){return await oF(t)}async createSchema(t){return await rF(t)}async dropSchema(t){return await _F(t)}async createTable(t,r){return await uF(t,r)}async dropTable(t){return await fF(t)}async createAttribute(t){return await eF(t)}async createRecords(t){return await tF(t)}async updateRecords(t){return await lF(t)}async upsertRecords(t){try{return await EF(t)}catch(r){throw zG(r,null,null,ZG.ERR,r)}}async deleteRecords(t){return await sF(t)}async deleteRecordsBefore(t){return await dF(t)}async dropAttribute(t){return await SF(t)}async deleteAuditLogsBefore(t){return await hF(t)}async readAuditLog(t){return await TF(t)}writeTransaction(t,r,s){return mF.writeTransaction(t,r,s)}flush(t,r){return UA.flush(t,r)}resetReadTxn(t,r){return UA.resetReadTxn(t,r)}};a(_c,"LMDBBridge");MA.exports=_c});var Qt=f((A2,BA)=>{"use strict";var RF=DA(),AF=bu(),pF=v();pF.initSync();var PA;function gF(){return PA instanceof AF?PA:new RF}a(gF,"getBridge");BA.exports=gF()});var GA=f((g2,qA)=>{"use strict";var vA=require("lodash"),Ii=require("mathjs"),NF=require("jsonata"),HA=b();qA.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?vA.uniqWith(e,vA.isEqual):e,searchJSON:OF,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 OF(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(HA.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),HA.isEmpty(this.__ala__.res[r])){let s=NF(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(OF,"searchJSON")});var xA=f((O2,FA)=>{"use strict";var le=require("moment"),Kl="YYYY-MM-DDTHH:mm:ss.SSSZZ";le.suppressDeprecationWarnings=!0;FA.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 YA=f((I2,$A)=>{"use strict";var IF=require("@turf/area"),bF=require("@turf/length"),wF=require("@turf/circle"),CF=require("@turf/difference"),yF=require("@turf/distance"),LF=require("@turf/boolean-contains"),UF=require("@turf/boolean-equal"),MF=require("@turf/boolean-disjoint"),DF=require("@turf/helpers"),VA=m(),G=b();$A.exports={geoArea:PF,geoLength:BF,geoCircle:vF,geoDifference:HF,geoDistance:kA,geoNear:qF,geoContains:GF,geoEqual:FF,geoCrosses:xF,geoConvert:VF};var Wl="geo1 is required",Ql="geo2 is required";function PF(e){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),IF.default(e)}a(PF,"geoArea");function BF(e,t){if(G.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=G.autoCastJSON(e)),bF.default(e,{units:t||"kilometers"})}a(BF,"geoLength");function vF(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)),wF.default(e,t,{units:r||"kilometers"})}a(vF,"geoCircle");function HF(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)),CF(e,t)}a(HF,"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)),yF.default(e,t,{units:r||"kilometers"})}a(kA,"geoDistance");function qF(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(qF,"geoNear");function GF(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)),LF.default(e,t)}a(GF,"geoContains");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,"geoEqual");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,"geoCrosses");function VF(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(VA.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(VA.GEO_CONVERSION_ENUM).join(",")}`);return DF[t](e,r)}a(VF,"geoConvert")});var uc=f((w2,KA)=>{var Ns=GA(),Et=xA(),zt=YA();KA.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 JA=f((C2,QA)=>{"use strict";var wi=require("lodash"),Oe=require("alasql");Oe.options.cache=!1;var kF=uc(),WA=require("clone"),lc=require("recursive-iterator"),D=I(),B=b(),fn=Qt(),$F=m(),{hdb_errors:YF}=y(),KF="IS NULL",qt="There was a problem performing this search. Please check the logs and try again.";kF(Oe);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(WA(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 Oe.yy.LogicValue({value:s}):r.right instanceof Oe.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new Oe.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 Oe.yy.LogicValue({value:i}):s instanceof Oe.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Oe.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($F.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 Oe.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(WA(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(KF)>-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 Oe.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Oe.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Oe.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Oe.yy.FuncValue:new Oe.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(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 Oe.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 Oe.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(YF.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");QA.exports=Ec});var It=f((L2,ZA)=>{"use strict";var WF=Bf();ZA.exports={searchByConditions:ZF,searchByHash:zF,searchByValue:jF,search:e0};var Jl=Qt(),XA=require("util"),QF=XA.callbackify(Jl.searchByHash),JF=XA.callbackify(Jl.searchByValue),XF=JA();async function ZF(e){return Jl.searchByConditions(e)}a(ZF,"searchByConditions");function zF(e,t){try{QF(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(zF,"searchByHash");function jF(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(jF,"searchByValue");function e0(e,t){try{let r=new WF(e);r.validate(),new XF(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(e0,"search")});var ms=f((M2,ip)=>{"use strict";var jA=It(),Kr=I(),ep=_o(),t0=require("lodash"),r0=Vr(),tp=b(),{promisify:rp}=require("util"),z=m(),{handleHDBError:dc,hdb_errors:s0}=y(),{HDB_ERROR_MSGS:hc,HTTP_STATUS_CODES:sp}=s0,n0=v();n0.initSync();var zA=X(),i0=ps(),{getSchemaPath:a0}=j(),Ci=rp(jA.searchByValue),o0=rp(jA.searchByHash),Sn="name",np="hash_attribute",Xl="schema",c0="schema_table",_0="attribute";ip.exports={describeAll:u0,describeTable:fc,describeSchema:E0};async function u0(e){try{let t=tp.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:[np,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(u0,"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=ep.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),sp.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:c0,search_value:r+"."+s,get_attributes:[_0]},E=Array.from(await Ci(l));E=t0.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=l0(n)),i.attributes=E,i.clustering_stream_name=r0.createNatsTableStreamName(u.schema,u.name);try{let d=a0(i.schema,i.name),h=await zA.openEnvironment(d,i.name),T=zA.statDBI(h,i.hash_attribute);i.record_count=T.entryCount;for(let{key:R}of i0.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 l0(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(l0,"getAttrsByPerms");async function E0(e){let t=ep.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:[np,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 o0(o));if(c&&c.length<1)throw dc(new Error,hc.SCHEMA_NOT_FOUND(e.schema),sp.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]),tp.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(E0,"describeSchema")});var Gr=f((P2,up)=>{var Tn=cs(),{callbackify:cp,promisify:d0}=require("util");up.exports={setSchemaDataToGlobal:ap,getTableSchema:S0,getSystemSchema:m0,setSchemaDataToGlobalAsync:d0(ap)};var _p=ms(),h0=cp(_p.describeAll),f0=cp(_p.describeTable);function ap(e){h0(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Tn),global.hdb_schema=r,e(null,null)})}a(ap,"setSchemaDataToGlobal");function op(e,t){return e==="system"?Tn[t]:global.hdb_schema[e][t]}a(op,"returnSchema");function S0(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?T0(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,op(e,t))}):r(null,op(e,t))}a(S0,"getTableSchema");function T0(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}f0(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(T0,"setTableDataToGlobal");function m0(){return Tn}a(m0,"getSystemSchema")});var Sc=f((v2,lp)=>{"use strict";var R0=Qt();lp.exports={writeTransaction:A0};function A0(e,t,r){return R0.writeTransaction(e,t,r)}a(A0,"writeTransaction")});var Zl=f((q2,p0)=>{p0.exports={name:"harperdb",version:"4.1.0",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.6","nats-server":"2.9.15"},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.299.0","@aws-sdk/lib-storage":"3.300.0","@aws-sdk/abort-controller":"3.0.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.14.1","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.8.3",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.7.10",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.8.5",nats:"2.12.1",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.11.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.8","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((W2,yp)=>{"use strict";var Ie=v();Ie.initSync();var g0=require("fs-extra"),N0=require("semver"),Di=require("path"),{monotonicFactory:O0}=require("ulidx"),rE=O0(),I0=require("util"),dp=require("child_process"),b0=I0.promisify(dp.exec),w0=dp.spawn,k=ue(),Q=m(),Tc=b(),Wr=I(),mc=Vr(),C0=Sc(),yi=lr(),{encode:eE,decode:sE}=require("msgpackr"),{isEmpty:Os}=Tc,hp=Sr(),fp=12e10,{connect:y0,StorageType:Sp,RetentionPolicy:Tp,AckPolicy:nE,DeliverPolicy:Pi,DiscardPolicy:L0,NatsConnection:G2,JetStreamManager:F2,JetStreamClient:x2,StringCodec:V2,JSONCodec:U0,createInbox:iE,StreamSource:k2,headers:M0,toJsMsg:mp,nuid:$2,JetStreamOptions:Y2,ErrorCode:Ep,nanos:K2}=require("nats"),{PACKAGE_ROOT:D0}=m(),P0=Zl(),Rp=U0(),B0="clustering",v0=P0.engines[k.NATS_SERVER_NAME],H0=Di.join(D0,"dependencies"),tE=Di.join(H0,`${process.platform}-${process.arch}`,k.NATS_BINARY_NAME),zl,jl,Li,Ui,Mi,Gt;yp.exports={runCommand:Ap,checkNATSServerInstalled:q0,createConnection:aE,getConnection:Rc,getJetStreamManager:Bi,getJetStream:pp,getNATSReferences:dt,getServerList:F0,createLocalStream:oE,listStreams:gp,deleteLocalStream:x0,getServerConfig:vi,listRemoteStreams:V0,viewStream:k0,viewStreamIterator:$0,publishToStream:Y0,createWorkQueueStream:K0,addSourceToWorkStream:Op,request:W0,removeSourceFromWorkStream:bp,reloadNATS:cE,reloadNATSHub:Q0,reloadNATSLeaf:J0,extractServerName:Ip,requestErrorHandler:X0,updateWorkStream:Z0,createLocalTableStream:wp,createTableStreams:z0,purgeTableStream:Cp,purgeSchemaTableStreams:j0,getStreamInfo:ex,updateLocalStreams:rx,closeConnection:G0,getJsmServerName:Hi,addNatsMsgHeader:Np};async function Ap(e,t=void 0){let{stdout:r,stderr:s}=await b0(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(Ap,"runCommand");async function q0(){try{await g0.access(tE)}catch{return!1}let e=await Ap(`${tE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return N0.eq(t,v0)}a(q0,"checkNATSServerInstalled");async function aE(e,t,r,s=!0,n="127.0.0.1"){return y0({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ie.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(aE,"createConnection");async function G0(){Gt&&(await Gt.drain(),Gt=void 0)}a(G0,"closeConnection");async function Rc(){if(!Gt){let e=await hp.getClusterUser();if(Os(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Ie.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 pp(){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(pp,"getJetStream");async function dt(){let e=Gt||await Rc(),t=Ui||await Bi(),r=Mi||await pp();return{connection:e,jsm:t,js:r}}a(dt,"getNATSReferences");async function F0(e){let t=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await hp.getClusterUser(),n=await aE(t,r,s),i=iE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Rp.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(F0,"getServerList");async function oE(e,t){let{jsm:r}=await dt(),s=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Sp.File,retention:Tp.Limits,subjects:t,discard:L0.Old,duplicate_window:fp,max_msgs:n,max_bytes:i,max_age:s})}a(oE,"createLocalStream");async function gp(){let{jsm:e}=await dt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(gp,"listStreams");async function x0(e){let{jsm:t}=await dt();await t.streams.delete(e)}a(x0,"deleteLocalStream");async function V0(e){let{connection:t}=await dt(),r=[],s=iE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Rp.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(V0,"listRemoteStreams");async function k0(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=mp(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(k.MSG_HEADERS.ORIGIN),h.nats_msg_id=E.headers.get(k.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(k0,"viewStream");async function*$0(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=mp(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(k.MSG_HEADERS.ORIGIN),h.nats_msg_id=l.headers.get(k.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($0,"viewStreamIterator");async function Y0(e,t,r,s){Wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s),r=Np(s,r);let{js:n}=await dt(),i=await Hi(),o=`${e}.${i}`;try{Wr.trace(`publishToStream publishing to subject: ${o}, data:`,s),await n.publish(o,eE(s),{headers:r})}catch(c){if(c.code&&c.code.toString()==="503")Wr.trace(`publishToStream creating stream: ${t}`),await oE(t,[o]),await n.publish(o,eE(s),{headers:r});else throw c}}a(Y0,"publishToStream");function Np(e,t){t===void 0&&(t=M0());let r=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(k.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(k.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(k.MSG_HEADERS.ORIGIN)||t.append(k.MSG_HEADERS.ORIGIN,r),t}a(Np,"addNatsMsgHeader");function vi(e){e=e.toLowerCase();let t=Di.join(Ie.get(Q.CONFIG_PARAMS.ROOTPATH),B0);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)+k.SERVER_SUFFIX.HUB,config_file:k.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Di.join(t,k.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)+k.SERVER_SUFFIX.LEAF,config_file:k.NATS_CONFIG_FILES.LEAF_SERVER,domain:yi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+k.SERVER_SUFFIX.LEAF,pid_file_path:Di.join(t,k.PID_FILES.LEAF),hdb_nats_path:t}),zl;Wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(vi,"getServerConfig");async function K0(e){let{jsm:t}=await dt(),r=await Hi();try{await t.streams.add({name:e.stream_name,storage:Sp.File,retention:Tp.Workqueue,duplicate_window:fp,subjects:[`${k.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(K0,"createWorkQueueStream");async function Op(e,t,r){let{jsm:s}=await dt(),n=await s.streams.info(t),i=Ip(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:`${k.SUBJECT_PREFIXES.TXN}.>`};l||(T.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(T),await s.streams.update(t,n.config)}a(Op,"addSourceToWorkStream");function Ip(e){return e.split(".")[1]}a(Ip,"extractServerName");async function bp(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(bp,"removeSourceFromWorkStream");async function W0(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(W0,"request");function cE(e){return new Promise(async(t,r)=>{let s=w0(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 Q0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await cE(e)}a(Q0,"reloadNATSHub");async function J0(){let{pid_file_path:e}=vi(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await cE(e)}a(J0,"reloadNATSLeaf");function X0(e,t,r){let s;switch(e.code){case Ep.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Ep.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(X0,"requestErrorHandler");async function Z0(e,t){let r=t+k.SERVER_SUFFIX.LEAF;await C0.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Op(r,k.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await bp(r,k.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Z0,"updateWorkStream");async function wp(e,t){let r=mc.createNatsTableStreamName(e,t),s=await Hi(),n=tx(e,t,s);await oE(r,[n])}a(wp,"createLocalTableStream");async function z0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await wp(s,n)}}a(z0,"createTableStreams");async function Cp(e,t){if(Ie.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(Cp,"purgeTableStream");async function j0(e,t){if(Ie.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Cp(e,t[r])}a(j0,"purgeSchemaTableStreams");async function ex(e){return(await Bi()).streams.info(e)}a(ex,"getStreamInfo");function tx(e,t,r){return`${k.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(tx,"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 rx(){let e=await Bi(),t=await Hi(),r=await gp();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=sx(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===k.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${k.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===k.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${k.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(k.WORK_QUEUE_CONSUMER_NAMES.stream_name,k.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${k.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(rx,"updateLocalStreams");function sx(e){let{config:t}=e,r=!1;if(t.name===k.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===k.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ie.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ie.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(sx,"updateStreamLimits")});var _E=f((J2,Lp)=>{"use strict";var Ac=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Ac,"ClusteringOriginObject");Lp.exports=Ac});var qi=f((Z2,Up)=>{"use strict";var nx=b(),uE=v(),Qr=m(),ix=ue(),ax=ve(),jt=I(),ox=_E(),cx=Vr();uE.initSync();Up.exports={postOperationHandler:ux};async function pc(e,t,r,s){if(e.schema===Qr.SYSTEM_SCHEMA_NAME)return;let n=_x(e,t,r);n&&(jt.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await ax.publishToStream(`${ix.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,cx.createNatsTableStreamName(e.schema,e.table),s,n))}a(pc,"sendOperationTransaction");function _x(e,t,r){if(nx.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(_x,"convertCRUDOperationToTransaction");async function ux(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 ox(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(ux,"postOperationHandler")});var vp=f((j2,Bp)=>{"use strict";var lx=It(),Ex=Gr(),Mp=I(),Dp=Ot(),dx=Sc(),hx=require("clone"),EE=require("alasql"),fx=uc(),Pp=require("util"),Sx=Pp.promisify(Ex.getTableSchema),Tx=Pp.promisify(lx.search),mx=m(),lE=b(),Rx=qi();fx(EE);Bp.exports={update:px};var Ax="There was a problem performing this update. Please check the logs and try again.";async function px({statement:e,hdb_user:t}){let r=await Sx(e.table.databaseid,e.table.tableid),s=gx(e.columns);lE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=hx(n),c=lE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=EE.parse(_).statements[0],l=await dx.writeTransaction(r.schema,r.name,async()=>{let E=await Tx(u),d=Nx(s,E);return Ox(o,d,t)});return await Dp.flush({schema:r.schema,table:r.name}),l}a(px,"update");function gx(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 [${mx.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Mp.error(t),new Error(Ax)}}a(gx,"createUpdateRecord");function Nx(e,t){return lE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Nx,"buildUpdateRecords");async function Ox(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Dp.update(s);await Rx.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){Mp.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Ox,"updateRecords")});var qp=f((t4,Hp)=>{var Ix=require("alasql"),bx=It(),wx=I(),Cx=Qt(),hE=require("util"),dE=b(),yx=m(),Lx=Gr(),Ux=Sc(),Mx=qi(),Dx=Ot(),Px="record",Bx="successfully deleted",vx=hE.callbackify(Fx),Hx=hE.promisify(bx.search),qx=hE.promisify(Lx.getTableSchema);Hp.exports={convertDelete:vx};function Gx(e){return`${e.deleted_hashes.length} ${Px}${e.deleted_hashes.length===1?"":"s"} ${Bx}`}a(Gx,"generateReturnMessage");async function Fx({statement:e,hdb_user:t}){let r=await qx(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=Ix.parse(o).statements[0],_={operation:yx.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await Ux.writeTransaction(r.schema,r.name,async()=>(_.records=await Hx(c),Cx.deleteRecords(_)));return await Dx.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await Mx.postOperationHandler(_,u),dE.isEmptyOrZeroLength(u.message)&&(u.message=Gx(u)),delete u.txn_time,u}catch(u){throw wx.error(u),u.hdb_code?u.message:u}}a(Fx,"convertDelete")});var xp=f((s4,Fp)=>{"use strict";var SE=ms(),{hdb_errors:fE}=y();Fp.exports={checkSchemaExists:Gp,checkSchemaTableExists:xx,schema_describe:SE};async function Gp(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(Gp,"checkSchemaExists");async function xx(e,t){let r=await Gp(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(xx,"checkSchemaTableExists")});var Nc=f((a4,Yp)=>{"use strict";var mn=_o(),Is=xp(),Vx=I(),kx=require("uuid").v4,i4=require("clone"),Rn=an(),bs=m(),$x=require("util"),ws=Qt(),{handleHDBError:We,hdb_errors:Yx}=y(),{HDB_ERROR_MSGS:gc,HTTP_STATUS_CODES:Qe}=Yx,{SchemaEventMsg:An}=kr(),Vp=ve();Yp.exports={createSchema:Kx,createSchemaStructure:kp,createTable:Wx,createTableStructure:$p,createAttribute:zx,dropSchema:Qx,dropTable:Jx,dropAttribute:Xx};async function Kx(e){try{let t=await kp(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(Kx,"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 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(kp,"createSchemaStructure");async function Wx(e){let t=await $p(e);return Rn.signalSchemaChange(new An(process.pid,e.operation,e.schema,e.table)),t}a(Wx,"createTable");async function $p(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:kx(),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($p,"createTableStructure");async function Qx(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 Vp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(Qx,"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 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 Vp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Jx,"dropTable");async function Xx(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 Vx.error(`Got an error deleting attribute ${$x.inspect(e)}.`),s}}a(Xx,"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 zx(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(zx,"createAttribute")});var Wp=f((c4,Kp)=>{"use strict";var{OPERATIONS_ENUM:jx}=m(),Oc=class{constructor(t,r,s=void 0,n=void 0){this.operation=jx.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Oc,"ReadAuditLogObject");Kp.exports=Oc});var TE=f((l4,zp)=>{"use strict";var eV=Qt(),u4=Wp(),Ic=b(),bc=m(),tV=v(),{handleHDBError:Qp,hdb_errors:rV}=y(),{HDB_ERROR_MSGS:Jp,HTTP_STATUS_CODES:Xp}=rV,sV=Object.values(bc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Zp="To use this operation audit log must be enabled in harperdb-config.yaml";zp.exports=nV;async function nV(e){if(Ic.isEmpty(e.schema))throw new Error(Jp.SCHEMA_REQUIRED_ERR);if(Ic.isEmpty(e.table))throw new Error(Jp.TABLE_REQUIRED_ERR);if(!tV.get(bc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Qp(new Error,Zp,Xp.BAD_REQUEST,bc.LOG_LEVELS.ERROR,Zp,!0);let t=Ic.checkSchemaTableExist(e.schema,e.table);if(t)throw Qp(new Error,t,Xp.NOT_FOUND,bc.LOG_LEVELS.ERROR,t,!0);if(!Ic.isEmpty(e.search_type)&&sV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await eV.readAuditLog(e)}a(nV,"readAuditLog")});var ng=f((d4,sg)=>{var Jr=require("validate.js"),eg=te(),pn=m(),{handleHDBError:iV,hdb_errors:aV}=y(),{HDB_ERROR_MSGS:ce,HTTP_STATUS_CODES:oV}=aV,mE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cV={STRUCTURE_USER:"structure_user"},jp=Object.values(pn.ROLE_TYPES_ENUM),_V="attribute_permissions",uV="attribute_name",{PERMS_CRUD_ENUM:gn}=pn,lV=[_V,...Object.values(gn)],tg=[gn.READ,gn.INSERT,gn.UPDATE],EV=[uV,...tg];function dV(e){let t=mE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,rg(e,t)}a(dV,"addRoleValidation");function hV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,rg(e,t)}a(hV,"alterRoleValidation");function fV(e){let t=mE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,eg.validateObject(e,t)}a(fV,"dropRoleValidation");var SV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function rg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)SV.includes(s[o])||n.push(s[o]);n.length>0&&Ee(ce.INVALID_ROLE_JSON_KEYS(n),r);let i=eg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Ee(o,r)}),e.permission){let o=TV(e);o&&Ee(o,r),jp.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(jp.indexOf(o)<0){if(o===cV.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=>{lV.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=>{!EV.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}tg.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 mV(r)}a(rg,"customValidate");sg.exports={addRoleValidation:dV,alterRoleValidation:hV,dropRoleValidation:fV};function TV(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(TV,"validateNoSUPerms");function mV(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 iV(new Error,s,oV.BAD_REQUEST)}else return null}a(mV,"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((f4,ug)=>{"use strict";var ig=Ot(),ag=It(),RV=Ss(),pE=ng(),gE=an(),AV=require("uuid").v4,NE=require("util"),pV=tn(),Rr=m(),og=b(),OE=NE.promisify(ag.searchByValue),gV=NE.promisify(ag.searchByHash),NV=NE.promisify(RV.delete),OV=Ht(),IV=ln(),{hdb_errors:bV,handleHDBError:Gi}=y(),{HDB_ERROR_MSGS:cg,HTTP_STATUS_CODES:RE}=bV,{UserEventMsg:IE}=kr();ug.exports={addRole:wV,alterRole:yV,dropRole:LV,listRoles:_g};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 wV(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await pV.getLicense()).enterprise){let o=await _g();if(CV(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,cg.ROLE_ALREADY_EXISTS(e.role),RE.CONFLICT,void 0,void 0,!0);e.id||(e.id=AV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ig.insert(i),gE.signalUserChange(new IE(process.pid)),e=AE(e),e}a(wV,"addRole");function CV(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(!og.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(CV,"checkClusterUserRole");async function yV(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 ig.update(r)}catch(s){throw Gi(s)}return gE.signalUserChange(new IE(process.pid)),e}a(yV,"alterRole");async function LV(e){let t=pE.dropRoleValidation(e);if(t)throw Gi(new Error,t,RE.BAD_REQUEST,void 0,void 0,!0);let r=new IV(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await gV(r));if(s.length===0)throw Gi(new Error,cg.ROLE_NOT_FOUND,RE.NOT_FOUND,void 0,void 0,!0);let n=new OV(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(og.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 NV(c),gE.signalUserChange(new IE(process.pid)),`${s[0].role} successfully deleted`}a(LV,"dropRole");async function _g(){return OE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(_g,"listRoles")});var hg=f((T4,dg)=>{"use strict";var UV=v(),Xr=require("joi"),MV=te(),lg=require("moment"),DV=require("fs-extra"),wE=require("path"),PV=require("lodash"),Fi=m(),{LOG_LEVELS:Cs}=m(),BV="YYYY-MM-DD hh:mm:ss",vV=wE.resolve(__dirname,"../logs");dg.exports=function(e){return MV.validateBySchema(e,HV)};var HV=Xr.object({from:Xr.custom(Eg),until:Xr.custom(Eg),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(qV)});function Eg(e,t){if(lg(e,lg.ISO_8601).format(BV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Eg,"validateDatetime");function qV(e,t){if(PV.invert(Fi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=UV.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(vV,Fi.LOG_NAMES.INSTALL):wE.join(s,n);return DV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(qV,"validateReadLogPath")});var yE=f((R4,fg)=>{"use strict";var wc=m(),GV=I(),FV=v(),xV=hg(),CE=require("path"),VV=require("fs-extra"),{once:kV}=require("events"),{handleHDBError:$V,hdb_errors:YV}=y(),{PACKAGE_ROOT:KV}=m(),WV=CE.join(KV,"logs"),QV=1e3;fg.exports=JV;async function JV(e){let t=xV(e);if(t)throw $V(t,t.message,YV.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=FV.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(WV,wc.LOG_NAMES.INSTALL):CE.join(r,s),i=VV.createReadStream(n);i.on("error",U=>{GV.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?QV: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,ie;for(;(ie=$.exec(U))&&!i.destroyed;){q&&(q.message=U.slice(_e,ie.index),ye(q));let[Hn,as,Cr]=ie,Oa=Cr.split("] ["),Tw=Oa[0],mw=Oa[1];Oa.splice(0,2),q={timestamp:as,thread:Tw,level:mw,tags:Oa,message:""},_e=ie.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,ie;switch(!0){case(o&&_&&l):$=new Date(U.timestamp),_e=new Date(u),ie=new Date(E),U.level===c&&$>=_e&&$<=ie&&g<T?g++:U.level===c&&$>=_e&&$<=ie&&(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),ie=new Date(E),U.level===c&&$<=ie&&g<T?g++:U.level===c&&$<=ie&&(Zr(U,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(U.timestamp),_e=new Date(u),ie=new Date(E),$>=_e&&$<=ie&&g<T?g++:$>=_e&&$<=ie&&(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),ie=new Date(E),$<=ie&&g<T?g++:$<=ie&&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 kV(i,"close"),H}a(JV,"readLog");function Zr(e,t,r){t==="desc"?XV(e,r):t==="asc"?ZV(e,r):r.push(e)}a(Zr,"pushLineToResult");function XV(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(XV,"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((N4,mg)=>{"use strict";var LE=require("joi"),{string:Cc,boolean:Sg,date:zV}=LE.types(),jV=te(),{validateSchemaExists:p4,validateTableExists:g4,validateSchemaName:ek}=Wt(),tk=m(),rk=ue(),sk=v(),nk=Cc.invalid(sk.get(tk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(rk.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(),Tg={operation:Cc.valid("add_node","update_node"),node_name:nk,subscriptions:LE.array().items({table:Cc.required(),schema:Cc.custom(ek).required(),subscribe:Sg.required(),publish:Sg.required().custom(ak),start_time:zV.iso()}).min(1).required()};function ik(e){return jV.validateBySchema(e,LE.object(Tg))}a(ik,"addUpdateNodeValidator");function ak(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(ak,"checkForFalsy");mg.exports={addUpdateNodeValidator:ik,validation_schema:Tg}});var Ag=f((I4,Rg)=>{var ok=te(),ck={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Rg.exports=function(e){return ok.validateObject(e,ck)}});var UE=f((b4,pg)=>{"use strict";var _k=m().OPERATIONS_ENUM,Lc=class{constructor(t,r,s,n=void 0){this.operation=_k.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Lc,"UpdateObject");pg.exports=Lc});var Ng=f((C4,gg)=>{"use strict";var uk={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");gg.exports={JWTTokens:Uc,TOKEN_TYPE_ENUM:uk,JWTRSAKeys:Mc}});var vc=f((L4,wg)=>{"use strict";var Vi=require("jsonwebtoken"),ME=require("fs-extra"),DE=b(),bt=m(),{handleHDBError:Je,hdb_errors:lk}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=lk,xi=I(),Og=Ao(),vE=Sr(),Ek=Ot().update,dk=UE(),hk=an(),{UserEventMsg:fk}=kr(),zr=v();zr.initSync();var PE=require("path"),{JWTTokens:Sk,JWTRSAKeys:Tk,TOKEN_TYPE_ENUM:Dc}=Ng(),mk=zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Rk=zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(bt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Pc="RS256",BE;wg.exports={createTokens:Ak,validateOperationToken:gk,refreshOperationToken:pk,validateRefreshToken:bg};async function Ak(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 Ig(i,r.private_key,r.passphrase),c=await Vi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Rk,algorithm:Pc,subject:Dc.REFRESH}),_=Og.hash(c),u=new dk(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await Ek(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 hk.signalUserChange(new fk(process.pid)),new Sk(o,c)}a(Ak,"createTokens");async function Ig(e,t,r){return await Vi.sign(e,{key:t,passphrase:r},{expiresIn:mk,algorithm:Pc,subject:Dc.OPERATION})}a(Ig,"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 Tk(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 pk(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 bg(e.refresh_token);let t=await Bc(),r=await Vi.decode(e.refresh_token);return{operation_token:await Ig({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(pk,"refreshOperationToken");async function gk(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(gk,"validateOperationToken");async function bg(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(!Og.validate(t.refresh_token,e))throw Je(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(bg,"validateRefreshToken")});var Ug=f((D4,Lg)=>{"use strict";var Nk=Ag(),Nn=require("passport"),Ok=require("passport-local").Strategy,Ik=require("passport-http").BasicStrategy,bk=require("util"),wk=Sr(),yg=bk.callbackify(wk.findAndValidateUser),M4=it(),Ck=m(),Cg=vc();Nn.use(new Ok(function(e,t,r){yg(e,t,r)}));Nn.use(new Ik(function(e,t,r){yg(e,t,r)}));Nn.serializeUser(function(e,t){t(null,e)});Nn.deserializeUser(function(e,t){t(null,e)});function yk(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===Ck.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Cg.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Cg.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(yk,"authorize");function Lk(e,t){let r=Nk(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(Lk,"checkPermissions");Lg.exports={authorize:yk,checkPermissions:Lk}});var On=f((B4,Mg)=>{"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");Mg.exports={Node:Hc,NodeSubscription:qc}});var Pg=f((H4,Dg)=>{"use strict";var Uk=m().OPERATIONS_ENUM,Gc=class{constructor(t,r,s,n=void 0){this.operation=Uk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Gc,"UpsertObject");Dg.exports=Gc});var ki=f((G4,Bg)=>{"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");Bg.exports={RemotePayloadObject:Fc,RemotePayloadSubscription:xc}});var Hg=f((x4,vg)=>{"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");vg.exports=Vc});var Gg=f((k4,qg)=>{"use strict";var Mk=Hg(),Dk=Le(),In=X(),Pk=I(),{getSchemaPath:Bk,getTransactionAuditStorePath:vk}=j();qg.exports=Hk;async function Hk(e){let t=new Mk;try{let r=Bk(e.schema,e.name),s=await In.openEnvironment(r,e.name),n=In.statDBI(s,e.hash_attribute),i=vk(e.schema,e.name),o=await In.openEnvironment(i,e.name,!0),c=In.statDBI(o,Dk.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){Pk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Hk,"lmdbGetTableSize")});var xg=f((Y4,Fg)=>{"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");Fg.exports=kc});var bn=f((W4,$g)=>{"use strict";var He=require("systeminformation"),ys=I(),qk=m(),Gk=Gg(),kg=ms(),{getThreadInfo:Vg}=rn(),Fk=v();Fk.initSync();var xk=xg(),{openEnvironment:Vk}=X(),{getSchemaPath:kk}=j(),$c;$g.exports={getHDBProcessInfo:FE,getNetworkInfo:VE,getDiskInfo:xE,getMemoryInfo:GE,getCPUInfo:qE,getTimeInfo:HE,getSystemInformation:kE,systemInformation:$k,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:ie,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(qk.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 kg.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Gk(s));return e}a($E,"getTableSize");async function YE(){let e=await kg.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=kk(i,n),c=(await Vk(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 $k(e){let t=new xk;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 Vg(),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 Vg();break;default:break}return t}a($k,"systemInformation")});var KE=f((Z4,Yg)=>{"use strict";var J4=require("fs-extra"),X4=I();Yg.exports={version:Yk,printVersion:Wk,nodeVersion:Kk};var jr=Zl();function Yk(){if(jr)return jr.version}a(Yk,"version");function Kk(){if(jr&&jr.engines&&jr.engines["preferred-node"])return jr.engines["preferred-node"]}a(Kk,"nodeVersion");function Wk(){jr&&console.log(`HarperDB Version ${jr.version}`)}a(Wk,"printVersion")});var Ar=f((t5,Jg)=>{"use strict";var Qk=Ot(),WE=b(),QE=require("util"),Ls=m(),Kg=v();Kg.initSync();var Jk=Ug(),Wg=It(),{Node:j4,NodeSubscription:e5}=On(),Xk=ln(),Zk=Pg(),{RemotePayloadObject:zk,RemotePayloadSubscription:jk}=ki(),{handleHDBError:e$,hdb_errors:t$}=y(),{HTTP_STATUS_CODES:r$,HDB_ERROR_MSGS:s$}=t$,n$=Ht(),i$=bn(),a$=KE(),o$=QE.promisify(Jk.authorize),c$=QE.promisify(Wg.searchByHash),_$=QE.promisify(Wg.searchByValue);Jg.exports={authHeaderToUser:u$,isEmpty:l$,getNodeRecord:E$,upsertNodeRecord:d$,buildNodePayloads:h$,checkClusteringEnabled:f$,getAllNodeRecords:S$,getSystemInfo:T$,reverseSubscription:Qg};async function u$(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await o$(t,null),e}a(u$,"authHeaderToUser");function l$(e){return e==null}a(l$,"isEmpty");async function E$(e){let t=new Xk(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return c$(t)}a(E$,"getNodeRecord");async function d$(e){let t=new Zk(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Qk.upsert(t)}a(d$,"upsertNodeRecord");function Qg(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(Qg,"reverseSubscription");function h$(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}=Qg(c),h=new jk(_,u,l,d,E,c.start_time);n.push(h)}return new zk(r,t,n,s)}a(h$,"buildNodePayloads");function f$(){if(!Kg.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))throw e$(new Error,s$.CLUSTERING_NOT_ENABLED,r$.BAD_REQUEST,void 0,void 0,!0)}a(f$,"checkClusteringEnabled");async function S$(){let e=new n$(Ls.SYSTEM_SCHEMA_NAME,Ls.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await _$(e))}a(S$,"getAllNodeRecords");async function T$(){let e=await i$.getSystemInformation();return{hdb_version:a$.version(),node_version:e.node_version,platform:e.platform}}a(T$,"getSystemInfo")});var XE=f((s5,tN)=>{"use strict";var JE=ve(),Xg=b(),Zg=ue(),m$=m(),Yc=I(),zg=Nc(),R$=vl(),{RemotePayloadObject:A$}=ki(),{handleHDBError:jg,hdb_errors:p$}=y(),{HTTP_STATUS_CODES:eN}=p$,{NodeSubscription:g$}=On();tN.exports=N$;async function N$(e,t){let r;try{r=await JE.request(`${t}.${Zg.REQUEST_SUFFIX}`,new A$(m$.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 jg(new Error,c,eN.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Zg.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw jg(new Error,o,eN.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Xg.doesSchemaExist(c),l=s[c]!==void 0,E=Xg.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 zg.createSchema({operation:"create_schema",schema:c})),!E&&d){Yc.trace(`addNode creating table: ${_} in schema: ${c}`);let T=new R$(c,_,s[c][_].hash_attribute);await zg.createTable(T)}await JE.createLocalTableStream(c,_);let h=new g$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(N$,"reviewSubscriptions")});var Qc=f((i5,nN)=>{"use strict";var{handleHDBError:Kc,hdb_errors:O$}=y(),{HTTP_STATUS_CODES:Wc}=O$,{addUpdateNodeValidator:I$}=yc(),$i=I(),sN=m(),rN=ue(),b$=b(),ZE=ve(),Yi=Ar(),w$=v(),C$=XE(),{Node:y$,NodeSubscription:L$}=On(),U$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",M$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",D$=w$.get(sN.CONFIG_PARAMS.CLUSTERING_NODENAME);nN.exports=P$;async function P$(e,t=!1){$i.trace("addNode called with:",e),Yi.checkClusteringEnabled();let r=I$(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(!b$.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 C$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=U$,o;let c=Yi.buildNodePayloads(n,D$,sN.OPERATIONS_ENUM.ADD_NODE,await Yi.getSystemInfo());$i.trace("addNode sending remote payload:",c);let _;try{_=await ZE.request(`${s}.${rN.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===rN.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 L$(h.schema,h.table,h.publish,h.subscribe))}let l=new y$(s,u,_.system_info);return await Yi.upsertNodeRecord(l),i.length>0?o.message=M$:o.message=`Successfully added '${s}' to manifest`,o}a(P$,"addNode")});var jE=f((o5,oN)=>{"use strict";var{handleHDBError:Jc,hdb_errors:B$}=y(),{HTTP_STATUS_CODES:Xc}=B$,{addUpdateNodeValidator:v$}=yc(),Ki=I(),aN=m(),iN=ue(),H$=b(),zE=ve(),Wi=Ar(),q$=v(),{cloneDeep:G$}=require("lodash"),F$=XE(),{NodeSubscription:x$}=On(),V$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",k$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",$$=q$.get(aN.CONFIG_PARAMS.CLUSTERING_NODENAME);oN.exports=Y$;async function Y$(e){Ki.trace("updateNode called with:",e),Wi.checkClusteringEnabled();let t=v$(e);if(t)throw Jc(t,t.message,Xc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=G$(await Wi.getNodeRecord(r));if(H$.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 F$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=V$,o;let c=Wi.buildNodePayloads(n,$$,aN.OPERATIONS_ENUM.UPDATE_NODE,await Wi.getSystemInfo());Ki.trace("updateNode sending remote payload:",c);let _;try{_=await zE.request(`${r}.${iN.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===iN.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 K$(s[0],n,_.system_info),i.length>0?o.message=k$:o.message=`Successfully updated '${r}'`,o}a(Y$,"updateNode");async function K$(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 x$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Wi.upsertNodeRecord(s)}a(K$,"updateNodeTable")});var EN=f((_5,lN)=>{"use strict";var uN=require("joi"),{string:cN}=uN.types(),W$=te(),_N=m(),Q$=v(),J$=ue();lN.exports=X$;function X$(e){let t=cN.invalid(Q$.get(_N.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=uN.object({operation:cN.valid(_N.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return W$.validateBySchema(e,r)}a(X$,"removeNodeValidator")});var zc=f((l5,mN)=>{"use strict";var{handleHDBError:dN,hdb_errors:Z$}=y(),{HTTP_STATUS_CODES:hN}=Z$,z$=EN(),Qi=I(),fN=Ar(),j$=b(),Zc=m(),SN=ue(),TN=ve(),eY=v(),{RemotePayloadObject:tY}=ki(),{NodeSubscription:rY}=On(),sY=pi(),nY=Ss(),iY=eY.get(Zc.CONFIG_PARAMS.CLUSTERING_NODENAME);mN.exports=aY;async function aY(e){Qi.trace("removeNode called with:",e),fN.checkClusteringEnabled();let t=z$(e);if(t)throw dN(t,t.message,hN.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await fN.getNodeRecord(r);if(j$.isEmptyOrZeroLength(s))throw dN(new Error,`Node '${r}' was not found.`,hN.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new tY(Zc.OPERATIONS_ENUM.REMOVE_NODE,iY,[]),i,o=!1;try{i=await TN.request(`${r}.${SN.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 rY(l.schema,l.table,!1,!1);await TN.updateWorkStream(E,r)}let c=new sY(Zc.SYSTEM_SCHEMA_NAME,Zc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await nY.deleteRecord(c),i?.status===SN.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(aY,"removeNode")});var pN=f((d5,AN)=>{"use strict";var RN=require("joi"),{string:oY,array:cY}=RN.types(),_Y=te(),uY=yc();AN.exports=lY;function lY(e){let t=RN.object({operation:oY.valid("configure_cluster").required(),connections:cY.items(uY.validation_schema).required()});return _Y.validateBySchema(e,t)}a(lY,"configureClusterValidator")});var ed=f((f5,bN)=>{"use strict";var EY=m(),jc=I(),dY=b(),hY=zc(),fY=Qc(),gN=Ar(),SY=pN(),{handleHDBError:NN,hdb_errors:TY}=y(),{HTTP_STATUS_CODES:ON}=TY,mY="Configure cluster complete.",RY="Failed to configure the cluster. Check the logs for more details.",AY="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";bN.exports=pY;async function pY(e){jc.trace("configure cluster called with:",e),gN.checkClusteringEnabled();let t=SY(e);if(t)throw NN(t,t.message,ON.BAD_REQUEST,void 0,void 0,!0);let r=await gN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(IN(hY,{operation:EY.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(IN(fY,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(dY.isEmptyOrZeroLength(_))return{message:mY,connections:u};if(l)return{message:AY,failed_nodes:_,connections:u};throw NN(new Error,RY,ON.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(pY,"configureCluster");async function IN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(IN,"functionWrapper")});var CN=f((T5,wN)=>{"use strict";var e_=require("joi"),gY=te(),{validateSchemaExists:NY,validateTableExists:OY,validateSchemaName:IY}=Wt(),bY=e_.object({operation:e_.string().valid("purge_stream"),schema:e_.string().custom(NY).custom(IY).required(),table:e_.string().custom(OY).required()});function wY(e){return gY.validateBySchema(e,bY)}a(wY,"purgeStreamValidator");wN.exports=wY});var td=f((R5,yN)=>{"use strict";var{handleHDBError:CY,hdb_errors:yY}=y(),{HTTP_STATUS_CODES:LY}=yY,UY=CN(),MY=ve(),DY=Ar();yN.exports=PY;async function PY(e){let t=UY(e);if(t)throw CY(t,t.message,LY.BAD_REQUEST,void 0,void 0,!0);DY.checkClusteringEnabled();let{schema:r,table:s}=e;return await MY.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(PY,"purgeStream")});var nd=f((p5,BN)=>{"use strict";var sd=Ar(),BY=ve(),MN=v(),t_=m(),Us=ue(),vY=b(),rd=I(),{RemotePayloadObject:HY}=ki(),{ErrorCode:LN}=require("nats"),UN=MN.get(t_.CONFIG_PARAMS.CLUSTERING_ENABLED),DN=MN.get(t_.CONFIG_PARAMS.CLUSTERING_NODENAME);BN.exports={clusterStatus:qY,buildNodeStatus:PN};async function qY(){let e={node_name:DN,is_enabled:UN,connections:[]};if(!UN)return e;let t=await sd.getAllNodeRecords();if(vY.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(PN(t[s],e.connections));return await Promise.allSettled(r),e}a(qY,"clusterStatus");async function PN(e,t){let r=e.name,s=new HY(t_.OPERATIONS_ENUM.CLUSTER_STATUS,DN,void 0,await sd.getSystemInfo()),n,i,o=Us.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await BY.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===LN.NoResponders?o=Us.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===LN.Timeout?o=Us.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Us.CLUSTER_STATUS_STATUSES.CLOSED}let c=new GY(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(PN,"buildNodeStatus");function GY(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(GY,"NodeStatusObject")});var ad=f((N5,vN)=>{"use strict";var{handleHDBError:FY,hdb_errors:xY}=y(),{HTTP_STATUS_CODES:VY}=xY,kY=ve(),$Y=Ar(),id=b(),r_=require("joi"),YY=te(),KY=2e3,WY=r_.object({timeout:r_.number().min(1),connected_nodes:r_.boolean(),routes:r_.boolean()});vN.exports=QY;async function QY(e){$Y.checkClusteringEnabled();let t=YY.validateBySchema(e,WY);if(t)throw FY(t,t.message,VY.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 kY.getServerList(r??KY),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(QY,"clusterNetwork")});var FN=f((I5,GN)=>{"use strict";var od=require("joi"),HN=te(),{route_constraints:qN}=Cu();GN.exports={setRoutesValidator:JY,deleteRoutesValidator:XY};function JY(e){let t=od.object({server:od.valid("hub","leaf").required(),routes:qN.required()});return HN.validateBySchema(e,t)}a(JY,"setRoutesValidator");function XY(e){let t=od.object({routes:qN.required()});return HN.validateBySchema(e,t)}a(XY,"deleteRoutesValidator")});var _d=f((w5,$N)=>{"use strict";var Ms=lr(),cd=b(),s_=m(),xN=FN(),{handleHDBError:VN,hdb_errors:ZY}=y(),{HTTP_STATUS_CODES:kN}=ZY,zY="cluster routes successfully set",jY="cluster routes successfully deleted";$N.exports={setRoutes:eK,getRoutes:tK,deleteRoutes:rK};function eK(e){let t=xN.setRoutesValidator(e);if(t)throw VN(t,t.message,kN.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:zY,set:o,skipped:i}}a(eK,"setRoutes");function tK(){let e=Ms.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(tK,"getRoutes");function rK(e){let t=xN.deleteRoutesValidator(e);if(t)throw VN(t,t.message,kN.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:jY,deleted:i,skipped:o}}a(rK,"deleteRoutes")});var KN=f((y5,YN)=>{"use strict";var Ji=require("alasql"),Ds=require("recursive-iterator"),Ft=I(),sK=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,iK(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=nK(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 nK(e){return e.filter(t=>t[Xi.PERMS_CRUD_ENUM.READ])}a(nK,"filterReadRestrictedAttrs");function iK(e,t,r,s,n){aK(e,t,r,s,n)}a(iK,"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 aK(e,t,r,s,n){if(!e){Ft.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ji.yy.Insert?uK(e,t,r):e instanceof Ji.yy.Select?oK(e,t,r,s,n):e instanceof Ji.yy.Update?cK(e,t,r):e instanceof Ji.yy.Delete?_K(e,t,r):Ft.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(aK,"getRecordAttributesAST");function oK(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(sK.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(oK,"getSelectAttributes");function cK(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(cK,"getUpdateAttributes");function _K(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(_K,"getDeleteAttributes");function uK(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(uK,"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");YN.exports=n_});var JN=f((U5,QN)=>{var lK=require("os"),WN=v();QN.exports={checkPermission:EK};function EK(){if(lK.userInfo().username!==WN.get("install_user"))throw new Error(`Error: Must execute as ${WN.get("install_user")}`)}a(EK,"checkPermission")});var Ed=f((D5,eO)=>{var a_=tn(),XN=require("chalk"),er=I(),ZN=JN(),zN=require("prompt"),{promisify:dK}=require("util"),i_=m(),hK=require("fs-extra"),fK=require("path"),SK=b(),TK=KE(),jN=v();jN.initSync();var mK=require("moment"),RK=dK(zN.get),AK=fK.join(jN.getHdbBasePath(),i_.LICENSE_KEY_DIR_NAME,i_.LICENSE_FILE_NAME,i_.LICENSE_FILE_NAME);eO.exports={getFingerprint:gK,setLicense:pK,parseLicense:ld,register:NK,getRegistrationInfo:IK};async function pK(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(pK,"setLicense");async function gK(){try{ZN.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(gK,"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 hK.writeFile(AK,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 NK(){let e=await OK();return ld(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(NK,"register");async function OK(){try{ZN.checkPermission()}catch(s){return console.error(s.message)}let e=await a_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:XN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:XN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{zN.start()}catch(s){er.error(s)}let r;try{r=await RK(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(OK,"promptForRegistration");async function IK(){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(SK.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=TK.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=mK.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(IK,"getRegistrationInfo")});var rO=f((B5,tO)=>{"use strict";var bK=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+bK.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");tO.exports=o_});var iO=f((H5,nO)=>{"use strict";var sO=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+sO.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+sO.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");nO.exports=c_});var oO=f((G5,aO)=>{"use strict";var __=class{constructor(t,r){this.user=t,this.password=r}};a(__,"HdbUserObject");aO.exports=__});var _O=f((x5,cO)=>{"use strict";var wK=ue(),u_=class{constructor(t,r){this.user=t+wK.SERVER_SUFFIX.ADMIN,this.password=r}};a(u_,"SysUserObject");cO.exports=u_});var fd=f((k5,EO)=>{"use strict";var zi=require("path"),h_=require("fs-extra"),CK=rO(),yK=iO(),LK=oO(),UK=_O(),dd=Sr(),wn=b(),ze=lr(),d_=m(),l_=ue(),{CONFIG_PARAMS:de}=d_,ea=I(),f_=v(),uO=Vr(),hd=ve(),ji="clustering",MK=1e4,lO=5;EO.exports={generateNatsConfig:DK,removeNatsConfig:PK};async function DK(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 UK(Cr.username,uO.decrypt(Cr.hash))),q.push(new LK(Cr.username,uO.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 CK(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}`,ie=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${T}`,Hn=new yK(ze.getConfigFromFile(de.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[_e],[ie],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(DK,"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 PK(e){let{port:t,config_file:r}=hd.getServerConfig(e),{username:s,decrypt_hash:n}=await dd.getClusterUser(),i=0,o=500;for(;i<lO;){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>=lO)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(MK),_=zi.join(f_.get(de.ROOTPATH),ji,r);await h_.writeFile(_,c),await h_.remove(_),ea.notify(e,"started.")}a(PK,"removeNatsConfig")});var mO=f((Y5,TO)=>{"use strict";var ht=v(),BK=tn(),F=m(),ta=ue(),pr=require("path"),{PACKAGE_ROOT:T_}=m(),dO=v(),Cn="/dev/null",vK=pr.join(T_,"launchServiceScripts"),hO=pr.join(T_,"utility/scripts"),HK=pr.join(hO,F.HDB_RESTART_SCRIPT),fO=pr.resolve(T_,"dependencies",`${process.platform}-${process.arch}`,ta.NATS_BINARY_NAME);function SO(){let t=BK.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(SO,"generateMainServerConfig");var qK=9930;function GK(){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=dO.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!==qK?"-"+s:""),script:fO,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(GK,"generateNatsHubServerConfig");var FK=9940;function xK(){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=dO.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!==FK?"-"+s:""),script:fO,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(xK,"generateNatsLeafServerConfig");function VK(){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:vK,autorestart:!1};return ht.get(F.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Cn,t.error_file=Cn),t}a(VK,"generateClusteringUpgradeV4ServiceConfig");function kK(){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:hO},script:HK}}a(kK,"generateRestart");function $K(){return{apps:[SO()]}}a($K,"generateAllServiceConfigs");TO.exports={generateAllServiceConfigs:$K,generateMainServerConfig:SO,generateRestart:kK,generateNatsHubServerConfig:GK,generateNatsLeafServerConfig:xK,generateClusteringUpgradeV4ServiceConfig:VK}});var DO=f((j5,MO)=>{"use strict";var Y=m(),AO=b(),ra=fd(),m_=ve(),tr=ue(),K=require("pm2"),es=mO(),R_=v(),gr=I(),YK=Ar(),{startWorker:Sd,onMessageFromWorkers:KK}=rn(),W5=bn(),WK=require("util"),pO=require("child_process"),{execFile:QK}=pO,Q5=WK.promisify(pO.exec),J5=require("systeminformation");MO.exports={enterPM2Mode:JK,start:Ps,stop:Td,reload:gO,restart:NO,list:md,describe:Rd,connect:Nr,kill:eW,startAllServices:tW,startService:Ad,getUniqueServicesList:IO,restartAllServices:rW,isServiceRegistered:bO,reloadStopStart:wO,restartHdb:OO,deleteProcess:zK,startClusteringProcesses:LO,startClusteringThreads:UO,isHdbRestartRunning:jK,isClusteringRunning:nW,stopClustering:sW,reloadClustering:iW};var{PACKAGE_ROOT:X5}=m(),Z5=m(),{loggerWithTag:z5}=gr,sa=!1;KK(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,XK=10,RO;function Ps(e){if(sa)return ZK(e);let t=QK(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),!RO&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<XK&&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(()=>{RO=!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 gO(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(gO,"reload");function NO(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(NO,"restart");function zK(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(zK,"deleteProcess");async function OO(){await Ps(es.generateRestart())}a(OO,"restartHdb");async function jK(){let e=await md();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(jK,"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 eW(){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(eW,"kill");async function tW(){try{await LO(),await UO(),await Ps(es.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(tW,"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 IO(){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(IO,"getUniqueServicesList");async function rW(e=[]){try{let t=!1,r=await IO();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 NO(o))}t&&await wO(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(rW,"restartAllServices");async function bO(e){return je?.find(t=>t.name===e)?!0:!AO.isEmptyOrZeroLength(await Rd(e))}a(bO,"isServiceRegistered");async function wO(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=AO.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await Td(e),await Ad(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await OO():await gO(e)}a(wO,"reloadStopStart");var CO,yO;async function LO(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await Ad(t)}}a(LO,"startClusteringProcesses");async function UO(){CO=Sd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),yO=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 YK.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(UO,"startClusteringThreads");async function sW(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await CO.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await yO.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await Td(t)}}a(sW,"stopClustering");async function nW(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await bO(t)===!1)return!1}return!0}a(nW,"isClusteringRunning");async function iW(){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(iW,"reloadClustering")});var wd=f((tj,GO)=>{"use strict";var aW=require("minimist"),{isMainThread:Nd,parentPort:vO}=require("worker_threads"),re=m(),{PROCESS_DESCRIPTORS_VALIDATE:na}=re,rr=I(),Od=b(),A_=fd(),yn=ve(),pd=ue(),HO=lr(),sr=DO(),PO=bn(),oW=hu(),{restartWorkers:p_,onMessageFromWorkers:cW}=rn(),{handleHDBError:_W,hdb_errors:uW}=y(),{HTTP_STATUS_CODES:lW}=uW,g_=v();g_.initSync();var ia=`Restarting HarperDB. This may take up to ${re.RESTART_TIMEOUT_MS/1e3} seconds.`,EW="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",BO="Clustering is not enabled so cannot be restarted",dW="Invalid service",Bs,xt;GO.exports={restart:qO,restartService:Id};Nd&&cW(e=>{e.type===re.ITC_EVENT_TYPES.RESTART&&(e.workerType?Id({service:e.workerType}):qO({operation:"restart"}))});async function qO(e){xt=Object.keys(e).length===0,Bs=await sr.isServiceRegistered(re.HDB_PROC_DESCRIPTOR);let t=aW(process.argv);if(t.service){await Id(t);return}if(xt&&!Bs){console.error(EW);return}if(xt&&console.log(ia),Bs){sr.enterPM2Mode(),rr.notify(ia);let r=oW(Object.keys(re.CONFIG_PARAM_MAP),!0);return Od.isEmptyOrZeroLength(Object.keys(r))||HO.updateConfigValue(void 0,void 0,r,!0,!0),fW(),ia}return Nd?(rr.notify(ia),await bd(),setTimeout(()=>{p_()},50)):vO.postMessage({type:re.ITC_EVENT_TYPES.RESTART}),ia}a(qO,"restart");async function Id(e){let{service:t}=e;if(re.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw _W(new Error,dW,lW.BAD_REQUEST,void 0,void 0,!0);if(Bs=await sr.isServiceRegistered(re.HDB_PROC_DESCRIPTOR),!Nd)return vO.postMessage({type:re.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case na.clustering:if(!g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=BO;break}xt&&console.log("Restarting clustering"),rr.notify("Restarting clustering"),await bd();break;case na.clustering_config:case na["clustering config"]:if(!g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=BO;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(re.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 hW(){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(hW,"postDummyNatsMsg");async function fW(){await bd(),await sr.restart(re.HDB_PROC_DESCRIPTOR),await Od.async_set_timeout(2e3),g_.get(re.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await gd(),xt&&(await yn.closeConnection(),process.exit(0))}a(fW,"restartPM2Mode");async function bd(){if(!HO.getConfigFromFile(re.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await PO.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 hW(),await A_.generateNatsConfig(!0),Bs?(rr.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await sr.restart(re.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await sr.restart(re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await PO.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_(re.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=p_(re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(bd,"restartClustering");async function gd(){await A_.removeNatsConfig(re.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(gd,"removeNatsConfig")});var XO=f((nj,JO)=>{"use strict";var sj=require("lodash"),qe=m(),{handleHDBError:FO,hdb_errors:SW}=y(),{HDB_ERROR_MSGS:TW,HTTP_STATUS_CODES:mW}=SW,Cd=I();JO.exports={getRolePermissions:AW};var vs=Object.create(null),RW=a(e=>({key:e,perms:{}}),"perms_template_obj"),$O=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),YO=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,...YO(t,r,s,n)}),"table_perms_template"),xO=a((e,t=YO())=>({attribute_name:e,describe:QO(t),[aa]:t[aa],[Ld]:t[Ld],[Ud]:t[Ud]}),"attr_perms_template"),VO=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,KO=Object.values(qe.PERMS_CRUD_ENUM),WO=[aa,Ld,Ud];function AW(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=pW(e,r);return vs[t]?vs[t].key=s:vs[t]=RW(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),FO(new Error,TW.OUTDATED_PERMS_TRANSLATION_ERROR,mW.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
- ${r.stack}`;throw Cd.error(s),FO(new Error)}}}a(AW,"getRolePermissions");function pW(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]=gW(t[i]);return}r[i]=$O(),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=NW(c,_);r[i].describe||KO.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(pW,"translateRolePermissions");function gW(e){let t=$O(!0);return Object.keys(e).forEach(r=>{t.tables[r]=yd(!0,!0,!0,!0,!0)}),t}a(gW,"createStructureUserPermissions");function NW(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=VO(E,l[aa])),u[E]=d,u},{}),o=t[qe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=xO(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=QO(l),n.attribute_permissions.push(l),c||OW(l,_)}else if(u!==o){let l;qe.TIME_STAMP_NAMES.includes(u)?l=VO(u):l=xO(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=kO(n),n}else return e.describe=kO(e),e}a(NW,"getTableAttrPerms");function kO(e){return KO.filter(t=>e[t]).length>0}a(kO,"getSchemaTableDescribePerm");function QO(e){return WO.filter(t=>e[t]).length>0}a(QO,"getAttributeDescribePerm");function OW(e,t){WO.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(OW,"checkForHashPerms")});var sI=f((aj,rI)=>{"use strict";var he=require("joi"),ZO=require("fs-extra"),zO=require("path"),Ln=te(),jO=v(),eI=m(),tI=I(),{hdb_errors:IW}=y(),{HDB_ERROR_MSGS:et}=IW,ts=/^[a-zA-Z0-9-_]+$/;rI.exports={getDropCustomFunctionValidator:wW,setCustomFunctionValidator:CW,addCustomFunctionProjectValidator:yW,dropCustomFunctionProjectValidator:LW,packageCustomFunctionProjectValidator:UW,deployCustomFunctionProjectValidator:MW};function oa(e,t,r){try{let s=jO.get(eI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=zO.join(s,t);return ZO.existsSync(n)?e?t:r.message(et.PROJECT_EXISTS):e?r.message(et.NO_PROJECT):t}catch(s){return tI.error(s),r.message(et.VALIDATION_ERR)}}a(oa,"checkProjectExists");function bW(e,t,r,s){try{let n=jO.get(eI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=zO.join(n,e,t,r+".js");return ZO.existsSync(i)?r:s.message(et.NO_FILE)}catch(n){return tI.error(n),s.message(et.VALIDATION_ERR)}}a(bW,"checkFileExists");function wW(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(bW.bind(null,e.project,e.type)).required().messages({"string.pattern.base":et.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(wW,"getDropCustomFunctionValidator");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).required().messages({"string.pattern.base":et.BAD_FILE_NAME}),function_content:he.string().required()});return Ln.validateBySchema(e,t)}a(CW,"setCustomFunctionValidator");function yW(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(yW,"addCustomFunctionProjectValidator");function LW(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(LW,"dropCustomFunctionProjectValidator");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}),skip_node_modules:he.boolean()});return Ln.validateBySchema(e,t)}a(UW,"packageCustomFunctionProjectValidator");function MW(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(MW,"deployCustomFunctionProjectValidator")});var vd=f((cj,aI)=>{"use strict";var be=require("fs-extra"),Md=require("fast-glob"),ee=require("path"),nI=require("tar-fs"),iI=require("uuid").v4,Dd=require("normalize-path"),Hs=sI(),pe=I(),ft=m(),St=v(),{PACKAGE_ROOT:DW}=m(),{handleHDBError:Ge,hdb_errors:PW}=y(),{HDB_ERROR_MSGS:rs,HTTP_STATUS_CODES:Fe}=PW,BW=ee.join(DW,"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 vW(){pe.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,pe.ERR,t)}return e}a(vW,"customFunctionsStatus");function HW(){pe.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,pe.ERR,r)}return e}a(HW,"getCustomFunctions");function qW(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);pe.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,pe.ERR,c)}}a(qW,"getCustomFunction");function GW(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);pe.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,pe.ERR,c)}}a(GW,"setCustomFunction");function FW(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);pe.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,pe.ERR,o)}}a(FW,"dropCustomFunction");function xW(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);pe.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(BW,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,rs.ADD_FUNCTION,Fe.INTERNAL_SERVER_ERROR,pe.ERR,n)}}a(xW,"addCustomFunctionProject");function VW(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);pe.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,pe.ERR,n)}}a(VW,"dropCustomFunctionProject");async function kW(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);pe.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=iI();if(!be.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw pe.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"))}),nI.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(kW,"packageCustomFunctionProject");async function $W(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);pe.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,iI()+".tar"),c=await be.pathExists(o);while(c);await be.outputFile(o,n,{encoding:"base64"});let _=be.createReadStream(o);return _.pipe(nI.extract(i)),await new Promise(u=>_.on("end",u)),await be.unlink(o),`Successfully deployed project: ${s}`}a($W,"deployCustomFunctionProject");aI.exports={customFunctionsStatus:vW,getCustomFunctions:HW,getCustomFunction:qW,setCustomFunction:GW,dropCustomFunction:FW,addCustomFunctionProject:xW,dropCustomFunctionProject:VW,packageCustomFunctionProject:kW,deployCustomFunctionProject:$W}});var Hd=f((uj,cI)=>{"use strict";var nr=require("joi"),oI=te();cI.exports={readTransactionLogValidator:YW,deleteTransactionLogsBeforeValidator:KW};function YW(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 oI.validateBySchema(e,t)}a(YW,"readTransactionLogValidator");function KW(e){let t=nr.object({schema:nr.string().required(),table:nr.string().required(),timestamp:nr.date().timestamp().required()});return oI.validateBySchema(e,t)}a(KW,"deleteTransactionLogsBeforeValidator")});var O_=f((Ej,dI)=>{"use strict";var qd=m(),N_=ve(),_I=b(),uI=v(),lI=Vr(),{handleHDBError:Un,hdb_errors:WW}=y(),{HTTP_STATUS_CODES:Mn}=WW,{readTransactionLogValidator:QW,deleteTransactionLogsBeforeValidator:JW}=Hd(),EI="This operation relies on clustering and cannot run with it disable.",XW="Logs successfully deleted from transaction log.",ZW="All logs successfully deleted from transaction log.";dI.exports={readTransactionLog:zW,deleteTransactionLogsBefore:jW};async function*zW(e){let t=QW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!uI.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,EI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=_I.checkSchemaTableExist(r,s);if(n)throw Un(new Error,n,Mn.NOT_FOUND,void 0,void 0,!0);let i=lI.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(zW,"readTransactionLog");async function jW(e){let t=JW(e);if(t)throw Un(t,t.message,Mn.BAD_REQUEST,void 0,void 0,!0);if(!uI.get(qd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Un(new Error,EI,Mn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=_I.checkSchemaTableExist(r,s);if(i)throw Un(new Error,i,Mn.NOT_FOUND,void 0,void 0,!0);let o=lI.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=XW,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(jW,"deleteTransactionLogsBefore")});var Fd=f((hj,NI)=>{"use strict";var I_=require("joi"),b_=require("path"),hI=require("fs-extra"),{exec:eQ}=require("child_process"),tQ=require("util"),fI=tQ.promisify(eQ),rQ=m(),{handleHDBError:Dn,hdb_errors:sQ}=y(),{HTTP_STATUS_CODES:Pn}=sQ,SI=v(),nQ=te(),w_=I();SI.initSync();var Gd=SI.get(rQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),TI="npm install --omit=dev --json",iQ=`${TI} --dry-run`;NI.exports={installModules:aQ,auditModules:oQ};async function mI(e,t=void 0){let{stdout:r,stderr:s}=await fI(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(mI,"runCommand");async function aQ(e){w_.info(`starting installModules for request: ${e}`);let t=gI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?iQ:TI;await AI(),await pI(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(Gd,_),l,E=null;try{let{stdout:d,stderr:h}=await fI(n,{cwd:u});l=d?d.replace(`
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=RI(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(aQ,"installModules");function RI(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(RI,"parseNPMStdErr");async function oQ(e){w_.info(`starting auditModules for request: ${e}`);let t=gI(e);if(t)throw Dn(t,t.message,Pn.BAD_REQUEST);let{projects:r}=e;await AI(),await pI(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 mI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=RI(_.stderr)}}return w_.info(`finished auditModules with response ${s}`),s}a(oQ,"auditModules");async function AI(){try{return await mI("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(AI,"checkNPMInstalled");async function pI(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 hI.pathExists(o)){t.push(i);continue}let _=b_.join(o,"package.json");await hI.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(pI,"checkProjectPaths");function gI(e){let t=I_.object({projects:I_.array().min(1).items(I_.string()).required(),dry_run:I_.boolean().default(!1)});return nQ.validateBySchema(e,t)}a(gI,"modulesValidator")});var II=f((Sj,OI)=>{"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");OI.exports=C_});var wI=f((mj,bI)=>{"use strict";var y_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(y_,"PermissionAttributeResponseObject");bI.exports=y_});var xd=f((Aj,yI)=>{"use strict";var CI=II(),cQ=wI(),{HDB_ERROR_MSGS:_Q}=it(),L_=class{constructor(){this.error=_Q.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 CI(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new cQ(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 CI(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");yI.exports=L_});var P_=f((gj,$I)=>{"use strict";var Vd=Ot(),U_=It(),Ct=Nc(),ua=ms(),kd=Ss(),uQ=TE(),la=Sr(),M_=bE(),me=I(),lQ=yE(),EQ=Qc(),dQ=jE(),hQ=zc(),fQ=ed(),SQ=td(),TQ=nd(),mQ=ad(),$d=_d(),Or=b(),RQ=KN(),Yd=Ed(),MI=wd(),wt=m(),DI=XO(),AQ=bn(),PI=vc(),BI=lr(),Ir=vd(),pQ=require("alasql"),vI=O_(),HI=Fd(),qI=xd(),{handleHDBError:tt,hdb_errors:GI}=y(),{HDB_ERROR_MSGS:we,HTTP_STATUS_CODES:ca}=GI,p=new Map,FI="delete",ss="insert",ns="read",qs="update",_a="describe",LI=ua.describeSchema.name,UI=ua.describeTable.name,xI={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},gQ="catchup",NQ="handleGetJob",OQ="handleGetJobsByStartDate",D_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},IQ=[Ct.createTable.name,Ct.createAttribute.name,Ct.dropTable.name,Ct.dropAttribute.name],VI={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,[FI]));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(lQ.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($d.setRoutes.name,new N(!0,[]));p.set($d.getRoutes.name,new N(!0,[]));p.set($d.deleteRoutes.name,new N(!0,[]));p.set(BI.setConfiguration.name,new N(!0,[]));p.set(TQ.clusterStatus.name,new N(!0,[]));p.set(mQ.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(MI.restart.name,new N(!0,[]));p.set(MI.restartService.name,new N(!0,[]));p.set(uQ.name,new N(!0,[]));p.set(AQ.systemInformation.name,new N(!0,[]));p.set(BI.getConfiguration.name,new N(!0,[]));p.set(vI.readTransactionLog.name,new N(!0,[]));p.set(vI.deleteTransactionLogsBefore.name,new N(!0,[]));p.set(HI.installModules.name,new N(!0,[]));p.set(HI.auditModules.name,new N(!0,[]));p.set(PI.createTokens.name,new N(!1,[]));p.set(PI.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(NQ,new N(!1,[]));p.set(OQ,new N(!0,[]));p.set(gQ,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(VI.EXPORT_TO_S3,new N(!0,[]));p.set(VI.EXPORT_LOCAL,new N(!0,[]));p.set(wt.VALID_SQL_OPS_ENUM.DELETE,new N(!1,[FI]));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]));$I.exports={verifyPerms:wQ,verifyPermsAst:bQ,verifyBulkLoadAttributePerms:yQ};function bQ(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 qI,n=new RQ(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(_&&xI[r])throw tt(new Error,we.DROP_SYSTEM,ca.FORBIDDEN);if(c&&!_)return null;let u=DI.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof pQ.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=kI(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(bQ,"verifyPermsAst");function wQ(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 qI;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&&xI[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(IQ.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=DI.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===LI||r===UI){if(n===wt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(we.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===LI&&(!E[n]||!E[n][_a]))return c.handleInvalidItem(we.SCHEMA_NOT_FOUND(n));if(r===UI&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][_a]))return c.handleInvalidItem(we.TABLE_NOT_FOUND(n,i))}}let d=kI(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=CQ(e),T=Wd(e.hdb_user.role.permission,n,i);return Kd(h,T,r,i,n,c,s),c.getPermsResponse()}a(wQ,"verifyPerms");function kI(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(GI.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(kI,"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 CQ(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(CQ,"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 yQ(e,t,r,s,n,i,o){let c=new Set(i),_=Wd(e,s,n);Kd(c,_,t,n,s,o,r)}a(yQ,"verifyBulkLoadAttributePerms")});var v_=f((Oj,JI)=>{"use strict";JI.exports={evaluateSQL:$Q,processAST:QI,convertSQLToAST:WI,checkASTPermissions:KI};var YI=Ot(),Xd=require("util"),LQ=Xd.callbackify(YI.insert),UQ=It().search,MQ=vp().update,DQ=Xd.callbackify(MQ),PQ=qp().convertDelete,is=require("alasql"),BQ=P_(),da=I(),vQ=uc(),HQ=b(),Ea=m(),{hdb_errors:qQ,handleHDBError:Qd}=y(),{HTTP_STATUS_CODES:Jd}=qQ,GQ=qi();function FQ(e,t){return Promise.all([GQ.postOperationHandler(e,t,void 0),YI.flush(e)])}a(FQ,"postWrite");var xQ=Xd.callbackify(FQ);vQ(is);var VQ=403,kQ="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 $Q(e,t){let r=e.parsed_sql_object;if(!r){r=WI(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)&&HQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}QI(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a($Q,"evaluateSQL");function KI(e,t){let r;try{r=BQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(KI,"checkASTPermissions");function WI(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(WI,"convertSQLToAST");function QI(e,t,r){try{let s=YQ;if(!e.bypass_auth&&!t.permissions_checked){let i=KI(e,t);if(i&&i.length>0)return r(VQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ea.VALID_SQL_OPS_ENUM.SELECT:s=UQ,n=t.ast.statements[0];break;case Ea.VALID_SQL_OPS_ENUM.INSERT:s=KQ;break;case Ea.VALID_SQL_OPS_ENUM.UPDATE:s=DQ;break;case Ea.VALID_SQL_OPS_ENUM.DELETE:s=PQ;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(QI,"processAST");function YQ(e,t){da.info(e),t("unknown sql statement")}a(YQ,"nullFunction");function KQ({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=WQ(i,e.values)}catch(o){return r(o)}LQ(n,(o,c)=>{if(o)return r(o);xQ(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(KQ,"convertInsert");function WQ(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(kQ)}}a(WQ,"createDataObjects")});var eh=f((bj,eb)=>{var V_=require("clone"),k_=te(),QQ=b(),F_=m(),JQ=I(),H_=require("fs"),Zd=require("joi"),{string:x_}=Zd.types(),{hdb_errors:XQ,handleHDBError:ha}=y(),{HDB_ERROR_MSGS:ZQ,HTTP_STATUS_CODES:q_}=XQ,{common_validators:G_}=Wt(),XI=1e9,ZI=" is required",zQ=["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:zQ,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},jQ={schema:x_.required(),table:x_.required(),action:x_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:e1,AWS_SECRET:t1,AWS_BUCKET:r1,AWS_FILE_KEY:s1,REGION:n1}=F_.S3_BUCKET_AUTH_KEYS,i1={s3:{presence:!0},[`s3.${e1}`]:{presence:!0,type:"String"},[`s3.${t1}`]:{presence:!0,type:"String"},[`s3.${r1}`]:{presence:!0,type:"String"},[`s3.${s1}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${n1}`]:{presence:!0,type:"String"}},zI=V_(zd);zI.data.presence={message:ZI};var jI=V_(zd);jI.file_path.presence={message:ZI};var a1=Object.assign(V_(zd),i1),jd=V_(jQ);jd.csv_url=x_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();jd.passthrough_headers=Zd.object();function o1(e){let t=k_.validateObject(e,zI);return $_(e,t)}a(o1,"dataObject");function c1(e){let t=k_.validateBySchema(e,Zd.object(jd));return $_(e,t)}a(c1,"urlObject");function _1(e){let t=k_.validateObject(e,jI);return $_(e,t)}a(_1,"fileObject");function u1(e){let t=k_.validateObject(e,a1);return $_(e,t)}a(u1,"s3FileObject");function $_(e,t){if(!t){let r=QQ.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>XI)return ha(new Error,ZQ.MAX_FILE_SIZE_ERR(s,XI),q_.BAD_REQUEST)}catch(s){JQ.error(s),console.error(s)}}}return t}a($_,"postValidateChecks");eb.exports={dataObject:o1,urlObject:c1,fileObject:_1,s3FileObject:u1}});var th=f((Cj,tb)=>{"use strict";var fa=I(),Y_=m();async function l1(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(l1,"callOperationFunctionAsAwait");tb.exports={callOperationFunctionAsAwait:l1}});var rh=f((Lj,sb)=>{"use strict";var{S3:E1,GetObjectCommand:d1}=require("@aws-sdk/client-s3");sb.exports={getFileStreamFromS3:h1,getS3AuthObj:rb};async function h1(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await rb(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new d1(r))).Body}a(h1,"getFileStreamFromS3");function rb(e,t,r){return new E1({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(rb,"getS3AuthObj")});var ib=f((Mj,nb)=>{"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");nb.exports={BulkLoadFileObject:K_,BulkLoadDataObject:W_}});var oh=f((Pj,gb)=>{"use strict";var Q_=Ot(),Z_=eh(),f1=require("needle"),Tt=m(),S1=ue(),Sa=b(),{handleHDBError:se,hdb_errors:hb}=y(),{HTTP_STATUS_CODES:Ce,HDB_ERROR_MSGS:Re,CHECK_LOGS_WRAPPER:xs}=hb,Fs=I(),J_=require("papaparse");Sa.promisifyPapaParse();var Vt=require("fs-extra"),T1=require("path"),{chain:ab}=require("stream-chain"),ob=require("stream-json/streamers/StreamArray"),cb=require("stream-json/utils/Batch"),_b=require("stream-chain/utils/comp"),{finished:ub}=require("stream"),sh=v(),fb=th(),m1=rh(),{BulkLoadFileObject:nh,BulkLoadDataObject:R1}=ib(),ih=xd(),{verifyBulkLoadAttributePerms:Sb}=P_(),A1=_E(),p1=ve(),g1=Vr(),lb="No records parsed from csv file.",Gs=`${sh.get("HDB_ROOT")}/tmp`,{schema_regex:N1}=Wt(),Eb=1024*1024*5,db=5e3,O1={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};gb.exports={csvDataLoad:I1,csvURLLoad:b1,csvFileLoad:w1,importFromS3:C1};async function I1(e,t){let r=Z_.dataObject(e);if(r)throw se(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&&Sb(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 se(new Error,o,Ce.BAD_REQUEST,void 0,void 0,!0);let c=new R1(e.action,e.schema,e.table,n.data);return s=await fb.callOperationFunctionAsAwait(Rb,c,Ab.bind(null,n.meta.fields),t),s.message===lb?lb:pb(s.records,s.number_written)}catch(n){throw Vs(n)}}a(I1,"csvDataLoad");async function b1(e){let t=Z_.urlObject(e);if(t)throw se(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Gs}/${r}`;try{await y1(e,r)}catch(n){throw Fs.error(Re.DOWNLOAD_FILE_ERR(r)+" - "+n),se(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(b1,"csvURLLoad");async function w1(e){let t=Z_.fileObject(e);if(t)throw se(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(w1,"csvFileLoad");async function C1(e){let t=Z_.s3FileObject(e);if(t)throw se(t,t.message,Ce.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=T1.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 L1(n,e);let o=await ah(i);return await X_(r),o}catch(s){throw await X_(r),Vs(s)}}a(C1,"importFromS3");async function y1(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await f1("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 se(s,n,s.statusCode,Tt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}M1(r,e.csv_url),await U1(t,r.raw)}a(y1,"downloadCSVFile");async function L1(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 m1.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),se(r,xs(Re.S3_DOWNLOAD_ERR))}}a(L1,"downloadFileFromS3");async function U1(e,t){try{await Vt.mkdirp(Gs),await Vt.writeFile(`${Gs}/${e}`,t)}catch(r){throw Fs.error(Re.WRITE_TEMP_FILE_ERR),se(r,xs(Re.DEFAULT_BULK_LOAD_ERR))}}a(U1,"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 M1(e,t){if(e.statusCode!==hb.HTTP_STATUS_CODES.OK)throw se(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ce.BAD_REQUEST);if(!O1[e.headers["content-type"]])throw se(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ce.BAD_REQUEST);if(!e.raw)throw se(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ce.BAD_REQUEST)}a(M1,"validateURLResponse");async function ah(e){try{let t;switch(e.file_type){case Tt.VALID_S3_FILE_TYPES.CSV:t=await D1(e);break;case Tt.VALID_S3_FILE_TYPES.JSON:t=await P1(e);break;default:throw se(new Error,Re.DEFAULT_BULK_LOAD_ERR,Ce.BAD_REQUEST,Tt.LOG_LEVELS.ERROR,Re.INVALID_FILE_EXT_ERR(e))}return pb(t.records,t.number_written)}catch(t){throw Vs(t)}}a(ah,"fileLoad");async function Tb(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&&Sb(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=se(c);r(_)}}a(Tb,"validateChunk");async function mb(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 fb.callOperationFunctionAsAwait(Rb,c,Ab.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=se(c,xs(Re.INSERT_CSV_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_CSV_ERR+" - "+c);r(_)}}a(mb,"insertChunk");async function D1(e){let t={records:0,number_written:0};try{let r=new ih,s=Vt.createReadStream(e.file_path,{highWaterMark:Eb});s.setEncoding("utf8"),await J_.parsePromise(s,Tb.bind(null,e,r));let n=r.getPermsResponse();if(n)throw se(new Error,n,Ce.BAD_REQUEST);return s=Vt.createReadStream(e.file_path,{highWaterMark:Eb}),s.setEncoding("utf8"),await J_.parsePromise(s,mb.bind(null,e,t)),s.destroy(),t}catch(r){throw se(r,xs(Re.PAPA_PARSE_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.PAPA_PARSE_ERR+r)}}a(D1,"callPapaParse");async function P1(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new ih,n=ab([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),ob.withParser(),c=>c.value,new cb({batchSize:db}),_b(async c=>{await Tb(e,s,r,c)})]);await new Promise((c,_)=>{ub(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw se(new Error,i,Ce.BAD_REQUEST);let o=ab([Vt.createReadStream(e.file_path,{encoding:"utf-8"}),ob.withParser(),c=>c.value,new cb({batchSize:db}),_b(async c=>{await mb(e,t,r,c)})]);return await new Promise((c,_)=>{ub(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw se(s,xs(Re.INSERT_JSON_ERR),Ce.INTERNAL_SERVER_ERROR,Tt.LOG_LEVELS.ERROR,Re.INSERT_JSON_ERR+s)}}a(P1,"insertJson");async function Rb(e){let t={};try{e.data&&e.data.length>0&&B1(e.data[0])?t=await v1(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(Rb,"callBulkFileLoad");function B1(e){let t=Object.keys(e);for(let r of t)if(!N1.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(B1,"validateColumnNames");async function v1(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 se(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(v1,"bulkFileLoad");async function Ab(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 A1(r.txn_time,i,sh.get(Tt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await p1.publishToStream(`${S1.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,g1.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){Fs.error(n)}}a(Ab,"postCSVLoadFunction");function pb(e,t){return`successfully loaded ${t} of ${e} records`}a(pb,"buildResponseMsg");function Vs(e){return se(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 bb=f((vj,Ib)=>{"use strict";var{Readable:H1}=require("stream"),q1=1e4;Ib.exports={streamAsJSON(e){return new z_({value:e})}};var z_=class extends H1{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),Nb)}catch(n){yield Nb(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);Ob(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>q1?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 Ob(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 Nb(e){return console.error(e),JSON.stringify(e.toString())}a(Nb,"handleError");function Ob(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Ob,"when")});var _h=f((qj,Bb)=>{"use strict";var yb=It(),G1=v_(),F1=rh(),{AsyncParser:x1,Transform:V1}=require("json2csv"),ma=require("stream"),mt=b(),ch=require("fs-extra"),k1=require("path"),yt=I(),{promisify:j_}=require("util"),Ta=b(),{handleHDBError:fe,hdb_errors:$1}=y(),{HDB_ERROR_MSGS:rt,HTTP_STATUS_CODES:Se}=$1,{streamAsJSON:Y1}=bb(),{Upload:K1}=require("@aws-sdk/lib-storage"),wb=["search_by_value","search_by_hash","sql"],Cb=["json","csv"],Lb="json",Ub="csv",W1="Successfully exported JSON locally.",Q1="Successfully exported CSV locally.",J1=1e3,X1=j_(yb.searchByHash),Z1=j_(yb.searchByValue),z1=j_(G1.evaluateSQL),j1=j_(ma.finished);Bb.exports={export_to_s3:sJ,export_local:eJ,toCsvStream:Mb};async function eJ(e){yt.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Db(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(k1.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await tJ(e.path);let n=await Pb(e);return await rJ(s,e.format,n)}a(eJ,"export_local");async function tJ(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(tJ,"confirmPath");async function rJ(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===Lb){let s=ch.createWriteStream(e);return Y1(r).pipe(s),await j1(s),{message:W1,path:e}}else if(t===Ub){let s=ch.createWriteStream(e),n=ma.Readable.from(r),i={},o={objectMode:!0};return await new x1(i,o).fromInput(n).toOutput(s).promise(!1),{message:Q1,path:e}}throw fe(new Error,rt.INVALID_VALUE("format"),Se.BAD_REQUEST)}a(rJ,"saveToLocal");async function sJ(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=Db(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 Pb(e)}catch(_){throw yt.error(_),_}let s,n=await F1.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ma.PassThrough;if(e.format===Ub){i=e.s3.key+".csv";let _=Mb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Lb){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 K1({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(sJ,"export_to_s3");function Mb(e){let t=ma.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new V1(r,s);return t.pipe(n)}a(Mb,"toCsvStream");function Db(e){if(yt.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Cb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Cb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(wb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${wb.join(", ")}`}a(Db,"exportCoreValidation");async function Pb(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=X1;break;case"sql":t=z1;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(Pb,"getRecords")});var Hb=f((Fj,vb)=>{"use strict";var eu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(eu,"SqlSearchObject");vb.exports=eu});var Fb=f((Vj,Gb)=>{"use strict";var nJ=m(),qb=require("moment"),iJ=require("uuid").v4,tu=class{constructor(){this.id=iJ(),this.type=void 0,this.start_datetime=qb().valueOf(),this.created_datetime=qb().valueOf(),this.end_datetime=void 0,this.status=nJ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(tu,"JobObject");Gb.exports=tu});var su=f(($j,Kb)=>{"use strict";var aJ=require("uuid").v4,kb=Ot(),$b=It(),oJ=Ht(),cJ=ln(),_J=Hb(),ne=m(),uJ=Fb(),lJ=UE(),Lt=I(),EJ=ai(),Bn=b(),{promisify:uh}=require("util"),ks=require("moment"),dJ=v_(),ru=eh(),xb=El(),{deleteTransactionLogsBeforeValidator:hJ}=Hd(),{handleHDBError:fJ,hdb_errors:SJ}=y(),{HTTP_STATUS_CODES:TJ}=SJ,Vb=uh($b.searchByValue),mJ=uh($b.searchByHash),RJ=kb.insert,AJ=uh(dJ.evaluateSQL),pJ=kb.update;Kb.exports={addJob:OJ,updateJob:bJ,handleGetJob:gJ,handleGetJobsByStartDate:NJ,getJobById:Yb};async function gJ(e){try{let t=await Yb(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(gJ,"handleGetJob");async function NJ(e){try{let t=await IJ(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(NJ,"handleGetJobsByStartDate");async function OJ(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(!ne.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ne.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ru.fileObject(e);break;case ne.OPERATIONS_ENUM.CSV_URL_LOAD:s=ru.urlObject(e);break;case ne.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ru.dataObject(e);break;case ne.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ru.s3FileObject(e);break;case ne.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ne.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xb(e,"date");break;case ne.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xb(e,"timestamp");break;case ne.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=hJ(e);break;default:break}if(s)throw fJ(s,s.message,TJ.BAD_REQUEST,void 0,void 0,!0);let n=new uJ;n.type=e.operation===ne.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ne.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new oJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await Vb(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=aJ();try{o=await Vb(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 EJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await RJ(_)}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(OJ,"addJob");async function IJ(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 _J(s,e.hdb_user);try{return await AJ(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(IJ,"getJobsInDateRange");async function Yb(e){if(Bn.isEmptyOrZeroLength(e))return Bn.errorizeMessage("Invalid job ID specified.");let t=new cJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await mJ(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(Yb,"getJobById");async function bJ(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===ne.JOB_STATUS_ENUM.COMPLETE||e.status===ne.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ks().valueOf());let t=new lJ(ne.SYSTEM_SCHEMA_NAME,ne.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await pJ(t)}catch(s){throw new Error(s)}return r}a(bJ,"updateJob")});var zb=f((Kj,Zb)=>{"use strict";var Wb=b(),st=m(),wJ=require("moment"),nu=oh(),iu=I(),Qb=su(),Jb=_h(),Xb=Ss(),CJ=rn(),yJ=O_(),au=class{constructor(t,r){this.job=t,this.json=r}};a(au,"RunnerMessage");async function LJ(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(Wb.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Wb.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,Xb.deleteFilesBefore);break;case st.JOB_TYPE_ENUM.delete_audit_logs_before:await br(e,Xb.deleteAuditLogsBefore);break;case st.JOB_TYPE_ENUM.delete_transaction_logs_before:await br(e,yJ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(LJ,"parseMessage");async function br(e,t){try{e.job.status=st.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=wJ().valueOf(),await Qb.updateJob(e.job),await UJ(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 Qb.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 UJ(e){iu.trace("launching job thread:",e),CJ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[st.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(UJ,"launchJobThread");Zb.exports={parseMessage:LJ,RunnerMessage:au}});var ew=f((Qj,jb)=>{"use strict";var ou=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(ou,"OperationFunctionObject");jb.exports=ou});var dw=f((Xj,Ew)=>{"use strict";var uu=It(),hh=v_(),cu=oh(),vn=Nc(),lh=ms(),Aa=Ss(),MJ=TE(),Ra=Sr(),_u=bE(),wr=vd(),xe=I(),DJ=yE(),PJ=Qc(),BJ=jE(),vJ=zc(),HJ=ed(),qJ=td(),GJ=nd(),FJ=ad(),Eh=_d(),tw=_h(),xJ=P_(),fh=su(),A=m(),{hdb_errors:ga,handleHDBError:pa}=y(),{HTTP_STATUS_CODES:rw}=ga,dh=Ed(),sw=wd(),lu=require("util"),$s=Ot(),VJ=Gr(),kJ=bn(),uw=qi(),nw=zb(),iw=vc(),aw=lr(),ow=O_(),cw=Fd(),$J=th(),YJ=lu.promisify(uu.searchByHash),KJ=lu.promisify(uu.searchByValue),WJ=lu.promisify(uu.search),QJ=lu.promisify(hh.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=ew();function XJ(e,t,r){return Promise.all([uw.postOperationHandler(e,t,r),e.table?$s.flush(e):null])}a(XJ,"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:XJ,s=await $J.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return JJ[e.body.operation]&&VJ.setSchemaDataToGlobal(n=>{n&&xe.error(n)}),s}a(ZJ,"processLocalTransaction");var _w=eX();Ew.exports={chooseOperation:zJ,getOperationFunction:lw,processLocalTransaction:ZJ};function zJ(e){let t;try{t=lw(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(`${rw.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=xJ.verifyPerms(i,n);if(o)throw xe.error(`${rw.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(zJ,"chooseOperation");function lw(e){if(xe.trace(`getOperationFunction with operation: ${e.operation}`),_w.has(e.operation))return _w.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(lw,"getOperationFunction");async function jJ(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 uw.postOperationHandler(i,o,e)}catch(o){xe.info("Invalid operation in transaction"),xe.error(o)}}a(jJ,"catchup");async function ir(e){let t,r;try{r=await fh.addJob(e),t=r.createdJob;let s=new nw.RunnerMessage(t,e);return await nw.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 eX(){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(YJ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new O(KJ)),e.set(A.OPERATIONS_ENUM.SEARCH,new O(WJ)),e.set(A.OPERATIONS_ENUM.SQL,new O(QJ)),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(DJ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new O(PJ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new O(BJ)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new O(vJ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new O(HJ)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new O(qJ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new O(aw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new O(GJ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new O(FJ)),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,tw.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,tw.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(sw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new O(sw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new O(jJ)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new O(kJ.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(MJ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new O(iw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new O(iw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new O(aw.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(ow.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new O(ir,ow.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new O(cw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new O(cw.auditModules)),e}a(eX,"initializeOperationFunctionMap")});var Sh=m(),hw=b(),Na=I(),tX=Gr(),rX=Sr(),sX=require("util").promisify,nX=sX(tX.setSchemaDataToGlobal),iX=dw(),fw=require("moment"),Sw=su(),{cloneDeep:aX}=require("lodash"),oX=process.env[Sh.PROCESS_NAME_ENV_PROP],Ys=oX.substring(4);a(async function(){let t={id:Ys,request:void 0};try{Na.notify("Starting job:",Ys),await nX(),await rX.setUsersToGlobal();let r=await Sw.getJobById(Ys);if(hw.isEmptyOrZeroLength(r))throw new Error(`Unable to find a record in hdb_job for job: ${Ys}`);let{request:s}=r[0];if(hw.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=aX(s);let n=iX.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=fw().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=fw().valueOf()}finally{await Sw.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")();