harperdb 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +20 -19
- package/launchServiceScripts/launchInstallNATSServer.js +3 -3
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/server/threads/threadHTTPServer.js +13 -13
- package/utility/scripts/restartHdb.js +6 -6
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";var pC=Object.defineProperty;var a=(e,t)=>pC(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((VZ,tf)=>{"use strict";var Pt=require("path"),gC=require("fs");function OC(){let e=__dirname;for(;!gC.existsSync(Pt.join(e,"package.json"));){let t=Pt.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(OC,"getHDBPackageRoot");var Dr=OC(),Vh="js",Ha=Vh,NC="harperdb-config.yaml",IC="defaultConfig.yaml",bC="hdb",kh=`harperdb.${Ha}`,$h=`customFunctionsServer.${Ha}`,wC=`restartHdb.${Ha}`,yu="HarperDB",Ba="Custom Functions",qa="Clustering Hub",Fa="Clustering Leaf",CC="Clustering Ingest Service",yC="Clustering Reply Service",UC="foreground.pid",LC={HDB:yu,CLUSTERING_HUB:qa,CLUSTERING_LEAF:Fa,CLUSTERING_INGEST_SERVICE:CC,CLUSTERING_REPLY_SERVICE:yC,CUSTOM_FUNCTIONS:Ba,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"},MC={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},DC={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},PC={harperdb:yu,"clustering hub":qa,"clustering leaf":Fa,"custom functions":Ba,custom_functions:Ba,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},vC={CLUSTERING_HUB_PROC_DESCRIPTOR:qa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fa},Cu={HDB:Pt.join(Dr,"server/harperdb"),CUSTOM_FUNCTIONS:Pt.join(Dr,"server/customFunctions"),CLUSTERING_HUB:Pt.join(Dr,"server/nats"),CLUSTERING_LEAF:Pt.join(Dr,"server/nats")},BC={HDB:Pt.join(Cu.HDB,kh),CUSTOM_FUNCTIONS:Pt.join(Cu.CUSTOM_FUNCTIONS,$h)},HC={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pt.join(Dr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pt.join(Dr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pt.join(Dr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},qC={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Yh="support@harperdb.io",FC="customer-success@harperdb.io",Kh=1,GC=4141,Wh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",xC="https://www.harperdb.io/product",VC=`For support, please submit a request at ${Wh} or contact ${Yh}`,Qh=`For license support, please contact ${FC}`,kC="None of the specified records were found.",$C="hash attribute not found",YC=`Your current license only supports ${Kh} role. ${Qh}`,KC="Your current license only supports 3 connections to a node.",WC="127.0.0.1",QC=1,JC=/^\.$/,zC=/^\.\.$/,XC="U+002E",ZC=/\//g,jC="U+002F",ey=/U\+002F/g,ty=/^U\+002E$/,ry=/^U\+002EU\+002E$/,sy="d",ny=999999,iy="*",ay="--max-old-space-size=",oy="system",cy="__hdb_hash",_y=".harperdb",uy=".hdb",ly="keys",Ey="hdb_boot_properties.file",dy=".updateConfig.json",hy="SIGTSTP",fy=24,Sy=6e4,Ty=448,my="blob",Ry="trash",Ay="schema",py="transactions",gy=".count",Oy="id",Ny="PROCESS_NAME",Jh={SETTINGS_PATH_KEY:"settings_path"},zh=require("lodash"),Iy={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"},by={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},wy={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Cy={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"},yy={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"},it="hdb_internal:",Uy={CREATE_SCHEMA:it+"create_schema",CREATE_TABLE:it+"create_table",CREATE_ATTRIBUTE:it+"create_attribute",ADD_USER:it+"add_user",ALTER_USER:it+"alter_user",DROP_USER:it+"drop_user",HDB_NODES:it+"hdb_nodes",HDB_USERS:it+"hdb_users",HDB_WORKERS:it+"hdb_workers",CATCHUP:it+"catchup",SCHEMA_CATCHUP:it+"schema_catchup",WORKER_ROOM:it+"cluster_workers"},Ly={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"},My="060493.ks",Dy=".license",Py={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"},vy={CSV:".csv",JSON:".json"},By={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Hy={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$n={};$n[w.INSERT]=w.INSERT;$n[w.UPDATE]=w.UPDATE;$n[w.UPSERT]=w.UPSERT;$n[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 qy={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help"},Fy={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Xh={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"},Gy=zh.invert(Xh),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"},Zh={settings_path:Jh.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];Zh[t.toLowerCase()]=t}var xy={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Vy={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"},ky={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"},$y={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Yy={FILE_SYSTEM:"fs",LMDB:"lmdb"},Ky={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Wy={DEVELOPMENT:8192,DEFAULT:512},Qy={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"},Jy={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"},zy={ENOENT:"ENOENT",EACCES:"EACCES"},jh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Xy="__clustering__",Zy=Object.values(jh),jy=15984864e5,ef={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},eU=zh.invert(ef),tU={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"},rU=111,sU=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(Er,"createLogRecord");function Qn(e){ur&&
|
|
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:MU.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(BU,"findPs")});var Le=f((zZ,pf)=>{"use strict";var HU="__dbis__",qU="__environment_name__",FU="__dbi_defintion__",GU={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"},xU=["__createdtime__","__updatedtime__"],VU="\uFFFF",Af={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kU=Object.values(Af);pf.exports={INTERNAL_DBIS_NAME:HU,DBI_DEFINITION_NAME:FU,SEARCH_TYPES:GU,TIMESTAMP_NAMES:xU,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qU,TRANSACTIONS_DBI_NAMES_ENUM:Af,TRANSACTIONS_DBIS:kU,OVERFLOW_MARKER:VU}});var at=f((XZ,Uf)=>{"use strict";var gf=T(),Of=Le(),Nf={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},If=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),bf={500:If("There was an error processing your request."),400:"Invalid request"},$U=bf[Nf.INTERNAL_SERVER_ERROR],YU={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.`},KU={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},WU={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"},QU={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 ${Of.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Of.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"},JU={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${gf.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 ${gf.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"},wf={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"},zU={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."},XU={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`},ZU={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"},jU={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},eL={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Cf={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.`},yf={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},tL={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},rL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},sL={...wf,...WU,...YU,...zU,...XU,...ZU,...jU,...eL,...JU,...Cf,...yf,...tL,...rL,...KU};Uf.exports={CHECK_LOGS_WRAPPER:If,HDB_ERROR_MSGS:sL,DEFAULT_ERROR_MSGS:bf,DEFAULT_ERROR_RESP:$U,HTTP_STATUS_CODES:Nf,LMDB_ERRORS_ENUM:QU,AUTHENTICATION_ERROR_MSGS:wf,VALIDATION_ERROR_MSGS:Cf,ITC_ERRORS:yf}});var y=f((jZ,Df)=>{"use strict";var en=at(),nL=I(),iL=T(),Jn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Lf),this.http_resp_code=s||en.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(en.DEFAULT_ERROR_MSGS[s]?en.DEFAULT_ERROR_MSGS[s]:en.DEFAULT_ERROR_MSGS[en.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&nL[n](i)}};a(Jn,"HdbError");function Lf(e,t,r,s=iL.LOG_LEVELS.ERROR,n=null,i=!1){if(Mf(e))return e;let o=new Jn(e,t,r,s,n);return i&&delete o.stack,o}a(Lf,"handleHDBError");function Mf(e){return e.__proto__.constructor.name===Jn.name}a(Mf,"isHDBError");Df.exports={isHDBError:Mf,handleHDBError:Lf,hdb_errors:en}});var b=f((r3,Wf)=>{"use strict";var ls=require("path"),aL=require("fs-extra"),De=I(),Pf=require("fs-extra"),zn=require("os"),oL=require("net"),cL=require("recursive-iterator"),Me=T(),qf=Rf(),vf=require("papaparse"),Ya=require("moment"),{inspect:_L}=require("util"),Bf=require("is-number"),t3=require("lodash"),{hdb_errors:Ka}=y(),Ff=require("util").promisify(setTimeout),uL=100,lL=5,EL="",dL=4,Hf={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Wf.exports={isEmpty:ot,isEmptyOrZeroLength:Kt,arrayHasEmptyValues:SL,arrayHasEmptyOrZeroLengthValues:TL,buildFolderPath:mL,isBoolean:Gf,errorizeMessage:hL,stripFileExtension:AL,autoCast:pL,autoCastJSON:xf,autoCastJSONDeep:Hu,removeDir:gL,compareVersions:OL,isCompatibleDataVersion:NL,escapeRawValue:IL,unescapeValue:bL,stringifyProps:wL,timeoutPromise:yL,isClusterOperation:LL,getClusterUser:DL,checkGlobalSchemaTable:ML,getHomeDir:kf,getPropsFilePath:CL,promisifyPapaParse:PL,removeBOM:$f,createEventPromise:vL,checkProcessRunning:BL,checkSchemaTableExist:HL,checkSchemaExists:Yf,checkTableExists:Kf,getStartOfTomorrowInSeconds:qL,getLimitKey:FL,isObject:RL,isNotEmptyAndHasValue:fL,autoCasterIsNumberCheck:Vf,backtickASTSchemaItems:GL,isPortTaken:UL,stopProcess:xL,createForkArgs:VL,autoCastBoolean:kL,async_set_timeout:Ff,getTableHashAttribute:$L,doesSchemaExist:YL,doesTableExist:KL,stringifyObj:WL,ms_to_time:QL,changeExtension:JL,PACKAGE_ROOT:Me.PACKAGE_ROOT};function hL(e){return e instanceof Error?e:new Error(e)}a(hL,"errorizeMessage");function ot(e){return e==null}a(ot,"isEmpty");function fL(e){return!ot(e)&&(e||e===0||e===""||Gf(e))}a(fL,"isNotEmptyAndHasValue");function Kt(e){return ot(e)||e.length===0||e.size===0}a(Kt,"isEmptyOrZeroLength");function SL(e){if(ot(e))return!0;for(let t=0;t<e.length;t++)if(ot(e[t]))return!0;return!1}a(SL,"arrayHasEmptyValues");function TL(e){if(Kt(e))return!0;for(let t=0;t<e.length;t++)if(Kt(e[t]))return!0;return!1}a(TL,"arrayHasEmptyOrZeroLengthValues");function mL(...e){try{return e.join(ls.sep)}catch{console.error(e)}}a(mL,"buildFolderPath");function Gf(e){return ot(e)?!1:e===!0||e===!1}a(Gf,"isBoolean");function RL(e){return ot(e)?!1:typeof e=="object"}a(RL,"isObject");function AL(e){return Kt(e)?EL:e.slice(0,-dL)}a(AL,"stripFileExtension");function pL(e){return ot(e)||e===""||typeof e!="string"?e:Hf[e]!==void 0?Hf[e]:Vf(e)===!0?Number(e):e}a(pL,"autoCast");function xf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xf,"autoCastJSON");function Hu(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=Hu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Hu(r);s!==r&&(e[t]=s)}return e}else return xf(e)}a(Hu,"autoCastJSONDeep");function Vf(e){if(e.startsWith("0.")&&Bf(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Bf(e))}a(Vf,"autoCasterIsNumberCheck");async function gL(e){if(Kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Pf.emptyDir(e),await Pf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(gL,"removeDir");function OL(e,t){if(Kt(e)){De.info("Invalid current version sent as parameter.");return}if(Kt(t)){De.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(OL,"compareVersions");function NL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(NL,"isCompatibleDataVersion");function IL(e){if(ot(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(IL,"escapeRawValue");function bL(e){if(ot(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(bL,"unescapeValue");function wL(e,t){if(ot(e))return De.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+zn.EOL}!Kt(s)&&s[0]===";"?r+=" "+s+n+zn.EOL:Kt(s)||(r+=s+"="+n+zn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(wL,"stringifyProps");function kf(){let e;try{e=zn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(kf,"getHomeDir");function CL(){let e=ls.join(kf(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return aL.existsSync(e)||(e=ls.join(__dirname,"../","hdb_boot_properties.file")),e}a(CL,"getPropsFilePath");function yL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(yL,"timeoutPromise");async function UL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=oL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(UL,"isPortTaken");function LL(e){try{return Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(LL,"isClusterOperation");function ML(e,t){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ML,"checkGlobalSchemaTable");function DL(e,t){if(ot(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ot(e)||Kt(e)){De.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){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(DL,"getClusterUser");function PL(){vf.parsePromise=function(e,t){return new Promise(function(r,s){vf.parse(e,{header:!0,transformHeader:$f,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(PL,"promisifyPapaParse");function $f(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($f,"removeBOM");function vL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${_L(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a(vL,"createEventPromise");async function BL(e){let t=!0,r=0;do await Ff(uL*r++),(await qf.findPs(e)).length>0&&(t=!1);while(t&&r<lL);if(t)throw new Error(`process ${e} was not started`)}a(BL,"checkProcessRunning");function HL(e,t){let r=Yf(e);if(r)return r;let s=Kf(e,t);if(s)return s}a(HL,"checkSchemaTableExist");function Yf(e){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Yf,"checkSchemaExists");function Kf(e,t){if(!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kf,"checkTableExists");function qL(){let e=Ya().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Ya().utc().unix();return e-t}a(qL,"getStartOfTomorrowInSeconds");function FL(){return Ya().utc().format("DD-MM-YYYY")}a(FL,"getLimitKey");function GL(e){try{let t=new cL(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){De.error("Got an error back ticking items."),De.error(t)}}a(GL,"backtickASTSchemaItems");async function xL(e){let t=zn.userInfo();(await qf.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(xL,"stopProcess");function VL(e){return[e]}a(VL,"createForkArgs");function kL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kL,"autoCastBoolean");function $L(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a($L,"getTableHashAttribute");function YL(e){return global?.hdb_schema?.[e]!==void 0}a(YL,"doesSchemaExist");function KL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(KL,"doesTableExist");function WL(e){try{return JSON.stringify(e)}catch{return e}}a(WL,"stringifyObj");function QL(e){let t=Ya.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(QL,"ms_to_time");function JL(e,t){let r=ls.basename(e,ls.extname(e));return ls.join(ls.dirname(e),r+t)}a(JL,"changeExtension")});var Jf=f((n3,Qf)=>{"use strict";var zL={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))},XL="certificate.pem",ZL="privateKey.pem",jL="ca.pem";Qf.exports={CERTIFICATE_VALUES:zL,CERTIFICATE_PEM_NAME:XL,PRIVATEKEY_PEM_NAME:ZL,CA_PEM_NAME:jL}});var re=f((i3,zf)=>{"use strict";var Ye=require("validate.js");Ye.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ye.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ye.validators.type.checks={Object:function(e){return Ye.isObject(e)&&!Ye.isArray(e)},Array:Ye.isArray,Integer:Ye.isInteger,Number:Ye.isNumber,String:Ye.isString,Date:Ye.isDate,Boolean:function(e){return typeof e=="boolean"}};Ye.validators.hasValidFileExt=function(e,t){return Ye.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};zf.exports={validateObject:eM,validateObjectAsync:tM,validateBySchema:rM};function eM(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ye(e,t,{format:"flat"});return r?new Error(r):null}a(eM,"validateObject");async function tM(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ye.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(tM,"validateObjectAsync");function rM(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(rM,"validateBySchema")});var Fu=f((c3,eS)=>{"use strict";var sM=require("fs-extra"),v=require("joi"),nM=require("os"),{boolean:se,string:dr,number:vt,array:qu}=v.types(),{totalmem:Xf}=require("os"),Xn=require("path"),iM=I(),Qa=b(),o3=Jf(),aM=T(),oM=re(),Zf="log",cM="custom_functions",_M="Invalid logging.rotation.maxSize unit. Available units are G, M or K",uM="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lM="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",EM="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",dM="rootPath config parameter is undefined",hM="clustering.enabled config parameter is undefined",Es=vt.min(0).required(),Ja=qu.items({host:dr.required(),port:Es}).empty(null),vr;eS.exports={configValidator:fM,routesValidator:pM,route_constraints:Ja};function fM(e){if(vr=e.rootPath,Qa.isEmpty(vr))throw dM;let t=se.required(),r=v.valid("production","development").required(),s=vt.min(1).max(1e3).empty(null).default(AM),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wa),i=v.custom(SM).messages({"any.custom":"{:#label} {:#error}"}),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=v.string().empty(null).default(Wa),_=v.custom(TM).empty(null).default(Wa),u=e.clustering?.enabled;if(Qa.isEmpty(u))throw hM;let l;return u===!0?l=v.object({enabled:t,hubServer:v.object({cluster:v.object({name:v.required().empty(null),network:v.object({port:Es,routes:Ja}).required()}).required(),leafNodes:v.object({network:v.object({port:Es}).required()}).required(),network:v.object({port:Es}).required()}).required(),leafServer:v.object({network:v.object({port:Es,routes:Ja}).required(),streams:v.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:v.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:se.optional(),tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required(),verify:se.optional()}),user:dr.optional().empty(null)}).required():l=v.object({enabled:t,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required()})}).required(),v.object({clustering:l,customFunctions:v.object({enabled:t,network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:Es,timeout:vt.min(1).required()}),nodeEnv:r,root:n,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:v.object({enabled:t}).required(),logging:v.object({file:se.required(),level:v.valid("notify","fatal","error","warn","info","debug","trace"),rotation:v.object({enabled:se.optional(),compress:se.optional(),interval:dr.custom(RM).optional().empty(null),maxSize:dr.custom(mM).optional().empty(null),path:dr.optional().empty(null).default(Wa)}).required(),root:n,stdStreams:se.required(),auditLog:se.required()}).required(),operationsApi:v.object({authentication:v.object({operationTokenTimeout:v.required(),refreshTokenTimeout:v.required()}).required(),foreground:se.required(),network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:Es,timeout:vt.min(1).required()}).required(),nodeEnv:r,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:v.object({threads:s}).required(),storage:v.object({writeAsync:se.required(),overlappingSync:se.optional(),caching:se.optional(),compression:se.optional(),noReadAhead:se.optional(),path:_,prefetchWrites:se.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fM,"configValidator");function jf(e){return sM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(jf,"doesPathExist");function SM(e,t){if(e===null)return;let r=jf(e);return r?t.message(r):e}a(SM,"validatePemFile");function TM(e,t){v.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=jf(e);if(r)return t.message(r)}a(TM,"validatePath");function mM(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(_M);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(lM):e}a(mM,"validateRotationMaxSize");function RM(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(uM);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(EM):e}a(RM,"validateRotationInterval");function AM(e,t){let r=t.state.path.join("."),s=nM.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Xf();return i=Math.round(Math.min(i,Xf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),iM.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(AM,"setDefaultThreads");function Wa(e,t){if(!Qa.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Qa.isEmpty(vr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Xn.join(vr,cM);case"logging.root":return Xn.join(vr,Zf);case"clustering.leafServer.streams.path":return Xn.join(vr,"clustering","leaf");case"storage.path":return Xn.join(vr,aM.SCHEMA_DIR_NAME);case"logging.rotation.path":return Xn.join(vr,Zf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wa,"setDefaultRoot");function pM(e){let t=v.object({routes:Ja});return oM.validateBySchema({routes:e},t)}a(pM,"routesValidator")});var fr=f((u3,uS)=>{"use strict";var pt=T(),ct=b(),me=I(),{configValidator:gM,routesValidator:tS}=Fu(),At=require("fs-extra"),OM=require("yaml"),Wt=require("path"),NM=require("is-number"),sS=require("properties-reader"),IM=require("lodash"),{handleHDBError:bM}=y(),{HTTP_STATUS_CODES:wM,HDB_ERROR_MSGS:za}=at(),CM=require("minimist"),{SCHEMAS_PARAM_CONFIG:Zn,CONFIG_PARAMS:Br,CONFIG_PARAM_MAP:hr}=pt,yM="Unable to get config value because config is uninitialized",UM="Config successfully initialized",LM="Error backing up config file",MM="Empty parameter sent to getConfigValue",nS=Wt.join(pt.PACKAGE_ROOT,"config","yaml",pt.HDB_DEFAULT_CONFIG_FILE),DM="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rS={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"},Xa,Ne;uS.exports={createConfigFile:PM,getDefaultConfig:vM,getConfigValue:aS,initConfig:oS,flattenConfig:ds,updateConfigValue:cS,updateConfigObject:HM,getConfiguration:GM,setConfiguration:xM,readConfigFile:ku,getClusteringRoutes:VM,initOldConfig:_S,getConfigFromFile:kM};function PM(e){let t=tn(nS);Xa=ds(t.toJSON());let r;for(let o in e){let c=hr[o.toLowerCase()];if(c===Br.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=Gu(c,e[o]);try{t.setIn([..._],u)}catch(l){me.error(l)}}}r&&iS(t,r),Vu(t);let s=t.toJSON();Ne=ds(s);let n=t.getIn(["rootPath"]),i=Wt.join(n,pt.HDB_CONFIG_FILE);At.createFileSync(i),At.writeFileSync(i,String(t)),me.trace(`Config file written to ${i}`)}a(PM,"createConfigFile");function iS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ct.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zn.TABLES))for(let i in s[n][Zn.TABLES])for(let o in s[n][Zn.TABLES][i]){let c=s[n][Zn.TABLES][i][o],_=[Br.SCHEMAS,n,Zn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Br.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){me.error("Error parsing schemas CLI/env config arguments",s)}}a(iS,"setSchemasConfig");function vM(e){if(Xa===void 0){let r=tn(nS);Xa=ds(r.toJSON())}let t=hr[e.toLowerCase()];if(t!==void 0)return Xa[t.toLowerCase()]}a(vM,"getDefaultConfig");function aS(e){if(ct.isEmpty(e)){me.error(MM);return}if(Ne===void 0){me.trace(yM);return}let t=hr[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(aS,"getConfigValue");function xu(e){let t=CM(process.argv);return t.ROOTPATH?Wt.join(t.ROOTPATH,pt.HDB_CONFIG_FILE):sS(e).get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(xu,"getConfigFilePath");function oS(e=!1){if(Ne===void 0||e){let t=ct.getPropsFilePath();try{At.accessSync(t,At.constants.F_OK|At.constants.R_OK)}catch(i){throw me.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=xu(t),s;if(r.includes("config/settings.js"))try{_S(r);return}catch(i){if(i.code!==pt.NODE_ERROR_CODES.ENOENT)throw i}try{s=tn(r)}catch(i){if(i.code===pt.NODE_ERROR_CODES.ENOENT){me.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 me.error(i),new Error(`Error reading HarperDB config file at ${r}`)}BM(s,r),Vu(s);let n=s.toJSON();if(Ne=ds(n),Ne.logging_rotation_rotate)for(let i in rS)Ne[i]&&me.error(`Config ${rS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);me.trace(UM)}}a(oS,"initConfig");function BM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Wt.join(r,pt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Wt.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Wt.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(me.trace("Updating config file with missing config params"),At.writeFileSync(t,String(e)))}a(BM,"checkForUpdatedConfig");function Vu(e){let t=e.toJSON(),r=gM(t);if(r.error)throw za.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(Vu,"validateConfig");function HM(e,t){Ne===void 0&&(Ne={});let r=hr[e.toLowerCase()];if(r===void 0){me.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(HM,"updateConfigObject");function cS(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&oS();let i=aS(hr.hdb_root),o=Wt.join(i,pt.HDB_CONFIG_FILE),c=tn(o),_;if(r===void 0&&e.toLowerCase()===Br.SCHEMAS)_=t;else if(r===void 0){let E=hr[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=Gu(E,t);c.setIn([...d],h)}else for(let E in r){let d=hr[E.toLowerCase()];if(d===Br.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),m=Gu(d,r[E]);try{c.setIn([...h],m)}catch(R){me.error(R)}}}_&&iS(c,_),Vu(c);let u=c.getIn(["rootPath"]),l=Wt.join(u,pt.HDB_CONFIG_FILE);s===!0&&qM(o,u),At.writeFileSync(l,String(c)),n&&(Ne=ds(c.toJSON())),me.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cS,"updateConfigValue");function qM(e,t){try{let r=Wt.join(t,"backup",`${pt.HDB_CONFIG_FILE}.bak`);At.copySync(e,r),me.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){me.error(LM),me.error(r)}}a(qM,"backupConfigFile");var FM=["schemas"];function ds(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!FM.includes(r)){let s=ds(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(ds,"flattenConfig");function Gu(e,t){if(e===Br.CLUSTERING_NODENAME||e===Br.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(NM(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ct.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 ct.autoCast(t)}a(Gu,"castConfigValue");function GM(){let e=ct.getPropsFilePath(),t=xu(e);return tn(t).toJSON()}a(GM,"getConfiguration");async function xM(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cS(void 0,void 0,n,!0),DM}catch(i){throw typeof i=="string"||i instanceof String?bM(i,i,wM.BAD_REQUEST,void 0,void 0,!0):i}}a(xM,"setConfiguration");function ku(){let e=ct.getPropsFilePath();try{At.accessSync(e,At.constants.F_OK|At.constants.R_OK)}catch(s){throw me.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xu(e);return tn(t).toJSON()}a(ku,"readConfigFile");function tn(e){return OM.parseDocument(At.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tn,"parseYamlDoc");function VM(){let e=ku(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ct.isEmptyOrZeroLength(t)?[]:t;let r=tS(t);if(r)throw za.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ct.isEmptyOrZeroLength(s)?[]:s;let n=tS(s);if(n)throw za.CONFIG_VALIDATION(n.message);if(!ct.isEmptyOrZeroLength(s)&&!ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw za.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(VM,"getClusteringRoutes");function _S(e){let t=sS(e);Ne={};for(let r in hr){let s=t.get(r.toUpperCase());if(ct.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=hr[r].toLowerCase();n===Br.LOGGING_ROOT?Ne[n]=Wt.dirname(s):Ne[n]=s}return Ne}a(_S,"initOldConfig");function kM(e){let t=ku();return IM.get(t,e.replaceAll("_","."))}a(kM,"getConfigFromFile")});var U=f((E3,ES)=>{"use strict";var $u=require("fs-extra"),Qt=require("path"),$M=require("os"),YM=require("properties-reader"),jn=I(),rn=b(),L=T(),Za=fr(),KM="Error initializing environment manager",ja="BOOT_PROPS_FILE_PATH",lS=!1,WM={[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},Sr={};ES.exports={BOOT_PROPS_FILE_PATH:ja,getHdbBasePath:QM,setHdbBasePath:JM,get:zM,initSync:ZM,setProperty:k,initTestEnvironment:jM};function QM(){return Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(QM,"getHdbBasePath");function JM(e){Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(JM,"setHdbBasePath");function zM(e){let t=Za.getConfigValue(e);return t===void 0?Sr[e]:t}a(zM,"get");function k(e,t){WM[e]&&(Sr[e]=t),Za.updateConfigObject(e,t)}a(k,"setProperty");function XM(){let e;try{e=rn.getPropsFilePath(),$u.accessSync(e,$u.constants.F_OK|$u.constants.R_OK),lS=!0;let t=YM(e);return Sr[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Sr[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Sr[ja]=e,!0}catch{return jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(XM,"doesPropFileExist");function ZM(e=!1){try{(lS||XM())&&(Za.initConfig(e),Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Za.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jn.error(KM),jn.error(t),console.error(t),process.exit(1)}}a(ZM,"initSync");function jM(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,_=Qt.join(__dirname,"../../","unitTests");Sr[ja]=Qt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,$M.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qt.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,Qt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rn.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rn.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rn.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rn.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,Qt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rn.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 ${ja}. Please check your boot props and settings files`;jn.fatal(r),jn.error(t)}}a(jM,"initTestEnvironment")});var to=f((h3,fS)=>{"use strict";var{Readable:eD}=require("stream"),tD=1e4;fS.exports={streamAsJSON(e){return new eo({value:e})}};var eo=class extends eD{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),dS)}catch(n){yield dS(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);hS(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>tD?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 hS(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(eo,"JSONStream");function dS(e){return console.error(e),JSON.stringify(e.toString())}a(dS,"handleError");function hS(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(hS,"when")});var ei=f((S3,rD)=>{rD.exports={name:"harperdb",version:"4.1.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && npm run cover:upgrade && npm run cover:nats && npm run cover:cfserver && npm run cover:lmdbbridge && npm run cover:lmdbutility && npm run cover:hdbserver && npm run cover:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license --storage_type=lmdb","cover:main":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","cover:lmdbbridge":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","cover:cfserver":"npm run submodules && cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","cover:nats":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","cover:upgrade":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.350.0","@aws-sdk/lib-storage":"3.350.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.1",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.2.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"}}}});var Yu=f((T3,SS)=>{var sD=require("fastify-plugin");SS.exports=sD(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var hs=f((m3,nD)=>{nD.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 yS=f((A3,CS)=>{"use strict";var Ku=require("recursive-iterator"),iD=require("alasql"),Wu=require("clone"),TS=b(),{handleHDBError:mS,hdb_errors:aD}=y(),{HDB_ERROR_MSGS:RS,HTTP_STATUS_CODES:AS}=aD,oD=["DISTINCT_ARRAY"],pS=Symbol("validateTables"),Qu=Symbol("validateTable"),R3=Symbol("getAllColumns"),gS=Symbol("validateAllColumns"),ro=Symbol("findColumn"),OS=Symbol("validateOrderBy"),ti=Symbol("validateSegment"),Ju=Symbol("validateColumn"),NS=Symbol("setColumnsForTable"),IS=Symbol("checkColumnsForAsterisk"),bS=Symbol("validateGroupBy"),wS=Symbol("hasColumns"),so=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[pS](),this[IS](),this[gS]()}[pS](){if(this[wS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Qu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Qu](t.table)})}}[wS](){let t=!1,r=new Ku(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Qu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw mS(new Error,RS.SCHEMA_NOT_FOUND(t.databaseid),AS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw mS(new Error,RS.TABLE_NOT_FOUND(t.databaseid,t.tableid),AS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Wu(s);n.table=Wu(t),this.attributes.push(n)})}[ro](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)}[IS](){let t=new Ku(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[NS](r.tableid)}[NS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new iD.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[gS](){this[ti](this.statement.columns,!1),this[ti](this.statement.joins,!1),this[ti](this.statement.where,!1),this[bS](this.statement.group,!1),this[ti](this.statement.order,!0)}[ti](t,r){if(!t)return;let s=new Ku(t),n=[];for(let{node:i,path:o}of s)!TS.isEmpty(i)&&!TS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[OS](i):n.push(this[Ju](i)));return n}[bS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&oD.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Wu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ro](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[ro](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`}[OS](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[Ju](t)}[Ju](t){let r=this[ro](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(so,"SelectValidator");CS.exports=so});var zu=f((g3,US)=>{"use strict";var no=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(no,"BridgeMethods");US.exports=no});var fs=f((b3,BS)=>{"use strict";var LS=at().LMDB_ERRORS_ENUM,N3=require("lmdb"),cD=Le(),I3=require("buffer").Buffer,{OVERFLOW_MARKER:MS,MAX_SEARCH_KEY_LENGTH:io}=cD,DS=["number","string","symbol","boolean","bigint"];function _D(e){if(e=e?.database||e,!e)throw new Error(LS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(LS.INVALID_ENVIRONMENT)}a(_D,"validateEnv");function uD(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(uD,"stringifyData");function lD(e){return e instanceof Date?e.valueOf():e}a(lD,"convertKeyValueToWrite");function ED(e){if(e==null)return;if(DS.includes(typeof e))return e.length>io?[e.slice(0,io)+MS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];DS.includes(typeof n)&&(n.length>io?t.push(n.slice(0,io)+MS):t.push(n))}}return t}a(ED,"getIndexedValues");var ao=0,PS=0;function vS(){PS=Date.now()-performance.now()}a(vS,"adjustStartTime");vS();var dD=6e4;setInterval(vS,dD).unref();function hD(){let e=performance.now()+PS;return e>ao?(ao=e,e):(ao+=488e-6,ao)}a(hD,"getNextMonotonicTime");BS.exports={validateEnv:_D,stringifyData:uD,convertKeyValueToWrite:lD,getNextMonotonicTime:hD,getIndexedValues:ED}});var qS=f((C3,HS)=>{"use strict";var oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(oo,"DBIDefinition");HS.exports=oo});var xS=f((U3,GS)=>{"use strict";var Xu=U(),FS=T();Xu.initSync();var fD=Xu.get(FS.CONFIG_PARAMS.STORAGE_COMPRESSION),SD=Xu.get(FS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,co=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fD&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=SD&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(co,"OpenDBIObject");GS.exports=co});var $S=f((M3,kS)=>{"use strict";var sn=U(),ri=T();sn.initSync();var TD=sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",VS=sn.get(ri.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),mD=sn.get(ri.CONFIG_PARAMS.STORAGE_NOREADAHEAD),_o=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=TD,VS!==void 0&&(this.overlappingSync=VS),this.noReadAhead=mD}};a(_o,"OpenEnvironmentObject");kS.exports=_o});var z=f((P3,XS)=>{"use strict";var Zu=require("lmdb"),gt=require("fs-extra"),Bt=require("path"),lo=fs(),YS=I(),Ie=at().LMDB_ERRORS_ENUM,Eo=qS(),ju=xS(),KS=$S(),Hr=Le(),Ht=Hr.INTERNAL_DBIS_NAME,WS=Hr.DBI_DEFINITION_NAME,RD="data.mdb",AD="lock.mdb",si=".mdb",pD="-lock",uo=class{constructor(t,r,s=!1){this.dbi=Ot(t,r),this.key_type=this.dbi[Hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Zu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(uo,"TransactionCursor");function el(e,t){if(e===void 0)throw new Error(Ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ie.ENV_NAME_REQUIRED)}a(el,"pathEnvNameValidation");async function tl(e,t,r=!0){try{await gt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ie.INVALID_BASE_PATH):s}try{let s=Bt.join(e,t+si);return await gt.access(s,gt.constants.R_OK|gt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await gt.access(Bt.join(e,t,RD),gt.constants.R_OK|gt.constants.F_OK),Bt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ie.INVALID_ENVIRONMENT)}else throw new Error(Ie.INVALID_ENVIRONMENT);throw s}}a(tl,"validateEnvironmentPath");function ho(e,t){if(lo.validateEnv(e),t===void 0)throw new Error(Ie.DBI_NAME_REQUIRED)}a(ho,"validateEnvDBIName");async function gD(e,t,r=!1,s=!1){el(e,t),t=t.toString();try{return await tl(e,t,s),rl(e,t,r)}catch(n){if(n.message===Ie.INVALID_ENVIRONMENT){let i=Bt.join(e,t);await gt.mkdirp(s?i:e);let o=new KS(s?i:i+si,!1),c=Zu.open(o);c.dbis=Object.create(null);let _=new ju(!1);c.openDB(Ht,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=sl(e,t,r);return c[Hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(gD,"createEnvironment");async function OD(e,t,r,s=!0){let n=await rl(e,t);if(r===void 0)throw new Error(Ie.DESTINATION_PATH_REQUIRED);try{await gt.access(Bt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(OD,"copyEnvironment");async function rl(e,t,r=!1){el(e,t),t=t.toString();let s=sl(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 tl(e,t),i=Bt.join(e,t+si),o=n!=i,c=new KS(n,o),_=Zu.open(c);_.dbis=Object.create(null);let u=JS(_);for(let l=0;l<u.length;l++)Ot(_,u[l]);return _[Hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(rl,"openEnvironment");async function ND(e,t,r=!1){el(e,t),t=t.toString();let s=Bt.join(e,t+si),n=await tl(e,t);if(global.lmdb_map!==void 0){let i=sl(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await QS(o),delete global.lmdb_map[i]}}await gt.remove(n),await gt.remove(n===s?n+pD:Bt.join(Bt.dirname(n),AD))}a(ND,"deleteEnvironment");async function QS(e){lo.validateEnv(e);let t=e[Hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(QS,"closeEnvironment");function sl(e,t,r=!1){let n=`${Bt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(sl,"getCachedEnvironmentName");function ID(e){lo.validateEnv(e);let t=Object.create(null),r=Ot(e,Ht);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ht)try{t[s]=Object.assign(new Eo,n)}catch{YS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ID,"listDBIDefinitions");function JS(e){lo.validateEnv(e);let t=[],r=Ot(e,Ht);for(let{key:s}of r.getRange({start:!1}))s!==Ht&&t.push(s);return t}a(JS,"listDBIs");function bD(e,t){let s=Ot(e,Ht).getEntry(t),n=new Eo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{YS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(bD,"getDBIDefinition");function zS(e,t,r,s=!1){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ot(e,t)}catch(n){if(n.message===Ie.DBI_DOES_NOT_EXIST){let i=new ju(r,s===!0),o=e.openDB(t,i),c=new Eo(r===!0,s);return o[WS]=c,Ot(e,Ht).putSync(t,c),e.dbis[t]=o,o}throw n}}a(zS,"createDBI");function Ot(e,t){if(ho(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ht?r=bD(e,t):r=new Eo,r===void 0)throw new Error(Ie.DBI_DOES_NOT_EXIST);let s;try{let n=new ju(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(Ie.DBI_DOES_NOT_EXIST):n}return s[WS]=r,e.dbis[t]=s,s}a(Ot,"openDBI");function wD(e,t){ho(e,t),t=t.toString();let r=Ot(e,t),s=r.getStats();return r[Hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wD,"statDBI");async function CD(e,t){try{let r=Bt.join(e,t+si);return(await gt.stat(r)).size}catch{throw new Error(Ie.INVALID_ENVIRONMENT)}}a(CD,"environmentDataSize");function yD(e,t){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_DROP_INTERNAL_DBIS_NAME);Ot(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ot(e,Ht).removeSync(t)}a(yD,"dropDBI");function UD(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ot(e,n)}catch(i){if(i.message===Ie.DBI_DOES_NOT_EXIST)zS(e,n,n!==t,n===t);else throw i}}}a(UD,"initializeDBIs");XS.exports={openDBI:Ot,openEnvironment:rl,createEnvironment:gD,listDBIs:JS,listDBIDefinitions:ID,createDBI:zS,dropDBI:yD,statDBI:wD,deleteEnvironment:ND,initializeDBIs:UD,TransactionCursor:uo,environmentDataSize:CD,copyEnvironment:OD,closeEnvironment:QS}});var jS=f((B3,ZS)=>{"use strict";var fo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(fo,"InsertRecordsResponseObject");ZS.exports=fo});var tT=f((q3,eT)=>{"use strict";var So=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(So,"UpdateRecordsResponseObject");eT.exports=So});var sT=f((G3,rT)=>{"use strict";var To=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(To,"UpsertRecordsResponseObject");rT.exports=To});var nn=f((Y3,aT)=>{"use strict";var LD=z(),MD=jS(),DD=tT(),PD=sT(),Jt=fs(),ni=at().LMDB_ERRORS_ENUM,vD=Le(),Tr=T(),BD=b(),HD=require("uuid"),V3=require("lmdb"),{handleHDBError:qD,hdb_errors:FD}=y(),{OVERFLOW_MARKER:k3,MAX_SEARCH_KEY_LENGTH:$3}=vD,nT=U();nT.initSync();var mo=nT.get(Tr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nl=Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ss=Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new MD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];iT(u,!0,n);let l=xD(e,t,r,u),E=u[t];o.push(l),c.push(E)}return al(o,c,s,i,n)}a(GD,"insertRecords");function xD(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][Tr.FUNC_VAL],s[o]=c)}let _=Jt.getIndexedValues(c),u=e.dbis[o];if(_){mo&&u.prefetch(_.map(l=>({key:l,value:n})),Ro);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}mo&&e.dbis[t].prefetch([n],Ro),e.dbis[t].put(n,s,s[Ss])})}a(xD,"insertRecord");function VD(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(VD,"removeSkippedRecords");function iT(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ss]))&&(e[Ss]=r||(r=Jt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[nl]))&&(e[nl]=r||Jt.getNextMonotonicTime()):delete e[nl]}a(iT,"setTimestamps");function il(e,t,r){r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),LD.initializeDBIs(e,t,r)}a(il,"initializeTransaction");async function kD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new DD,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=ol(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return al(c,_,s,i,n,o)}a(kD,"updateRecords");async function $D(e,t,r,s,n=Jt.getNextMonotonicTime()){try{cl(e,t,r,s)}catch(_){throw qD(_,_.message,FD.HTTP_STATUS_CODES.BAD_REQUEST)}il(e,t,r);let i=new PD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;BD.isEmpty(u[t])?(l=HD.v4(),u[t]=l):l=u[t];let E=ol(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return al(o,c,s,i,n)}a($D,"upsertRecords");async function al(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||Jt.getNextMonotonicTime(),VD(r,i),s}a(al,"finalizeWrite");function ol(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(iT(r,!l,o),Number.isInteger(r[Ss])&&u[Ss]>r[Ss])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],g=e.dbis[m];if(g===void 0)continue;let H=u[m];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][Tr.FUNC_VAL],r[m]=R)}if(R===H)continue;let x=Jt.getIndexedValues(H);if(x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.remove(x[q],s)}if(x=Jt.getIndexedValues(R),x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Ss])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:ol(e,t,r,s,n,i,o))}a(ol,"updateUpsertRecord");function YD(e,t,r){if(Jt.validateEnv(e),t===void 0)throw new Error(ni.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ni.WRITE_ATTRIBUTES_REQUIRED):new Error(ni.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(YD,"validateBasic");function cl(e,t,r,s){if(YD(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ni.RECORDS_REQUIRED):new Error(ni.RECORDS_MUST_BE_ARRAY)}a(cl,"validateWrite");function Ro(){}a(Ro,"noop");aT.exports={insertRecords:GD,updateRecords:kD,upsertRecords:$D}});var j=f((W3,ET)=>{"use strict";var _i=T(),KD=b(),Ke=U(),ui=require("path"),WD=require("minimist"),oT=require("fs-extra"),cT=require("lodash");Ke.initSync();var{CONFIG_PARAMS:qr,SCHEMAS_PARAM_CONFIG:ii,SYSTEM_SCHEMA_NAME:Ao}=_i,ai,oi,ci;function _T(){if(ai!==void 0)return ai;if(Ke.getHdbBasePath()!==void 0)return ai=Ke.get(qr.STORAGE_PATH)||ui.join(Ke.getHdbBasePath(),_i.SCHEMA_DIR_NAME),ai}a(_T,"getBaseSchemaPath");function uT(){if(oi!==void 0)return oi;if(Ke.getHdbBasePath()!==void 0)return oi=lT(Ao),oi}a(uT,"getSystemSchemaPath");function QD(){if(ci!==void 0)return ci;if(Ke.getHdbBasePath()!==void 0)return ci=Ke.get(_i.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ui.join(Ke.getHdbBasePath(),_i.TRANSACTIONS_DIR_NAME),ci}a(QD,"getTransactionAuditStoreBasePath");function JD(e,t){let r=Ke.get(qr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ui.join(QD(),e.toString())}a(JD,"getTransactionAuditStorePath");function lT(e,t){e=e.toString(),t=t&&t.toString();let r=Ke.get(_i.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ui.join(_T(),e)}a(lT,"getSchemaPath");function zD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,WD(process.argv));let s=r[qr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!KD.isObject(s))throw o;i=s}for(let o of i){let c=o[Ao];if(!c)continue;let _=Ke.get(qr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[ii.PATH];if(u)return cT.set(_,[Ao,ii.TABLES,t,ii.PATH],u),Ke.setProperty(qr.SCHEMAS,_),u;let l=c?.[ii.PATH];if(l)return cT.set(_,[Ao,ii.PATH],l),Ke.setProperty(qr.SCHEMAS,_),l}}let n=r[qr.STORAGE_PATH.toUpperCase()];if(n){if(!oT.pathExistsSync(n))throw new Error(n+" does not exist");let i=ui.join(n,e);return oT.mkdirsSync(i),Ke.setProperty(qr.STORAGE_PATH,n),i}return uT()}a(zD,"initSystemSchemaPaths");function XD(){ai=void 0,oi=void 0,ci=void 0}a(XD,"resetPaths");ET.exports={getBaseSchemaPath:_T,getSystemSchemaPath:uT,getTransactionAuditStorePath:JD,getSchemaPath:lT,initSystemSchemaPaths:zD,resetPaths:XD}});var zt=f((J3,fT)=>{"use strict";var hT=b(),dT=T(),go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,_l=require("joi"),po={schema_format:{pattern:go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZD=_l.alternatives(_l.string().min(1).max(po.schema_length.maximum).pattern(go).messages({"string.pattern.base":"{:#label} "+po.schema_format.message}),_l.number()).required();function jD(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>po.schema_length.maximum?`'${e}' maximum of 250 characters`:go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(jD,"checkValidTable");function eP(e,t){return hT.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(eP,"validateSchemaExists");function tP(e,t){let r=t.state.ancestors[0].schema;return hT.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(tP,"validateTableExists");function rP(e,t){return e.toLowerCase()===dT.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${dT.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(rP,"validateSchemaName");fT.exports={common_validators:po,schema_regex:go,hdb_schema_table:ZD,validateSchemaExists:eP,validateTableExists:tP,validateSchemaName:rP,checkValidTable:jD}});var Oo=f((X3,ST)=>{var{common_validators:Fr}=zt(),li=re(),qt="is required",X={schema:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},table:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},hash_attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length}};function Ei(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(Ei,"makeAttributesStrings");function sP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(sP,"schema_object");function nP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(nP,"table_object");function iP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence={message:qt},li.validateObject(e,X)}a(iP,"create_table_object");function aP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence={message:qt},X.hash_attribute.presence=!1,li.validateObject(e,X)}a(aP,"attribute_object");function oP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(oP,"describe_table");function cP(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(cP,"validateTableResidence");ST.exports={schema_object:sP,create_table_object:iP,table_object:nP,attribute_object:aP,describe_table:oP,validateTableResidence:cP}});var mT=f((j3,TT)=>{"use strict";var _P=require("uuid"),No=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||_P.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(No,"CreateAttributeObject");TT.exports=No});var bo=f((t2,RT)=>{"use strict";var uP=mT(),Io=class extends uP{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Io,"LMDBCreateAttributeObject");RT.exports=Io});var pT=f((s2,AT)=>{"use strict";AT.exports=EP;var lP="inserted";function EP(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===lP?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(EP,"returnObject")});var wo=f((i2,bT)=>{"use strict";var dP=T(),ul=z(),hP=nn(),{getSystemSchemaPath:fP,getSchemaPath:SP}=j(),TP=hs(),mP=Oo(),RP=bo(),AP=pT(),{handleHDBError:gT,hdb_errors:NT}=y(),OT=b(),{HTTP_STATUS_CODES:pP}=NT,ll=TP.hdb_attribute,IT=[];for(let e=0;e<ll.attributes.length;e++)IT.push(ll.attributes[e].attribute);var gP="inserted";bT.exports=OP;async function OP(e){let t=mP.attribute_object(e);if(t)throw gT(new Error,t.message,NT.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&OT.checkGlobalSchemaTable(e.schema,e.table);if(r)throw gT(new Error,r,pP.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=OT.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 RP(e.schema,e.table,e.attribute,e.id);try{let i=await ul.openEnvironment(SP(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}`);ul.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ul.openEnvironment(fP(),dP.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await hP.insertRecords(o,ll.hash_attribute,IT,[n]);return AP(gP,c,{records:[n]},_)}catch(i){throw i}}a(OP,"lmdbCreateAttribute")});var dl=f((o2,CT)=>{var{hdb_schema_table:wT}=zt(),NP=re(),El=require("joi"),IP={undefined:"undefined",null:"null"},bP=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||IP[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"),wP=El.object({schema:wT,table:wT,records:El.array().items(El.object().custom(bP)).required()});CT.exports=function(e){return NP.validateBySchema(e,wP)}});var Co=f((u2,UT)=>{"use strict";var mr=b(),yT=I(),_2=dl();UT.exports=CP;function CP(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.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(mr.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&&mr.isEmptyOrZeroLength(o[r]))throw yT.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(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw yT.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`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.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(CP,"insertUpdateValidate")});var di=f((E2,LT)=>{"use strict";var yP=T().OPERATIONS_ENUM,yo=class{constructor(t,r,s,n,i=void 0){this.operation=yP.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yo,"InsertObject");LT.exports=yo});var Lo=f((f2,MT)=>{"use strict";var h2=di(),Uo=T(),fl=b(),hl=I(),UP=require("uuid"),{handleHDBError:hi,hdb_errors:LP}=y(),{HDB_ERROR_MSGS:fi,HTTP_STATUS_CODES:Si}=LP;MT.exports=MP;function MP(e,t,r){for(let n=0;n<t.length;n++)DP(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];PP(i,r,e.operation)}}a(MP,"processRows");function DP(e){if(Buffer.byteLength(String(e))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hi(new Error,fi.ATTR_NAME_LENGTH_ERR(e),Si.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(e)||fl.isEmpty(e.trim()))throw hi(new Error,fi.ATTR_NAME_NULLISH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(DP,"validateAttribute");function PP(e,t,r){if(!e.hasOwnProperty(t)||fl.isEmptyOrZeroLength(e[t])){if(r===Uo.OPERATIONS_ENUM.INSERT||r===Uo.OPERATIONS_ENUM.UPSERT){e[t]=UP.v4();return}throw hl.error("Update transaction aborted due to record with no hash value:",e),hi(new Error,fi.RECORD_MISSING_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hl.error(e),hi(new Error,fi.HASH_VAL_LENGTH_ERR,Si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hl.error(e),hi(new Error,fi.INVALID_FORWARD_SLASH_IN_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(PP,"validateHash")});var PT=f((T2,DT)=>{"use strict";var Mo=class{constructor(t,r){this.type=t,this.message=r}};a(Mo,"ITCEventObject");DT.exports=Mo});var Do=f((R2,HT)=>{var vP=require("crypto"),vT=9;function BP(e){let t=qP(vT),r=BT(e+t);return t+r}a(BP,"createHash");function HP(e,t){let r=e.substr(0,vT),s=r+BT(t+r);return e===s}a(HP,"validateHash");function qP(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(qP,"generateSalt");function BT(e){return vP.createHash("md5").update(e).digest("hex")}a(BT,"md5");HT.exports={hash:BP,validate:HP}});var FT=f((p2,qT)=>{"use strict";var Gr=T(),Ti=class{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.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(Ti,"BaseLicense");var Po=class extends Ti{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Po,"ExtendedLicense");qT.exports={BaseLicense:Ti,ExtendedLicense:Po}});var Ts=f((O2,YT)=>{"use strict";var on=require("fs-extra"),GT=Do(),xT=require("crypto"),FP=require("moment"),GP=require("uuid").v4,Pe=I(),Tl=require("path"),xP=b(),_t=T(),VP=FT().ExtendedLicense,an="invalid license key format",kP="061183",$P="mofi25",YP="aes-256-cbc",KP=16,WP=32,VT=U();VT.initSync();var Sl;YT.exports={validateLicense:kT,generateFingerPrint:JP,licenseSearch:$T,getLicense:ZP};function ml(){return Tl.join(VT.getHdbBasePath(),_t.LICENSE_KEY_DIR_NAME,_t.LICENSE_FILE_NAME)}a(ml,"getLicenseDirPath");function QP(){let e=ml();return Tl.join(e,_t.LICENSE_FILE_NAME)}a(QP,"getLicenseFilePath");function Rl(){let e=ml();return Tl.join(e,_t.REG_KEY_FILE_NAME)}a(Rl,"getFingerPrintFilePath");async function JP(){let e=Rl();try{return await on.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await zP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(JP,"generateFingerPrint");async function zP(){let e=GP(),t=GT.hash(e),r=Rl();try{await on.mkdirp(ml()),await on.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(zP,"writeFingerprint");function kT(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:_t.STORAGE_TYPES_ENUM.LMDB,api_call:_t.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:_t.RAM_ALLOCATION_ENUM.DEFAULT,version:_t.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=Rl(),n=!1;try{n=on.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=on.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split($P),c=o[1];c=Buffer.concat([Buffer.from(c)],KP);let _=Buffer.concat([Buffer.from(i)],WP),u=xT.createDecipheriv(YP,_,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=XP(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(an),Pe.error(an),new Error(an)}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(an),Pe.error(an),new Error(an)}else r.exp_date=l;r.exp_date<FP().valueOf()&&(r.valid_date=!1),GT.validate(o[1],`${kP}${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||Pe.error("Invalid licence"),r}a(kT,"validateLicense");function XP(e,t){try{let r=xT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(XP,"checkOldLicense");function $T(){let e=new VP;e.api_call=0;let t=[];try{t=on.readFileSync(QP(),"utf-8").split(_t.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(xP.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=kT(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=_t.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=_t.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT),Sl=e,e}a($T,"licenseSearch");async function ZP(){return Sl||await $T(),Sl}a(ZP,"getLicense")});var cn=f((I2,Il)=>{"use strict";var{Worker:jP,MessageChannel:ev,parentPort:Rr,isMainThread:QT,threadId:tv,workerData:rv}=require("worker_threads"),{PACKAGE_ROOT:sv}=T(),{join:nv,isAbsolute:iv,extname:av}=require("path"),{totalmem:KT}=require("os"),Ol=T(),JT=U(),ov=Ts(),vo=I(),cv=T();JT.initSync();var _v=JT.get(Ol.CONFIG_PARAMS.HTTP_THREADS)||1,uv=1024*1024,xr=[],ms=[],lv=50,zT=1e4,XT="restart",ZT="request_thread_info",jT="resource_report",em="thread_info",tm="added-port",Al;Il.exports={startWorker:pl,restartWorkers:Nl,shutdownWorkers:dv,workers:xr,setMonitorListener:mv,onMessageFromWorkers:hv,broadcast:fv};function pl(e,t={}){let s=ov.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||KT();n=Math.min(n,KT());let i=Math.min(Math.max(Math.floor(n/uv/(1+_v/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of ms){let{port1:l,port2:E}=new ev;u.postMessage({type:tm,port:l},[l]),c.push(E)}av(e)||(e+=".js");let _=new jP(iv(e)?e:nv(sv,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Bo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{pl(e,t)},_.on("error",u=>{console.error("Worker error:",u),vo.error("Worker error:",u)}),_.on("exit",u=>{xr.splice(xr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<lv?(t.unexpectedRestarts=_.unexpectedRestarts+1,pl(e,t)):vo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===XT&&Nl(u.workerType),u.type===ZT&&Sv(_),u.type===jT&&Tv(_,u)}),xr.push(_),Av(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(pl,"startWorker");var Ev=[Ol.THREAD_TYPES.HTTP];async function Nl(e=null,t=2,r=!0){if(QT){t<1&&(t=t*xr.length);let s=[];for(let n of xr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Ev.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),zT*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 Rr.postMessage({type:XT,workerType:e})}a(Nl,"restartWorkers");function dv(e){return Nl(e,1/0,!1)}a(dv,"shutdownWorkers");var rm=[];function hv(e){rm.push(e)}a(hv,"onMessageFromWorkers");function fv(e){for(let t of ms)try{t.postMessage(e)}catch(r){vo.error("Unable to send message to worker",r)}}a(fv,"broadcast");function Sv(e){e.postMessage({type:em,workers:sm()})}a(Sv,"sendThreadInfo");function sm(){let e=Date.now();return xr.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(sm,"getChildWorkerInfo");function Tv(e,t){e.resources=t,e.resources.updated=Date.now()}a(Tv,"recordResourceReport");var gl;function mv(e){gl=e}a(mv,"setMonitorListener");var Rv=1e3,WT=!1;function Av(){WT||(WT=!0,setInterval(()=>{for(let e of xr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gl&&gl()},Rv).unref())}a(Av,"startMonitoring");var pv=1e3;if(Rr){Bo(Rr);for(let e of rv.addPorts)Bo(e);setInterval(()=>{let e=process.memoryUsage();Rr.postMessage({type:jT,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},pv).unref(),Al=a(()=>new Promise((e,t)=>{Rr.on("message",r),Rr.postMessage({type:ZT});function r(s){s.type===em&&(Rr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Al=sm;Il.exports.getThreadInfo=Al;function Bo(e,t){ms.push(e),e.on("message",r=>{if(r.type===tm)Bo(r.port);else for(let s of rm)s(r)}).on("close",()=>{ms.splice(ms.indexOf(e),1)}).on("exit",()=>{ms.splice(ms.indexOf(e),1)}),t||e.unref()}a(Bo,"addPort");QT||Rr.on("message",async e=>{let{type:t}=e;t===cv.ITC_EVENT_TYPES.SHUTDOWN&&(Rr.unref(),setTimeout(()=>{vo.warn("Thread did not voluntarily terminate",tv),process.exit(0)},zT).unref())})});var am=f((w2,im)=>{"use strict";var bl=z(),gv=I(),nm=at().LMDB_ERRORS_ENUM;im.exports=Ov;async function Ov(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 bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==nm.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bl.closeEnvironment(global.lmdb_map[s]),await bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==nm.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){gv.error(t)}}a(Ov,"cleanLMDBMap")});var It=f((y2,_m)=>{"use strict";var qo=dl(),Nt=b(),Nv=require("util"),Fo=Xt(),Iv=Ar(),wl=I(),{handleHDBError:Vr,hdb_errors:bv}=y(),{HTTP_STATUS_CODES:Rs}=bv,wv=Nv.promisify(Iv.getTableSchema),Cv="updated",om="inserted",cm="upserted";_m.exports={insert:Uv,update:Lv,upsert:Mv,validation:yv,flush:Dv};async function yv(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 wv(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw wl.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 wl.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(yv,"validation");async function Uv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Vr(new Error,t.message,Rs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,Rs.BAD_REQUEST);let s=await Fo.createRecords(e);return Ho(om,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Uv,"insertData");async function Lv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Vr(new Error,t.message,Rs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,Rs.BAD_REQUEST);let s=await Fo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Ho(Cv,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Lv,"updateData");async function Mv(e){if(e.operation!=="upsert")throw Vr(new Error,"invalid operation, must be upsert",Rs.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Vr(new Error,t.message,Rs.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,Rs.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Ho(cm,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Vr(s,null,null,wl.ERR,n)}}a(Mv,"upsertData");function Ho(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===om?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===cm?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Dv(e){return Fo.flush(e.schema,e.table)}a(Dv,"flush")});var yl=f((L2,Em)=>{var Pv=re(),Cl=require("joi"),{hdb_schema_table:um}=zt(),lm={schema:um,table:um},vv={date:Cl.date().iso().required()},Bv={timestamp:Cl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Em.exports=function(e,t){let r=t==="timestamp"?{...lm,...Bv}:{...lm,...vv},s=Cl.object(r);return Pv.validateBySchema(e,s)}});var Sm=f((M2,fm)=>{var Hv=re(),dm=require("joi"),{hdb_schema_table:hm}=zt(),qv=dm.object({schema:hm,table:hm,hash_values:dm.array().required()});fm.exports=function(e){return Hv.validateBySchema(e,qv)}});var mm=f((D2,Tm)=>{"use strict";var Go=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Go,"InsertObject");var xo=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(xo,"NoSQLSeachObject");var Vo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vo,"DeleteResponseObject");Tm.exports={InsertObject:Go,NoSQLSeachObject:xo,DeleteResponseObject:Vo}});var ps=f((v2,Om)=>{"use strict";var Am=yl(),Fv=Sm(),ko=b(),Rm=require("moment"),pm=I(),{promisify:Gv,callbackify:xv}=require("util"),As=T(),Vv=Ar(),Ul=Gv(Vv.getTableSchema),Ll=Xt(),{DeleteResponseObject:kv}=mm(),{handleHDBError:kr,hdb_errors:$v}=y(),{HDB_ERROR_MSGS:$o,HTTP_STATUS_CODES:$r}=$v,Yv="records successfully deleted",Kv=xv(gm);Om.exports={delete:Kv,deleteRecord:gm,deleteFilesBefore:Wv,deleteAuditLogsBefore:Qv};async function Wv(e){let t=Am(e,"date");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!Rm(e.date,Rm.ISO_8601).isValid())throw kr(new Error,$o.INVALID_DATE,$r.BAD_REQUEST,As.LOG_LEVELS.ERROR,$o.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw kr(new Error,s,$r.NOT_FOUND,As.LOG_LEVELS.ERROR,s,!0);let n=await Ll.deleteRecordsBefore(e);if(await Ul(e.schema,e.table),pm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Wv,"deleteFilesBefore");async function Qv(e){let t=Am(e,"timestamp");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw kr(new Error,$o.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,As.LOG_LEVELS.ERROR,$o.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,As.LOG_LEVELS.ERROR,r,!0);let s=await Ll.deleteAuditLogsBefore(e);return await Ul(e.schema,e.table),pm.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Qv,"deleteAuditLogsBefore");async function gm(e){let t=Fv(e);if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,As.LOG_LEVELS.ERROR,r,!0);try{await Ul(e.schema,e.table);let s=await Ll.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Yv}`),s}catch(s){if(s.message===As.SEARCH_NOT_FOUND_MESSAGE){let n=new kv;return n.message=As.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(gm,"deleteRecord")});var Im=f((H2,Nm)=>{var Ml=re(),ve={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 Jv(e){return ve.password.presence=!0,ve.username.presence=!0,ve.role.presence=!0,ve.active.presence=!0,Ml.validateObject(e,ve)}a(Jv,"addUserValidation");function zv(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(zv,"alterUserValidation");function Xv(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(Xv,"dropUserValidation");Nm.exports={addUserValidation:Jv,alterUserValidation:zv,dropUserValidation:Xv}});var Yr=f((F2,ym)=>{"use strict";var mi=require("crypto"),wm="aes-256-cbc",Zv=32,jv=16,Dl=64,Cm=32,eB=Dl+Cm,bm=new Map;ym.exports={encrypt:tB,decrypt:rB,createNatsTableStreamName:sB};function tB(e){let t=mi.randomBytes(Zv),r=mi.randomBytes(jv),s=mi.createCipheriv(wm,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(tB,"encrypt");function rB(e){let t=e.substr(0,Dl),r=e.substr(Dl,Cm),s=e.substr(eB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=mi.createDecipheriv(wm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(rB,"decrypt");function sB(e,t){let r=`${e}.${t}`,s=bm.get(r);return s||(s=mi.createHash("md5").update(`${e}.${t}`).digest("hex"),bm.set(r,s)),s}a(sB,"createNatsTableStreamName")});var le=f((V2,Lm)=>{"use strict";var{platform:x2}=require("os"),nB="nats-server.zip",Pl="nats-server",iB=process.platform==="win32"?`${Pl}.exe`:Pl,vl="HDB",aB=/^[^\s.,*>]+$/,Um="__request__",oB=a(e=>`${e}.${Um}`,"REQUEST_SUBJECT"),cB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},_B={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},uB={HUB:"hub.pid",LEAF:"leaf.pid"},lB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},EB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vl,deliver_subject:"__HDB__.WORKQUEUE"},dB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vl,deliver_subject:"HDB.SCHEMAQUEUE"},hB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vl,deliver_subject:"HDB.USERQUEUE"},fB={SUCCESS:"success",ERROR:"error"},SB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},TB={TXN:"txn",MSGID:"msgid"},_n={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},mB={[_n.ERR]:1,[_n.WRN]:2,[_n.INF]:3,[_n.DBG]:4,[_n.TRC]:5},RB={debug:"-D",trace:"-DVV"};Lm.exports={NATS_SERVER_ZIP:nB,NATS_SERVER_NAME:Pl,NATS_BINARY_NAME:iB,PID_FILES:uB,NATS_CONFIG_FILES:_B,SERVER_SUFFIX:lB,WORK_QUEUE_CONSUMER_NAMES:EB,SCHEMA_QUEUE_CONSUMER_NAMES:dB,USER_QUEUE_CONSUMER_NAMES:hB,NATS_TERM_CONSTRAINTS_RX:aB,REQUEST_SUFFIX:Um,UPDATE_REMOTE_RESPONSE_STATUSES:fB,CLUSTER_STATUS_STATUSES:SB,REQUEST_SUBJECT:oB,SUBJECT_PREFIXES:TB,MSG_HEADERS:cB,LOG_LEVELS:_n,LOG_LEVEL_FLAGS:RB,LOG_LEVEL_HIERARCHY:mB}});var er=f((Y2,Km)=>{"use strict";var Bm="username is required",Hm="nothing to update, must supply active, role or password to update",qm="password cannot be an empty string",Fm="If role is specified, it cannot be empty.",Gm="active must be true or false";Km.exports={addUser:wB,alterUser:CB,dropUser:UB,userInfo:LB,listUsers:Ko,listUsersExternal:MB,setUsersToGlobal:Ri,findAndValidateUser:vB,getClusterUser:BB,USERNAME_REQUIRED:Bm,ALTERUSER_NOTHING_TO_UPDATE:Hm,EMPTY_PASSWORD:qm,EMPTY_ROLE:Fm,ACTIVE_BOOLEAN:Gm};var xm=It(),AB=ps(),Hl=Do(),Vm=Im(),km=bt(),ql=ln(),ut=b(),$m=require("validate.js"),D=I(),{promisify:Fl}=require("util"),Gl=Yr(),Mm=T(),Dm=le(),pB=fr(),$2=U(),gB=Ts(),OB=hs(),{handleHDBError:Zt,hdb_errors:NB}=y(),{HTTP_STATUS_CODES:jt,AUTHENTICATION_ERROR_MSGS:Bl,HDB_ERROR_MSGS:un}=NB,{UserEventMsg:xl}=Kr(),Pm=require("lodash"),Ym={username:!0,active:!0,role:!0,password:!0},vm=new Map,Yo=Fl(km.searchByValue),IB=Fl(km.searchByHash),bB=Fl(AB.delete);async function wB(e){let t=$m.cleanAttributes(e,Ym),r=Vm.addUserValidation(t);if(r)throw Zt(new Error,r.message,jt.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 Yo(s),n=n&&Array.from(n)}catch(_){throw D.error("There was an error searching for a role in add user"),D.error(_),_}if(!n||n.length<1)throw Zt(new Error,un.ROLE_NAME_NOT_FOUND(t.role),jt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Zt(new Error,un.DUP_ROLES_FOUND(t.role),jt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await xm.insert(i)}catch(_){throw D.error("There was an error searching for a user."),D.error(_),_}D.debug(o);try{await Ri()}catch(_){throw D.error("Got an error setting users to global"),D.error(_),_}if(o.skipped_hashes.length===1)throw Zt(new Error,un.USER_ALREADY_EXISTS(t.username),jt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ql.signalUserChange(new xl(process.pid)),`${c.username} successfully added`}a(wB,"addUser");async function CB(e){let t=$m.cleanAttributes(e,Ym);if(ut.isEmptyOrZeroLength(t.username))throw new Error(Bm);if(ut.isEmptyOrZeroLength(t.password)&&ut.isEmptyOrZeroLength(t.role)&&ut.isEmptyOrZeroLength(t.active))throw new Error(Hm);if(!ut.isEmpty(t.password)&&ut.isEmptyOrZeroLength(t.password.trim()))throw new Error(qm);if(!ut.isEmpty(t.active)&&!ut.isBoolean(t.active))throw new Error(Gm);let r=yB(t.username);if(!ut.isEmpty(t.password)&&!ut.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password)),t.role==="")throw new Error(Fm);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 Yo(i)||[])}catch(c){throw D.error("Got an error searching for a role."),D.error(c),c}if(!o||o.length===0){let c=un.ALTER_USER_ROLE_NOT_FOUND(t.role);throw D.error(c),Zt(new Error,c,jt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=un.ALTER_USER_DUP_ROLES(t.role);throw D.error(c),Zt(new Error,c,jt.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 xm.update(s)}catch(i){throw D.error("Error during update."),D.error(i),i}try{await Ri()}catch(i){throw D.error("Got an error setting users to global"),D.error(i),i}return ql.signalUserChange(new xl(process.pid)),n}a(CB,"alterUser");function yB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yB,"isClusterUser");async function UB(e){try{let t=Vm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ut.isEmpty(global.hdb_users.get(e.username)))throw Zt(new Error,un.USER_NOT_EXIST(e.username),jt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await bB(r)}catch(n){throw D.error("Got an error deleting a user."),D.error(n),n}D.debug(s);try{await Ri()}catch(n){throw D.error("Got an error setting users to global."),D.error(n),n}return ql.signalUserChange(new xl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(UB,"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 IB(r)}catch(n){throw D.error("Got an error searching for a role."),D.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw D.error(r),r}return t}a(LB,"userInfo");async function MB(){let e;try{e=await Ko()}catch(t){throw D.error("Got an error listing users."),D.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(MB,"listUsersExternal");async function Ko(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Yo(e)}catch(o){throw D.error("Got an error searching for roles."),D.error(o),o}let r={};for(let o of t)r[o.id]=Pm.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 Yo(s)}catch(o){throw D.error("Got an error searching for users."),D.error(o),o}let i=new Map;for(let o of n)o=Pm.cloneDeep(o),o.role=r[o.role],DB(o.role),i.set(o.username,o);return(await gB.getLicense()).enterprise?i:PB(Array.from(i.values()))}catch(e){throw D.error("got an error listing users"),D.error(e),ut.errorizeMessage(e)}return null}a(Ko,"listUsers");function DB(e){try{if(!e){D.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(OB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){D.error("Got an error trying to set system permissions."),D.error(t)}}a(DB,"appendSystemTablesToRole");function PB(e){try{if(D.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?(D.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return D.error("error filtering users."),D.error(t),new Map}}a(PB,"nonEnterpriseFilter");async function Ri(){try{let e=await Ko();global.hdb_users=e}catch(e){throw D.error(e),e}}a(Ri,"setUsersToGlobal");async function vB(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Zt(new Error,Bl.USER_INACTIVE,jt.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(vm.get(t)===s.password)return n;if(Hl.validate(s.password,t))vm.set(t,s.password);else throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(vB,"findAndValidateUser");async function BB(){let e=await Ko(),t=pB.getConfigFromFile(Mm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ut.isEmpty(r)&&r?.role?.role===Mm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Dm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Dm.SERVER_SUFFIX.ADMIN,r}a(BB,"getClusterUser")});var Wo=f((W2,zm)=>{"use strict";var gs=I(),lt=T(),HB=am(),Wm=Ar(),qB=Os(),FB=er(),{validateEvent:Jm}=Kr(),Ai=Xt(),GB=require("process"),xB={[lt.ITC_EVENT_TYPES.SCHEMA]:VB,[lt.ITC_EVENT_TYPES.USER]:$B};async function VB(e){let t=Jm(e);if(t){gs.error(t);return}gs.trace("ITC schemaHandler received schema event:",e),await HB(e.message),await kB(e.message)}a(VB,"schemaHandler");async function kB(e){try{if(Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.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 qB.describeTable({schema:e.schema,table:e.table});break;default:Wm.setSchemaDataToGlobal(Qm);break}else Wm.setSchemaDataToGlobal(Qm)}catch(t){gs.error(t)}}a(kB,"syncSchemaMetadata");function Qm(e){e&&gs.error(e)}a(Qm,"handleErrorCallback");async function $B(e){try{Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Jm(e);if(t){gs.error(t);return}gs.trace(`ITC userHandler ${lt.HDB_ITC_CLIENT_PREFIX}${GB.pid} received user event:`,e),await FB.setUsersToGlobal()}catch(t){gs.error(t)}}a($B,"userHandler");zm.exports=xB});var Kr=f((Z2,Zm)=>{"use strict";var J2=I(),Vl=b(),YB=T(),{ITC_ERRORS:pi}=at(),{parentPort:z2,threadId:KB,isMainThread:WB,workerData:X2}=require("worker_threads"),{onMessageFromWorkers:QB,broadcast:JB}=cn();Zm.exports={sendItcEvent:zB,validateEvent:Xm,SchemaEventMsg:XB,UserEventMsg:ZB};var Qo;QB(e=>{Qo=Qo||Wo(),Xm(e),Qo[e.type]&&Qo[e.type](e)});function zB(e){!WB&&e.message&&(e.message.originator=KB),JB(e)}a(zB,"sendItcEvent");function Xm(e){if(typeof e!="object")return pi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Vl.isEmpty(e.type))return pi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Vl.isEmpty(e.message))return pi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Vl.isEmpty(e.message.originator))return pi.MISSING_ORIGIN;if(YB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return pi.INVALID_EVENT(e.type)}a(Xm,"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 ln=f((t4,rR)=>{"use strict";var jm=T(),e4=b(),Jo=I(),eR=PT(),En,{sendItcEvent:tR}=Kr();function jB(e){try{Jo.trace("signalSchemaChange called with message:",e),En=En||Wo();let t=new eR(jm.ITC_EVENT_TYPES.SCHEMA,e);En.schema(t),tR(t)}catch(t){Jo.error(t)}}a(jB,"signalSchemaChange");function eH(e){try{Jo.trace("signalUserChange called with message:",e),En=En||Wo();let t=new eR(jm.ITC_EVENT_TYPES.USER,e);En.user(t),tR(t)}catch(t){Jo.error(t)}}a(eH,"signalUserChange");rR.exports={signalSchemaChange:jB,signalUserChange:eH}});var zo=f((s4,nR)=>{"use strict";var sR=b(),tH=T(),rH=I(),sH=wo(),nH=bo(),iH=ln(),{SchemaEventMsg:aH}=Kr(),oH="already exists in";nR.exports=cH;async function cH(e,t,r){if(sR.isEmptyOrZeroLength(r))return r;let s=[];sR.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 _H(e,t.schema,t.name,i)})),n}a(cH,"lmdbCheckForNewAttributes");async function _H(e,t,r,s){let n=new nH(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await uH(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(oH))rH.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(_H,"createNewAttribute");async function uH(e){let t;return t=await sH(e),iH.signalSchemaChange(new aH(process.pid,tH.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(uH,"createAttribute")});var dn=f((i4,iR)=>{"use strict";var Xo=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(Xo,"LMDBTransactionObject");iR.exports=Xo});var oR=f((o4,aR)=>{"use strict";var lH=dn(),EH=T().OPERATIONS_ENUM,Zo=class extends lH{constructor(t,r,s,n,i=void 0){super(EH.INSERT,r,s,n,i),this.records=t}};a(Zo,"LMDBInsertTransactionObject");aR.exports=Zo});var _R=f((_4,cR)=>{"use strict";var dH=dn(),hH=T().OPERATIONS_ENUM,jo=class extends dH{constructor(t,r,s,n,i,o=void 0){super(hH.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(jo,"LMDBUpdateTransactionObject");cR.exports=jo});var lR=f((l4,uR)=>{"use strict";var fH=dn(),SH=T().OPERATIONS_ENUM,ec=class extends fH{constructor(t,r,s,n,i,o=void 0){super(SH.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(ec,"LMDBUpsertTransactionObject");uR.exports=ec});var dR=f((d4,ER)=>{"use strict";var TH=dn(),mH=T().OPERATIONS_ENUM,tc=class extends TH{constructor(t,r,s,n,i=void 0){super(mH.DELETE,s,n,t,i),this.original_records=r}};a(tc,"LMDBDeleteTransactionObject");ER.exports=tc});var gi=f((S4,TR)=>{"use strict";var f4=require("path"),hR=z(),RH=oR(),AH=_R(),pH=lR(),gH=dR(),hn=Le(),fR=b(),{CONFIG_PARAMS:OH}=T(),SR=U();SR.initSync();var rc=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:NH}=j();TR.exports=IH;async function IH(e,t){if(SR.get(OH.LOGGING_AUDITLOG)===!1)return;let r=NH(e.schema,e.table),s=await hR.openEnvironment(r,e.table,!0),n=bH(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){hR.initializeDBIs(s,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),fR.isEmpty(n.user_name)||s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(IH,"writeTransaction");function bH(e,t){let r=fR.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===rc.INSERT)return new RH(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPDATE)return new AH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPSERT)return new pH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.DELETE)return new gH(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(bH,"createTransactionObject")});var kl=f((R4,mR)=>{"use strict";var wH=Co(),m4=di(),Oi=T(),CH=Lo(),yH=nn().insertRecords,UH=z(),LH=I(),MH=zo(),{getSchemaPath:DH}=j(),PH=gi();mR.exports=vH;async function vH(e){try{let{schema_table:t,attributes:r}=wH(e);CH(e,r,t.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(r.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await MH(e.hdb_auth_header,t,r),n=DH(e.schema,e.table),i=await UH.openEnvironment(n,e.table),o=await yH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await PH(e,o)}catch(c){LH.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(vH,"lmdbCreateRecords")});var pR=f((p4,AR)=>{"use strict";var RR=T(),BH=kl(),HH=di(),qH=require("fs-extra"),{getSchemaPath:FH}=j();AR.exports=GH;async function GH(e){let t=[{name:e.schema,createddate:Date.now()}],r=new HH(RR.SYSTEM_SCHEMA_NAME,RR.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await BH(r),await qH.mkdirp(FH(e.schema))}a(GH,"lmdbCreateSchema")});var OR=f((O4,gR)=>{"use strict";var sc=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(sc,"DeleteRecordsResponseObject");gR.exports=sc});var Kl=f((C4,bR)=>{"use strict";var NR=z(),$l=fs(),Yl=at().LMDB_ERRORS_ENUM,xH=Le(),IR=I(),I4=b(),VH=require("lmdb"),kH=OR(),$H=T(),{OVERFLOW_MARKER:b4,MAX_SEARCH_KEY_LENGTH:w4}=xH,YH=$H.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function KH(e,t,r,s){if($l.validateEnv(e),t===void 0)throw new Error(Yl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yl.IDS_REQUIRED):new Error(Yl.IDS_MUST_BE_ITERABLE);try{let n=NR.listDBIs(e);NR.initializeDBIs(e,t,n);let i=new kH,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let m=e.dbis[t].get(o);if(!m||s&&m[YH]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,VH.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!m.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=m[H];if(q!=null)try{let Ue=$l.getIndexedValues(q);if(Ue)for(let M=0,$=Ue.length;M<$;M++)x.remove(Ue[M],o)}catch{IR.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(m)}catch(m){IR.warn(m),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=$l.getNextMonotonicTime(),i}catch(n){throw n}}a(KH,"deleteRecords");bR.exports={deleteRecords:KH}});var Ni=f((U4,CR)=>{"use strict";var fn=b(),WH=Kl(),QH=z(),{getSchemaPath:JH}=j(),zH=gi(),XH=I();CR.exports=ZH;async function ZH(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fn.isEmptyOrZeroLength(e.hash_values)&&!fn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];fn.isEmpty(_)||e.hash_values.push(_)}}if(fn.isEmptyOrZeroLength(e.hash_values))return wR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fn.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=JH(e.schema,e.table),i=await QH.openEnvironment(n,e.table),o=await WH.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await zH(e,o)}catch(c){XH.error(`unable to write transaction due to ${c.message}`)}return wR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(ZH,"lmdbDeleteRecords");function wR(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(wR,"createDeleteResponse")});var Ql=f((D4,yR)=>{"use strict";var jH=T(),M4=fs();function Wl(e,t){let r=Object.create(null);if(t.length===1&&jH.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(Wl,"parseRow");function eq(e,t,r,s){let n=Wl(r,e);s.push(n)}a(eq,"searchAll");function tq(e,t,r,s){let n=Wl(r,e);s[t]=n}a(tq,"searchAllToMap");function rq(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(rq,"iterateDBI");function Ns(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(Ns,"pushResults");function sq(e,t,r,s,n,i){t.toString().endsWith(e)&&Ns(t,r,s,n,i)}a(sq,"endsWith");function nq(e,t,r,s,n,i){t.toString().includes(e)&&Ns(t,r,s,n,i)}a(nq,"contains");function iq(e,t,r,s,n,i){t>e&&Ns(t,r,s,n,i)}a(iq,"greaterThanCompare");function aq(e,t,r,s,n,i){t>=e&&Ns(t,r,s,n,i)}a(aq,"greaterThanEqualCompare");function oq(e,t,r,s,n,i){t<e&&Ns(t,r,s,n,i)}a(oq,"lessThanCompare");function cq(e,t,r,s,n,i){t<=e&&Ns(t,r,s,n,i)}a(cq,"lessThanEqualCompare");yR.exports={parseRow:Wl,searchAll:eq,searchAllToMap:tq,iterateDBI:rq,endsWith:sq,contains:nq,greaterThanCompare:iq,greaterThanEqualCompare:aq,lessThanCompare:oq,lessThanEqualCompare:cq,pushResults:Ns}});var bs=f((q4,BR)=>{"use strict";var Wr=z(),v4=I(),Et=fs(),nc=Le(),ce=at().LMDB_ERRORS_ENUM,B4=b(),_q=T(),ic=Ql(),{parseRow:uq}=ic,H4=require("lmdb"),{OVERFLOW_MARKER:UR,MAX_SEARCH_KEY_LENGTH:lq}=nc;function LR(e,t,r,s=!1,n=void 0,i=void 0){return Is(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(LR,"iterateFullIndex");function Ii(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return Is(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(Ii,"iterateRangeBetween");function Is(e,t,r,s){let n=e.database||e,i=Wr.openDBI(n,r);i[nc.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wr.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(Is,"setupTransaction");function MR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(UR)){if(!n)if(r)n=Wr.openDBI(e,r);else{let _=Wr.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Wr.openDBI(e,_[u]),!n[nc.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(MR,"getOverflowCheck");function Eq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Is(e,t,t,(o,c,_)=>(ac(r),r=bi(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>uq(u.value,r))))}a(Eq,"searchAll");function dq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ac(r),r=bi(e.database||e,r);let o=new Map;for(let{key:c,value:_}of LR(e,t,t,s,n,i))o.set(c,ic.parseRow(_,r));return o}a(dq,"searchAllToMap");function hq(e,t,r=!1,s=void 0,n=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=LR(e,void 0,t,r,s,n),c=o.transaction,_=MR(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(hq,"iterateDBI");function fq(e,t){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Wr.statDBI(e,t).entryCount}a(fq,"countAll");function Sq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),Is(e,t,r,(c,_,u,l)=>(s=Et.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(Sq,"equals");function Tq(e,t,r){return Qr(e,t,r),Wr.openDBI(e,t).getValuesCount(r)}a(Tq,"count");function mq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),Is(e,null,r,(c,_)=>{s=Et.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(mq,"startsWith");function Rq(e,t,r,s,n=!1,i=void 0,o=void 0){return DR(e,t,r,s,n,i,o,!0)}a(Rq,"endsWith");function DR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Qr(e,r,s),Is(e,null,r,(_,u,l,E)=>{let d=MR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let m=h.toString();return m.endsWith(UR)?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?m.endsWith(s):m.includes(s))?u[nc.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(DR,"contains");function Aq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!0,!1)}a(Aq,"greaterThan");function pq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!1,!1)}a(pq,"greaterThanEqual");function gq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!0)}a(gq,"lessThan");function Oq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!1)}a(Oq,"lessThanEqual");function Nq(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Et.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=Et.convertKeyValueToWrite(s),n=Et.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ii(e,t,r,s,n,i,o,c)}a(Nq,"between");function Iq(e,t,r,s){Et.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),r=bi(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ic.parseRow(c,r)),o}a(Iq,"searchByHash");function bq(e,t,r){Et.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(bq,"checkHashExists");function wq(e,t,r,s,n=[]){return vR(e,t,r,s,n),PR(e,t,r,s,n).map(i=>i[1])}a(wq,"batchSearchByHash");function Cq(e,t,r,s,n=[]){vR(e,t,r,s,n);let i=new Map;for(let[o,c]of PR(e,t,r,s,n))i.set(o,c);return i}a(Cq,"batchSearchByHashToMap");function PR(e,t,r,s,n=[]){return Is(e,t,t,(i,o,c)=>{r=bi(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ic.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(PR,"batchHashSearch");function vR(e,t,r,s,n){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(vR,"initializeBatchSearchByHash");function ac(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ac,"validateFetchAttributes");function Qr(e,t,r){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>lq)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Qr,"validateComparisonFunctions");function bi(e,t){return t.length===1&&_q.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wr.listDBIs(e)),t}a(bi,"setGetWholeRowAttributes");BR.exports={searchAll:Eq,searchAllToMap:dq,count:Tq,countAll:fq,equals:Sq,startsWith:mq,endsWith:Rq,contains:DR,searchByHash:Iq,setGetWholeRowAttributes:bi,batchSearchByHash:wq,batchSearchByHashToMap:Cq,checkHashExists:bq,iterateDBI:hq,greaterThan:Aq,greaterThanEqual:pq,lessThan:gq,lessThanEqual:Oq,between:Nq}});var wi=f((x4,GR)=>{var HR=require("lodash"),qR=re(),W=require("joi"),yq=b(),{hdb_schema_table:Ft,checkValidTable:FR}=zt(),{handleHDBError:Uq,hdb_errors:Lq}=y(),{HTTP_STATUS_CODES:Mq}=Lq,G4=W.object({schema:Ft,table:Ft,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(Ft).required()}),Dq=W.object({schema:Ft,table:Ft,search_attribute:Ft,search_value:W.any().required(),get_attributes:W.array().min(1).items(Ft).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),Pq=W.object({schema:Ft,table:Ft,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(Ft).required(),conditions:W.array().min(1).items(W.object({search_attribute:Ft,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()});GR.exports=function(e,t){let r=null;switch(t){case"value":r=qR.validateBySchema(e,Dq);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(FR("schema",e.schema)),i(FR("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=qR.validateBySchema(e,Pq);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=yq.checkGlobalSchemaTable(e.schema,e.table);if(n)return Uq(new Error,n,Mq.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 _=HR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!HR.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 Jl=f((k4,xR)=>{"use strict";var vq=z(),Bq=wi(),{getSchemaPath:Hq}=j();xR.exports=qq;function qq(e){let t=Bq(e,"hashes");if(t)throw t;let r=Hq(e.schema,e.table);return vq.openEnvironment(r,e.table)}a(qq,"initialize")});var zl=f((Y4,VR)=>{"use strict";var Fq=bs(),Gq=Jl();VR.exports=xq;async function xq(e){let t=await Gq(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Fq.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(xq,"lmdbGetDataByHash")});var Sn=f((W4,kR)=>{"use strict";var oc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(oc,"SearchByHashObject");kR.exports=oc});var YR=f((z4,$R)=>{"use strict";var J4=Sn(),Vq=bs(),kq=Jl();$R.exports=$q;async function $q(e){let t=await kq(e),r=global.hdb_schema[e.schema][e.table];return Vq.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a($q,"lmdbSearchByHash")});var Gt=f((Z4,KR)=>{"use strict";var cc=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(cc,"SearchObject");KR.exports=cc});var _c=f((e5,ZR)=>{"use strict";var Be=bs(),Yq=z(),Kq=b(),C=Le(),ws=T(),Wq=hs(),WR=at().LMDB_ERRORS_ENUM,{compareKeys:Tn}=require("ordered-binary"),{getSchemaPath:Qq}=j(),pr=ws.SEARCH_WILDCARDS;async function Jq(e,t,r){let s;e.schema===ws.SYSTEM_SCHEMA_NAME?s=Wq[e.table]:s=global.hdb_schema[e.schema][e.table];let n=XR(e,s.hash_attribute,r,t);return JR(e,n,s.hash_attribute,r)}a(Jq,"prepSearch");async function JR(e,t,r,s){let n=Qq(e.schema,e.table),i=await Yq.openEnvironment(n,e.table),o=zR(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(Xq(e,r)===!1){let l=e.search_attribute;if(l===r)return s?QR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?QR(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(JR,"executeSearch");function zR(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(zR,"searchByType");function zq(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 Tn(i,s[0])>=0&&Tn(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Tn(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tn(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Tn(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tn(n[r],s)<=0;default:return Object.create(null)}}a(zq,"filterByType");function QR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(QR,"createMapFromIterable");function Xq(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(Xq,"checkToFetchMore");function XR(e,t,r,s){if(Kq.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),pr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(pr[0])<0&&n.indexOf(pr[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(pr.indexOf(i)>=0&&pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(pr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(pr[0])||n.includes(pr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(WR.UNKNOWN_SEARCH_TYPE)}else switch(s){case ws.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case ws.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case ws.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case ws.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case ws.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(WR.UNKNOWN_SEARCH_TYPE)}}a(XR,"createSearchTypeFromSearchObject");ZR.exports={executeSearch:JR,createSearchTypeFromSearchObject:XR,prepSearch:Jq,searchByType:zR,filterByType:zq}});var eA=f((s5,jR)=>{"use strict";var r5=Gt(),Zq=wi(),jq=b(),eF=T(),tF=_c();jR.exports=rF;function rF(e,t){if(!jq.isEmpty(t)&&eF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Zq(e,"value");if(s)throw s;let n=!0;return tF.prepSearch(e,t,n)}a(rF,"lmdbGetDataByValue")});var mn=f((a5,tA)=>{"use strict";var i5=Gt(),sF=wi(),nF=b(),iF=T(),aF=_c();tA.exports=oF;async function oF(e,t){if(!nF.isEmpty(t)&&iF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=sF(e,"value");if(s)throw s;return aF.prepSearch(e,t,!1)}a(oF,"lmdbSearchByValue")});var sA=f((_5,rA)=>{"use strict";var c5=Le(),uc=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(uc,"SearchByConditionsObject");var lc=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(lc,"SearchCondition");var Ec=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ec,"SortAttribute");rA.exports={SearchByConditionsObject:uc,SearchCondition:lc,SortAttribute:Ec}});var cA=f((E5,oA)=>{"use strict";var l5=sA().SearchByConditionsObject,cF=Gt(),_F=wi(),Xl=bs(),dc=Le(),aA=_c(),uF=Ql(),lF=require("lodash"),{getSchemaPath:EF}=j(),nA=z(),{handleHDBError:dF,hdb_errors:hF}=y(),{HTTP_STATUS_CODES:fF}=hF,SF=1e8;oA.exports=TF;async function TF(e){let t=_F(e,"conditions");if(t)throw dF(t,t.message,fF.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=EF(e.schema,e.table),s=await nA.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)nA.openDBI(s,u.search_attribute);let i=lF.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===dc.SEARCH_TYPES.EQUALS?u.estimated_count=Xl.count(s,u.search_attribute,u.search_value):l===dc.SEARCH_TYPES.CONTAINS||l===dc.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=SF}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await iA(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(aA.filterByType),E=l.length,d=Xl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let m=0;m<E;m++)if(!l[m](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=>uF.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await iA(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),_=Xl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(TF,"lmdbSearchByConditions");async function iA(e,t,r,s){let n=new cF(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===dc.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,aA.searchByType(e,n,i,s).map(o=>o.value)}a(iA,"executeConditionSearch")});var Ci=f((h5,_A)=>{"use strict";var mF=T().OPERATIONS_ENUM,hc=class{constructor(t,r,s,n=void 0){this.operation=mF.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(hc,"DeleteObject");_A.exports=hc});var Zl=f((S5,TA)=>{"use strict";var dA=Gt(),hA=Ci(),fA=mn(),SA=Ni(),We=T(),uA=b(),lA=z(),{getTransactionAuditStorePath:RF,getSchemaPath:AF}=j(),EA=I();TA.exports=pF;async function pF(e){try{if(uA.isEmpty(global.hdb_schema[e.schema])||uA.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await gF(e),await OF(e);let t=AF(e.schema,e.table);try{await lA.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")EA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=RF(e.schema,e.table);await lA.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")EA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pF,"lmdbDropTable");async function gF(e){let t=new dA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await fA(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 hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await SA(n)}a(gF,"deleteAttributesFromSystem");async function OF(e){let t=new dA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await fA(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 hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await SA(n)}catch(i){throw i}}a(OF,"dropTableFromSystem")});var RA=f((m5,mA)=>{"use strict";var NF=require("fs-extra"),IF=Gt(),bF=Sn(),wF=Ci(),CF=Zl(),yF=Ni(),UF=zl(),LF=mn(),gr=T(),{getSchemaPath:MF}=j(),{handleHDBError:DF,hdb_errors:PF}=y(),{HDB_ERROR_MSGS:vF,HTTP_STATUS_CODES:BF}=PF;mA.exports=HF;async function HF(e){let t;try{t=await qF(e.schema);let r=new IF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await LF(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await CF(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new wF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yF(n);let i=MF(t);await NF.remove(i)}catch(r){throw r}}a(HF,"lmdbDropSchema");async function qF(e){let t=new bF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await UF(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw DF(new Error,vF.SCHEMA_NOT_FOUND(e),BF.NOT_FOUND,void 0,void 0,!0);return s}a(qF,"validateDropSchema")});var jl=f((A5,AA)=>{"use strict";var fc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(fc,"CreateTableObject");AA.exports=fc});var gA=f((O5,pA)=>{"use strict";var FF=require("fs-extra"),Sc=z(),{getTransactionAuditStorePath:GF}=j(),eE=Le(),g5=jl();pA.exports=xF;async function xF(e){let t;try{let r=GF(e.schema,e.table);await FF.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,eE.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Sc.createDBI(t,eE.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(xF,"createTransactionsAuditEnvironment")});var bA=f((I5,IA)=>{"use strict";var tE=T(),OA=z(),VF=nn(),{getSystemSchemaPath:kF,getSchemaPath:$F}=j(),YF=hs(),KF=wo(),rE=bo(),WF=I(),QF=gA(),nE=YF.hdb_table,NA=[];for(let e=0;e<nE.attributes.length;e++)NA.push(nE.attributes[e].attribute);IA.exports=JF;async function JF(e,t){let r=$F(t.schema,t.table),s=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new rE(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await OA.createEnvironment(r,t.table),e!==void 0){let o=await OA.openEnvironment(kF(),tE.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await VF.insertRecords(o,nE.hash_attribute,NA,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await sE(s),await sE(n),await sE(i)}await QF(t)}catch(o){throw o}}a(JF,"lmdbCreateTable");async function sE(e){try{await KF(e)}catch(t){WF.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(sE,"createAttribute")});var CA=f((w5,wA)=>{"use strict";var zF=Co(),XF=Lo(),ZF=zo(),yi=T(),jF=nn().updateRecords,eG=z(),{getSchemaPath:tG}=j(),rG=gi(),sG=I();wA.exports=nG;async function nG(e){try{let{schema_table:t,attributes:r}=zF(e);XF(e,r,t.hash_attribute),e.schema!==yi.SYSTEM_SCHEMA_NAME&&(r.includes(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ZF(e.hdb_auth_header,t,r),n=tG(e.schema,e.table),i=await eG.openEnvironment(n,e.table),o=await jF(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await rG(e,o)}catch(c){sG.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(nG,"lmdbUpdateRecords")});var UA=f((y5,yA)=>{"use strict";var iG=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=iG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");yA.exports=Tc});var MA=f((M5,LA)=>{"use strict";var L5=UA(),aG=Co(),oG=Lo(),cG=zo(),Ui=T(),_G=nn().upsertRecords,uG=z(),{getSchemaPath:lG}=j(),EG=gi(),dG=I(),{handleHDBError:hG,hdb_errors:fG}=y();LA.exports=SG;async function SG(e){let t;try{t=aG(e)}catch(_){throw hG(_,_.message,fG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;oG(e,s,r.hash_attribute),e.schema!==Ui.SYSTEM_SCHEMA_NAME&&(s.includes(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await cG(e.hdb_auth_header,r,s),i=lG(e.schema,e.table),o=await uG.openEnvironment(i,e.table),c=await _G(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await EG(e,c)}catch(_){dG.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(SG,"lmdbUpsertRecords")});var qA=f((P5,HA)=>{"use strict";var TG=Gt(),DA=b(),PA=I(),mG=mn(),vA=T(),RG=Kl().deleteRecords,AG=z(),{getSchemaPath:pG}=j(),{promisify:gG}=require("util"),OG=gG(setTimeout),BA=1e4,NG=10;HA.exports=IG;async function IG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(DA.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 TG(e.schema,e.table,vA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await mG(n,vA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw PA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return DA.isEmptyOrZeroLength(s)?(PA.trace("No records found to delete"),{message:"No records found to delete"}):await bG(e,s,t)}a(IG,"lmdbDeleteRecordsBefore");async function bG(e,t,r){let s=pG(e.schema,e.table),n=await AG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=BA){let _=t.slice(o,o+BA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await RG(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 OG(NG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(bG,"chunkDeletes")});var GA=f((B5,FA)=>{"use strict";var mc=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(mc,"DeleteBeforeObject");FA.exports=mc});var VA=f((q5,xA)=>{"use strict";var Rc=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Rc,"DeleteAuditLogsBeforeResults");xA.exports=Rc});var YA=f((x5,$A)=>{"use strict";var iE=z(),{getTransactionAuditStorePath:wG}=j(),G5=GA(),Li=Le(),CG=b(),kA=VA(),yG=require("util").promisify,UG=yG(setTimeout),LG=1e4,MG=100;$A.exports=DG;async function DG(e){let t=wG(e.schema,e.table),r=await iE.openEnvironment(t,e.table,!0),s=iE.listDBIs(r);iE.initializeDBIs(r,Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new kA;do n=await PG(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 UG(MG);while(n.transactions_deleted>0);return i}a(DG,"deleteAuditLogsBefore");async function PG(e,t){let r=new kA;try{let s=e.dbis[Li.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[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];CG.isEmpty(c)||(n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Li.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(PG,"deleteTransactions")});var WA=f((k5,KA)=>{"use strict";var Ac=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ac,"DropAttributeObject");KA.exports=Ac});var JA=f((K5,QA)=>{"use strict";var vG=Gt(),BG=Ci(),Y5=WA(),tr=T(),HG=b(),aE=z(),qG=hs(),FG=mn(),GG=Ni(),{getSchemaPath:xG}=j();QA.exports=VG;async function VG(e,t=!0){let r;e.schema===tr.SYSTEM_SCHEMA_NAME?r=qG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await $G(e),n=xG(e.schema,e.table),i=await aE.openEnvironment(n,e.table);return t===!0&&await kG(e,i,r.hash_attribute),aE.dropDBI(i,e.attribute),s}a(VG,"lmdbDropAttribute");async function kG(e,t,r){let s=aE.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(kG,"removeAttributeFromAllObjects");async function $G(e){let t=new vG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await FG(t)).filter(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(HG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new BG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return GG(i)}a($G,"dropAttributeFromSystem")});var tp=f((J5,ep)=>{"use strict";var oE=z(),Rn=Le(),Q5=fs(),cE=T(),zA=b(),{getTransactionAuditStorePath:YG}=j(),KG=bs(),pc=dn(),WG=I();ep.exports=QG;async function QG(e){let t=YG(e.schema,e.table),r=await oE.openEnvironment(t,e.table,!0),s=oE.listDBIs(r);oE.initializeDBIs(r,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return XA(r,e.search_values);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,zG(r,e.search_values,n);case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return JG(r,e.search_values);default:return XA(r)}}a(QG,"readAuditLog");function XA(e,t=[0,Date.now()]){zA.isEmpty(t[0])&&(t[0]=0),zA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rn.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 pc,n))}a(XA,"searchTransactionsByTimestamp");function JG(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[Rn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,jA(e,i))}return Object.fromEntries(r)}a(JG,"searchTransactionsByUsername");function zG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=KG.equals(e,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rn.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=jA(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);ZA(_,"records",r,l,o),ZA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(zG,"searchTransactionsByHashValues");function ZA(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 pc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new pc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(ZA,"loopRecords");function jA(e,t){let r=[];try{let s=e.dbis[Rn.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 pc,i);r.push(o)}}catch(i){WG.warn(i)}return r}catch(s){throw s}}a(jA,"batchSearchTransactions")});var sp=f((X5,rp)=>{"use strict";var{getSchemaPath:XG}=j(),ZG=z();rp.exports={writeTransaction:jG};async function jG(e,t,r){let s=XG(e,t);return(await ZG.openEnvironment(s,t)).transaction(r)}a(jG,"writeTransaction")});var op=f((j5,ap)=>{"use strict";var{getSchemaPath:np}=j(),ip=z();ap.exports={flush:e0,resetReadTxn:t0};async function e0(e,t){return(await ip.openEnvironment(np(e,t),t.toString())).flushed}a(e0,"flush");async function t0(e,t){try{(await ip.openEnvironment(np(e,t),t.toString())).resetReadTxn()}catch{}}a(t0,"resetReadTxn")});var up=f((tj,_p)=>{"use strict";var r0=I(),{handleHDBError:s0}=y(),n0=zu(),i0=wo(),a0=kl(),o0=pR(),c0=Ni(),_0=zl(),u0=YR(),l0=eA(),E0=mn(),d0=cA(),h0=RA(),f0=bA(),S0=CA(),T0=MA(),m0=qA(),R0=YA(),A0=Zl(),p0=JA(),g0=tp(),O0=sp(),cp=op(),gc=class extends n0{async searchByConditions(t){return d0(t)}async getDataByHash(t){return await _0(t)}async searchByHash(t){return await u0(t)}async getDataByValue(t,r){return await l0(t,r)}async searchByValue(t){return await E0(t)}async createSchema(t){return await o0(t)}async dropSchema(t){return await h0(t)}async createTable(t,r){return await f0(t,r)}async dropTable(t){return await A0(t)}async createAttribute(t){return await i0(t)}async createRecords(t){return await a0(t)}async updateRecords(t){return await S0(t)}async upsertRecords(t){try{return await T0(t)}catch(r){throw s0(r,null,null,r0.ERR,r)}}async deleteRecords(t){return await c0(t)}async deleteRecordsBefore(t){return await m0(t)}async dropAttribute(t){return await p0(t)}async deleteAuditLogsBefore(t){return await R0(t)}async readAuditLog(t){return await g0(t)}writeTransaction(t,r,s){return O0.writeTransaction(t,r,s)}flush(t,r){return cp.flush(t,r)}resetReadTxn(t,r){return cp.resetReadTxn(t,r)}};a(gc,"LMDBBridge");_p.exports=gc});var Xt=f((sj,Ep)=>{"use strict";var N0=up(),I0=zu(),b0=U();b0.initSync();var lp;function w0(){return lp instanceof I0?lp:new N0}a(w0,"getBridge");Ep.exports=w0()});var Sp=f((ij,fp)=>{"use strict";var dp=require("lodash"),Mi=require("mathjs"),C0=require("jsonata"),hp=b();fp.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?dp.uniqWith(e,dp.isEqual):e,searchJSON:y0,mad:Di.bind(null,Mi.mad),mean:Di.bind(null,Mi.mean),mode:Di.bind(null,Mi.mode),prod:Di.bind(null,Mi.prod),median:Di.bind(null,Mi.median)};function Di(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(Di,"aggregateFunction");function y0(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(hp.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),hp.isEmpty(this.__ala__.res[r])){let s=C0(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(y0,"searchJSON")});var mp=f((oj,Tp)=>{"use strict";var Ee=require("moment"),_E="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ee.suppressDeprecationWarnings=!0;Tp.exports={current_date:()=>Ee().utc().format("YYYY-MM-DD"),current_time:()=>Ee().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ee(e).utc().format("YYYY");case"month":return Ee(e).utc().format("MM");case"day":return Ee(e).utc().format("DD");case"hour":return Ee(e).utc().format("HH");case"minute":return Ee(e).utc().format("mm");case"second":return Ee(e).utc().format("ss");case"millisecond":return Ee(e).utc().format("SSS");default:break}},date:e=>Ee(e).utc().format(_E),date_format:(e,t)=>Ee(e).utc().format(t),date_add:(e,t,r)=>Ee(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ee(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Ee(e).utc(),n=Ee(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Ee().utc().valueOf(),get_server_time:()=>Ee().format(_E),offset_utc:(e,t)=>Ee(e).utc().utcOffset(t).format(_E)}});var gp=f((cj,pp)=>{"use strict";var U0=require("@turf/area"),L0=require("@turf/length"),M0=require("@turf/circle"),D0=require("@turf/difference"),P0=require("@turf/distance"),v0=require("@turf/boolean-contains"),B0=require("@turf/boolean-equal"),H0=require("@turf/boolean-disjoint"),q0=require("@turf/helpers"),Rp=T(),F=b();pp.exports={geoArea:F0,geoLength:G0,geoCircle:x0,geoDifference:V0,geoDistance:Ap,geoNear:k0,geoContains:$0,geoEqual:Y0,geoCrosses:K0,geoConvert:W0};var uE="geo1 is required",lE="geo2 is required";function F0(e){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),U0.default(e)}a(F0,"geoArea");function G0(e,t){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),L0.default(e,{units:t||"kilometers"})}a(G0,"geoLength");function x0(e,t,r){if(F.isEmpty(e))throw new Error("point is required");if(F.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),M0.default(e,t,{units:r||"kilometers"})}a(x0,"geoCircle");function V0(e,t){if(F.isEmpty(e))throw new Error("poly1 is required");if(F.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),D0(e,t)}a(V0,"geoDifference");function Ap(e,t,r){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),P0.default(e,t,{units:r||"kilometers"})}a(Ap,"geoDistance");function k0(e,t,r,s){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");if(F.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ap(e,t,s)<=r}a(k0,"geoNear");function $0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),v0.default(e,t)}a($0,"geoContains");function Y0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),B0.default(e,t)}a(Y0,"geoEqual");function K0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),!H0.default(e,t)}a(K0,"geoCrosses");function W0(e,t,r){if(F.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(F.isEmpty(t))throw new Error("geo_type is required");if(F.isEmpty(Rp.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Rp.GEO_CONVERSION_ENUM).join(",")}`);return q0[t](e,r)}a(W0,"geoConvert")});var Oc=f((uj,Op)=>{var Cs=Sp(),dt=mp(),rr=gp();Op.exports=e=>{e.aggr.mad=e.aggr.MAD=Cs.mad,e.aggr.mean=e.aggr.MEAN=Cs.mean,e.aggr.mode=e.aggr.MODE=Cs.mode,e.aggr.prod=e.aggr.PROD=Cs.prod,e.aggr.median=e.aggr.MEDIAN=Cs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Cs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Cs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=dt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=dt.current_time,e.fn.extract=e.fn.EXTRACT=dt.extract,e.fn.date=e.fn.DATE=dt.date,e.fn.date_format=e.fn.DATE_FORMAT=dt.date_format,e.fn.date_add=e.fn.DATE_ADD=dt.date_add,e.fn.date_sub=e.fn.DATE_SUB=dt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=dt.date_diff,e.fn.now=e.fn.NOW=dt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=dt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=dt.get_server_time,e.fn.getdate=e.fn.GETDATE=dt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=dt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rr.geoNear}});var bp=f((lj,Ip)=>{"use strict";var Pi=require("lodash"),be=require("alasql");be.options.cache=!1;var Q0=Oc(),Np=require("clone"),Nc=require("recursive-iterator"),P=I(),B=b(),An=Xt(),J0=T(),{hdb_errors:z0}=y(),X0="IS NULL",xt="There was a problem performing this search. Please check the logs and try again.";Q0(be);var Ic=class{constructor(t,r){if(B.isEmpty(t))throw P.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 P.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw P.error("Error thrown from checkEmptySQL in SQLSearch class method search."),P.error(s),new Error(xt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw P.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),P.error(s),new Error(xt)}if(Object.keys(this.data).length===0)return P.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw P.error("Error thrown from processJoins in SQLSearch class method search."),P.error(s),new Error(xt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw P.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),P.error(s),new Error(xt)}try{return t=await this._finalSQL(),t}catch(s){throw P.error("Error thrown from finalSQL in SQLSearch class method search."),P.error(s),new Error(xt)}}_getColumns(){let t=new Nc(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(Np(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Pi.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)){P.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Nc(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 be.yy.LogicValue({value:s}):r.right instanceof be.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new be.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 be.yy.LogicValue({value:i}):s instanceof be.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new be.yy.NumValue({value:i}))});if(t){P.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Nc(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(J0.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&&Pi.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 be.promise(r)}catch(r){throw P.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),P.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(Np(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(X0)>-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=Pi.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 An.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 P.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}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 An.getDataByValue(E);for(let[h,m]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}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 m=await An.getDataByValue(c,h.operation);if(_)for(let[R]of m)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 m)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 P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await An.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 P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),P.error(l),new Error(xt)}}}_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 be.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 be.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new be.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 be.yy.FuncValue:new be.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 m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),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 m=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}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),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}`,m=this._convertColumnsToIndexes(h,n);d=await be.promise(m,t),t=null}catch(h){throw P.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),P.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;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 m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Pi.difference(m,[...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 Nc(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=Pi.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 P.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),P.error(i),new Error(xt)}}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 An.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 m=0;m<u;m++){let R=n.columns[m],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw P.error("Error thrown from getDataByHash function in SQLSearch class method getData."),P.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();P.trace(`Final SQL: ${n}`),s=await be.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),P.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw P.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),P.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 P.error(z0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),P.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 An.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 P.error("There was an error when processing this SQL operation. Check your logs"),P.error(o),new Error(xt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ic,"SQLSearch");Ip.exports=Ic});var bt=f((dj,Cp)=>{"use strict";var Z0=yS();Cp.exports={searchByConditions:rx,searchByHash:sx,searchByValue:nx,search:ix};var EE=Xt(),wp=require("util"),j0=wp.callbackify(EE.searchByHash),ex=wp.callbackify(EE.searchByValue),tx=bp();async function rx(e){return EE.searchByConditions(e)}a(rx,"searchByConditions");function sx(e,t){try{j0(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(sx,"searchByHash");function nx(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),ex(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(nx,"searchByValue");function ix(e,t){try{let r=new Z0(e);r.validate(),new tx(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(ix,"search")});var Os=f((fj,Bp)=>{"use strict";var Up=bt(),Jr=I(),Lp=Oo(),ax=require("lodash"),ox=Yr(),Mp=b(),{promisify:Dp}=require("util"),Z=T(),{handleHDBError:bc,hdb_errors:cx}=y(),{HDB_ERROR_MSGS:wc,HTTP_STATUS_CODES:Pp}=cx,_x=U();_x.initSync();var yp=z(),ux=bs(),{getSchemaPath:lx}=j(),vi=Dp(Up.searchByValue),Ex=Dp(Up.searchByHash),pn="name",vp="hash_attribute",dE="schema",dx="schema_table",hx="attribute";Bp.exports={describeAll:fx,describeTable:Cc,describeSchema:Tx};async function fx(e){try{let t=Mp.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:pn,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[pn]},i=await vi(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:[vp,Z.ID_ATTRIBUTE_STRING,pn,dE]},u=await vi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Cc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Cc({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Jr.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 Jr.error("Got an error in describeAll"),Jr.error(t),bc(new Error,wc.DESCRIBE_ALL_ERR)}}a(fx,"describeAll");async function Cc(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=Lp.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:pn,search_value:s,hash_values:[],get_attributes:[Z.WILDCARD_SEARCH_VALUE]},_=Array.from(await vi(c));if(!_||_.length===0)throw bc(new Error,wc.TABLE_NOT_FOUND(e.schema,e.table),Pp.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw bc(new Error,wc.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:dx,search_value:r+"."+s,get_attributes:[hx]},E=Array.from(await vi(l));E=ax.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Sx(n)),i.attributes=E,i.clustering_stream_name=ox.createNatsTableStreamName(u.schema,u.name);try{let d=lx(i.schema,i.name),h=await yp.openEnvironment(d,i.name),m=yp.statDBI(h,i.hash_attribute);i.record_count=m.entryCount;for(let{key:R}of ux.lessThan(h,i.hash_attribute,Z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Jr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Jr.error(`There was an error getting attributes for table '${u.name}'`),Jr.error(l)}return i}a(Cc,"descTable");function Sx(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Sx,"getAttrsByPerms");async function Tx(e){let t=Lp.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:dE,search_value:s,hash_values:[],get_attributes:[vp,Z.ID_ATTRIBUTE_STRING,pn,dE]},i=Array.from(await vi(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:[pn]},c=Array.from(await Ex(o));if(c&&c.length<1)throw bc(new Error,wc.SCHEMA_NOT_FOUND(e.schema),Pp.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]),Mp.isEmpty(_)||_.describe){let u=await Cc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Jr.error(`Error describing schema table '${e.schema}.${c}'`),Jr.error(_)}})),o}}a(Tx,"describeSchema")});var Ar=f((Tj,xp)=>{var gn=hs(),{callbackify:Fp,promisify:mx}=require("util");xp.exports={setSchemaDataToGlobal:Hp,getTableSchema:px,getSystemSchema:Ox,setSchemaDataToGlobalAsync:mx(Hp)};var Gp=Os(),Rx=Fp(Gp.describeAll),Ax=Fp(Gp.describeTable);function Hp(e){Rx(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gn),global.hdb_schema=r,e(null,null)})}a(Hp,"setSchemaDataToGlobal");function qp(e,t){return e==="system"?gn[t]:global.hdb_schema[e][t]}a(qp,"returnSchema");function px(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?gx(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,qp(e,t))}):r(null,qp(e,t))}a(px,"getTableSchema");function gx(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gn:global.hdb_schema={system:gn},r();return}Ax(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(gx,"setTableDataToGlobal");function Ox(){return gn}a(Ox,"getSystemSchema")});var yc=f((Rj,Vp)=>{"use strict";var Nx=Xt();Vp.exports={writeTransaction:Ix};function Ix(e,t,r){return Nx.writeTransaction(e,t,r)}a(Ix,"writeTransaction")});var He=f((yj,ag)=>{"use strict";var ge=U();ge.initSync();var bx=require("fs-extra"),wx=require("semver"),Gi=require("path"),{monotonicFactory:Cx}=require("ulidx"),mE=Cx(),yx=require("util"),$p=require("child_process"),Ux=yx.promisify($p.exec),Lx=$p.spawn,V=le(),Q=T(),Uc=b(),zr=I(),Lc=Yr(),Mx=yc(),Bi=fr(),{encode:SE,decode:RE}=require("msgpackr"),{isEmpty:ys}=Uc,Yp=er(),Kp=12e10,{connect:Dx,StorageType:Wp,RetentionPolicy:Qp,AckPolicy:AE,DeliverPolicy:xi,DiscardPolicy:Px,NatsConnection:pj,JetStreamManager:gj,JetStreamClient:Oj,StringCodec:Nj,JSONCodec:vx,createInbox:pE,StreamSource:Ij,headers:Bx,toJsMsg:Jp,nuid:bj,JetStreamOptions:wj,ErrorCode:kp,nanos:Cj}=require("nats"),{PACKAGE_ROOT:Hx}=T(),qx=ei(),zp=vx(),Fx="clustering",Gx=qx.engines[V.NATS_SERVER_NAME],xx=Gi.join(Hx,"dependencies"),TE=Gi.join(xx,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),hE,fE,Hi,qi,Fi,Vt;ag.exports={runCommand:Xp,checkNATSServerInstalled:Vx,createConnection:gE,getConnection:Mc,getJetStreamManager:Vi,getJetStream:Zp,getNATSReferences:ht,getServerList:$x,createLocalStream:OE,listStreams:jp,deleteLocalStream:Yx,getServerConfig:ki,listRemoteStreams:Kx,viewStream:Wx,viewStreamIterator:Qx,publishToStream:Jx,createWorkQueueStream:zx,addSourceToWorkStream:tg,request:Xx,removeSourceFromWorkStream:sg,reloadNATS:NE,reloadNATSHub:Zx,reloadNATSLeaf:jx,extractServerName:rg,requestErrorHandler:eV,updateWorkStream:tV,createLocalTableStream:ng,createTableStreams:rV,purgeTableStream:ig,purgeSchemaTableStreams:sV,getStreamInfo:nV,updateLocalStreams:aV,closeConnection:kx,getJsmServerName:$i,addNatsMsgHeader:eg};async function Xp(e,t=void 0){let{stdout:r,stderr:s}=await Ux(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var OC=Object.defineProperty;var a=(e,t)=>OC(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((Y3,rf)=>{"use strict";var Pt=require("path"),NC=require("fs");function IC(){let e=__dirname;for(;!NC.existsSync(Pt.join(e,"package.json"));){let t=Pt.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(IC,"getHDBPackageRoot");var Dr=IC(),kh="js",Ha=kh,bC="harperdb-config.yaml",wC="defaultConfig.yaml",CC="hdb",$h=`harperdb.${Ha}`,Yh=`customFunctionsServer.${Ha}`,yC=`restartHdb.${Ha}`,yu="HarperDB",Ba="Custom Functions",qa="Clustering Hub",Fa="Clustering Leaf",UC="Clustering Ingest Service",LC="Clustering Reply Service",MC="foreground.pid",DC="hdb.pid",PC={HDB:yu,CLUSTERING_HUB:qa,CLUSTERING_LEAF:Fa,CLUSTERING_INGEST_SERVICE:UC,CLUSTERING_REPLY_SERVICE:LC,CUSTOM_FUNCTIONS:Ba,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"},vC={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},BC={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},HC={harperdb:yu,"clustering hub":qa,"clustering leaf":Fa,"custom functions":Ba,custom_functions:Ba,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},qC={CLUSTERING_HUB_PROC_DESCRIPTOR:qa,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fa},Cu={HDB:Pt.join(Dr,"server/harperdb"),CUSTOM_FUNCTIONS:Pt.join(Dr,"server/customFunctions"),CLUSTERING_HUB:Pt.join(Dr,"server/nats"),CLUSTERING_LEAF:Pt.join(Dr,"server/nats")},FC={HDB:Pt.join(Cu.HDB,$h),CUSTOM_FUNCTIONS:Pt.join(Cu.CUSTOM_FUNCTIONS,Yh)},GC={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Pt.join(Dr,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Pt.join(Dr,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Pt.join(Dr,"launchServiceScripts/launchUpdateNodes4-0-0.js")},xC={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Kh="support@harperdb.io",VC="customer-success@harperdb.io",Wh=1,kC=4141,Qh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",$C="https://www.harperdb.io/product",YC=`For support, please submit a request at ${Qh} or contact ${Kh}`,Jh=`For license support, please contact ${VC}`,KC="None of the specified records were found.",WC="hash attribute not found",QC=`Your current license only supports ${Wh} role. ${Jh}`,JC="Your current license only supports 3 connections to a node.",zC="127.0.0.1",XC=1,ZC=/^\.$/,jC=/^\.\.$/,ey="U+002E",ty=/\//g,ry="U+002F",sy=/U\+002F/g,ny=/^U\+002E$/,iy=/^U\+002EU\+002E$/,ay="d",oy=999999,cy="*",_y="--max-old-space-size=",uy="system",ly="__hdb_hash",Ey=".harperdb",dy=".hdb",hy="keys",fy="hdb_boot_properties.file",Sy=".updateConfig.json",Ty="SIGTSTP",my=24,Ry=6e4,Ay=448,py="blob",gy="trash",Oy="schema",Ny="transactions",Iy=".count",by="id",wy="PROCESS_NAME",zh={SETTINGS_PATH_KEY:"settings_path"},Xh=require("lodash"),Cy={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"},yy={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},Uy={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ly={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"},My={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"},it="hdb_internal:",Dy={CREATE_SCHEMA:it+"create_schema",CREATE_TABLE:it+"create_table",CREATE_ATTRIBUTE:it+"create_attribute",ADD_USER:it+"add_user",ALTER_USER:it+"alter_user",DROP_USER:it+"drop_user",HDB_NODES:it+"hdb_nodes",HDB_USERS:it+"hdb_users",HDB_WORKERS:it+"hdb_workers",CATCHUP:it+"catchup",SCHEMA_CATCHUP:it+"schema_catchup",WORKER_ROOM:it+"cluster_workers"},Py={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"},vy="060493.ks",By=".license",Hy={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"},qy={CSV:".csv",JSON:".json"},Fy={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Gy={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},$n={};$n[w.INSERT]=w.INSERT;$n[w.UPDATE]=w.UPDATE;$n[w.UPSERT]=w.UPSERT;$n[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 xy={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Vy={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zh={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"},ky=Xh.invert(Zh),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"},jh={settings_path:zh.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];jh[t.toLowerCase()]=t}var $y={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Yy={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"},Ky={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"},Wy={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Qy={FILE_SYSTEM:"fs",LMDB:"lmdb"},Jy={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},zy={DEVELOPMENT:8192,DEFAULT:512},Xy={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"},Zy={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"},jy={ENOENT:"ENOENT",EACCES:"EACCES"},ef={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},eU="__clustering__",tU=Object.values(ef),rU=15984864e5,tf={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sU=Xh.invert(tf),nU={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"},iU=111,aU=`\r
|
|
2
|
+
`,oU={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cU=["*","%"],_U="unauthorized_access",uU="func_val",lU={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},EU={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dU={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"},hU={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},fU={HTTP:"http"},SU={STOPPED:"stopped",ONLINE:"online"},TU="3.x.x";rf.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Kh,HDB_SUPPORT_URL:Qh,HDB_PRICING_URL:$C,SUPPORT_HELP_MSG:YC,LICENSE_HELP_MSG:Jh,HDB_PROC_NAME:$h,HDB_PROC_DESCRIPTOR:yu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Fa,CLUSTERING_HUB_PROC_DESCRIPTOR:qa,SYSTEM_SCHEMA_NAME:uy,HASH_FOLDER_NAME:ly,HDB_HOME_DIR_NAME:Ey,UPDATE_FILE_NAME:Sy,LICENSE_KEY_DIR_NAME:hy,BOOT_PROPS_FILE_NAME:fy,JOB_TYPE_ENUM:Yy,JOB_STATUS_ENUM:Hy,SYSTEM_TABLE_NAMES:Ly,SYSTEM_TABLE_HASH_ATTRIBUTES:My,OPERATIONS_ENUM:w,VALID_S3_FILE_TYPES:qy,S3_BUCKET_AUTH_KEYS:Fy,VALID_SQL_OPS_ENUM:Gy,GEO_CONVERSION_ENUM:Vy,HDB_SETTINGS_NAMES:Zh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ky,SERVICE_ACTIONS_ENUM:xy,CLUSTER_MESSAGE_TYPE_ENUM:Ky,CLUSTER_CONNECTION_DIRECTION_ENUM:Wy,CLUSTER_EVENTS_DEFS_ENUM:Xy,PERIOD_REGEX:ZC,DOUBLE_PERIOD_REGEX:jC,UNICODE_PERIOD:ey,FORWARD_SLASH_REGEX:ty,UNICODE_FORWARD_SLASH:ry,ESCAPED_FORWARD_SLASH_REGEX:sy,ESCAPED_PERIOD_REGEX:ny,ESCAPED_DOUBLE_PERIOD_REGEX:iy,REG_KEY_FILE_NAME:vy,RESTART_TIMEOUT_MS:Ry,HDB_FILE_PERMISSIONS:Ay,SCHEMA_DIR_NAME:Oy,TRANSACTIONS_DIR_NAME:Ny,LIMIT_COUNT_NAME:Iy,ID_ATTRIBUTE_STRING:by,INSERT_MODULE_ENUM:yy,UPGRADE_JSON_FIELD_NAMES_ENUM:Uy,RESTART_CODE:Ty,RESTART_CODE_NUM:my,CLUSTER_OPERATIONS:$n,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Py,HDB_INTERNAL_SC_CHANNEL_PREFIX:it,INTERNAL_SC_CHANNELS:Dy,CLUSTERING_MESSAGE_TYPES:nU,HDB_FILE_SUFFIX:dy,BLOB_FOLDER_NAME:py,HDB_TRASH_DIR:gy,ORIGINATOR_SET_VALUE:iU,LICENSE_VALUES:Jy,RAM_ALLOCATION_ENUM:zy,STORAGE_TYPES_ENUM:Qy,TIME_STAMP_NAMES_ENUM:ef,TIME_STAMP_NAMES:tU,PERMS_UPDATE_RELEASE_TIMESTAMP:rU,SEARCH_NOT_FOUND_MESSAGE:KC,SEARCH_ATTRIBUTE_NOT_FOUND:WC,LICENSE_ROLE_DENIED_RESPONSE:QC,LICENSE_MAX_CONNS_REACHED:JC,BASIC_LICENSE_MAX_NON_CU_ROLES:Wh,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:kC,VALUE_SEARCH_COMPARATORS:tf,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sU,LICENSE_FILE_NAME:By,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Zy,NEW_LINE:aU,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:XC,MOMENT_DAYS_TAG:ay,API_TURNOVER_SEC:oy,LOOPBACK:zC,CODE_EXTENSION:Ha,WILDCARD_SEARCH_VALUE:cy,NODE_ERROR_CODES:jy,JAVASCRIPT_EXTENSION:kh,PERMS_CRUD_ENUM:oU,UNAUTHORIZED_PERMISSION_NAME:_U,SEARCH_WILDCARDS:cU,FUNC_VAL:uU,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:lU,JWT_ENUM:EU,CLUSTERING_FLAG:eU,ITC_EVENT_TYPES:dU,CUSTOM_FUNCTION_PROC_NAME:Yh,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ba,SERVICES:hU,THREAD_TYPES:fU,MEM_SETTING_KEY:_y,HDB_RESTART_SCRIPT:yC,PROCESS_DESCRIPTORS:PC,SERVICE_SERVERS:FC,SERVICE_SERVERS_CWD:Cu,PROCESS_DESCRIPTORS_VALIDATE:HC,LAUNCH_SERVICE_SCRIPTS:GC,LOG_LEVELS:BC,PROCESS_NAME_ENV_PROP:wy,LOG_NAMES:vC,PM2_PROCESS_STATUSES:SU,CONFIG_PARAM_MAP:jh,CONFIG_PARAMS:S,HDB_CONFIG_FILE:bC,HDB_DEFAULT_CONFIG_FILE:wC,ROLE_TYPES_ENUM:xC,BOOT_PROP_PARAMS:zh,INSTALL_PROMPTS:Cy,HDB_ROOT_DIR_NAME:CC,CLUSTERING_PROCESSES:qC,FOREGROUND_PID_FILE:MC,PACKAGE_ROOT:Dr,PRE_4_0_0_VERSION:TU,SCHEMAS_PARAM_CONFIG:$y,HDB_PID_FILE:DC}});var Uu=f((W3,af)=>{"use strict";var sf=require("minimist");af.exports=mU;function mU(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=nf(process.env),s=nf(sf(process.argv))):(r=process.env,s=sf(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(mU,"assignCMDENVVariables");function nf(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(nf,"objKeysToLowerCase")});var I=f((J3,mf)=>{"use strict";var js=require("fs-extra"),{workerData:RU,threadId:AU}=require("worker_threads"),Pr=require("path"),_f=require("yaml"),uf=require("properties-reader"),pe=T(),of=Uu(),pU=require("os"),{PACKAGE_ROOT:Mu}=T(),lf={};for(let e in console)lf[e]=console[e];var $e={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ef={STDOUT:"stdOut",STDERR:"stdErr"},gU=Pr.join(Mu,"logs"),OU=Pr.join(Mu,"config/yaml/",pe.HDB_DEFAULT_CONFIG_FILE),NU=1e4,ur,lr,ke,Ga,xa,Va,Kn,Yn;Yn===void 0&&df();mf.exports={notify:Sf,fatal:Tf,error:Wn,warn:Bu,info:ka,debug:vu,trace:Pu,setLogLevel:LU,log_level:ke,loggerWithTag:IU,suppressLogging:bU,initLogSettings:df,setupConsoleLogging:hf,logCustomLevel:yU,closeLogFile:Du,getLogFilePath:()=>Va,OUTPUTS:Ef};function df(e=!1){try{if(Yn===void 0||e){Du();let t=UU();Yn=uf(t);let r=of(["ROOTPATH"]);({level:ke,config_log_path:xa,to_file:ur,to_stream:lr}=MU(r.ROOTPATH?Pr.join(r.ROOTPATH,pe.HDB_CONFIG_FILE):Yn.get("settings_path"))),Ga=pe.LOG_NAMES.HDB,Va=Pr.join(xa,Ga)}}catch(t){if(Yn=void 0,t.code===pe.NODE_ERROR_CODES.ENOENT){let r=of(Object.keys(pe.CONFIG_PARAM_MAP),!0);for(let o in r){let c=pe.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let _=r[o];if(c===pe.CONFIG_PARAMS.LOGGING_LEVEL){ke=_;continue}if(c===pe.CONFIG_PARAMS.LOGGING_STDSTREAMS){lr=_;continue}c===pe.CONFIG_PARAMS.LOGGING_FILE&&(ur=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=DU();ur=ur===void 0?n:ur,ur=cf(ur),lr=lr===void 0?i:lr,lr=cf(lr),ke=ke===void 0?s:ke,xa=gU,Ga=pe.LOG_NAMES.INSTALL,Va=Pr.join(xa,Ga);return}throw Wn("Error initializing log settings"),Wn(t),t}hf()}a(df,"initLogSettings");var Lu=!0;function hf(){Zs("error",Wn),Zs("warn",Bu),Zs("log",ka),Zs("info",ka),Zs("debug",vu),Zs("trace",Pu)}a(hf,"setupConsoleLogging");function Zs(e,t){console[e]=function(...r){if(Lu&&t(...r),!/PM2 log:|App \[/.test(r[0]))return lf[e](...r)}}a(Zs,"logConsole");function IU(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Sf),fatal:r(Tf),error:r(Wn),warn:r(Bu),info:r(ka),debug:r(vu),trace:r(Pu)};function r(s){return function(...n){return s(t,...n)}}}a(IU,"loggerWithTag");function bU(e){try{Lu=!1,e()}finally{Lu=!0}}a(bU,"suppressLogging");var wU=RU?.name?.replace(/ /g,"-")||"main";function Er(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(_||wU+"/"+AU);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(Er,"createLogRecord");function Qn(e){ur&&ff(e),lr&&process.stdout.write(e)}a(Qn,"logStdOut");function $a(e){ur&&ff(e),lr&&process.stderr.write(e)}a($a,"logStdErr");function ff(e){CU(),js.appendFileSync(Kn,e)}a(ff,"logToFile");function Du(){try{js.closeSync(Kn)}catch{}Kn=null}a(Du,"closeLogFile");function CU(){Kn||(Kn=js.openSync(Va,"a"),setTimeout(()=>{Du()},NU).unref())}a(CU,"openLogFile");function ka(...e){$e[ke]<=$e.info&&Qn(Er("info",e))}a(ka,"info");function Pu(...e){$e[ke]<=$e.trace&&Qn(Er("trace",e))}a(Pu,"trace");function Wn(...e){$e[ke]<=$e.error&&$a(Er("error",e))}a(Wn,"error");function vu(...e){$e[ke]<=$e.debug&&Qn(Er("debug",e))}a(vu,"debug");function Sf(...e){$e[ke]<=$e.notify&&Qn(Er("notify",e))}a(Sf,"notify");function Tf(...e){$e[ke]<=$e.fatal&&$a(Er("fatal",e))}a(Tf,"fatal");function Bu(...e){$e[ke]<=$e.warn&&$a(Er("warn",e))}a(Bu,"warn");function yU(e,t,...r){t===Ef.STDERR?$a(Er(e,r)):Qn(Er(e,r))}a(yU,"logCustomLevel");function UU(){let e;try{e=pU.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Pr.join(e,pe.HDB_HOME_DIR_NAME,pe.BOOT_PROPS_FILE_NAME);return js.existsSync(t)||(t=Pr.join(Mu,"utility/hdb_boot_properties.file")),t}a(UU,"getPropsFilePath");function LU(e){ke=e}a(LU,"setLogLevel");function cf(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(cf,"autoCastBoolean");function MU(e){try{if(e.includes("config/settings.js")){let o=uf(e);return{level:o.get(pe.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Pr.dirname(o.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(pe.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=_f.parseDocument(js.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===pe.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(MU,"getLogConfig");function DU(){try{let e=_f.parseDocument(js.readFileSync(OU,"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(DU,"getDefaultConfig")});var Af=f((X3,Rf)=>{"use strict";var PU=require("util"),vU=require("path"),BU=require("child_process"),HU=PU.promisify(BU.execFile),qU=1e3*1e3*10;Rf.exports={findPs:FU};async function FU(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await HU("ps",["wwxo",`pid,${r}`],{maxBuffer:qU});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:vU.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(FU,"findPs")});var Le=f((j3,gf)=>{"use strict";var GU="__dbis__",xU="__environment_name__",VU="__dbi_defintion__",kU={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"},$U=["__createdtime__","__updatedtime__"],YU="\uFFFF",pf={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},KU=Object.values(pf);gf.exports={INTERNAL_DBIS_NAME:GU,DBI_DEFINITION_NAME:VU,SEARCH_TYPES:kU,TIMESTAMP_NAMES:$U,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xU,TRANSACTIONS_DBI_NAMES_ENUM:pf,TRANSACTIONS_DBIS:KU,OVERFLOW_MARKER:YU}});var at=f((eZ,Lf)=>{"use strict";var Of=T(),Nf=Le(),If={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},bf=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),wf={500:bf("There was an error processing your request."),400:"Invalid request"},WU=wf[If.INTERNAL_SERVER_ERROR],QU={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.`},JU={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zU={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"},XU={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 ${Nf.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Nf.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"},ZU={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Of.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 ${Of.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"},Cf={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"},jU={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`},yf={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.`},Uf={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={...Cf,...zU,...QU,...jU,...eL,...tL,...rL,...sL,...ZU,...yf,...Uf,...nL,...iL,...JU};Lf.exports={CHECK_LOGS_WRAPPER:bf,HDB_ERROR_MSGS:aL,DEFAULT_ERROR_MSGS:wf,DEFAULT_ERROR_RESP:WU,HTTP_STATUS_CODES:If,LMDB_ERRORS_ENUM:XU,AUTHENTICATION_ERROR_MSGS:Cf,VALIDATION_ERROR_MSGS:yf,ITC_ERRORS:Uf}});var y=f((rZ,Pf)=>{"use strict";var en=at(),oL=I(),cL=T(),Jn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Mf),this.http_resp_code=s||en.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(en.DEFAULT_ERROR_MSGS[s]?en.DEFAULT_ERROR_MSGS[s]:en.DEFAULT_ERROR_MSGS[en.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(Jn,"HdbError");function Mf(e,t,r,s=cL.LOG_LEVELS.ERROR,n=null,i=!1){if(Df(e))return e;let o=new Jn(e,t,r,s,n);return i&&delete o.stack,o}a(Mf,"handleHDBError");function Df(e){return e.__proto__.constructor.name===Jn.name}a(Df,"isHDBError");Pf.exports={isHDBError:Df,handleHDBError:Mf,hdb_errors:en}});var b=f((iZ,Qf)=>{"use strict";var Es=require("path"),_L=require("fs-extra"),De=I(),vf=require("fs-extra"),zn=require("os"),uL=require("net"),lL=require("recursive-iterator"),Me=T(),Ff=Af(),Bf=require("papaparse"),Ya=require("moment"),{inspect:EL}=require("util"),Hf=require("is-number"),nZ=require("lodash"),{hdb_errors:Ka}=y(),Gf=require("util").promisify(setTimeout),dL=100,hL=5,fL="",SL=4,qf={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qf.exports={isEmpty:ot,isEmptyOrZeroLength:Kt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:xf,errorizeMessage:TL,stripFileExtension:OL,autoCast:NL,autoCastJSON:Vf,autoCastJSONDeep:Hu,removeDir:IL,compareVersions:bL,isCompatibleDataVersion:wL,escapeRawValue:CL,unescapeValue:yL,stringifyProps:UL,timeoutPromise:ML,isClusterOperation:PL,getClusterUser:BL,checkGlobalSchemaTable:vL,getHomeDir:$f,getPropsFilePath:LL,promisifyPapaParse:HL,removeBOM:Yf,createEventPromise:qL,checkProcessRunning:FL,checkSchemaTableExist:GL,checkSchemaExists:Kf,checkTableExists:Wf,getStartOfTomorrowInSeconds:xL,getLimitKey:VL,isObject:gL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:kf,backtickASTSchemaItems:kL,isPortTaken:DL,stopProcess:$L,createForkArgs:YL,autoCastBoolean:KL,async_set_timeout:Gf,getTableHashAttribute:WL,doesSchemaExist:QL,doesTableExist:JL,stringifyObj:zL,ms_to_time:XL,changeExtension:ZL,PACKAGE_ROOT:Me.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function ot(e){return e==null}a(ot,"isEmpty");function mL(e){return!ot(e)&&(e||e===0||e===""||xf(e))}a(mL,"isNotEmptyAndHasValue");function Kt(e){return ot(e)||e.length===0||e.size===0}a(Kt,"isEmptyOrZeroLength");function RL(e){if(ot(e))return!0;for(let t=0;t<e.length;t++)if(ot(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(Es.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function xf(e){return ot(e)?!1:e===!0||e===!1}a(xf,"isBoolean");function gL(e){return ot(e)?!1:typeof e=="object"}a(gL,"isObject");function OL(e){return Kt(e)?fL:e.slice(0,-SL)}a(OL,"stripFileExtension");function NL(e){return ot(e)||e===""||typeof e!="string"?e:qf[e]!==void 0?qf[e]:kf(e)===!0?Number(e):e}a(NL,"autoCast");function Vf(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Vf,"autoCastJSON");function Hu(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=Hu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=Hu(r);s!==r&&(e[t]=s)}return e}else return Vf(e)}a(Hu,"autoCastJSONDeep");function kf(e){if(e.startsWith("0.")&&Hf(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Hf(e))}a(kf,"autoCasterIsNumberCheck");async function IL(e){if(Kt(e))throw new Error(`Directory path: ${e} does not exist`);try{await vf.emptyDir(e),await vf.remove(e)}catch(t){throw De.error(`Error removing files in ${e} -- ${t}`),t}}a(IL,"removeDir");function bL(e,t){if(Kt(e)){De.info("Invalid current version sent as parameter.");return}if(Kt(t)){De.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(ot(e))return e;let t=String(e);return t==="."?Me.UNICODE_PERIOD:t===".."?Me.UNICODE_PERIOD+Me.UNICODE_PERIOD:t.replace(Me.FORWARD_SLASH_REGEX,Me.UNICODE_FORWARD_SLASH)}a(CL,"escapeRawValue");function yL(e){if(ot(e))return e;let t=String(e);return t===Me.UNICODE_PERIOD?".":t===Me.UNICODE_PERIOD+Me.UNICODE_PERIOD?"..":String(e).replace(Me.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yL,"unescapeValue");function UL(e,t){if(ot(e))return De.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+zn.EOL}!Kt(s)&&s[0]===";"?r+=" "+s+n+zn.EOL:Kt(s)||(r+=s+"="+n+zn.EOL)}catch{De.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UL,"stringifyProps");function $f(){let e;try{e=zn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a($f,"getHomeDir");function LL(){let e=Es.join($f(),Me.HDB_HOME_DIR_NAME,Me.BOOT_PROPS_FILE_NAME);return _L.existsSync(e)||(e=Es.join(__dirname,"../","hdb_boot_properties.file")),e}a(LL,"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 Me.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){De.error(`Error checking operation against cluster ops ${t}`)}return!1}a(PL,"isClusterOperation");function vL(e,t){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(vL,"checkGlobalSchemaTable");function BL(e,t){if(ot(t)){De.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ot(e)||Kt(e)){De.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){De.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){De.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(BL,"getClusterUser");function HL(){Bf.parsePromise=function(e,t){return new Promise(function(r,s){Bf.parse(e,{header:!0,transformHeader:Yf,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(HL,"promisifyPapaParse");function Yf(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Yf,"removeBOM");function qL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;De.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{De.error("Error trying to cancel timeout.")}s(n)})})}a(qL,"createEventPromise");async function FL(e){let t=!0,r=0;do await Gf(dL*r++),(await Ff.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(FL,"checkProcessRunning");function GL(e,t){let r=Kf(e);if(r)return r;let s=Wf(e,t);if(s)return s}a(GL,"checkSchemaTableExist");function Kf(e){if(!global.hdb_schema[e])return Ka.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Kf,"checkSchemaExists");function Wf(e,t){if(!global.hdb_schema[e][t])return Ka.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wf,"checkTableExists");function xL(){let e=Ya().utc().add(1,Me.MOMENT_DAYS_TAG).startOf(Me.MOMENT_DAYS_TAG).unix(),t=Ya().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function VL(){return Ya().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){De.error("Got an error back ticking items."),De.error(t)}}a(kL,"backtickASTSchemaItems");async function $L(e){let t=zn.userInfo();(await Ff.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),De.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 zL(e){try{return JSON.stringify(e)}catch{return e}}a(zL,"stringifyObj");function XL(e){let t=Ya.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(XL,"ms_to_time");function ZL(e,t){let r=Es.basename(e,Es.extname(e));return Es.join(Es.dirname(e),r+t)}a(ZL,"changeExtension")});var zf=f((oZ,Jf)=>{"use strict";var jL={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))},eM="certificate.pem",tM="privateKey.pem",rM="ca.pem";Jf.exports={CERTIFICATE_VALUES:jL,CERTIFICATE_PEM_NAME:eM,PRIVATEKEY_PEM_NAME:tM,CA_PEM_NAME:rM}});var re=f((cZ,Xf)=>{"use strict";var Ye=require("validate.js");Ye.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ye.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ye.validators.type.checks={Object:function(e){return Ye.isObject(e)&&!Ye.isArray(e)},Array:Ye.isArray,Integer:Ye.isInteger,Number:Ye.isNumber,String:Ye.isString,Date:Ye.isDate,Boolean:function(e){return typeof e=="boolean"}};Ye.validators.hasValidFileExt=function(e,t){return Ye.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};Xf.exports={validateObject:sM,validateObjectAsync:nM,validateBySchema:iM};function sM(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ye(e,t,{format:"flat"});return r?new Error(r):null}a(sM,"validateObject");async function nM(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ye.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(nM,"validateObjectAsync");function iM(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(iM,"validateBySchema")});var Fu=f((lZ,tS)=>{"use strict";var aM=require("fs-extra"),v=require("joi"),oM=require("os"),{boolean:se,string:dr,number:vt,array:qu}=v.types(),{totalmem:Zf}=require("os"),Xn=require("path"),cM=I(),Qa=b(),uZ=zf(),_M=T(),uM=re(),jf="log",lM="custom_functions",EM="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dM="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hM="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",fM="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SM="rootPath config parameter is undefined",TM="clustering.enabled config parameter is undefined",ds=vt.min(0).required(),Ja=qu.items({host:dr.required(),port:ds}).empty(null),vr;tS.exports={configValidator:mM,routesValidator:NM,route_constraints:Ja};function mM(e){if(vr=e.rootPath,Qa.isEmpty(vr))throw SM;let t=se.required(),r=v.valid("production","development").required(),s=vt.min(1).max(1e3).empty(null).default(OM),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wa),i=v.custom(RM).messages({"any.custom":"{:#label} {:#error}"}),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=v.string().empty(null).default(Wa),_=v.custom(AM).empty(null).default(Wa),u=e.clustering?.enabled;if(Qa.isEmpty(u))throw TM;let l;return u===!0?l=v.object({enabled:t,hubServer:v.object({cluster:v.object({name:v.required().empty(null),network:v.object({port:ds,routes:Ja}).required()}).required(),leafNodes:v.object({network:v.object({port:ds}).required()}).required(),network:v.object({port:ds}).required()}).required(),leafServer:v.object({network:v.object({port:ds,routes:Ja}).required(),streams:v.object({maxAge:vt.min(120).allow(null).optional(),maxBytes:vt.min(1).allow(null).optional(),maxMsgs:vt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:v.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:se.optional(),tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required(),verify:se.optional()}),user:dr.optional().empty(null)}).required():l=v.object({enabled:t,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:se.required()})}).required(),v.object({clustering:l,customFunctions:v.object({enabled:t,network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:ds,timeout:vt.min(1).required()}),nodeEnv:r,root:n,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:v.object({enabled:t}).required(),logging:v.object({file:se.required(),level:v.valid("notify","fatal","error","warn","info","debug","trace"),rotation:v.object({enabled:se.optional(),compress:se.optional(),interval:dr.custom(gM).optional().empty(null),maxSize:dr.custom(pM).optional().empty(null),path:dr.optional().empty(null).default(Wa)}).required(),root:n,stdStreams:se.required(),auditLog:se.required()}).required(),operationsApi:v.object({authentication:v.object({operationTokenTimeout:v.required(),refreshTokenTimeout:v.required()}).required(),foreground:se.required(),network:v.object({cors:se.required(),corsAccessList:qu.required(),headersTimeout:vt.min(1).required(),https:se.required(),keepAliveTimeout:vt.min(1).required(),port:ds,timeout:vt.min(1).required()}).required(),nodeEnv:r,tls:v.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:v.object({threads:s}).required(),storage:v.object({writeAsync:se.required(),overlappingSync:se.optional(),caching:se.optional(),compression:se.optional(),noReadAhead:se.optional(),path:_,prefetchWrites:se.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(mM,"configValidator");function eS(e){return aM.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eS,"doesPathExist");function RM(e,t){if(e===null)return;let r=eS(e);return r?t.message(r):e}a(RM,"validatePemFile");function AM(e,t){v.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=eS(e);if(r)return t.message(r)}a(AM,"validatePath");function pM(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EM);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(hM):e}a(pM,"validateRotationMaxSize");function gM(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(dM);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(fM):e}a(gM,"validateRotationInterval");function OM(e,t){let r=t.state.path.join("."),s=oM.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Zf();return i=Math.round(Math.min(i,Zf())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),cM.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(OM,"setDefaultThreads");function Wa(e,t){if(!Qa.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Qa.isEmpty(vr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Xn.join(vr,lM);case"logging.root":return Xn.join(vr,jf);case"clustering.leafServer.streams.path":return Xn.join(vr,"clustering","leaf");case"storage.path":return Xn.join(vr,_M.SCHEMA_DIR_NAME);case"logging.rotation.path":return Xn.join(vr,jf);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wa,"setDefaultRoot");function NM(e){let t=v.object({routes:Ja});return uM.validateBySchema({routes:e},t)}a(NM,"routesValidator")});var fr=f((dZ,lS)=>{"use strict";var pt=T(),ct=b(),me=I(),{configValidator:IM,routesValidator:rS}=Fu(),At=require("fs-extra"),bM=require("yaml"),Wt=require("path"),wM=require("is-number"),nS=require("properties-reader"),CM=require("lodash"),{handleHDBError:yM}=y(),{HTTP_STATUS_CODES:UM,HDB_ERROR_MSGS:za}=at(),LM=require("minimist"),{SCHEMAS_PARAM_CONFIG:Zn,CONFIG_PARAMS:Br,CONFIG_PARAM_MAP:hr}=pt,MM="Unable to get config value because config is uninitialized",DM="Config successfully initialized",PM="Error backing up config file",vM="Empty parameter sent to getConfigValue",iS=Wt.join(pt.PACKAGE_ROOT,"config","yaml",pt.HDB_DEFAULT_CONFIG_FILE),BM="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sS={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"},Xa,Ne;lS.exports={createConfigFile:HM,getDefaultConfig:qM,getConfigValue:oS,initConfig:cS,flattenConfig:hs,updateConfigValue:_S,updateConfigObject:GM,getConfiguration:kM,setConfiguration:$M,readConfigFile:ku,getClusteringRoutes:YM,initOldConfig:uS,getConfigFromFile:KM};function HM(e){let t=tn(iS);Xa=hs(t.toJSON());let r;for(let o in e){let c=hr[o.toLowerCase()];if(c===Br.SCHEMAS){r=e[o];continue}if(c!==void 0){let _=c.split("_"),u=Gu(c,e[o]);try{t.setIn([..._],u)}catch(l){me.error(l)}}}r&&aS(t,r),Vu(t);let s=t.toJSON();Ne=hs(s);let n=t.getIn(["rootPath"]),i=Wt.join(n,pt.HDB_CONFIG_FILE);At.createFileSync(i),At.writeFileSync(i,String(t)),me.trace(`Config file written to ${i}`)}a(HM,"createConfigFile");function aS(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ct.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zn.TABLES))for(let i in s[n][Zn.TABLES])for(let o in s[n][Zn.TABLES][i]){let c=s[n][Zn.TABLES][i][o],_=[Br.SCHEMAS,n,Zn.TABLES,i,o];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let o=s[n][i],c=[Br.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){me.error("Error parsing schemas CLI/env config arguments",s)}}a(aS,"setSchemasConfig");function qM(e){if(Xa===void 0){let r=tn(iS);Xa=hs(r.toJSON())}let t=hr[e.toLowerCase()];if(t!==void 0)return Xa[t.toLowerCase()]}a(qM,"getDefaultConfig");function oS(e){if(ct.isEmpty(e)){me.error(vM);return}if(Ne===void 0){me.trace(MM);return}let t=hr[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(oS,"getConfigValue");function xu(e){let t=LM(process.argv);return t.ROOTPATH?Wt.join(t.ROOTPATH,pt.HDB_CONFIG_FILE):nS(e).get(pt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(xu,"getConfigFilePath");function cS(e=!1){if(Ne===void 0||e){let t=ct.getPropsFilePath();try{At.accessSync(t,At.constants.F_OK|At.constants.R_OK)}catch(i){throw me.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=xu(t),s;if(r.includes("config/settings.js"))try{uS(r);return}catch(i){if(i.code!==pt.NODE_ERROR_CODES.ENOENT)throw i}try{s=tn(r)}catch(i){if(i.code===pt.NODE_ERROR_CODES.ENOENT){me.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 me.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FM(s,r),Vu(s);let n=s.toJSON();if(Ne=hs(n),Ne.logging_rotation_rotate)for(let i in sS)Ne[i]&&me.error(`Config ${sS[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);me.trace(DM)}}a(cS,"initConfig");function FM(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Wt.join(r,pt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Wt.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Wt.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(me.trace("Updating config file with missing config params"),At.writeFileSync(t,String(e)))}a(FM,"checkForUpdatedConfig");function Vu(e){let t=e.toJSON(),r=IM(t);if(r.error)throw za.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(Vu,"validateConfig");function GM(e,t){Ne===void 0&&(Ne={});let r=hr[e.toLowerCase()];if(r===void 0){me.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(GM,"updateConfigObject");function _S(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&cS();let i=oS(hr.hdb_root),o=Wt.join(i,pt.HDB_CONFIG_FILE),c=tn(o),_;if(r===void 0&&e.toLowerCase()===Br.SCHEMAS)_=t;else if(r===void 0){let E=hr[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),h=Gu(E,t);c.setIn([...d],h)}else for(let E in r){let d=hr[E.toLowerCase()];if(d===Br.SCHEMAS){_=r[E];continue}if(d!==void 0){let h=d.split("_"),m=Gu(d,r[E]);try{c.setIn([...h],m)}catch(R){me.error(R)}}}_&&aS(c,_),Vu(c);let u=c.getIn(["rootPath"]),l=Wt.join(u,pt.HDB_CONFIG_FILE);s===!0&&xM(o,u),At.writeFileSync(l,String(c)),n&&(Ne=hs(c.toJSON())),me.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_S,"updateConfigValue");function xM(e,t){try{let r=Wt.join(t,"backup",`${pt.HDB_CONFIG_FILE}.bak`);At.copySync(e,r),me.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){me.error(PM),me.error(r)}}a(xM,"backupConfigFile");var VM=["schemas"];function hs(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!VM.includes(r)){let s=hs(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(hs,"flattenConfig");function Gu(e,t){if(e===Br.CLUSTERING_NODENAME||e===Br.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(wM(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ct.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 ct.autoCast(t)}a(Gu,"castConfigValue");function kM(){let e=ct.getPropsFilePath(),t=xu(e);return tn(t).toJSON()}a(kM,"getConfiguration");async function $M(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _S(void 0,void 0,n,!0),BM}catch(i){throw typeof i=="string"||i instanceof String?yM(i,i,UM.BAD_REQUEST,void 0,void 0,!0):i}}a($M,"setConfiguration");function ku(){let e=ct.getPropsFilePath();try{At.accessSync(e,At.constants.F_OK|At.constants.R_OK)}catch(s){throw me.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xu(e);return tn(t).toJSON()}a(ku,"readConfigFile");function tn(e){return bM.parseDocument(At.readFileSync(e,"utf8"),{simpleKeys:!0})}a(tn,"parseYamlDoc");function YM(){let e=ku(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ct.isEmptyOrZeroLength(t)?[]:t;let r=rS(t);if(r)throw za.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ct.isEmptyOrZeroLength(s)?[]:s;let n=rS(s);if(n)throw za.CONFIG_VALIDATION(n.message);if(!ct.isEmptyOrZeroLength(s)&&!ct.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ct.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw za.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(YM,"getClusteringRoutes");function uS(e){let t=nS(e);Ne={};for(let r in hr){let s=t.get(r.toUpperCase());if(ct.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=hr[r].toLowerCase();n===Br.LOGGING_ROOT?Ne[n]=Wt.dirname(s):Ne[n]=s}return Ne}a(uS,"initOldConfig");function KM(e){let t=ku();return CM.get(t,e.replaceAll("_","."))}a(KM,"getConfigFromFile")});var U=f((fZ,dS)=>{"use strict";var $u=require("fs-extra"),Qt=require("path"),WM=require("os"),QM=require("properties-reader"),jn=I(),rn=b(),L=T(),Za=fr(),JM="Error initializing environment manager",ja="BOOT_PROPS_FILE_PATH",ES=!1,zM={[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},Sr={};dS.exports={BOOT_PROPS_FILE_PATH:ja,getHdbBasePath:XM,setHdbBasePath:ZM,get:jM,initSync:tD,setProperty:k,initTestEnvironment:rD};function XM(){return Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(XM,"getHdbBasePath");function ZM(e){Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ZM,"setHdbBasePath");function jM(e){let t=Za.getConfigValue(e);return t===void 0?Sr[e]:t}a(jM,"get");function k(e,t){zM[e]&&(Sr[e]=t),Za.updateConfigObject(e,t)}a(k,"setProperty");function eD(){let e;try{e=rn.getPropsFilePath(),$u.accessSync(e,$u.constants.F_OK|$u.constants.R_OK),ES=!0;let t=QM(e);return Sr[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Sr[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Sr[ja]=e,!0}catch{return jn.trace(`Environment manager found no properties file at ${e}`),!1}}a(eD,"doesPropFileExist");function tD(e=!1){try{(ES||eD())&&(Za.initConfig(e),Sr[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Za.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jn.error(JM),jn.error(t),console.error(t),process.exit(1)}}a(tD,"initSync");function rD(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,_=Qt.join(__dirname,"../../","unitTests");Sr[ja]=Qt.join(_,"hdb_boot_properties.file"),k(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Qt.join(_,"settings.test")),k(L.HDB_SETTINGS_NAMES.INSTALL_USER,WM.userInfo().username),k(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.HDB_SETTINGS_NAMES.CERT_KEY,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Qt.join(_,"envDir","utility","keys","privateKey.pem")),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Qt.join(_,"envDir","utility","keys","certificate.pem")),k(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),k(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Qt.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,Qt.join(_,"envDir")),k(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,rn.isEmpty(n)?!0:n),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,rn.isEmpty(n)?!0:n),k(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),k(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,rn.isEmpty(i)?!1:i),k(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,rn.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,Qt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),k(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,rn.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 ${ja}. Please check your boot props and settings files`;jn.fatal(r),jn.error(t)}}a(rD,"initTestEnvironment")});var to=f((TZ,SS)=>{"use strict";var{Readable:sD}=require("stream"),nD=1e4;SS.exports={streamAsJSON(e){return new eo({value:e})}};var eo=class extends sD{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),hS)}catch(n){yield hS(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);fS(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>nD?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 fS(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(eo,"JSONStream");function hS(e){return console.error(e),JSON.stringify(e.toString())}a(hS,"handleError");function fS(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(fS,"when")});var ei=f((RZ,iD)=>{iD.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 Yu=f((AZ,TS)=>{var aD=require("fastify-plugin");TS.exports=aD(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var fs=f((pZ,oD)=>{oD.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 US=f((OZ,yS)=>{"use strict";var Ku=require("recursive-iterator"),cD=require("alasql"),Wu=require("clone"),mS=b(),{handleHDBError:RS,hdb_errors:_D}=y(),{HDB_ERROR_MSGS:AS,HTTP_STATUS_CODES:pS}=_D,uD=["DISTINCT_ARRAY"],gS=Symbol("validateTables"),Qu=Symbol("validateTable"),gZ=Symbol("getAllColumns"),OS=Symbol("validateAllColumns"),ro=Symbol("findColumn"),NS=Symbol("validateOrderBy"),ti=Symbol("validateSegment"),Ju=Symbol("validateColumn"),IS=Symbol("setColumnsForTable"),bS=Symbol("checkColumnsForAsterisk"),wS=Symbol("validateGroupBy"),CS=Symbol("hasColumns"),so=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[gS](),this[bS](),this[OS]()}[gS](){if(this[CS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Qu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Qu](t.table)})}}[CS](){let t=!1,r=new Ku(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Qu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw RS(new Error,AS.SCHEMA_NOT_FOUND(t.databaseid),pS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw RS(new Error,AS.TABLE_NOT_FOUND(t.databaseid,t.tableid),pS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=Wu(s);n.table=Wu(t),this.attributes.push(n)})}[ro](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)}[bS](){let t=new Ku(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[IS](r.tableid)}[IS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new cD.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[OS](){this[ti](this.statement.columns,!1),this[ti](this.statement.joins,!1),this[ti](this.statement.where,!1),this[wS](this.statement.group,!1),this[ti](this.statement.order,!0)}[ti](t,r){if(!t)return;let s=new Ku(t),n=[];for(let{node:i,path:o}of s)!mS.isEmpty(i)&&!mS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[NS](i):n.push(this[Ju](i)));return n}[wS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&uD.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Wu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ro](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[ro](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`}[NS](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[Ju](t)}[Ju](t){let r=this[ro](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(so,"SelectValidator");yS.exports=so});var zu=f((IZ,LS)=>{"use strict";var no=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(no,"BridgeMethods");LS.exports=no});var Ss=f((yZ,HS)=>{"use strict";var MS=at().LMDB_ERRORS_ENUM,wZ=require("lmdb"),lD=Le(),CZ=require("buffer").Buffer,{OVERFLOW_MARKER:DS,MAX_SEARCH_KEY_LENGTH:io}=lD,PS=["number","string","symbol","boolean","bigint"];function ED(e){if(e=e?.database||e,!e)throw new Error(MS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(MS.INVALID_ENVIRONMENT)}a(ED,"validateEnv");function dD(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(dD,"stringifyData");function hD(e){return e instanceof Date?e.valueOf():e}a(hD,"convertKeyValueToWrite");function fD(e){if(e==null)return;if(PS.includes(typeof e))return e.length>io?[e.slice(0,io)+DS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];PS.includes(typeof n)&&(n.length>io?t.push(n.slice(0,io)+DS):t.push(n))}}return t}a(fD,"getIndexedValues");var ao=0,vS=0;function BS(){vS=Date.now()-performance.now()}a(BS,"adjustStartTime");BS();var SD=6e4;setInterval(BS,SD).unref();function TD(){let e=performance.now()+vS;return e>ao?(ao=e,e):(ao+=488e-6,ao)}a(TD,"getNextMonotonicTime");HS.exports={validateEnv:ED,stringifyData:dD,convertKeyValueToWrite:hD,getNextMonotonicTime:TD,getIndexedValues:fD}});var FS=f((LZ,qS)=>{"use strict";var oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(oo,"DBIDefinition");qS.exports=oo});var VS=f((DZ,xS)=>{"use strict";var Xu=U(),GS=T();Xu.initSync();var mD=Xu.get(GS.CONFIG_PARAMS.STORAGE_COMPRESSION),RD=Xu.get(GS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,co=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=mD&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RD&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(co,"OpenDBIObject");xS.exports=co});var YS=f((vZ,$S)=>{"use strict";var sn=U(),ri=T();sn.initSync();var AD=sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||sn.get(ri.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kS=sn.get(ri.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pD=sn.get(ri.CONFIG_PARAMS.STORAGE_NOREADAHEAD),_o=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=AD,kS!==void 0&&(this.overlappingSync=kS),this.noReadAhead=pD}};a(_o,"OpenEnvironmentObject");$S.exports=_o});var z=f((HZ,ZS)=>{"use strict";var Zu=require("lmdb"),gt=require("fs-extra"),Bt=require("path"),lo=Ss(),KS=I(),Ie=at().LMDB_ERRORS_ENUM,Eo=FS(),ju=VS(),WS=YS(),Hr=Le(),Ht=Hr.INTERNAL_DBIS_NAME,QS=Hr.DBI_DEFINITION_NAME,gD="data.mdb",OD="lock.mdb",si=".mdb",ND="-lock",uo=class{constructor(t,r,s=!1){this.dbi=Ot(t,r),this.key_type=this.dbi[Hr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Hr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Zu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(uo,"TransactionCursor");function el(e,t){if(e===void 0)throw new Error(Ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ie.ENV_NAME_REQUIRED)}a(el,"pathEnvNameValidation");async function tl(e,t,r=!0){try{await gt.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ie.INVALID_BASE_PATH):s}try{let s=Bt.join(e,t+si);return await gt.access(s,gt.constants.R_OK|gt.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await gt.access(Bt.join(e,t,gD),gt.constants.R_OK|gt.constants.F_OK),Bt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ie.INVALID_ENVIRONMENT)}else throw new Error(Ie.INVALID_ENVIRONMENT);throw s}}a(tl,"validateEnvironmentPath");function ho(e,t){if(lo.validateEnv(e),t===void 0)throw new Error(Ie.DBI_NAME_REQUIRED)}a(ho,"validateEnvDBIName");async function ID(e,t,r=!1,s=!1){el(e,t),t=t.toString();try{return await tl(e,t,s),rl(e,t,r)}catch(n){if(n.message===Ie.INVALID_ENVIRONMENT){let i=Bt.join(e,t);await gt.mkdirp(s?i:e);let o=new WS(s?i:i+si,!1),c=Zu.open(o);c.dbis=Object.create(null);let _=new ju(!1);c.openDB(Ht,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=sl(e,t,r);return c[Hr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ID,"createEnvironment");async function bD(e,t,r,s=!0){let n=await rl(e,t);if(r===void 0)throw new Error(Ie.DESTINATION_PATH_REQUIRED);try{await gt.access(Bt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(Ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(bD,"copyEnvironment");async function rl(e,t,r=!1){el(e,t),t=t.toString();let s=sl(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 tl(e,t),i=Bt.join(e,t+si),o=n!=i,c=new WS(n,o),_=Zu.open(c);_.dbis=Object.create(null);let u=zS(_);for(let l=0;l<u.length;l++)Ot(_,u[l]);return _[Hr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(rl,"openEnvironment");async function wD(e,t,r=!1){el(e,t),t=t.toString();let s=Bt.join(e,t+si),n=await tl(e,t);if(global.lmdb_map!==void 0){let i=sl(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await JS(o),delete global.lmdb_map[i]}}await gt.remove(n),await gt.remove(n===s?n+ND:Bt.join(Bt.dirname(n),OD))}a(wD,"deleteEnvironment");async function JS(e){lo.validateEnv(e);let t=e[Hr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(JS,"closeEnvironment");function sl(e,t,r=!1){let n=`${Bt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(sl,"getCachedEnvironmentName");function CD(e){lo.validateEnv(e);let t=Object.create(null),r=Ot(e,Ht);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ht)try{t[s]=Object.assign(new Eo,n)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CD,"listDBIDefinitions");function zS(e){lo.validateEnv(e);let t=[],r=Ot(e,Ht);for(let{key:s}of r.getRange({start:!1}))s!==Ht&&t.push(s);return t}a(zS,"listDBIs");function yD(e,t){let s=Ot(e,Ht).getEntry(t),n=new Eo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{KS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yD,"getDBIDefinition");function XS(e,t,r,s=!1){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ot(e,t)}catch(n){if(n.message===Ie.DBI_DOES_NOT_EXIST){let i=new ju(r,s===!0),o=e.openDB(t,i),c=new Eo(r===!0,s);return o[QS]=c,Ot(e,Ht).putSync(t,c),e.dbis[t]=o,o}throw n}}a(XS,"createDBI");function Ot(e,t){if(ho(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ht?r=yD(e,t):r=new Eo,r===void 0)throw new Error(Ie.DBI_DOES_NOT_EXIST);let s;try{let n=new ju(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(Ie.DBI_DOES_NOT_EXIST):n}return s[QS]=r,e.dbis[t]=s,s}a(Ot,"openDBI");function UD(e,t){ho(e,t),t=t.toString();let r=Ot(e,t),s=r.getStats();return r[Hr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(UD,"statDBI");async function LD(e,t){try{let r=Bt.join(e,t+si);return(await gt.stat(r)).size}catch{throw new Error(Ie.INVALID_ENVIRONMENT)}}a(LD,"environmentDataSize");function MD(e,t){if(ho(e,t),t=t.toString(),t===Ht)throw new Error(Ie.CANNOT_DROP_INTERNAL_DBIS_NAME);Ot(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ot(e,Ht).removeSync(t)}a(MD,"dropDBI");function DD(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{Ot(e,n)}catch(i){if(i.message===Ie.DBI_DOES_NOT_EXIST)XS(e,n,n!==t,n===t);else throw i}}}a(DD,"initializeDBIs");ZS.exports={openDBI:Ot,openEnvironment:rl,createEnvironment:ID,listDBIs:zS,listDBIDefinitions:CD,createDBI:XS,dropDBI:MD,statDBI:UD,deleteEnvironment:wD,initializeDBIs:DD,TransactionCursor:uo,environmentDataSize:LD,copyEnvironment:bD,closeEnvironment:JS}});var eT=f((FZ,jS)=>{"use strict";var fo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(fo,"InsertRecordsResponseObject");jS.exports=fo});var rT=f((xZ,tT)=>{"use strict";var So=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(So,"UpdateRecordsResponseObject");tT.exports=So});var nT=f((kZ,sT)=>{"use strict";var To=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(To,"UpsertRecordsResponseObject");sT.exports=To});var nn=f((QZ,oT)=>{"use strict";var PD=z(),vD=eT(),BD=rT(),HD=nT(),Jt=Ss(),ni=at().LMDB_ERRORS_ENUM,qD=Le(),Tr=T(),FD=b(),GD=require("uuid"),YZ=require("lmdb"),{handleHDBError:xD,hdb_errors:VD}=y(),{OVERFLOW_MARKER:KZ,MAX_SEARCH_KEY_LENGTH:WZ}=qD,iT=U();iT.initSync();var mo=iT.get(Tr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),nl=Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ts=Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new vD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];aT(u,!0,n);let l=$D(e,t,r,u),E=u[t];o.push(l),c.push(E)}return al(o,c,s,i,n)}a(kD,"insertRecords");function $D(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][Tr.FUNC_VAL],s[o]=c)}let _=Jt.getIndexedValues(c),u=e.dbis[o];if(_){mo&&u.prefetch(_.map(l=>({key:l,value:n})),Ro);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}mo&&e.dbis[t].prefetch([n],Ro),e.dbis[t].put(n,s,s[Ts])})}a($D,"insertRecord");function YD(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(YD,"removeSkippedRecords");function aT(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ts]))&&(e[Ts]=r||(r=Jt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[nl]))&&(e[nl]=r||Jt.getNextMonotonicTime()):delete e[nl]}a(aT,"setTimestamps");function il(e,t,r){r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),PD.initializeDBIs(e,t,r)}a(il,"initializeTransaction");async function KD(e,t,r,s,n=Jt.getNextMonotonicTime()){cl(e,t,r,s),il(e,t,r);let i=new BD,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=ol(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return al(c,_,s,i,n,o)}a(KD,"updateRecords");async function WD(e,t,r,s,n=Jt.getNextMonotonicTime()){try{cl(e,t,r,s)}catch(_){throw xD(_,_.message,VD.HTTP_STATUS_CODES.BAD_REQUEST)}il(e,t,r);let i=new HD,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;FD.isEmpty(u[t])?(l=GD.v4(),u[t]=l):l=u[t];let E=ol(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return al(o,c,s,i,n)}a(WD,"upsertRecords");async function al(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||Jt.getNextMonotonicTime(),YD(r,i),s}a(al,"finalizeWrite");function ol(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(aT(r,!l,o),Number.isInteger(r[Ts])&&u[Ts]>r[Ts])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],g=e.dbis[m];if(g===void 0)continue;let H=u[m];if(typeof R=="function"){let q=R([[u]]);Array.isArray(q)&&(R=q[0][Tr.FUNC_VAL],r[m]=R)}if(R===H)continue;let x=Jt.getIndexedValues(H);if(x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.remove(x[q],s)}if(x=Jt.getIndexedValues(R),x){mo&&g.prefetch(x.map(q=>({key:q,value:s})),Ro);for(let q=0,Ue=x.length;q<Ue;q++)g.put(x[q],s)}}let h=Object.assign({},u,r);c.put(s,h,h[Ts])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:ol(e,t,r,s,n,i,o))}a(ol,"updateUpsertRecord");function QD(e,t,r){if(Jt.validateEnv(e),t===void 0)throw new Error(ni.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ni.WRITE_ATTRIBUTES_REQUIRED):new Error(ni.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(QD,"validateBasic");function cl(e,t,r,s){if(QD(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ni.RECORDS_REQUIRED):new Error(ni.RECORDS_MUST_BE_ARRAY)}a(cl,"validateWrite");function Ro(){}a(Ro,"noop");oT.exports={insertRecords:kD,updateRecords:KD,upsertRecords:WD}});var j=f((zZ,dT)=>{"use strict";var _i=T(),JD=b(),Ke=U(),ui=require("path"),zD=require("minimist"),cT=require("fs-extra"),_T=require("lodash");Ke.initSync();var{CONFIG_PARAMS:qr,SCHEMAS_PARAM_CONFIG:ii,SYSTEM_SCHEMA_NAME:Ao}=_i,ai,oi,ci;function uT(){if(ai!==void 0)return ai;if(Ke.getHdbBasePath()!==void 0)return ai=Ke.get(qr.STORAGE_PATH)||ui.join(Ke.getHdbBasePath(),_i.SCHEMA_DIR_NAME),ai}a(uT,"getBaseSchemaPath");function lT(){if(oi!==void 0)return oi;if(Ke.getHdbBasePath()!==void 0)return oi=ET(Ao),oi}a(lT,"getSystemSchemaPath");function XD(){if(ci!==void 0)return ci;if(Ke.getHdbBasePath()!==void 0)return ci=Ke.get(_i.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ui.join(Ke.getHdbBasePath(),_i.TRANSACTIONS_DIR_NAME),ci}a(XD,"getTransactionAuditStoreBasePath");function ZD(e,t){let r=Ke.get(qr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ui.join(XD(),e.toString())}a(ZD,"getTransactionAuditStorePath");function ET(e,t){e=e.toString(),t=t&&t.toString();let r=Ke.get(_i.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ui.join(uT(),e)}a(ET,"getSchemaPath");function jD(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,zD(process.argv));let s=r[qr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!JD.isObject(s))throw o;i=s}for(let o of i){let c=o[Ao];if(!c)continue;let _=Ke.get(qr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[ii.PATH];if(u)return _T.set(_,[Ao,ii.TABLES,t,ii.PATH],u),Ke.setProperty(qr.SCHEMAS,_),u;let l=c?.[ii.PATH];if(l)return _T.set(_,[Ao,ii.PATH],l),Ke.setProperty(qr.SCHEMAS,_),l}}let n=r[qr.STORAGE_PATH.toUpperCase()];if(n){if(!cT.pathExistsSync(n))throw new Error(n+" does not exist");let i=ui.join(n,e);return cT.mkdirsSync(i),Ke.setProperty(qr.STORAGE_PATH,n),i}return lT()}a(jD,"initSystemSchemaPaths");function eP(){ai=void 0,oi=void 0,ci=void 0}a(eP,"resetPaths");dT.exports={getBaseSchemaPath:uT,getSystemSchemaPath:lT,getTransactionAuditStorePath:ZD,getSchemaPath:ET,initSystemSchemaPaths:jD,resetPaths:eP}});var zt=f((ZZ,ST)=>{"use strict";var fT=b(),hT=T(),go=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,_l=require("joi"),po={schema_format:{pattern:go,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},tP=_l.alternatives(_l.string().min(1).max(po.schema_length.maximum).pattern(go).messages({"string.pattern.base":"{:#label} "+po.schema_format.message}),_l.number()).required();function rP(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>po.schema_length.maximum?`'${e}' maximum of 250 characters`:go.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(rP,"checkValidTable");function sP(e,t){return fT.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(sP,"validateSchemaExists");function nP(e,t){let r=t.state.ancestors[0].schema;return fT.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(nP,"validateTableExists");function iP(e,t){return e.toLowerCase()===hT.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${hT.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(iP,"validateSchemaName");ST.exports={common_validators:po,schema_regex:go,hdb_schema_table:tP,validateSchemaExists:sP,validateTableExists:nP,validateSchemaName:iP,checkValidTable:rP}});var Oo=f((e2,TT)=>{var{common_validators:Fr}=zt(),li=re(),qt="is required",X={schema:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},table:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length},hash_attribute:{presence:!0,format:Fr.schema_format,length:Fr.schema_length}};function Ei(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(Ei,"makeAttributesStrings");function aP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(aP,"schema_object");function oP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(oP,"table_object");function cP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence={message:qt},li.validateObject(e,X)}a(cP,"create_table_object");function _P(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence={message:qt},X.hash_attribute.presence=!1,li.validateObject(e,X)}a(_P,"attribute_object");function uP(e){return e=Ei(e),X.schema.presence={message:qt},X.table.presence={message:qt},X.attribute.presence=!1,X.hash_attribute.presence=!1,li.validateObject(e,X)}a(uP,"describe_table");function lP(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(lP,"validateTableResidence");TT.exports={schema_object:aP,create_table_object:cP,table_object:oP,attribute_object:_P,describe_table:uP,validateTableResidence:lP}});var RT=f((r2,mT)=>{"use strict";var EP=require("uuid"),No=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||EP.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(No,"CreateAttributeObject");mT.exports=No});var bo=f((n2,AT)=>{"use strict";var dP=RT(),Io=class extends dP{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Io,"LMDBCreateAttributeObject");AT.exports=Io});var gT=f((a2,pT)=>{"use strict";pT.exports=fP;var hP="inserted";function fP(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hP?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fP,"returnObject")});var wo=f((c2,wT)=>{"use strict";var SP=T(),ul=z(),TP=nn(),{getSystemSchemaPath:mP,getSchemaPath:RP}=j(),AP=fs(),pP=Oo(),gP=bo(),OP=gT(),{handleHDBError:OT,hdb_errors:IT}=y(),NT=b(),{HTTP_STATUS_CODES:NP}=IT,ll=AP.hdb_attribute,bT=[];for(let e=0;e<ll.attributes.length;e++)bT.push(ll.attributes[e].attribute);var IP="inserted";wT.exports=bP;async function bP(e){let t=pP.attribute_object(e);if(t)throw OT(new Error,t.message,IT.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&NT.checkGlobalSchemaTable(e.schema,e.table);if(r)throw OT(new Error,r,NP.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=NT.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 gP(e.schema,e.table,e.attribute,e.id);try{let i=await ul.openEnvironment(RP(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}`);ul.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await ul.openEnvironment(mP(),SP.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await TP.insertRecords(o,ll.hash_attribute,bT,[n]);return OP(IP,c,{records:[n]},_)}catch(i){throw i}}a(bP,"lmdbCreateAttribute")});var dl=f((u2,yT)=>{var{hdb_schema_table:CT}=zt(),wP=re(),El=require("joi"),CP={undefined:"undefined",null:"null"},yP=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||CP[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"),UP=El.object({schema:CT,table:CT,records:El.array().items(El.object().custom(yP)).required()});yT.exports=function(e){return wP.validateBySchema(e,UP)}});var Co=f((d2,LT)=>{"use strict";var mr=b(),UT=I(),E2=dl();LT.exports=LP;function LP(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.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(mr.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&&mr.isEmptyOrZeroLength(o[r]))throw UT.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(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw UT.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`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.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(LP,"insertUpdateValidate")});var di=f((f2,MT)=>{"use strict";var MP=T().OPERATIONS_ENUM,yo=class{constructor(t,r,s,n,i=void 0){this.operation=MP.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(yo,"InsertObject");MT.exports=yo});var Lo=f((m2,DT)=>{"use strict";var T2=di(),Uo=T(),fl=b(),hl=I(),DP=require("uuid"),{handleHDBError:hi,hdb_errors:PP}=y(),{HDB_ERROR_MSGS:fi,HTTP_STATUS_CODES:Si}=PP;DT.exports=vP;function vP(e,t,r){for(let n=0;n<t.length;n++)BP(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];HP(i,r,e.operation)}}a(vP,"processRows");function BP(e){if(Buffer.byteLength(String(e))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hi(new Error,fi.ATTR_NAME_LENGTH_ERR(e),Si.BAD_REQUEST,void 0,void 0,!0);if(fl.isEmptyOrZeroLength(e)||fl.isEmpty(e.trim()))throw hi(new Error,fi.ATTR_NAME_NULLISH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(BP,"validateAttribute");function HP(e,t,r){if(!e.hasOwnProperty(t)||fl.isEmptyOrZeroLength(e[t])){if(r===Uo.OPERATIONS_ENUM.INSERT||r===Uo.OPERATIONS_ENUM.UPSERT){e[t]=DP.v4();return}throw hl.error("Update transaction aborted due to record with no hash value:",e),hi(new Error,fi.RECORD_MISSING_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Uo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw hl.error(e),hi(new Error,fi.HASH_VAL_LENGTH_ERR,Si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw hl.error(e),hi(new Error,fi.INVALID_FORWARD_SLASH_IN_HASH_ERR,Si.BAD_REQUEST,void 0,void 0,!0)}a(HP,"validateHash")});var vT=f((A2,PT)=>{"use strict";var Mo=class{constructor(t,r){this.type=t,this.message=r}};a(Mo,"ITCEventObject");PT.exports=Mo});var Do=f((g2,qT)=>{var qP=require("crypto"),BT=9;function FP(e){let t=xP(BT),r=HT(e+t);return t+r}a(FP,"createHash");function GP(e,t){let r=e.substr(0,BT),s=r+HT(t+r);return e===s}a(GP,"validateHash");function xP(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(xP,"generateSalt");function HT(e){return qP.createHash("md5").update(e).digest("hex")}a(HT,"md5");qT.exports={hash:FP,validate:GP}});var GT=f((N2,FT)=>{"use strict";var Gr=T(),Ti=class{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.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(Ti,"BaseLicense");var Po=class extends Ti{constructor(t=0,r=Gr.STORAGE_TYPES_ENUM.LMDB,s=Gr.LICENSE_VALUES.API_CALL_DEFAULT,n=Gr.RAM_ALLOCATION_ENUM.DEFAULT,i=Gr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Po,"ExtendedLicense");FT.exports={BaseLicense:Ti,ExtendedLicense:Po}});var ms=f((b2,KT)=>{"use strict";var on=require("fs-extra"),xT=Do(),VT=require("crypto"),VP=require("moment"),kP=require("uuid").v4,Pe=I(),Tl=require("path"),$P=b(),_t=T(),YP=GT().ExtendedLicense,an="invalid license key format",KP="061183",WP="mofi25",QP="aes-256-cbc",JP=16,zP=32,kT=U();kT.initSync();var Sl;KT.exports={validateLicense:$T,generateFingerPrint:ZP,licenseSearch:YT,getLicense:tv};function ml(){return Tl.join(kT.getHdbBasePath(),_t.LICENSE_KEY_DIR_NAME,_t.LICENSE_FILE_NAME)}a(ml,"getLicenseDirPath");function XP(){let e=ml();return Tl.join(e,_t.LICENSE_FILE_NAME)}a(XP,"getLicenseFilePath");function Rl(){let e=ml();return Tl.join(e,_t.REG_KEY_FILE_NAME)}a(Rl,"getFingerPrintFilePath");async function ZP(){let e=Rl();try{return await on.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await jP();throw Pe.error(`Error writing fingerprint file to ${e}`),Pe.error(t),new Error("There was an error generating the fingerprint")}}a(ZP,"generateFingerPrint");async function jP(){let e=kP(),t=xT.hash(e),r=Rl();try{await on.mkdirp(ml()),await on.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Pe.error(`Error writing fingerprint file to ${r}`),Pe.error(s),new Error("There was an error generating the fingerprint")}return t}a(jP,"writeFingerprint");function $T(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:_t.STORAGE_TYPES_ENUM.LMDB,api_call:_t.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:_t.RAM_ALLOCATION_ENUM.DEFAULT,version:_t.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Pe.error("empty license key passed to validate."),r;let s=Rl(),n=!1;try{n=on.statSync(s)}catch(i){Pe.error(i)}if(n){let i;try{i=on.readFileSync(s,"utf8")}catch{Pe.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(WP),c=o[1];c=Buffer.concat([Buffer.from(c)],JP);let _=Buffer.concat([Buffer.from(i)],zP),u=VT.createDecipheriv(QP,_,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=ev(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(an),Pe.error(an),new Error(an)}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(an),Pe.error(an),new Error(an)}else r.exp_date=l;r.exp_date<VP().valueOf()&&(r.valid_date=!1),xT.validate(o[1],`${KP}${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||Pe.error("Invalid licence"),r}a($T,"validateLicense");function ev(e,t){try{let r=VT.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Pe.warn("Check old license failed")}}a(ev,"checkOldLicense");function YT(){let e=new YP;e.api_call=0;let t=[];try{t=on.readFileSync(XP(),"utf-8").split(_t.NEW_LINE)}catch(r){r.code==="ENOENT"?Pe.info("no license file found"):Pe.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($P.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$T(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){Pe.error("There was an error parsing the license string."),Pe.error(n),e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=_t.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=_t.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=_t.LICENSE_VALUES.API_CALL_DEFAULT),Sl=e,e}a(YT,"licenseSearch");async function tv(){return Sl||await YT(),Sl}a(tv,"getLicense")});var cn=f((C2,Il)=>{"use strict";var{Worker:rv,MessageChannel:sv,parentPort:Rr,isMainThread:JT,threadId:nv,workerData:iv}=require("worker_threads"),{PACKAGE_ROOT:av}=T(),{join:ov,isAbsolute:cv,extname:_v}=require("path"),{totalmem:WT}=require("os"),Ol=T(),zT=U(),uv=ms(),vo=I(),lv=T();zT.initSync();var Ev=zT.get(Ol.CONFIG_PARAMS.HTTP_THREADS)||1,dv=1024*1024,xr=[],Rs=[],hv=50,XT=1e4,ZT="restart",jT="request_thread_info",em="resource_report",tm="thread_info",rm="added-port",Al;Il.exports={startWorker:pl,restartWorkers:Nl,shutdownWorkers:Sv,workers:xr,setMonitorListener:pv,onMessageFromWorkers:Tv,broadcast:mv};function pl(e,t={}){let s=uv.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||WT();n=Math.min(n,WT());let i=Math.min(Math.max(Math.floor(n/dv/(1+Ev/4)),512),s||1/0),o=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Rs){let{port1:l,port2:E}=new sv;u.postMessage({type:rm,port:l},[l]),c.push(E)}_v(e)||(e+=".js");let _=new rv(cv(e)?e:ov(av,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:o},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Bo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{pl(e,t)},_.on("error",u=>{console.error("Worker error:",u),vo.error("Worker error:",u)}),_.on("exit",u=>{xr.splice(xr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<hv?(t.unexpectedRestarts=_.unexpectedRestarts+1,pl(e,t)):vo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===ZT&&Nl(u.workerType),u.type===jT&&Rv(_),u.type===em&&Av(_,u)}),xr.push(_),Ov(),t.onStarted&&t.onStarted(_),_.name=t.name,_}a(pl,"startWorker");var fv=[Ol.THREAD_TYPES.HTTP];async function Nl(e=null,t=2,r=!0){if(JT){t<1&&(t=t*xr.length);let s=[];for(let n of xr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:Ol.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=fv.indexOf(n.name)>-1,o=new Promise(c=>{let _=setTimeout(()=>n.terminate(),XT*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 Rr.postMessage({type:ZT,workerType:e})}a(Nl,"restartWorkers");function Sv(e){return Nl(e,1/0,!1)}a(Sv,"shutdownWorkers");var sm=[];function Tv(e){sm.push(e)}a(Tv,"onMessageFromWorkers");function mv(e){for(let t of Rs)try{t.postMessage(e)}catch(r){vo.error("Unable to send message to worker",r)}}a(mv,"broadcast");function Rv(e){e.postMessage({type:tm,workers:nm()})}a(Rv,"sendThreadInfo");function nm(){let e=Date.now();return xr.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(nm,"getChildWorkerInfo");function Av(e,t){e.resources=t,e.resources.updated=Date.now()}a(Av,"recordResourceReport");var gl;function pv(e){gl=e}a(pv,"setMonitorListener");var gv=1e3,QT=!1;function Ov(){QT||(QT=!0,setInterval(()=>{for(let e of xr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}gl&&gl()},gv).unref())}a(Ov,"startMonitoring");var Nv=1e3;if(Rr){Bo(Rr);for(let e of iv.addPorts)Bo(e);setInterval(()=>{let e=process.memoryUsage();Rr.postMessage({type:em,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Nv).unref(),Al=a(()=>new Promise((e,t)=>{Rr.on("message",r),Rr.postMessage({type:jT});function r(s){s.type===tm&&(Rr.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Al=nm;Il.exports.getThreadInfo=Al;function Bo(e,t){Rs.push(e),e.on("message",r=>{if(r.type===rm)Bo(r.port);else for(let s of sm)s(r)}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t||e.unref()}a(Bo,"addPort");JT||Rr.on("message",async e=>{let{type:t}=e;t===lv.ITC_EVENT_TYPES.SHUTDOWN&&(Rr.unref(),setTimeout(()=>{vo.warn("Thread did not voluntarily terminate",nv),process.exit(0)},XT).unref())})});var om=f((U2,am)=>{"use strict";var bl=z(),Iv=I(),im=at().LMDB_ERRORS_ENUM;am.exports=bv;async function bv(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 bl.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==im.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bl.closeEnvironment(global.lmdb_map[s]),await bl.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==im.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){Iv.error(t)}}a(bv,"cleanLMDBMap")});var It=f((M2,um)=>{"use strict";var qo=dl(),Nt=b(),wv=require("util"),Fo=Xt(),Cv=Ar(),wl=I(),{handleHDBError:Vr,hdb_errors:yv}=y(),{HTTP_STATUS_CODES:As}=yv,Uv=wv.promisify(Cv.getTableSchema),Lv="updated",cm="inserted",_m="upserted";um.exports={insert:Dv,update:Pv,upsert:vv,validation:Mv,flush:Bv};async function Mv(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 Uv(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Nt.isEmptyOrZeroLength(c[s]))throw wl.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 wl.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(Mv,"validation");async function Dv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.createRecords(e);return Ho(cm,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(Dv,"insertData");async function Pv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);let s=await Fo.updateRecords(e);return Nt.isEmpty(s.existing_rows)?Ho(Lv,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Pv,"updateData");async function vv(e){if(e.operation!=="upsert")throw Vr(new Error,"invalid operation, must be upsert",As.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw Vr(new Error,t.message,As.BAD_REQUEST);let r=Nt.checkSchemaTableExist(e.schema,e.table);if(r)throw Vr(new Error,r,As.BAD_REQUEST);try{let s=await Fo.upsertRecords(e);return Ho(_m,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Vr(s,null,null,wl.ERR,n)}}a(vv,"upsertData");function Ho(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===cm?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===_m?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Bv(e){return Fo.flush(e.schema,e.table)}a(Bv,"flush")});var yl=f((P2,dm)=>{var Hv=re(),Cl=require("joi"),{hdb_schema_table:lm}=zt(),Em={schema:lm,table:lm},qv={date:Cl.date().iso().required()},Fv={timestamp:Cl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};dm.exports=function(e,t){let r=t==="timestamp"?{...Em,...Fv}:{...Em,...qv},s=Cl.object(r);return Hv.validateBySchema(e,s)}});var Tm=f((v2,Sm)=>{var Gv=re(),hm=require("joi"),{hdb_schema_table:fm}=zt(),xv=hm.object({schema:fm,table:fm,hash_values:hm.array().required()});Sm.exports=function(e){return Gv.validateBySchema(e,xv)}});var Rm=f((B2,mm)=>{"use strict";var Go=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Go,"InsertObject");var xo=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(xo,"NoSQLSeachObject");var Vo=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(Vo,"DeleteResponseObject");mm.exports={InsertObject:Go,NoSQLSeachObject:xo,DeleteResponseObject:Vo}});var gs=f((q2,Nm)=>{"use strict";var pm=yl(),Vv=Tm(),ko=b(),Am=require("moment"),gm=I(),{promisify:kv,callbackify:$v}=require("util"),ps=T(),Yv=Ar(),Ul=kv(Yv.getTableSchema),Ll=Xt(),{DeleteResponseObject:Kv}=Rm(),{handleHDBError:kr,hdb_errors:Wv}=y(),{HDB_ERROR_MSGS:$o,HTTP_STATUS_CODES:$r}=Wv,Qv="records successfully deleted",Jv=$v(Om);Nm.exports={delete:Jv,deleteRecord:Om,deleteFilesBefore:zv,deleteAuditLogsBefore:Xv};async function zv(e){let t=pm(e,"date");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!Am(e.date,Am.ISO_8601).isValid())throw kr(new Error,$o.INVALID_DATE,$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_DATE,!0);let s=ko.checkSchemaTableExist(e.schema,e.table);if(s)throw kr(new Error,s,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,s,!0);let n=await Ll.deleteRecordsBefore(e);if(await Ul(e.schema,e.table),gm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(zv,"deleteFilesBefore");async function Xv(e){let t=pm(e,"timestamp");if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw kr(new Error,$o.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,ps.LOG_LEVELS.ERROR,$o.INVALID_VALUE("Timestamp"),!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);let s=await Ll.deleteAuditLogsBefore(e);return await Ul(e.schema,e.table),gm.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Xv,"deleteAuditLogsBefore");async function Om(e){let t=Vv(e);if(t)throw kr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=ko.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,$r.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);try{await Ul(e.schema,e.table);let s=await Ll.deleteRecords(e);return ko.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Qv}`),s}catch(s){if(s.message===ps.SEARCH_NOT_FOUND_MESSAGE){let n=new Kv;return n.message=ps.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Om,"deleteRecord")});var bm=f((G2,Im)=>{var Ml=re(),ve={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 Zv(e){return ve.password.presence=!0,ve.username.presence=!0,ve.role.presence=!0,ve.active.presence=!0,Ml.validateObject(e,ve)}a(Zv,"addUserValidation");function jv(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(jv,"alterUserValidation");function eB(e){return ve.password.presence=!1,ve.username.presence=!0,ve.role.presence=!1,ve.active.presence=!1,Ml.validateObject(e,ve)}a(eB,"dropUserValidation");Im.exports={addUserValidation:Zv,alterUserValidation:jv,dropUserValidation:eB}});var Yr=f((V2,Um)=>{"use strict";var mi=require("crypto"),Cm="aes-256-cbc",tB=32,rB=16,Dl=64,ym=32,sB=Dl+ym,wm=new Map;Um.exports={encrypt:nB,decrypt:iB,createNatsTableStreamName:aB};function nB(e){let t=mi.randomBytes(tB),r=mi.randomBytes(rB),s=mi.createCipheriv(Cm,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(nB,"encrypt");function iB(e){let t=e.substr(0,Dl),r=e.substr(Dl,ym),s=e.substr(sB,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=mi.createDecipheriv(Cm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(iB,"decrypt");function aB(e,t){let r=`${e}.${t}`,s=wm.get(r);return s||(s=mi.createHash("md5").update(`${e}.${t}`).digest("hex"),wm.set(r,s)),s}a(aB,"createNatsTableStreamName")});var le=f((Y2,Mm)=>{"use strict";var{platform:$2}=require("os"),oB="nats-server.zip",Pl="nats-server",cB=process.platform==="win32"?`${Pl}.exe`:Pl,vl="HDB",_B=/^[^\s.,*>]+$/,Lm="__request__",uB=a(e=>`${e}.${Lm}`,"REQUEST_SUBJECT"),lB={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},EB={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},dB={HUB:"hub.pid",LEAF:"leaf.pid"},hB={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},fB={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vl,deliver_subject:"__HDB__.WORKQUEUE"},SB={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vl,deliver_subject:"HDB.SCHEMAQUEUE"},TB={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vl,deliver_subject:"HDB.USERQUEUE"},mB={SUCCESS:"success",ERROR:"error"},RB={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},AB={TXN:"txn",MSGID:"msgid"},_n={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},pB={[_n.ERR]:1,[_n.WRN]:2,[_n.INF]:3,[_n.DBG]:4,[_n.TRC]:5},gB={debug:"-D",trace:"-DVV"};Mm.exports={NATS_SERVER_ZIP:oB,NATS_SERVER_NAME:Pl,NATS_BINARY_NAME:cB,PID_FILES:dB,NATS_CONFIG_FILES:EB,SERVER_SUFFIX:hB,WORK_QUEUE_CONSUMER_NAMES:fB,SCHEMA_QUEUE_CONSUMER_NAMES:SB,USER_QUEUE_CONSUMER_NAMES:TB,NATS_TERM_CONSTRAINTS_RX:_B,REQUEST_SUFFIX:Lm,UPDATE_REMOTE_RESPONSE_STATUSES:mB,CLUSTER_STATUS_STATUSES:RB,REQUEST_SUBJECT:uB,SUBJECT_PREFIXES:AB,MSG_HEADERS:lB,LOG_LEVELS:_n,LOG_LEVEL_FLAGS:gB,LOG_LEVEL_HIERARCHY:pB}});var er=f((Q2,Wm)=>{"use strict";var Hm="username is required",qm="nothing to update, must supply active, role or password to update",Fm="password cannot be an empty string",Gm="If role is specified, it cannot be empty.",xm="active must be true or false";Wm.exports={addUser:UB,alterUser:LB,dropUser:DB,userInfo:PB,listUsers:Ko,listUsersExternal:vB,setUsersToGlobal:Ri,findAndValidateUser:qB,getClusterUser:FB,USERNAME_REQUIRED:Hm,ALTERUSER_NOTHING_TO_UPDATE:qm,EMPTY_PASSWORD:Fm,EMPTY_ROLE:Gm,ACTIVE_BOOLEAN:xm};var Vm=It(),OB=gs(),Hl=Do(),km=bm(),$m=bt(),ql=ln(),ut=b(),Ym=require("validate.js"),D=I(),{promisify:Fl}=require("util"),Gl=Yr(),Dm=T(),Pm=le(),NB=fr(),W2=U(),IB=ms(),bB=fs(),{handleHDBError:Zt,hdb_errors:wB}=y(),{HTTP_STATUS_CODES:jt,AUTHENTICATION_ERROR_MSGS:Bl,HDB_ERROR_MSGS:un}=wB,{UserEventMsg:xl}=Kr(),vm=require("lodash"),Km={username:!0,active:!0,role:!0,password:!0},Bm=new Map,Yo=Fl($m.searchByValue),CB=Fl($m.searchByHash),yB=Fl(OB.delete);async function UB(e){let t=Ym.cleanAttributes(e,Km),r=km.addUserValidation(t);if(r)throw Zt(new Error,r.message,jt.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 Yo(s),n=n&&Array.from(n)}catch(_){throw D.error("There was an error searching for a role in add user"),D.error(_),_}if(!n||n.length<1)throw Zt(new Error,un.ROLE_NAME_NOT_FOUND(t.role),jt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Zt(new Error,un.DUP_ROLES_FOUND(t.role),jt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Vm.insert(i)}catch(_){throw D.error("There was an error searching for a user."),D.error(_),_}D.debug(o);try{await Ri()}catch(_){throw D.error("Got an error setting users to global"),D.error(_),_}if(o.skipped_hashes.length===1)throw Zt(new Error,un.USER_ALREADY_EXISTS(t.username),jt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],ql.signalUserChange(new xl(process.pid)),`${c.username} successfully added`}a(UB,"addUser");async function LB(e){let t=Ym.cleanAttributes(e,Km);if(ut.isEmptyOrZeroLength(t.username))throw new Error(Hm);if(ut.isEmptyOrZeroLength(t.password)&&ut.isEmptyOrZeroLength(t.role)&&ut.isEmptyOrZeroLength(t.active))throw new Error(qm);if(!ut.isEmpty(t.password)&&ut.isEmptyOrZeroLength(t.password.trim()))throw new Error(Fm);if(!ut.isEmpty(t.active)&&!ut.isBoolean(t.active))throw new Error(xm);let r=MB(t.username);if(!ut.isEmpty(t.password)&&!ut.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gl.encrypt(t.password)),t.password=Hl.hash(t.password)),t.role==="")throw new Error(Gm);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 Yo(i)||[])}catch(c){throw D.error("Got an error searching for a role."),D.error(c),c}if(!o||o.length===0){let c=un.ALTER_USER_ROLE_NOT_FOUND(t.role);throw D.error(c),Zt(new Error,c,jt.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=un.ALTER_USER_DUP_ROLES(t.role);throw D.error(c),Zt(new Error,c,jt.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 Vm.update(s)}catch(i){throw D.error("Error during update."),D.error(i),i}try{await Ri()}catch(i){throw D.error("Got an error setting users to global"),D.error(i),i}return ql.signalUserChange(new xl(process.pid)),n}a(LB,"alterUser");function MB(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(MB,"isClusterUser");async function DB(e){try{let t=km.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ut.isEmpty(global.hdb_users.get(e.username)))throw Zt(new Error,un.USER_NOT_EXIST(e.username),jt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yB(r)}catch(n){throw D.error("Got an error deleting a user."),D.error(n),n}D.debug(s);try{await Ri()}catch(n){throw D.error("Got an error setting users to global."),D.error(n),n}return ql.signalUserChange(new xl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(DB,"dropUser");async function PB(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 CB(r)}catch(n){throw D.error("Got an error searching for a role."),D.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw D.error(r),r}return t}a(PB,"userInfo");async function vB(){let e;try{e=await Ko()}catch(t){throw D.error("Got an error listing users."),D.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(vB,"listUsersExternal");async function Ko(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Yo(e)}catch(o){throw D.error("Got an error searching for roles."),D.error(o),o}let r={};for(let o of t)r[o.id]=vm.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 Yo(s)}catch(o){throw D.error("Got an error searching for users."),D.error(o),o}let i=new Map;for(let o of n)o=vm.cloneDeep(o),o.role=r[o.role],BB(o.role),i.set(o.username,o);return(await IB.getLicense()).enterprise?i:HB(Array.from(i.values()))}catch(e){throw D.error("got an error listing users"),D.error(e),ut.errorizeMessage(e)}return null}a(Ko,"listUsers");function BB(e){try{if(!e){D.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(bB)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){D.error("Got an error trying to set system permissions."),D.error(t)}}a(BB,"appendSystemTablesToRole");function HB(e){try{if(D.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?(D.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return D.error("error filtering users."),D.error(t),new Map}}a(HB,"nonEnterpriseFilter");async function Ri(){try{let e=await Ko();global.hdb_users=e}catch(e){throw D.error(e),e}}a(Ri,"setUsersToGlobal");async function qB(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Zt(new Error,Bl.USER_INACTIVE,jt.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(Bm.get(t)===s.password)return n;if(Hl.validate(s.password,t))Bm.set(t,s.password);else throw Zt(new Error,Bl.GENERIC_AUTH_FAIL,jt.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qB,"findAndValidateUser");async function FB(){let e=await Ko(),t=NB.getConfigFromFile(Dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ut.isEmpty(r)&&r?.role?.role===Dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Pm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Pm.SERVER_SUFFIX.ADMIN,r}a(FB,"getClusterUser")});var Wo=f((z2,Xm)=>{"use strict";var Os=I(),lt=T(),GB=om(),Qm=Ar(),xB=Ns(),VB=er(),{validateEvent:zm}=Kr(),Ai=Xt(),kB=require("process"),$B={[lt.ITC_EVENT_TYPES.SCHEMA]:YB,[lt.ITC_EVENT_TYPES.USER]:WB};async function YB(e){let t=zm(e);if(t){Os.error(t);return}Os.trace("ITC schemaHandler received schema event:",e),await GB(e.message),await KB(e.message)}a(YB,"schemaHandler");async function KB(e){try{if(Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.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 xB.describeTable({schema:e.schema,table:e.table});break;default:Qm.setSchemaDataToGlobal(Jm);break}else Qm.setSchemaDataToGlobal(Jm)}catch(t){Os.error(t)}}a(KB,"syncSchemaMetadata");function Jm(e){e&&Os.error(e)}a(Jm,"handleErrorCallback");async function WB(e){try{Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ai.resetReadTxn(lt.SYSTEM_SCHEMA_NAME,lt.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=zm(e);if(t){Os.error(t);return}Os.trace(`ITC userHandler ${lt.HDB_ITC_CLIENT_PREFIX}${kB.pid} received user event:`,e),await VB.setUsersToGlobal()}catch(t){Os.error(t)}}a(WB,"userHandler");Xm.exports=$B});var Kr=f((t4,jm)=>{"use strict";var Z2=I(),Vl=b(),QB=T(),{ITC_ERRORS:pi}=at(),{parentPort:j2,threadId:JB,isMainThread:zB,workerData:e4}=require("worker_threads"),{onMessageFromWorkers:XB,broadcast:ZB}=cn();jm.exports={sendItcEvent:jB,validateEvent:Zm,SchemaEventMsg:eH,UserEventMsg:tH};var Qo;XB(e=>{Qo=Qo||Wo(),Zm(e),Qo[e.type]&&Qo[e.type](e)});function jB(e){!zB&&e.message&&(e.message.originator=JB),ZB(e)}a(jB,"sendItcEvent");function Zm(e){if(typeof e!="object")return pi.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Vl.isEmpty(e.type))return pi.MISSING_TYPE;if(!e.hasOwnProperty("message")||Vl.isEmpty(e.message))return pi.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Vl.isEmpty(e.message.originator))return pi.MISSING_ORIGIN;if(QB.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return pi.INVALID_EVENT(e.type)}a(Zm,"validateEvent");function eH(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(eH,"SchemaEventMsg");function tH(e){this.originator=e}a(tH,"UserEventMsg")});var ln=f((n4,sR)=>{"use strict";var eR=T(),s4=b(),Jo=I(),tR=vT(),En,{sendItcEvent:rR}=Kr();function rH(e){try{Jo.trace("signalSchemaChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.SCHEMA,e);En.schema(t),rR(t)}catch(t){Jo.error(t)}}a(rH,"signalSchemaChange");function sH(e){try{Jo.trace("signalUserChange called with message:",e),En=En||Wo();let t=new tR(eR.ITC_EVENT_TYPES.USER,e);En.user(t),rR(t)}catch(t){Jo.error(t)}}a(sH,"signalUserChange");sR.exports={signalSchemaChange:rH,signalUserChange:sH}});var zo=f((a4,iR)=>{"use strict";var nR=b(),nH=T(),iH=I(),aH=wo(),oH=bo(),cH=ln(),{SchemaEventMsg:_H}=Kr(),uH="already exists in";iR.exports=lH;async function lH(e,t,r){if(nR.isEmptyOrZeroLength(r))return r;let s=[];nR.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 EH(e,t.schema,t.name,i)})),n}a(lH,"lmdbCheckForNewAttributes");async function EH(e,t,r,s){let n=new oH(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dH(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uH))iH.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(EH,"createNewAttribute");async function dH(e){let t;return t=await aH(e),cH.signalSchemaChange(new _H(process.pid,nH.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(dH,"createAttribute")});var dn=f((c4,aR)=>{"use strict";var Xo=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(Xo,"LMDBTransactionObject");aR.exports=Xo});var cR=f((u4,oR)=>{"use strict";var hH=dn(),fH=T().OPERATIONS_ENUM,Zo=class extends hH{constructor(t,r,s,n,i=void 0){super(fH.INSERT,r,s,n,i),this.records=t}};a(Zo,"LMDBInsertTransactionObject");oR.exports=Zo});var uR=f((E4,_R)=>{"use strict";var SH=dn(),TH=T().OPERATIONS_ENUM,jo=class extends SH{constructor(t,r,s,n,i,o=void 0){super(TH.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(jo,"LMDBUpdateTransactionObject");_R.exports=jo});var ER=f((h4,lR)=>{"use strict";var mH=dn(),RH=T().OPERATIONS_ENUM,ec=class extends mH{constructor(t,r,s,n,i,o=void 0){super(RH.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(ec,"LMDBUpsertTransactionObject");lR.exports=ec});var hR=f((S4,dR)=>{"use strict";var AH=dn(),pH=T().OPERATIONS_ENUM,tc=class extends AH{constructor(t,r,s,n,i=void 0){super(pH.DELETE,s,n,t,i),this.original_records=r}};a(tc,"LMDBDeleteTransactionObject");dR.exports=tc});var gi=f((R4,mR)=>{"use strict";var m4=require("path"),fR=z(),gH=cR(),OH=uR(),NH=ER(),IH=hR(),hn=Le(),SR=b(),{CONFIG_PARAMS:bH}=T(),TR=U();TR.initSync();var rc=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:wH}=j();mR.exports=CH;async function CH(e,t){if(TR.get(bH.LOGGING_AUDITLOG)===!1)return;let r=wH(e.schema,e.table),s=await fR.openEnvironment(r,e.table,!0),n=yH(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){fR.initializeDBIs(s,hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hn.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),SR.isEmpty(n.user_name)||s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[hn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(CH,"writeTransaction");function yH(e,t){let r=SR.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===rc.INSERT)return new gH(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPDATE)return new OH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.UPSERT)return new NH(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===rc.DELETE)return new IH(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(yH,"createTransactionObject")});var kl=f((g4,RR)=>{"use strict";var UH=Co(),p4=di(),Oi=T(),LH=Lo(),MH=nn().insertRecords,DH=z(),PH=I(),vH=zo(),{getSchemaPath:BH}=j(),HH=gi();RR.exports=qH;async function qH(e){try{let{schema_table:t,attributes:r}=UH(e);LH(e,r,t.hash_attribute),e.schema!==Oi.SYSTEM_SCHEMA_NAME&&(r.includes(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vH(e.hdb_auth_header,t,r),n=BH(e.schema,e.table),i=await DH.openEnvironment(n,e.table),o=await MH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HH(e,o)}catch(c){PH.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(qH,"lmdbCreateRecords")});var gR=f((N4,pR)=>{"use strict";var AR=T(),FH=kl(),GH=di(),xH=require("fs-extra"),{getSchemaPath:VH}=j();pR.exports=kH;async function kH(e){let t=[{name:e.schema,createddate:Date.now()}],r=new GH(AR.SYSTEM_SCHEMA_NAME,AR.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FH(r),await xH.mkdirp(VH(e.schema))}a(kH,"lmdbCreateSchema")});var NR=f((b4,OR)=>{"use strict";var sc=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(sc,"DeleteRecordsResponseObject");OR.exports=sc});var Kl=f((L4,wR)=>{"use strict";var IR=z(),$l=Ss(),Yl=at().LMDB_ERRORS_ENUM,$H=Le(),bR=I(),C4=b(),YH=require("lmdb"),KH=NR(),WH=T(),{OVERFLOW_MARKER:y4,MAX_SEARCH_KEY_LENGTH:U4}=$H,QH=WH.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function JH(e,t,r,s){if($l.validateEnv(e),t===void 0)throw new Error(Yl.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yl.IDS_REQUIRED):new Error(Yl.IDS_MUST_BE_ITERABLE);try{let n=IR.listDBIs(e);IR.initializeDBIs(e,t,n);let i=new KH,o,c=[],_=[];for(let d=0,h=r.length;d<h;d++)try{o=r[d];let m=e.dbis[t].get(o);if(!m||s&&m[QH]>s){i.skipped.push(o);continue}let R=e.dbis[t].ifVersion(o,YH.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<n.length;g++){let H=n[g];if(!m.hasOwnProperty(H)||H===t)continue;let x=e.dbis[H],q=m[H];if(q!=null)try{let Ue=$l.getIndexedValues(q);if(Ue)for(let M=0,$=Ue.length;M<$;M++)x.remove(Ue[M],o)}catch{bR.warn(`cannot delete from attribute: ${H}, ${q}:${o}`)}}});c.push(R),_.push(o),i.original_records.push(m)}catch(m){bR.warn(m),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=$l.getNextMonotonicTime(),i}catch(n){throw n}}a(JH,"deleteRecords");wR.exports={deleteRecords:JH}});var Ni=f((D4,yR)=>{"use strict";var fn=b(),zH=Kl(),XH=z(),{getSchemaPath:ZH}=j(),jH=gi(),eq=I();yR.exports=tq;async function tq(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(fn.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(fn.isEmptyOrZeroLength(e.hash_values)&&!fn.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];fn.isEmpty(_)||e.hash_values.push(_)}}if(fn.isEmptyOrZeroLength(e.hash_values))return CR([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(fn.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=ZH(e.schema,e.table),i=await XH.openEnvironment(n,e.table),o=await zH.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jH(e,o)}catch(c){eq.error(`unable to write transaction due to ${c.message}`)}return CR(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(tq,"lmdbDeleteRecords");function CR(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(CR,"createDeleteResponse")});var Ql=f((B4,UR)=>{"use strict";var rq=T(),v4=Ss();function Wl(e,t){let r=Object.create(null);if(t.length===1&&rq.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(Wl,"parseRow");function sq(e,t,r,s){let n=Wl(r,e);s.push(n)}a(sq,"searchAll");function nq(e,t,r,s){let n=Wl(r,e);s[t]=n}a(nq,"searchAllToMap");function iq(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(iq,"iterateDBI");function Is(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(Is,"pushResults");function aq(e,t,r,s,n,i){t.toString().endsWith(e)&&Is(t,r,s,n,i)}a(aq,"endsWith");function oq(e,t,r,s,n,i){t.toString().includes(e)&&Is(t,r,s,n,i)}a(oq,"contains");function cq(e,t,r,s,n,i){t>e&&Is(t,r,s,n,i)}a(cq,"greaterThanCompare");function _q(e,t,r,s,n,i){t>=e&&Is(t,r,s,n,i)}a(_q,"greaterThanEqualCompare");function uq(e,t,r,s,n,i){t<e&&Is(t,r,s,n,i)}a(uq,"lessThanCompare");function lq(e,t,r,s,n,i){t<=e&&Is(t,r,s,n,i)}a(lq,"lessThanEqualCompare");UR.exports={parseRow:Wl,searchAll:sq,searchAllToMap:nq,iterateDBI:iq,endsWith:aq,contains:oq,greaterThanCompare:cq,greaterThanEqualCompare:_q,lessThanCompare:uq,lessThanEqualCompare:lq,pushResults:Is}});var ws=f((x4,HR)=>{"use strict";var Wr=z(),q4=I(),Et=Ss(),nc=Le(),ce=at().LMDB_ERRORS_ENUM,F4=b(),Eq=T(),ic=Ql(),{parseRow:dq}=ic,G4=require("lmdb"),{OVERFLOW_MARKER:LR,MAX_SEARCH_KEY_LENGTH:hq}=nc;function MR(e,t,r,s=!1,n=void 0,i=void 0){return bs(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(MR,"iterateFullIndex");function Ii(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){return bs(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(Ii,"iterateRangeBetween");function bs(e,t,r,s){let n=e.database||e,i=Wr.openDBI(n,r);i[nc.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Wr.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(bs,"setupTransaction");function DR(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(LR)){if(!n)if(r)n=Wr.openDBI(e,r);else{let _=Wr.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Wr.openDBI(e,_[u]),!n[nc.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(DR,"getOverflowCheck");function fq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return bs(e,t,t,(o,c,_)=>(ac(r),r=bi(_,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>dq(u.value,r))))}a(fq,"searchAll");function Sq(e,t,r,s=!1,n=void 0,i=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);ac(r),r=bi(e.database||e,r);let o=new Map;for(let{key:c,value:_}of MR(e,t,t,s,n,i))o.set(c,ic.parseRow(_,r));return o}a(Sq,"searchAllToMap");function Tq(e,t,r=!1,s=void 0,n=void 0){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=MR(e,void 0,t,r,s,n),c=o.transaction,_=DR(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(Tq,"iterateDBI");function mq(e,t){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Wr.statDBI(e,t).entryCount}a(mq,"countAll");function Rq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,t,r,(c,_,u,l)=>(s=Et.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(Rq,"equals");function Aq(e,t,r){return Qr(e,t,r),Wr.openDBI(e,t).getValuesCount(r)}a(Aq,"count");function pq(e,t,r,s,n=!1,i=void 0,o=void 0){return Qr(e,r,s),bs(e,null,r,(c,_)=>{s=Et.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(pq,"startsWith");function gq(e,t,r,s,n=!1,i=void 0,o=void 0){return PR(e,t,r,s,n,i,o,!0)}a(gq,"endsWith");function PR(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Qr(e,r,s),bs(e,null,r,(_,u,l,E)=>{let d=DR(l,_,E,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(h=>{let m=h.toString();return m.endsWith(LR)?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?m.endsWith(s):m.includes(s))?u[nc.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(PR,"contains");function Oq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!0,!1)}a(Oq,"greaterThan");function Nq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ii(e,t,r,s,_,n,i,o,!1,!1)}a(Nq,"greaterThanEqual");function Iq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!0)}a(Iq,"lessThan");function bq(e,t,r,s,n=!1,i=void 0,o=void 0){Qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ii(e,t,r,_,s,n,i,o,!1,!1)}a(bq,"lessThanEqual");function wq(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Et.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=Et.convertKeyValueToWrite(s),n=Et.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ii(e,t,r,s,n,i,o,c)}a(wq,"between");function Cq(e,t,r,s){Et.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),r=bi(n,r),s===void 0)throw new Error(ce.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ic.parseRow(c,r)),o}a(Cq,"searchByHash");function yq(e,t,r){Et.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(yq,"checkHashExists");function Uq(e,t,r,s,n=[]){return BR(e,t,r,s,n),vR(e,t,r,s,n).map(i=>i[1])}a(Uq,"batchSearchByHash");function Lq(e,t,r,s,n=[]){BR(e,t,r,s,n);let i=new Map;for(let[o,c]of vR(e,t,r,s,n))i.set(o,c);return i}a(Lq,"batchSearchByHashToMap");function vR(e,t,r,s,n=[]){return bs(e,t,t,(i,o,c)=>{r=bi(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ic.parseRow(l,r)];n.push(u)}).filter(u=>u)})}a(vR,"batchHashSearch");function BR(e,t,r,s,n){if(Et.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(ac(r),s==null)throw new Error(ce.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ce.IDS_MUST_BE_ITERABLE)}a(BR,"initializeBatchSearchByHash");function ac(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ac,"validateFetchAttributes");function Qr(e,t,r){if(Et.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>hq)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Qr,"validateComparisonFunctions");function bi(e,t){return t.length===1&&Eq.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Wr.listDBIs(e)),t}a(bi,"setGetWholeRowAttributes");HR.exports={searchAll:fq,searchAllToMap:Sq,count:Aq,countAll:mq,equals:Rq,startsWith:pq,endsWith:gq,contains:PR,searchByHash:Cq,setGetWholeRowAttributes:bi,batchSearchByHash:Uq,batchSearchByHashToMap:Lq,checkHashExists:yq,iterateDBI:Tq,greaterThan:Oq,greaterThanEqual:Nq,lessThan:Iq,lessThanEqual:bq,between:wq}});var wi=f(($4,xR)=>{var qR=require("lodash"),FR=re(),W=require("joi"),Mq=b(),{hdb_schema_table:Ft,checkValidTable:GR}=zt(),{handleHDBError:Dq,hdb_errors:Pq}=y(),{HTTP_STATUS_CODES:vq}=Pq,k4=W.object({schema:Ft,table:Ft,hash_values:W.array().min(0).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items(Ft).required()}),Bq=W.object({schema:Ft,table:Ft,search_attribute:Ft,search_value:W.any().required(),get_attributes:W.array().min(1).items(Ft).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),Hq=W.object({schema:Ft,table:Ft,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(Ft).required(),conditions:W.array().min(1).items(W.object({search_attribute:Ft,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()});xR.exports=function(e,t){let r=null;switch(t){case"value":r=FR.validateBySchema(e,Bq);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(GR("schema",e.schema)),i(GR("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=FR.validateBySchema(e,Hq);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Mq.checkGlobalSchemaTable(e.schema,e.table);if(n)return Dq(new Error,n,vq.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 _=qR.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!qR.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 Jl=f((K4,VR)=>{"use strict";var qq=z(),Fq=wi(),{getSchemaPath:Gq}=j();VR.exports=xq;function xq(e){let t=Fq(e,"hashes");if(t)throw t;let r=Gq(e.schema,e.table);return qq.openEnvironment(r,e.table)}a(xq,"initialize")});var zl=f((Q4,kR)=>{"use strict";var Vq=ws(),kq=Jl();kR.exports=$q;async function $q(e){let t=await kq(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return Vq.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($q,"lmdbGetDataByHash")});var Sn=f((z4,$R)=>{"use strict";var oc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(oc,"SearchByHashObject");$R.exports=oc});var KR=f((j4,YR)=>{"use strict";var Z4=Sn(),Yq=ws(),Kq=Jl();YR.exports=Wq;async function Wq(e){let t=await Kq(e),r=global.hdb_schema[e.schema][e.table];return Yq.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Wq,"lmdbSearchByHash")});var Gt=f((t5,WR)=>{"use strict";var cc=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(cc,"SearchObject");WR.exports=cc});var _c=f((s5,jR)=>{"use strict";var Be=ws(),Qq=z(),Jq=b(),C=Le(),Cs=T(),zq=fs(),QR=at().LMDB_ERRORS_ENUM,{compareKeys:Tn}=require("ordered-binary"),{getSchemaPath:Xq}=j(),pr=Cs.SEARCH_WILDCARDS;async function Zq(e,t,r){let s;e.schema===Cs.SYSTEM_SCHEMA_NAME?s=zq[e.table]:s=global.hdb_schema[e.schema][e.table];let n=ZR(e,s.hash_attribute,r,t);return zR(e,n,s.hash_attribute,r)}a(Zq,"prepSearch");async function zR(e,t,r,s){let n=Xq(e.schema,e.table),i=await Qq.openEnvironment(n,e.table),o=XR(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(eF(e,r)===!1){let l=e.search_attribute;if(l===r)return s?JR(o,()=>!0):o.map(d=>({[r]:d.key}));let E=a(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?JR(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(zR,"executeSearch");function XR(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(XR,"searchByType");function jq(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 Tn(i,s[0])>=0&&Tn(i,s[1])<=0};case C.SEARCH_TYPES.GREATER_THAN:case C.SEARCH_TYPES._GREATER_THAN:return n=>Tn(n[r],s)>0;case C.SEARCH_TYPES.GREATER_THAN_EQUAL:case C.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tn(n[r],s)>=0;case C.SEARCH_TYPES.LESS_THAN:case C.SEARCH_TYPES._LESS_THAN:return n=>Tn(n[r],s)<0;case C.SEARCH_TYPES.LESS_THAN_EQUAL:case C.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tn(n[r],s)<=0;default:return Object.create(null)}}a(jq,"filterByType");function JR(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(JR,"createMapFromIterable");function eF(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(eF,"checkToFetchMore");function ZR(e,t,r,s){if(Jq.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),pr.indexOf(n)>-1)return r===!0?C.SEARCH_TYPES.SEARCH_ALL_TO_MAP:C.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(pr[0])<0&&n.indexOf(pr[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(pr.indexOf(i)>=0&&pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),C.SEARCH_TYPES.CONTAINS;if(pr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),C.SEARCH_TYPES.ENDS_WITH;if(pr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),C.SEARCH_TYPES.STARTS_WITH;if(n.includes(pr[0])||n.includes(pr[1]))return C.SEARCH_TYPES.EQUALS;throw new Error(QR.UNKNOWN_SEARCH_TYPE)}else switch(s){case Cs.VALUE_SEARCH_COMPARATORS.BETWEEN:return C.SEARCH_TYPES.BETWEEN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER:return C.SEARCH_TYPES.GREATER_THAN;case Cs.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return C.SEARCH_TYPES.GREATER_THAN_EQUAL;case Cs.VALUE_SEARCH_COMPARATORS.LESS:return C.SEARCH_TYPES.LESS_THAN;case Cs.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return C.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(QR.UNKNOWN_SEARCH_TYPE)}}a(ZR,"createSearchTypeFromSearchObject");jR.exports={executeSearch:zR,createSearchTypeFromSearchObject:ZR,prepSearch:Zq,searchByType:XR,filterByType:jq}});var tA=f((a5,eA)=>{"use strict";var i5=Gt(),tF=wi(),rF=b(),sF=T(),nF=_c();eA.exports=iF;function iF(e,t){if(!rF.isEmpty(t)&&sF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=tF(e,"value");if(s)throw s;let n=!0;return nF.prepSearch(e,t,n)}a(iF,"lmdbGetDataByValue")});var mn=f((_5,rA)=>{"use strict";var c5=Gt(),aF=wi(),oF=b(),cF=T(),_F=_c();rA.exports=uF;async function uF(e,t){if(!oF.isEmpty(t)&&cF.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aF(e,"value");if(s)throw s;return _F.prepSearch(e,t,!1)}a(uF,"lmdbSearchByValue")});var nA=f((E5,sA)=>{"use strict";var l5=Le(),uc=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(uc,"SearchByConditionsObject");var lc=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(lc,"SearchCondition");var Ec=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Ec,"SortAttribute");sA.exports={SearchByConditionsObject:uc,SearchCondition:lc,SortAttribute:Ec}});var _A=f((f5,cA)=>{"use strict";var h5=nA().SearchByConditionsObject,lF=Gt(),EF=wi(),Xl=ws(),dc=Le(),oA=_c(),dF=Ql(),hF=require("lodash"),{getSchemaPath:fF}=j(),iA=z(),{handleHDBError:SF,hdb_errors:TF}=y(),{HTTP_STATUS_CODES:mF}=TF,RF=1e8;cA.exports=AF;async function AF(e){let t=EF(e,"conditions");if(t)throw SF(t,t.message,mF.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=fF(e.schema,e.table),s=await iA.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)iA.openDBI(s,u.search_attribute);let i=hF.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===dc.SEARCH_TYPES.EQUALS?u.estimated_count=Xl.count(s,u.search_attribute,u.search_value):l===dc.SEARCH_TYPES.CONTAINS||l===dc.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=RF}return u.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await aA(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(oA.filterByType),E=l.length,d=Xl.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(h=>u.get(h,{transaction:o,lazy:!0})),E>0&&(_=_.filter(h=>{for(let m=0;m<E;m++)if(!l[m](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=>dF.parseRow(h,d))}else{for(let E=1;E<i.length;E++){let d=i[E],h=await aA(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),_=Xl.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{o.done()},_}a(AF,"lmdbSearchByConditions");async function aA(e,t,r,s){let n=new lF(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===dc.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,oA.searchByType(e,n,i,s).map(o=>o.value)}a(aA,"executeConditionSearch")});var Ci=f((T5,uA)=>{"use strict";var pF=T().OPERATIONS_ENUM,hc=class{constructor(t,r,s,n=void 0){this.operation=pF.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(hc,"DeleteObject");uA.exports=hc});var Zl=f((R5,mA)=>{"use strict";var hA=Gt(),fA=Ci(),SA=mn(),TA=Ni(),We=T(),lA=b(),EA=z(),{getTransactionAuditStorePath:gF,getSchemaPath:OF}=j(),dA=I();mA.exports=NF;async function NF(e){try{if(lA.isEmpty(global.hdb_schema[e.schema])||lA.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await IF(e),await bF(e);let t=OF(e.schema,e.table);try{await EA.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gF(e.schema,e.table);await EA.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")dA.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(NF,"lmdbDropTable");async function IF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await TA(n)}a(IF,"deleteAttributesFromSystem");async function bF(e){let t=new hA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,We.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await SA(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 fA(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await TA(n)}catch(i){throw i}}a(bF,"dropTableFromSystem")});var AA=f((p5,RA)=>{"use strict";var wF=require("fs-extra"),CF=Gt(),yF=Sn(),UF=Ci(),LF=Zl(),MF=Ni(),DF=zl(),PF=mn(),gr=T(),{getSchemaPath:vF}=j(),{handleHDBError:BF,hdb_errors:HF}=y(),{HDB_ERROR_MSGS:qF,HTTP_STATUS_CODES:FF}=HF;RA.exports=GF;async function GF(e){let t;try{t=await xF(e.schema);let r=new CF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await PF(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await LF(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new UF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await MF(n);let i=vF(t);await wF.remove(i)}catch(r){throw r}}a(GF,"lmdbDropSchema");async function xF(e){let t=new yF(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[gr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await DF(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw BF(new Error,qF.SCHEMA_NOT_FOUND(e),FF.NOT_FOUND,void 0,void 0,!0);return s}a(xF,"validateDropSchema")});var jl=f((O5,pA)=>{"use strict";var fc=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(fc,"CreateTableObject");pA.exports=fc});var OA=f((b5,gA)=>{"use strict";var VF=require("fs-extra"),Sc=z(),{getTransactionAuditStorePath:kF}=j(),eE=Le(),I5=jl();gA.exports=$F;async function $F(e){let t;try{let r=kF(e.schema,e.table);await VF.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,eE.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Sc.createDBI(t,eE.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Sc.createDBI(t,eE.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($F,"createTransactionsAuditEnvironment")});var wA=f((C5,bA)=>{"use strict";var tE=T(),NA=z(),YF=nn(),{getSystemSchemaPath:KF,getSchemaPath:WF}=j(),QF=fs(),JF=wo(),rE=bo(),zF=I(),XF=OA(),nE=QF.hdb_table,IA=[];for(let e=0;e<nE.attributes.length;e++)IA.push(nE.attributes[e].attribute);bA.exports=ZF;async function ZF(e,t){let r=WF(t.schema,t.table),s=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new rE(t.schema,t.table,tE.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new rE(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await NA.createEnvironment(r,t.table),e!==void 0){let o=await NA.openEnvironment(KF(),tE.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YF.insertRecords(o,nE.hash_attribute,IA,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await sE(s),await sE(n),await sE(i)}await XF(t)}catch(o){throw o}}a(ZF,"lmdbCreateTable");async function sE(e){try{await JF(e)}catch(t){zF.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(sE,"createAttribute")});var yA=f((U5,CA)=>{"use strict";var jF=Co(),eG=Lo(),tG=zo(),yi=T(),rG=nn().updateRecords,sG=z(),{getSchemaPath:nG}=j(),iG=gi(),aG=I();CA.exports=oG;async function oG(e){try{let{schema_table:t,attributes:r}=jF(e);eG(e,r,t.hash_attribute),e.schema!==yi.SYSTEM_SCHEMA_NAME&&(r.includes(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(yi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await tG(e.hdb_auth_header,t,r),n=nG(e.schema,e.table),i=await sG.openEnvironment(n,e.table),o=await rG(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iG(e,o)}catch(c){aG.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(oG,"lmdbUpdateRecords")});var LA=f((M5,UA)=>{"use strict";var cG=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=cG.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");UA.exports=Tc});var DA=f((v5,MA)=>{"use strict";var P5=LA(),_G=Co(),uG=Lo(),lG=zo(),Ui=T(),EG=nn().upsertRecords,dG=z(),{getSchemaPath:hG}=j(),fG=gi(),SG=I(),{handleHDBError:TG,hdb_errors:mG}=y();MA.exports=RG;async function RG(e){let t;try{t=_G(e)}catch(_){throw TG(_,_.message,mG.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uG(e,s,r.hash_attribute),e.schema!==Ui.SYSTEM_SCHEMA_NAME&&(s.includes(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await lG(e.hdb_auth_header,r,s),i=hG(e.schema,e.table),o=await dG.openEnvironment(i,e.table),c=await EG(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await fG(e,c)}catch(_){SG.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(RG,"lmdbUpsertRecords")});var FA=f((H5,qA)=>{"use strict";var AG=Gt(),PA=b(),vA=I(),pG=mn(),BA=T(),gG=Kl().deleteRecords,OG=z(),{getSchemaPath:NG}=j(),{promisify:IG}=require("util"),bG=IG(setTimeout),HA=1e4,wG=10;qA.exports=CG;async function CG(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(PA.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 AG(e.schema,e.table,BA.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await pG(n,BA.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw vA.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return PA.isEmptyOrZeroLength(s)?(vA.trace("No records found to delete"),{message:"No records found to delete"}):await yG(e,s,t)}a(CG,"lmdbDeleteRecordsBefore");async function yG(e,t,r){let s=NG(e.schema,e.table),n=await OG.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=HA){let _=t.slice(o,o+HA),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await gG(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 bG(wG)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(yG,"chunkDeletes")});var xA=f((F5,GA)=>{"use strict";var mc=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(mc,"DeleteBeforeObject");GA.exports=mc});var kA=f((x5,VA)=>{"use strict";var Rc=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Rc,"DeleteAuditLogsBeforeResults");VA.exports=Rc});var KA=f(($5,YA)=>{"use strict";var iE=z(),{getTransactionAuditStorePath:UG}=j(),k5=xA(),Li=Le(),LG=b(),$A=kA(),MG=require("util").promisify,DG=MG(setTimeout),PG=1e4,vG=100;YA.exports=BG;async function BG(e){let t=UG(e.schema,e.table),r=await iE.openEnvironment(t,e.table,!0),s=iE.listDBIs(r);iE.initializeDBIs(r,Li.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new $A;do n=await HG(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 DG(vG);while(n.transactions_deleted>0);return i}a(BG,"deleteAuditLogsBefore");async function HG(e,t){let r=new $A;try{let s=e.dbis[Li.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[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];LG.isEmpty(c)||(n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Li.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>PG)break}return await n,r}catch(s){throw s}}a(HG,"deleteTransactions")});var QA=f((K5,WA)=>{"use strict";var Ac=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ac,"DropAttributeObject");WA.exports=Ac});var zA=f((J5,JA)=>{"use strict";var qG=Gt(),FG=Ci(),Q5=QA(),tr=T(),GG=b(),aE=z(),xG=fs(),VG=mn(),kG=Ni(),{getSchemaPath:$G}=j();JA.exports=YG;async function YG(e,t=!0){let r;e.schema===tr.SYSTEM_SCHEMA_NAME?r=xG[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await WG(e),n=$G(e.schema,e.table),i=await aE.openEnvironment(n,e.table);return t===!0&&await KG(e,i,r.hash_attribute),aE.dropDBI(i,e.attribute),s}a(YG,"lmdbDropAttribute");async function KG(e,t,r){let s=aE.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(KG,"removeAttributeFromAllObjects");async function WG(e){let t=new qG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await VG(t)).filter(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(GG.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new FG(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return kG(i)}a(WG,"dropAttributeFromSystem")});var rp=f((Z5,tp)=>{"use strict";var oE=z(),Rn=Le(),X5=Ss(),cE=T(),XA=b(),{getTransactionAuditStorePath:QG}=j(),JG=ws(),pc=dn(),zG=I();tp.exports=XG;async function XG(e){let t=QG(e.schema,e.table),r=await oE.openEnvironment(t,e.table,!0),s=oE.listDBIs(r);oE.initializeDBIs(r,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ZA(r,e.search_values);case cE.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 cE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return ZG(r,e.search_values);default:return ZA(r)}}a(XG,"readAuditLog");function ZA(e,t=[0,Date.now()]){XA.isEmpty(t[0])&&(t[0]=0),XA.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Rn.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 pc,n))}a(ZA,"searchTransactionsByTimestamp");function ZG(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[Rn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,ep(e,i))}return Object.fromEntries(r)}a(ZG,"searchTransactionsByUsername");function jG(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=JG.equals(e,Rn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Rn.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=ep(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);jA(_,"records",r,l,o),jA(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(jG,"searchTransactionsByHashValues");function jA(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 pc(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new pc(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(jA,"loopRecords");function ep(e,t){let r=[];try{let s=e.dbis[Rn.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 pc,i);r.push(o)}}catch(i){zG.warn(i)}return r}catch(s){throw s}}a(ep,"batchSearchTransactions")});var np=f((ej,sp)=>{"use strict";var{getSchemaPath:e0}=j(),t0=z();sp.exports={writeTransaction:r0};async function r0(e,t,r){let s=e0(e,t);return(await t0.openEnvironment(s,t)).transaction(r)}a(r0,"writeTransaction")});var cp=f((rj,op)=>{"use strict";var{getSchemaPath:ip}=j(),ap=z();op.exports={flush:s0,resetReadTxn:n0};async function s0(e,t){return(await ap.openEnvironment(ip(e,t),t.toString())).flushed}a(s0,"flush");async function n0(e,t){try{(await ap.openEnvironment(ip(e,t),t.toString())).resetReadTxn()}catch{}}a(n0,"resetReadTxn")});var lp=f((nj,up)=>{"use strict";var i0=I(),{handleHDBError:a0}=y(),o0=zu(),c0=wo(),_0=kl(),u0=gR(),l0=Ni(),E0=zl(),d0=KR(),h0=tA(),f0=mn(),S0=_A(),T0=AA(),m0=wA(),R0=yA(),A0=DA(),p0=FA(),g0=KA(),O0=Zl(),N0=zA(),I0=rp(),b0=np(),_p=cp(),gc=class extends o0{async searchByConditions(t){return S0(t)}async getDataByHash(t){return await E0(t)}async searchByHash(t){return await d0(t)}async getDataByValue(t,r){return await h0(t,r)}async searchByValue(t){return await f0(t)}async createSchema(t){return await u0(t)}async dropSchema(t){return await T0(t)}async createTable(t,r){return await m0(t,r)}async dropTable(t){return await O0(t)}async createAttribute(t){return await c0(t)}async createRecords(t){return await _0(t)}async updateRecords(t){return await R0(t)}async upsertRecords(t){try{return await A0(t)}catch(r){throw a0(r,null,null,i0.ERR,r)}}async deleteRecords(t){return await l0(t)}async deleteRecordsBefore(t){return await p0(t)}async dropAttribute(t){return await N0(t)}async deleteAuditLogsBefore(t){return await g0(t)}async readAuditLog(t){return await I0(t)}writeTransaction(t,r,s){return b0.writeTransaction(t,r,s)}flush(t,r){return _p.flush(t,r)}resetReadTxn(t,r){return _p.resetReadTxn(t,r)}};a(gc,"LMDBBridge");up.exports=gc});var Xt=f((aj,dp)=>{"use strict";var w0=lp(),C0=zu(),y0=U();y0.initSync();var Ep;function U0(){return Ep instanceof C0?Ep:new w0}a(U0,"getBridge");dp.exports=U0()});var Tp=f((cj,Sp)=>{"use strict";var hp=require("lodash"),Mi=require("mathjs"),L0=require("jsonata"),fp=b();Sp.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hp.uniqWith(e,hp.isEqual):e,searchJSON:M0,mad:Di.bind(null,Mi.mad),mean:Di.bind(null,Mi.mean),mode:Di.bind(null,Mi.mode),prod:Di.bind(null,Mi.prod),median:Di.bind(null,Mi.median)};function Di(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(Di,"aggregateFunction");function M0(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(fp.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fp.isEmpty(this.__ala__.res[r])){let s=L0(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(M0,"searchJSON")});var Rp=f((uj,mp)=>{"use strict";var Ee=require("moment"),_E="YYYY-MM-DDTHH:mm:ss.SSSZZ";Ee.suppressDeprecationWarnings=!0;mp.exports={current_date:()=>Ee().utc().format("YYYY-MM-DD"),current_time:()=>Ee().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Ee(e).utc().format("YYYY");case"month":return Ee(e).utc().format("MM");case"day":return Ee(e).utc().format("DD");case"hour":return Ee(e).utc().format("HH");case"minute":return Ee(e).utc().format("mm");case"second":return Ee(e).utc().format("ss");case"millisecond":return Ee(e).utc().format("SSS");default:break}},date:e=>Ee(e).utc().format(_E),date_format:(e,t)=>Ee(e).utc().format(t),date_add:(e,t,r)=>Ee(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Ee(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Ee(e).utc(),n=Ee(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Ee().utc().valueOf(),get_server_time:()=>Ee().format(_E),offset_utc:(e,t)=>Ee(e).utc().utcOffset(t).format(_E)}});var Op=f((lj,gp)=>{"use strict";var D0=require("@turf/area"),P0=require("@turf/length"),v0=require("@turf/circle"),B0=require("@turf/difference"),H0=require("@turf/distance"),q0=require("@turf/boolean-contains"),F0=require("@turf/boolean-equal"),G0=require("@turf/boolean-disjoint"),x0=require("@turf/helpers"),Ap=T(),F=b();gp.exports={geoArea:V0,geoLength:k0,geoCircle:$0,geoDifference:Y0,geoDistance:pp,geoNear:K0,geoContains:W0,geoEqual:Q0,geoCrosses:J0,geoConvert:z0};var uE="geo1 is required",lE="geo2 is required";function V0(e){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),D0.default(e)}a(V0,"geoArea");function k0(e,t){if(F.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),P0.default(e,{units:t||"kilometers"})}a(k0,"geoLength");function $0(e,t,r){if(F.isEmpty(e))throw new Error("point is required");if(F.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),v0.default(e,t,{units:r||"kilometers"})}a($0,"geoCircle");function Y0(e,t){if(F.isEmpty(e))throw new Error("poly1 is required");if(F.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),B0(e,t)}a(Y0,"geoDifference");function pp(e,t,r){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),H0.default(e,t,{units:r||"kilometers"})}a(pp,"geoDistance");function K0(e,t,r,s){if(F.isEmpty(e))throw new Error("point1 is required");if(F.isEmpty(t))throw new Error("point2 is required");if(F.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return pp(e,t,s)<=r}a(K0,"geoNear");function W0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),q0.default(e,t)}a(W0,"geoContains");function Q0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),F0.default(e,t)}a(Q0,"geoEqual");function J0(e,t){if(F.isEmpty(e))throw new Error(uE);if(F.isEmpty(e))throw new Error(lE);return typeof e=="string"&&(e=F.autoCastJSON(e)),typeof t=="string"&&(t=F.autoCastJSON(t)),!G0.default(e,t)}a(J0,"geoCrosses");function z0(e,t,r){if(F.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(F.isEmpty(t))throw new Error("geo_type is required");if(F.isEmpty(Ap.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ap.GEO_CONVERSION_ENUM).join(",")}`);return x0[t](e,r)}a(z0,"geoConvert")});var Oc=f((dj,Np)=>{var ys=Tp(),dt=Rp(),rr=Op();Np.exports=e=>{e.aggr.mad=e.aggr.MAD=ys.mad,e.aggr.mean=e.aggr.MEAN=ys.mean,e.aggr.mode=e.aggr.MODE=ys.mode,e.aggr.prod=e.aggr.PROD=ys.prod,e.aggr.median=e.aggr.MEDIAN=ys.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ys.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ys.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=dt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=dt.current_time,e.fn.extract=e.fn.EXTRACT=dt.extract,e.fn.date=e.fn.DATE=dt.date,e.fn.date_format=e.fn.DATE_FORMAT=dt.date_format,e.fn.date_add=e.fn.DATE_ADD=dt.date_add,e.fn.date_sub=e.fn.DATE_SUB=dt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=dt.date_diff,e.fn.now=e.fn.NOW=dt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=dt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=dt.get_server_time,e.fn.getdate=e.fn.GETDATE=dt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=dt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=rr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=rr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=rr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=rr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=rr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=rr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=rr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=rr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=rr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=rr.geoNear}});var wp=f((hj,bp)=>{"use strict";var Pi=require("lodash"),be=require("alasql");be.options.cache=!1;var X0=Oc(),Ip=require("clone"),Nc=require("recursive-iterator"),P=I(),B=b(),An=Xt(),Z0=T(),{hdb_errors:j0}=y(),ex="IS NULL",xt="There was a problem performing this search. Please check the logs and try again.";X0(be);var Ic=class{constructor(t,r){if(B.isEmpty(t))throw P.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 P.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw P.error("Error thrown from checkEmptySQL in SQLSearch class method search."),P.error(s),new Error(xt)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw P.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),P.error(s),new Error(xt)}if(Object.keys(this.data).length===0)return P.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw P.error("Error thrown from processJoins in SQLSearch class method search."),P.error(s),new Error(xt)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw P.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),P.error(s),new Error(xt)}try{return t=await this._finalSQL(),t}catch(s){throw P.error("Error thrown from finalSQL in SQLSearch class method search."),P.error(s),new Error(xt)}}_getColumns(){let t=new Nc(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(Ip(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Pi.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)){P.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Nc(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 be.yy.LogicValue({value:s}):r.right instanceof be.yy.StringValue&&!B.isEmpty(s)&&B.autoCasterIsNumberCheck(s.toString())&&(r.right=new be.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 be.yy.LogicValue({value:i}):s instanceof be.yy.StringValue&&B.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new be.yy.NumValue({value:i}))});if(t){P.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Nc(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(Z0.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&&Pi.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 be.promise(r)}catch(r){throw P.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),P.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(Ip(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(ex)>-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=Pi.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 An.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 P.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}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 An.getDataByValue(E);for(let[h,m]of d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,B.autoCast(h)))}))}catch(l){throw P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),P.error(l),new Error(xt)}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 m=await An.getDataByValue(c,h.operation);if(_)for(let[R]of m)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 m)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 P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),P.error(l),new Error(xt)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await An.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 P.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),P.error(l),new Error(xt)}}}_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 be.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 be.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new be.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 be.yy.FuncValue:new be.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 m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),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 m=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}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),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}`,m=this._convertColumnsToIndexes(h,n);d=await be.promise(m,t),t=null}catch(h){throw P.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),P.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;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 m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Pi.difference(m,[...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 Nc(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=Pi.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 P.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),P.error(i),new Error(xt)}}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 An.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 m=0;m<u;m++){let R=n.columns[m],g=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(g)}}}}catch(r){throw P.error("Error thrown from getDataByHash function in SQLSearch class method getData."),P.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();P.trace(`Final SQL: ${n}`),s=await be.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),P.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw P.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),P.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 P.error(j0.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),P.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 An.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 P.error("There was an error when processing this SQL operation. Check your logs"),P.error(o),new Error(xt)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Ic,"SQLSearch");bp.exports=Ic});var bt=f((Sj,yp)=>{"use strict";var tx=US();yp.exports={searchByConditions:ix,searchByHash:ax,searchByValue:ox,search:cx};var EE=Xt(),Cp=require("util"),rx=Cp.callbackify(EE.searchByHash),sx=Cp.callbackify(EE.searchByValue),nx=wp();async function ix(e){return EE.searchByConditions(e)}a(ix,"searchByConditions");function ax(e,t){try{rx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ax,"searchByHash");function ox(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sx(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(ox,"searchByValue");function cx(e,t){try{let r=new tx(e);r.validate(),new nx(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(cx,"search")});var Ns=f((mj,Hp)=>{"use strict";var Lp=bt(),Jr=I(),Mp=Oo(),_x=require("lodash"),ux=Yr(),Dp=b(),{promisify:Pp}=require("util"),Z=T(),{handleHDBError:bc,hdb_errors:lx}=y(),{HDB_ERROR_MSGS:wc,HTTP_STATUS_CODES:vp}=lx,Ex=U();Ex.initSync();var Up=z(),dx=ws(),{getSchemaPath:hx}=j(),vi=Pp(Lp.searchByValue),fx=Pp(Lp.searchByHash),pn="name",Bp="hash_attribute",dE="schema",Sx="schema_table",Tx="attribute";Hp.exports={describeAll:mx,describeTable:Cc,describeSchema:Ax};async function mx(e){try{let t=Dp.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:pn,search_value:Z.WILDCARD_SEARCH_VALUE,get_attributes:[pn]},i=await vi(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:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},u=await vi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Cc({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Cc({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Jr.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 Jr.error("Got an error in describeAll"),Jr.error(t),bc(new Error,wc.DESCRIBE_ALL_ERR)}}a(mx,"describeAll");async function Cc(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=Mp.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:pn,search_value:s,hash_values:[],get_attributes:[Z.WILDCARD_SEARCH_VALUE]},_=Array.from(await vi(c));if(!_||_.length===0)throw bc(new Error,wc.TABLE_NOT_FOUND(e.schema,e.table),vp.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw bc(new Error,wc.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:Sx,search_value:r+"."+s,get_attributes:[Tx]},E=Array.from(await vi(l));E=_x.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Rx(n)),i.attributes=E,i.clustering_stream_name=ux.createNatsTableStreamName(u.schema,u.name);try{let d=hx(i.schema,i.name),h=await Up.openEnvironment(d,i.name),m=Up.statDBI(h,i.hash_attribute);i.record_count=m.entryCount;for(let{key:R}of dx.lessThan(h,i.hash_attribute,Z.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=R}catch(d){Jr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Jr.error(`There was an error getting attributes for table '${u.name}'`),Jr.error(l)}return i}a(Cc,"descTable");function Rx(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Rx,"getAttrsByPerms");async function Ax(e){let t=Mp.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:dE,search_value:s,hash_values:[],get_attributes:[Bp,Z.ID_ATTRIBUTE_STRING,pn,dE]},i=Array.from(await vi(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:[pn]},c=Array.from(await fx(o));if(c&&c.length<1)throw bc(new Error,wc.SCHEMA_NOT_FOUND(e.schema),vp.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]),Dp.isEmpty(_)||_.describe){let u=await Cc({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Jr.error(`Error describing schema table '${e.schema}.${c}'`),Jr.error(_)}})),o}}a(Ax,"describeSchema")});var Ar=f((Aj,Vp)=>{var gn=fs(),{callbackify:Gp,promisify:px}=require("util");Vp.exports={setSchemaDataToGlobal:qp,getTableSchema:Nx,getSystemSchema:bx,setSchemaDataToGlobalAsync:px(qp)};var xp=Ns(),gx=Gp(xp.describeAll),Ox=Gp(xp.describeTable);function qp(e){gx(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gn),global.hdb_schema=r,e(null,null)})}a(qp,"setSchemaDataToGlobal");function Fp(e,t){return e==="system"?gn[t]:global.hdb_schema[e][t]}a(Fp,"returnSchema");function Nx(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?Ix(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,Fp(e,t))}):r(null,Fp(e,t))}a(Nx,"getTableSchema");function Ix(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gn:global.hdb_schema={system:gn},r();return}Ox(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(Ix,"setTableDataToGlobal");function bx(){return gn}a(bx,"getSystemSchema")});var yc=f((gj,kp)=>{"use strict";var wx=Xt();kp.exports={writeTransaction:Cx};function Cx(e,t,r){return wx.writeTransaction(e,t,r)}a(Cx,"writeTransaction")});var He=f((Mj,og)=>{"use strict";var ge=U();ge.initSync();var yx=require("fs-extra"),Ux=require("semver"),Gi=require("path"),{monotonicFactory:Lx}=require("ulidx"),mE=Lx(),Mx=require("util"),Yp=require("child_process"),Dx=Mx.promisify(Yp.exec),Px=Yp.spawn,V=le(),Q=T(),Uc=b(),zr=I(),Lc=Yr(),vx=yc(),Bi=fr(),{encode:SE,decode:RE}=require("msgpackr"),{isEmpty:Us}=Uc,Kp=er(),Wp=12e10,{connect:Bx,StorageType:Qp,RetentionPolicy:Jp,AckPolicy:AE,DeliverPolicy:xi,DiscardPolicy:Hx,NatsConnection:Nj,JetStreamManager:Ij,JetStreamClient:bj,StringCodec:wj,JSONCodec:qx,createInbox:pE,StreamSource:Cj,headers:Fx,toJsMsg:zp,nuid:yj,JetStreamOptions:Uj,ErrorCode:$p,nanos:Lj}=require("nats"),{PACKAGE_ROOT:Gx}=T(),xx=ei(),Xp=qx(),Vx="clustering",kx=xx.engines[V.NATS_SERVER_NAME],$x=Gi.join(Gx,"dependencies"),TE=Gi.join($x,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),hE,fE,Hi,qi,Fi,Vt;og.exports={runCommand:Zp,checkNATSServerInstalled:Yx,createConnection:gE,getConnection:Mc,getJetStreamManager:Vi,getJetStream:jp,getNATSReferences:ht,getServerList:Wx,createLocalStream:OE,listStreams:eg,deleteLocalStream:Qx,getServerConfig:ki,listRemoteStreams:Jx,viewStream:zx,viewStreamIterator:Xx,publishToStream:Zx,createWorkQueueStream:jx,addSourceToWorkStream:rg,request:eV,removeSourceFromWorkStream:ng,reloadNATS:NE,reloadNATSHub:tV,reloadNATSLeaf:rV,extractServerName:sg,requestErrorHandler:sV,updateWorkStream:nV,createLocalTableStream:ig,createTableStreams:iV,purgeTableStream:ag,purgeSchemaTableStreams:aV,getStreamInfo:oV,updateLocalStreams:_V,closeConnection:Kx,getJsmServerName:$i,addNatsMsgHeader:tg};async function Zp(e,t=void 0){let{stdout:r,stderr:s}=await Dx(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(Xp,"runCommand");async function Vx(){try{await bx.access(TE)}catch{return!1}let e=await Xp(`${TE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return wx.eq(t,Gx)}a(Vx,"checkNATSServerInstalled");async function gE(e,t,r,s=!0,n="127.0.0.1"){return Dx({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(gE,"createConnection");async function kx(){Vt&&(await Vt.drain(),Vt=void 0)}a(kx,"closeConnection");async function Mc(){if(!Vt){let e=await Yp.getClusterUser();if(ys(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Vt=await gE(t,e.username,e.decrypt_hash)}return Vt}a(Mc,"getConnection");async function Vi(){if(qi)return qi;ys(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ys(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qi=await Vt.jetstreamManager({domain:e}),qi}a(Vi,"getJetStreamManager");async function Zp(){if(Fi)return Fi;ys(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ys(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Fi=Vt.jetstream({domain:e}),Fi}a(Zp,"getJetStream");async function ht(){let e=Vt||await Mc(),t=qi||await Vi(),r=Fi||await Zp();return{connection:e,jsm:t,js:r}}a(ht,"getNATSReferences");async function $x(e){let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Yp.getClusterUser(),n=await gE(t,r,s),i=pE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=zp.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 Uc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a($x,"getServerList");async function OE(e,t){let{jsm:r}=await ht(),s=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Wp.File,retention:Qp.Limits,subjects:t,discard:Px.Old,duplicate_window:Kp,max_msgs:n,max_bytes:i,max_age:s})}a(OE,"createLocalStream");async function jp(){let{jsm:e}=await ht(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(jp,"listStreams");async function Yx(e){let{jsm:t}=await ht();await t.streams.delete(e)}a(Yx,"deleteLocalStream");async function Kx(e){let{connection:t}=await ht(),r=[],s=pE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(zp.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(Kx,"listRemoteStreams");async function Wx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o=[],c={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(c.deliver_policy=xi.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=Jp(l),d=RE(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(Wx,"viewStream");async function*Qx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(o.deliver_policy=xi.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=Jp(u),E=RE(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(Qx,"viewStreamIterator");async function Jx(e,t,r,s){zr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ge.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=eg(s,r);let{js:i}=await ht(),o=await $i(),c=`${e}.${o}`;try{zr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,SE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")zr.trace(`publishToStream creating stream: ${t}`),await OE(t,[c]),n&&await i.publish(c,SE(s),{headers:r});else throw _}}a(Jx,"publishToStream");function eg(e,t){t===void 0&&(t=Bx());let r=ge.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Uc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${mE()}`;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(eg,"addNatsMsgHeader");function ki(e){e=e.toLowerCase();let t=Gi.join(ge.get(Q.CONFIG_PARAMS.ROOTPATH),Fx);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ys(fE)&&(fE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),fE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ys(hE)&&(hE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Gi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),hE;zr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ki,"getServerConfig");async function zx(e){let{jsm:t}=await ht(),r=await $i();try{await t.streams.add({name:e.stream_name,storage:Wp.File,retention:Qp.Workqueue,duplicate_window:Kp,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:AE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:xi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(zx,"createWorkQueueStream");async function tg(e,t,r){let{jsm:s}=await ht(),n=await s.streams.info(t),i=rg(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Lc.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 m={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(tg,"addSourceToWorkStream");function rg(e){return e.split(".")[1]}a(rg,"extractServerName");async function sg(e,t,r){let{schema:s,table:n}=r,i=Lc.createNatsTableStreamName(s,n),{jsm:o}=await ht(),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(sg,"removeSourceFromWorkStream");async function Xx(e,t,r=2e3,s=pE()){if(!Uc.isObject(t))throw new Error("data param must be an object");let n=SE(t),{connection:i}=await ht(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return RE(c.data)}a(Xx,"request");function NE(e){return new Promise(async(t,r)=>{let s=Lx(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(NE,"reloadNATS");async function Zx(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await NE(e)}a(Zx,"reloadNATSHub");async function jx(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await NE(e)}a(jx,"reloadNATSLeaf");function eV(e,t,r){let s;switch(e.code){case kp.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case kp.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(eV,"requestErrorHandler");async function tV(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await Mx.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await tg(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await sg(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(tV,"updateWorkStream");async function ng(e,t){let r=Lc.createNatsTableStreamName(e,t),s=await $i(),n=iV(e,t,s);await OE(r,[n])}a(ng,"createLocalTableStream");async function rV(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await ng(s,n)}}a(rV,"createTableStreams");async function ig(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Lc.createNatsTableStreamName(e,t),{jsm:s}=await ht();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")zr.warn(r);else throw r}}a(ig,"purgeTableStream");async function sV(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await ig(e,t[r])}a(sV,"purgeSchemaTableStreams");async function nV(e){return(await Vi()).streams.info(e)}a(nV,"getStreamInfo");function iV(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(iV,"createSubjectName");async function $i(){if(Hi)return Hi;if(Hi=(await Vi())?.nc?.info?.server_name,Hi===void 0)throw new Error("Unable to get jetstream manager server name");return Hi}a($i,"getJsmServerName");async function aV(){let e=await Vi(),t=await $i(),r=await jp();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=oV(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}`;zr.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}`;zr.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(".");zr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(aV,"updateLocalStreams");function oV(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=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ge.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(oV,"updateStreamLimits")});var IE=f((Lj,og)=>{"use strict";var Dc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Dc,"ClusteringOriginObject");og.exports=Dc});var Yi=f((Dj,cg)=>{"use strict";var cV=b(),bE=U(),Xr=T(),_V=le(),uV=He(),sr=I(),lV=IE(),EV=Yr();bE.initSync();cg.exports={postOperationHandler:hV};async function Pc(e,t,r,s){if(e.schema===Xr.SYSTEM_SCHEMA_NAME)return;let n=dV(e,t,r);n&&(sr.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await uV.publishToStream(`${_V.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,EV.createNatsTableStreamName(e.schema,e.table),s,n))}a(Pc,"sendOperationTransaction");function dV(e,t,r){if(cV.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Xr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(dV,"convertCRUDOperationToTransaction");async function hV(e,t,r){if(!bE.get(Xr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;sr.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=bE.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new lV(t.txn_time,s,n);switch(e.operation){case Xr.OPERATIONS_ENUM.INSERT:try{await Pc(e,t.inserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for insert."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.DELETE:try{await Pc(e,t.deleted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for delete."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPDATE:try{await Pc(e,t.update_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for update."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPSERT:try{await Pc(e,t.upserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for upsert."),sr.error(o)}break;default:break}return t}a(hV,"postOperationHandler")});var dg=f((vj,Eg)=>{"use strict";var fV=bt(),SV=Ar(),_g=I(),ug=It(),TV=yc(),mV=require("clone"),CE=require("alasql"),RV=Oc(),lg=require("util"),AV=lg.promisify(SV.getTableSchema),pV=lg.promisify(fV.search),gV=T(),wE=b(),OV=Yi();RV(CE);Eg.exports={update:IV};var NV="There was a problem performing this update. Please check the logs and try again.";async function IV({statement:e,hdb_user:t}){let r=await AV(e.table.databaseid,e.table.tableid),s=bV(e.columns);wE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=mV(n),c=wE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=CE.parse(_).statements[0],l=await TV.writeTransaction(r.schema,r.name,async()=>{let E=await pV(u),d=wV(s,E);return CV(o,d,t)});return await ug.flush({schema:r.schema,table:r.name}),l}a(IV,"update");function bV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=CE.compile(`SELECT ${r.expression.toString()} AS [${gV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw _g.error(t),new Error(NV)}}a(bV,"createUpdateRecord");function wV(e,t){return wE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(wV,"buildUpdateRecords");async function CV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await ug.update(s);await OV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){_g.error(`Error delete new_attributes from update response: ${i}`)}return n}a(CV,"updateRecords")});var fg=f((Hj,hg)=>{var yV=require("alasql"),UV=bt(),LV=I(),MV=Xt(),UE=require("util"),yE=b(),DV=T(),PV=Ar(),vV=yc(),BV=Yi(),HV=It(),qV="record",FV="successfully deleted",GV=UE.callbackify($V),xV=UE.promisify(UV.search),VV=UE.promisify(PV.getTableSchema);hg.exports={convertDelete:GV};function kV(e){return`${e.deleted_hashes.length} ${qV}${e.deleted_hashes.length===1?"":"s"} ${FV}`}a(kV,"generateReturnMessage");async function $V({statement:e,hdb_user:t}){let r=await VV(e.table.databaseid,e.table.tableid);yE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=yE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=yV.parse(o).statements[0],_={operation:DV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await vV.writeTransaction(r.schema,r.name,async()=>(_.records=await xV(c),MV.deleteRecords(_)));return await HV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await BV.postOperationHandler(_,u),yE.isEmptyOrZeroLength(u.message)&&(u.message=kV(u)),delete u.txn_time,u}catch(u){throw LV.error(u),u.hdb_code?u.message:u}}a($V,"convertDelete")});var mg=f((Fj,Tg)=>{"use strict";var ME=Os(),{hdb_errors:LE}=y();Tg.exports={checkSchemaExists:Sg,checkSchemaTableExists:YV,schema_describe:ME};async function Sg(e){if(!global.hdb_schema[e])try{let t=await ME.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return LE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Sg,"checkSchemaExists");async function YV(e,t){let r=await Sg(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await ME.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(YV,"checkSchemaTableExists")});var Bc=f((Vj,gg)=>{"use strict";var On=Oo(),Us=mg(),KV=I(),WV=require("uuid").v4,xj=require("clone"),Nn=ln(),Ls=T(),QV=require("util"),Ms=Xt(),{handleHDBError:Qe,hdb_errors:JV}=y(),{HDB_ERROR_MSGS:vc,HTTP_STATUS_CODES:Je}=JV,{SchemaEventMsg:In}=Kr(),Rg=He();gg.exports={createSchema:zV,createSchemaStructure:Ag,createTable:XV,createTableStructure:pg,createAttribute:rk,dropSchema:ZV,dropTable:jV,dropAttribute:ek};async function zV(e){try{let t=await Ag(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(zV,"createSchema");async function Ag(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);if(!await Us.checkSchemaExists(e.schema))throw Qe(new Error,vc.SCHEMA_EXISTS_ERR(e.schema),Je.BAD_REQUEST,Ls.LOG_LEVELS.ERROR,vc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ms.createSchema(e),`schema '${e.schema}' successfully created`}a(Ag,"createSchemaStructure");async function XV(e){let t=await pg(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),t}a(XV,"createTable");async function pg(e){let t=On.create_table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);On.validateTableResidence(e.residence);let r=await Us.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ls.LOG_LEVELS.ERROR,r,!0);if(!await Us.checkSchemaTableExists(e.schema,e.table))throw Qe(new Error,vc.TABLE_EXISTS_ERR(e.schema,e.table),Je.BAD_REQUEST,Ls.LOG_LEVELS.ERROR,vc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:WV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ms.createTable(n,e);else throw Qe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Je.BAD_REQUEST);else await Ms.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(pg,"createTableStructure");async function ZV(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Us.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ls.LOG_LEVELS.ERROR,r,!0);let s=await Us.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ms.dropSchema(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Rg.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(ZV,"dropSchema");async function jV(e){let t=On.table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Us.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ls.LOG_LEVELS.ERROR,r,!0);return await Ms.dropTable(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),await Rg.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(jV,"dropTable");async function ek(e){let t=On.attribute_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Us.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ls.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qe(new Error,"You cannot drop a hash attribute",Je.BAD_REQUEST,void 0,void 0,!0);if(Ls.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Je.BAD_REQUEST,void 0,void 0,!0);try{return await Ms.dropAttribute(e),tk(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw KV.error(`Got an error deleting attribute ${QV.inspect(e)}.`),s}}a(ek,"dropAttribute");function tk(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(tk,"dropAttributeFromGlobal");async function rk(e){return await Ms.createAttribute(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(rk,"createAttribute")});var Ng=f(($j,Og)=>{"use strict";var{OPERATIONS_ENUM:sk}=T(),Hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=sk.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Hc,"ReadAuditLogObject");Og.exports=Hc});var DE=f((Wj,yg)=>{"use strict";var nk=Xt(),Kj=Ng(),qc=b(),Fc=T(),ik=U(),{handleHDBError:Ig,hdb_errors:ak}=y(),{HDB_ERROR_MSGS:bg,HTTP_STATUS_CODES:wg}=ak,ok=Object.values(Fc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Cg="To use this operation audit log must be enabled in harperdb-config.yaml";yg.exports=ck;async function ck(e){if(qc.isEmpty(e.schema))throw new Error(bg.SCHEMA_REQUIRED_ERR);if(qc.isEmpty(e.table))throw new Error(bg.TABLE_REQUIRED_ERR);if(!ik.get(Fc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Ig(new Error,Cg,wg.BAD_REQUEST,Fc.LOG_LEVELS.ERROR,Cg,!0);let t=qc.checkSchemaTableExist(e.schema,e.table);if(t)throw Ig(new Error,t,wg.NOT_FOUND,Fc.LOG_LEVELS.ERROR,t,!0);if(!qc.isEmpty(e.search_type)&&ok.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await nk.readAuditLog(e)}a(ck,"readAuditLog")});var vg=f((Jj,Pg)=>{var Zr=require("validate.js"),Lg=re(),bn=T(),{handleHDBError:_k,hdb_errors:uk}=y(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:lk}=uk,PE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Ek={STRUCTURE_USER:"structure_user"},Ug=Object.values(bn.ROLE_TYPES_ENUM),dk="attribute_permissions",hk="attribute_name",{PERMS_CRUD_ENUM:wn}=bn,fk=[dk,...Object.values(wn)],Mg=[wn.READ,wn.INSERT,wn.UPDATE],Sk=[hk,...Mg];function Tk(e){let t=PE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Dg(e,t)}a(Tk,"addRoleValidation");function mk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Dg(e,t)}a(mk,"alterRoleValidation");function Rk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Lg.validateObject(e,t)}a(Rk,"dropRoleValidation");var Ak=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Dg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Ak.includes(s[o])||n.push(s[o]);n.length>0&&de(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=Lg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{de(o,r)}),e.permission){let o=pk(e);o&&de(o,r),Ug.forEach(c=>{e.permission[c]&&!Zr.isBoolean(e.permission[c])&&de(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Ug.indexOf(o)<0){if(o===Ek.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]||de(_e.SCHEMA_NOT_FOUND(E),r)}continue}de(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){de(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){de(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{fk.includes(l)||de(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(wn).forEach(l=>{Zr.isDefined(u[l])?Zr.isBoolean(u[l])||de(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):de(_e.TABLE_PERM_MISSING(l),r,o,_)}),Zr.isDefined(u.attribute_permissions)){if(!Zr.isArray(u.attribute_permissions)){de(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{de(_e.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=>{!Sk.includes(R)&&R!==wn.DELETE&&de(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Zr.isDefined(h.attribute_name)){de(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){de(_e.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}Mg.forEach(R=>{Zr.isDefined(h[R])?Zr.isBoolean(h[R])||de(_e.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):de(_e.ATTR_PERM_MISSING(R,m),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}.${_}`;de(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return gk(r)}a(Dg,"customValidate");Pg.exports={addRoleValidation:Tk,alterRoleValidation:mk,dropRoleValidation:Rk};function pk(e){let{operation:t,permission:r}=e;if(t===bn.OPERATIONS_ENUM.ADD_ROLE||t===bn.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 _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?bn.ROLE_TYPES_ENUM.SUPER_USER:bn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(pk,"validateNoSUPerms");function gk(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return _k(new Error,s,lk.BAD_REQUEST)}else return null}a(gk,"generateRolePermResponse");function de(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(de,"addPermError")});var VE=f((Xj,xg)=>{"use strict";var Bg=It(),Hg=bt(),Ok=ps(),HE=vg(),qE=ln(),Nk=require("uuid").v4,FE=require("util"),Ik=Ts(),Or=T(),qg=b(),GE=FE.promisify(Hg.searchByValue),bk=FE.promisify(Hg.searchByHash),wk=FE.promisify(Ok.delete),Ck=Gt(),yk=Sn(),{hdb_errors:Uk,handleHDBError:Ki}=y(),{HDB_ERROR_MSGS:Fg,HTTP_STATUS_CODES:vE}=Uk,{UserEventMsg:xE}=Kr();xg.exports={addRole:Lk,alterRole:Dk,dropRole:Pk,listRoles:Gg};function BE(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(BE,"scrubRoleDetails");async function Lk(e){let t=HE.addRoleValidation(e);if(t)throw t;if(!(await Ik.getLicense()).enterprise){let o=await Gg();if(Mk(e,o))throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Or.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_NON_CU_ROLES+Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Or.SUPPORT_HELP_MSG}`)}e=BE(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 GE(s)||[])}catch(o){throw Ki(o)}if(n&&n.length>0)throw Ki(new Error,Fg.ROLE_ALREADY_EXISTS(e.role),vE.CONFLICT,void 0,void 0,!0);e.id||(e.id=Nk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Bg.insert(i),qE.signalUserChange(new xE(process.pid)),e=BE(e),e}a(Lk,"addRole");function Mk(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(!qg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(Mk,"checkClusterUserRole");async function Dk(e){let t=HE.alterRoleValidation(e);if(t)throw t;e=BE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Bg.update(r)}catch(s){throw Ki(s)}return qE.signalUserChange(new xE(process.pid)),e}a(Dk,"alterRole");async function Pk(e){let t=HE.dropRoleValidation(e);if(t)throw Ki(new Error,t,vE.BAD_REQUEST,void 0,void 0,!0);let r=new yk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await bk(r));if(s.length===0)throw Ki(new Error,Fg.ROLE_NOT_FOUND,vE.NOT_FOUND,void 0,void 0,!0);let n=new Ck(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await GE(n)),o=!1;if(qg.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 wk(c),qE.signalUserChange(new xE(process.pid)),`${s[0].role} successfully deleted`}a(Pk,"dropRole");async function Gg(){return GE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Gg,"listRoles")});var Yg=f((jj,$g)=>{"use strict";var vk=U(),jr=require("joi"),Bk=re(),Vg=require("moment"),Hk=require("fs-extra"),kE=require("path"),qk=require("lodash"),Wi=T(),{LOG_LEVELS:Ds}=T(),Fk="YYYY-MM-DD hh:mm:ss",Gk=kE.resolve(__dirname,"../logs");$g.exports=function(e){return Bk.validateBySchema(e,xk)};var xk=jr.object({from:jr.custom(kg),until:jr.custom(kg),level:jr.valid(Ds.NOTIFY,Ds.FATAL,Ds.ERROR,Ds.WARN,Ds.INFO,Ds.DEBUG,Ds.TRACE),order:jr.valid("asc","desc"),limit:jr.number().min(1),start:jr.number().min(0),log_name:jr.custom(Vk)});function kg(e,t){if(Vg(e,Vg.ISO_8601).format(Fk)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(kg,"validateDatetime");function Vk(e,t){if(qk.invert(Wi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=vk.get(Wi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Wi.LOG_NAMES.HDB:e,i=n===Wi.LOG_NAMES.INSTALL?kE.join(Gk,Wi.LOG_NAMES.INSTALL):kE.join(s,n);return Hk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Vk,"validateReadLogPath")});var YE=f((t8,Kg)=>{"use strict";var Gc=T(),kk=I(),$k=U(),Yk=Yg(),$E=require("path"),Kk=require("fs-extra"),{once:Wk}=require("events"),{handleHDBError:Qk,hdb_errors:Jk}=y(),{PACKAGE_ROOT:zk}=T(),Xk=$E.join(zk,"logs"),Zk=1e3;Kg.exports=jk;async function jk(e){let t=Yk(e);if(t)throw Qk(t,t.message,Jk.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=$k.get(Gc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Gc.LOG_NAMES.HDB:e.log_name,n=s===Gc.LOG_NAMES.INSTALL?$E.join(Xk,Gc.LOG_NAMES.INSTALL):$E.join(r,s),i=Kk.createReadStream(n);i.on("error",M=>{kk.error(M)});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?Zk:e.limit,h=e.order===void 0?void 0:e.order,m=e.start===void 0?0:e.start,R=m+d,g=0,H=[],x="",q;i.on("data",M=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;M=x+M;let ue=0,oe;for(;(oe=$.exec(M))&&!i.destroyed;){q&&(q.message=M.slice(ue,oe.index),Ue(q));let[kn,us,Mr]=oe,va=Mr.split("] ["),RC=va[0],AC=va[1];va.splice(0,2),q={timestamp:us,thread:RC,level:AC,tags:va,message:""},ue=oe.index+kn.length}x=M.slice(ue)}),i.on("end",M=>{i.destroyed||q&&(q.message=x.trim(),Ue(q))}),i.resume();function Ue(M){let $,ue,oe;switch(!0){case(o&&_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),M.level===c&&$>=ue&&$<=oe&&g<m?g++:M.level===c&&$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(M.timestamp),ue=new Date(u),M.level===c&&$>=ue&&g<m?g++:M.level===c&&$>=ue&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(M.timestamp),oe=new Date(E),M.level===c&&$<=oe&&g<m?g++:M.level===c&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),$>=ue&&$<=oe&&g<m?g++:$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case o:M.level===c&&g<m?g++:M.level===c&&(es(M,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(M.timestamp),ue=new Date(u),$>=ue&&g<m?g++:$>=ue&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(M.timestamp),oe=new Date(E),$<=oe&&g<m?g++:$<=oe&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;default:g<m?g++:(es(M,h,H),g++,g===R&&i.destroy())}}return a(Ue,"onLogMessage"),await Wk(i,"close"),H}a(jk,"readLog");function es(e,t,r){t==="desc"?e$(e,r):t==="asc"?t$(e,r):r.push(e)}a(es,"pushLineToResult");function e$(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(e$,"insertDescending");function t$(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(t$,"insertAscending")});var Vc=f((i8,Jg)=>{"use strict";var KE=require("joi"),{string:xc,boolean:Wg,date:r$}=KE.types(),s$=re(),{validateSchemaExists:s8,validateTableExists:n8,validateSchemaName:n$}=zt(),i$=T(),a$=le(),o$=U(),c$=xc.invalid(o$.get(i$.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(a$.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(),Qg={operation:xc.valid("add_node","update_node"),node_name:c$,subscriptions:KE.array().items({table:xc.required(),schema:xc.custom(n$).required(),subscribe:Wg.required(),publish:Wg.required().custom(u$),start_time:r$.iso()}).min(1).required()};function _$(e){return s$.validateBySchema(e,KE.object(Qg))}a(_$,"addUpdateNodeValidator");function u$(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(u$,"checkForFalsy");Jg.exports={addUpdateNodeValidator:_$,validation_schema:Qg}});var Xg=f((o8,zg)=>{var l$=re(),E$={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};zg.exports=function(e){return l$.validateObject(e,E$)}});var WE=f((c8,Zg)=>{"use strict";var d$=T().OPERATIONS_ENUM,kc=class{constructor(t,r,s,n=void 0){this.operation=d$.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kc,"UpdateObject");Zg.exports=kc});var eO=f((u8,jg)=>{"use strict";var h$={OPERATION:"operation",REFRESH:"refresh"},$c=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a($c,"JWTTokens");var Yc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Yc,"JWTRSAKeys");jg.exports={JWTTokens:$c,TOKEN_TYPE_ENUM:h$,JWTRSAKeys:Yc}});var Jc=f((E8,nO)=>{"use strict";var Ji=require("jsonwebtoken"),QE=require("fs-extra"),JE=b(),wt=T(),{handleHDBError:ze,hdb_errors:f$}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=f$,Qi=I(),tO=Do(),ZE=er(),S$=It().update,T$=WE(),m$=ln(),{UserEventMsg:R$}=Kr(),ts=U();ts.initSync();var zE=require("path"),{JWTTokens:A$,JWTRSAKeys:p$,TOKEN_TYPE_ENUM:Kc}=eO(),g$=ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",O$=ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Wc="RS256",XE;nO.exports={createTokens:N$,validateOperationToken:b$,refreshOperationToken:I$,validateRefreshToken:sO};async function N$(e){if(JE.isEmpty(e)||typeof e!="object")throw ze(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.username))throw ze(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.password))throw ze(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZE.findAndValidateUser(e.username,e.password),!t)throw ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Qi.error(d),ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Qc(),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 rO(i,r.private_key,r.passphrase),c=await Ji.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:O$,algorithm:Wc,subject:Kc.REFRESH}),_=tO.hash(c),u=new T$(wt.SYSTEM_SCHEMA_NAME,wt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await S$(u)}catch(d){Qi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ze(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return m$.signalUserChange(new R$(process.pid)),new A$(o,c)}a(N$,"createTokens");async function rO(e,t,r){return await Ji.sign(e,{key:t,passphrase:r},{expiresIn:g$,algorithm:Wc,subject:Kc.OPERATION})}a(rO,"signOperationToken");async function Qc(){if(XE===void 0)try{let e=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await QE.readFile(e)).toString(),n=(await QE.readFile(t)).toString(),i=(await QE.readFile(r)).toString();XE=new p$(i,n,s)}catch(e){throw Qi.error(e),ze(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return XE}a(Qc,"getJWTRSAKeys");async function I$(e){if(!e)throw ze(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ze(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await sO(e.refresh_token);let t=await Qc(),r=await Ji.decode(e.refresh_token);return{operation_token:await rO({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(I$,"refreshOperationToken");async function b$(e){try{let t=await Qc(),r=await Ji.verify(e,t.public_key,{algorithms:Wc,subject:Kc.OPERATION});return await ZE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Qi.warn(t),t.name&&t.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(b$,"validateOperationToken");async function sO(e){let t;try{let r=await Qc(),s=await Ji.verify(e,r.public_key,{algorithms:Wc,subject:Kc.REFRESH});t=await ZE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Qi.warn(r),r.name&&r.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!tO.validate(t.refresh_token,e))throw ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(sO,"validateRefreshToken")});var jE=f((f8,oO)=>{"use strict";var w$=Xg(),Cn=require("passport"),C$=require("passport-local").Strategy,y$=require("passport-http").BasicStrategy,U$=require("util"),L$=er(),aO=U$.callbackify(L$.findAndValidateUser),h8=at(),M$=T(),iO=Jc();Cn.use(new C$(function(e,t,r){aO(e,t,r)}));Cn.use(new y$(function(e,t,r){aO(e,t,r)}));Cn.serializeUser(function(e,t){t(null,e)});Cn.deserializeUser(function(e,t){t(null,e)});function D$(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":Cn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===M$.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iO.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iO.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Cn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(D$,"authorize");function P$(e,t){let r=w$(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(P$,"checkPermissions");oO.exports={authorize:D$,checkPermissions:P$}});var yn=f((T8,cO)=>{"use strict";var zc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(zc,"Node");var Xc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Xc,"NodeSubscription");cO.exports={Node:zc,NodeSubscription:Xc}});var uO=f((R8,_O)=>{"use strict";var v$=T().OPERATIONS_ENUM,Zc=class{constructor(t,r,s,n=void 0){this.operation=v$.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zc,"UpsertObject");_O.exports=Zc});var zi=f((p8,lO)=>{"use strict";var jc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(jc,"RemotePayloadObject");var e_=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(e_,"RemotePayloadSubscription");lO.exports={RemotePayloadObject:jc,RemotePayloadSubscription:e_}});var dO=f((O8,EO)=>{"use strict";var t_=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(t_,"TableSizeObject");EO.exports=t_});var fO=f((I8,hO)=>{"use strict";var B$=dO(),H$=Le(),Un=z(),q$=I(),{getSchemaPath:F$,getTransactionAuditStorePath:G$}=j();hO.exports=x$;async function x$(e){let t=new B$;try{let r=F$(e.schema,e.name),s=await Un.openEnvironment(r,e.name),n=Un.statDBI(s,e.hash_attribute),i=G$(e.schema,e.name),o=await Un.openEnvironment(i,e.name,!0),c=Un.statDBI(o,H$.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Un.environmentDataSize(r,e.name),u=await Un.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){q$.warn(`unable to stat table dbi due to ${r}`)}return t}a(x$,"lmdbGetTableSize")});var TO=f((w8,SO)=>{"use strict";var r_=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(r_,"SystemInformationObject");SO.exports=r_});var Ln=f((y8,AO)=>{"use strict";var qe=require("systeminformation"),Ps=I(),V$=T(),k$=fO(),RO=Os(),{getThreadInfo:mO}=cn(),$$=U();$$.initSync();var Y$=TO(),{openEnvironment:K$}=z(),{getSchemaPath:W$}=j(),s_;AO.exports={getHDBProcessInfo:sd,getNetworkInfo:id,getDiskInfo:nd,getMemoryInfo:rd,getCPUInfo:td,getTimeInfo:ed,getSystemInformation:ad,systemInformation:Q$,getTableSize:od,getMetrics:cd};function ed(){return qe.time()}a(ed,"getTimeInfo");async function td(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await qe.cpu();l.cpu_speed=await qe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await qe.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:Ue,raw_load_idle:M,raw_load_irq:$,raw_load_nice:ue,raw_load_system:oe,raw_load_user:kn,...us}=q;x.cpus.push(us)}),l.current_load=x,l}catch(e){return Ps.error(`error in getCPUInfo: ${e}`),{}}}a(td,"getCPUInfo");async function rd(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ps.error(`error in getMemoryInfo: ${e}`),{}}}a(rd,"getMemoryInfo");async function sd(){let e={core:[],clustering:[]};try{return(await qe.processes()).list.forEach(r=>{r.params.includes(V$.HDB_PROC_NAME)||r.name.includes("harperdb")?e.core.push(r):r.name==="nats-server"&&e.clustering.push(r)}),e}catch(t){return Ps.error(`error in getHDBProcessInfo: ${t}`),e}}a(sd,"getHDBProcessInfo");async function nd(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await qe.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await qe.fsStats();return e.read_write=u,e.size=await qe.fsSize(),e}catch(t){return Ps.error(`error in getDiskInfo: ${t}`),e}}a(nd,"getDiskInfo");async function id(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await qe.networkInterfaceDefault(),e.latency=await qe.inetChecksite("google.com"),(await qe.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 qe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ps.error(`error in getNetworkInfo: ${t}`),e}}a(id,"getNetworkInfo");async function ad(){if(s_!==void 0)return s_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await qe.osInfo();e=c;let _=await qe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,s_=e,s_}catch(t){return Ps.error(`error in getSystemInformation: ${t}`),e}}a(ad,"getSystemInformation");async function od(){let e=[],t=await RO.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await k$(s));return e}a(od,"getTableSize");async function cd(){let e=await RO.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=W$(r,n),c=(await K$(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){Ps.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(cd,"getMetrics");async function Q$(e){let t=new Y$;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ad(),t.time=ed(),t.cpu=await td(),t.memory=await rd(),t.disk=await nd(),t.network=await id(),t.harperdb_processes=await sd(),t.table_size=await od(),t.metrics=await cd(),t.threads=await mO(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ad();break;case"time":t.time=ed();break;case"cpu":t.cpu=await td();break;case"memory":t.memory=await rd();break;case"disk":t.disk=await nd();break;case"network":t.network=await id();break;case"harperdb_processes":t.harperdb_processes=await sd();break;case"table_size":t.table_size=await od();break;case"database_metrics":t.metrics=await cd();break;case"threads":t.threads=await mO();break;default:break}return t}a(Q$,"systemInformation")});var _d=f((D8,pO)=>{"use strict";var L8=require("fs-extra"),M8=I();pO.exports={version:J$,printVersion:X$,nodeVersion:z$};var rs=ei();function J$(){if(rs)return rs.version}a(J$,"version");function z$(){if(rs&&rs.engines&&rs.engines["preferred-node"])return rs.engines["preferred-node"]}a(z$,"nodeVersion");function X$(){rs&&console.log(`HarperDB Version ${rs.version}`)}a(X$,"printVersion")});var Nr=f((H8,IO)=>{"use strict";var Z$=It(),ud=b(),ld=require("util"),vs=T(),gO=U();gO.initSync();var j$=jE(),OO=bt(),{Node:v8,NodeSubscription:B8}=yn(),eY=Sn(),tY=uO(),{RemotePayloadObject:rY,RemotePayloadSubscription:sY}=zi(),{handleHDBError:nY,hdb_errors:iY}=y(),{HTTP_STATUS_CODES:aY,HDB_ERROR_MSGS:oY}=iY,cY=Gt(),_Y=Ln(),uY=_d(),lY=ld.promisify(j$.authorize),EY=ld.promisify(OO.searchByHash),dY=ld.promisify(OO.searchByValue);IO.exports={authHeaderToUser:hY,isEmpty:fY,getNodeRecord:SY,upsertNodeRecord:TY,buildNodePayloads:mY,checkClusteringEnabled:RY,getAllNodeRecords:AY,getSystemInfo:pY,reverseSubscription:NO};async function hY(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await lY(t,null),e}a(hY,"authHeaderToUser");function fY(e){return e==null}a(fY,"isEmpty");async function SY(e){let t=new eY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return EY(t)}a(SY,"getNodeRecord");async function TY(e){let t=new tY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Z$.upsert(t)}a(TY,"upsertNodeRecord");function NO(e){if(ud.isEmpty(e.subscribe)||ud.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(NO,"reverseSubscription");function mY(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=ud.getTableHashAttribute(_,u),{subscribe:E,publish:d}=NO(c),h=new sY(_,u,l,d,E,c.start_time);n.push(h)}return new rY(r,t,n,s)}a(mY,"buildNodePayloads");function RY(){if(!gO.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))throw nY(new Error,oY.CLUSTERING_NOT_ENABLED,aY.BAD_REQUEST,void 0,void 0,!0)}a(RY,"checkClusteringEnabled");async function AY(){let e=new cY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await dY(e))}a(AY,"getAllNodeRecords");async function pY(){let e=await _Y.getSystemInformation();return{hdb_version:uY.version(),node_version:e.node_version,platform:e.platform}}a(pY,"getSystemInfo")});var dd=f((F8,LO)=>{"use strict";var Ed=He(),bO=b(),wO=le(),gY=T(),n_=I(),CO=Bc(),OY=jl(),{RemotePayloadObject:NY}=zi(),{handleHDBError:yO,hdb_errors:IY}=y(),{HTTP_STATUS_CODES:UO}=IY,{NodeSubscription:bY}=yn();LO.exports=wY;async function wY(e,t){let r;try{r=await Ed.request(`${t}.${wO.REQUEST_SUFFIX}`,new NY(gY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=Ed.requestErrorHandler(o,"add_node",t);throw yO(new Error,c,UO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===wO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw yO(new Error,o,UO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=bO.doesSchemaExist(c),l=s[c]!==void 0,E=bO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(n_.trace(`addNode creating schema: ${c}`),await CO.createSchema({operation:"create_schema",schema:c})),!E&&d){n_.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new OY(c,_,s[c][_].hash_attribute);await CO.createTable(m)}await Ed.createLocalTableStream(c,_);let h=new bY(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(wY,"reviewSubscriptions")});var o_=f((x8,PO)=>{"use strict";var{handleHDBError:i_,hdb_errors:CY}=y(),{HTTP_STATUS_CODES:a_}=CY,{addUpdateNodeValidator:yY}=Vc(),Xi=I(),DO=T(),MO=le(),UY=b(),hd=He(),Zi=Nr(),LY=U(),MY=dd(),{Node:DY,NodeSubscription:PY}=yn(),vY="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",BY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",HY=LY.get(DO.CONFIG_PARAMS.CLUSTERING_NODENAME);PO.exports=qY;async function qY(e,t=!1){Xi.trace("addNode called with:",e),Zi.checkClusteringEnabled();let r=yY(e);if(r)throw i_(r,r.message,a_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Zi.getNodeRecord(s);if(!UY.isEmptyOrZeroLength(E))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await MY(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=vY,o;let c=Zi.buildNodePayloads(n,HY,DO.OPERATIONS_ENUM.ADD_NODE,await Zi.getSystemInfo());Xi.trace("addNode sending remote payload:",c);let _;try{_=await hd.request(`${s}.${MO.REQUEST_SUFFIX}`,c)}catch(E){Xi.error(`addNode received error from request: ${E}`);let d=hd.requestErrorHandler(E,"add_node",s);throw i_(new Error,d,a_.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===MO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw i_(new Error,E,a_.INTERNAL_SERVER_ERROR,"error",E)}Xi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];Xi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await hd.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new PY(h.schema,h.table,h.publish,h.subscribe))}let l=new DY(s,u,_.system_info);return await Zi.upsertNodeRecord(l),i.length>0?o.message=BY:o.message=`Successfully added '${s}' to manifest`,o}a(qY,"addNode")});var Sd=f((k8,HO)=>{"use strict";var{handleHDBError:c_,hdb_errors:FY}=y(),{HTTP_STATUS_CODES:__}=FY,{addUpdateNodeValidator:GY}=Vc(),ji=I(),BO=T(),vO=le(),xY=b(),fd=He(),ea=Nr(),VY=U(),{cloneDeep:kY}=require("lodash"),$Y=dd(),{NodeSubscription:YY}=yn(),KY="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",WY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",QY=VY.get(BO.CONFIG_PARAMS.CLUSTERING_NODENAME);HO.exports=JY;async function JY(e){ji.trace("updateNode called with:",e),ea.checkClusteringEnabled();let t=GY(e);if(t)throw c_(t,t.message,__.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=kY(await ea.getNodeRecord(r));if(xY.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,__.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await $Y(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=KY,o;let c=ea.buildNodePayloads(n,QY,BO.OPERATIONS_ENUM.UPDATE_NODE,await ea.getSystemInfo());ji.trace("updateNode sending remote payload:",c);let _;try{_=await fd.request(`${r}.${vO.REQUEST_SUFFIX}`,c)}catch(u){ji.error(`updateNode received error from request: ${u}`);let l=fd.requestErrorHandler(u,"update_node",r);throw c_(new Error,l,__.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===vO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw c_(new Error,u,__.INTERNAL_SERVER_ERROR,"error",u)}ji.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];ji.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await fd.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await zY(s[0],n,_.system_info),i.length>0?o.message=WY:o.message=`Successfully updated '${r}'`,o}a(JY,"updateNode");async function zY(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 YY(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ea.upsertNodeRecord(s)}a(zY,"updateNodeTable")});var VO=f((Y8,xO)=>{"use strict";var GO=require("joi"),{string:qO}=GO.types(),XY=re(),FO=T(),ZY=U(),jY=le();xO.exports=eK;function eK(e){let t=qO.invalid(ZY.get(FO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(jY.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=GO.object({operation:qO.valid(FO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return XY.validateBySchema(e,r)}a(eK,"removeNodeValidator")});var l_=f((W8,QO)=>{"use strict";var{handleHDBError:kO,hdb_errors:tK}=y(),{HTTP_STATUS_CODES:$O}=tK,rK=VO(),ta=I(),YO=Nr(),sK=b(),u_=T(),KO=le(),WO=He(),nK=U(),{RemotePayloadObject:iK}=zi(),{NodeSubscription:aK}=yn(),oK=Ci(),cK=ps(),_K=nK.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);QO.exports=uK;async function uK(e){ta.trace("removeNode called with:",e),YO.checkClusteringEnabled();let t=rK(e);if(t)throw kO(t,t.message,$O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await YO.getNodeRecord(r);if(sK.isEmptyOrZeroLength(s))throw kO(new Error,`Node '${r}' was not found.`,$O.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new iK(u_.OPERATIONS_ENUM.REMOVE_NODE,_K,[]),i,o=!1;try{i=await WO.request(`${r}.${KO.REQUEST_SUFFIX}`,n),ta.trace("Remove node reply from remote node:",r,i)}catch(_){ta.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];ta.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new aK(l.schema,l.table,!1,!1);await WO.updateWorkStream(E,r)}let c=new oK(u_.SYSTEM_SCHEMA_NAME,u_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await cK.deleteRecord(c),i?.status===KO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ta.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(uK,"removeNode")});var XO=f((J8,zO)=>{"use strict";var JO=require("joi"),{string:lK,array:EK}=JO.types(),dK=re(),hK=Vc();zO.exports=fK;function fK(e){let t=JO.object({operation:lK.valid("configure_cluster").required(),connections:EK.items(hK.validation_schema).required()});return dK.validateBySchema(e,t)}a(fK,"configureClusterValidator")});var Td=f((X8,rN)=>{"use strict";var SK=T(),E_=I(),TK=b(),mK=l_(),RK=o_(),ZO=Nr(),AK=XO(),{handleHDBError:jO,hdb_errors:pK}=y(),{HTTP_STATUS_CODES:eN}=pK,gK="Configure cluster complete.",OK="Failed to configure the cluster. Check the logs for more details.",NK="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";rN.exports=IK;async function IK(e){E_.trace("configure cluster called with:",e),ZO.checkClusteringEnabled();let t=AK(e);if(t)throw jO(t,t.message,eN.BAD_REQUEST,void 0,void 0,!0);let r=await ZO.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(tN(mK,{operation:SK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);E_.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(tN(RK,h,h.node_name))}let c=await Promise.allSettled(i);E_.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 m=E[d];m.status==="rejected"&&(E_.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(TK.isEmptyOrZeroLength(_))return{message:gK,connections:u};if(l)return{message:NK,failed_nodes:_,connections:u};throw jO(new Error,OK,eN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(IK,"configureCluster");async function tN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(tN,"functionWrapper")});var nN=f((j8,sN)=>{"use strict";var d_=require("joi"),bK=re(),{validateSchemaExists:wK,validateTableExists:CK,validateSchemaName:yK}=zt(),UK=d_.object({operation:d_.string().valid("purge_stream"),schema:d_.string().custom(wK).custom(yK).required(),table:d_.string().custom(CK).required()});function LK(e){return bK.validateBySchema(e,UK)}a(LK,"purgeStreamValidator");sN.exports=LK});var md=f((t6,iN)=>{"use strict";var{handleHDBError:MK,hdb_errors:DK}=y(),{HTTP_STATUS_CODES:PK}=DK,vK=nN(),BK=He(),HK=Nr();iN.exports=qK;async function qK(e){let t=vK(e);if(t)throw MK(t,t.message,PK.BAD_REQUEST,void 0,void 0,!0);HK.checkClusteringEnabled();let{schema:r,table:s}=e;return await BK.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(qK,"purgeStream")});var pd=f((s6,lN)=>{"use strict";var Ad=Nr(),FK=He(),cN=U(),h_=T(),Bs=le(),GK=b(),Rd=I(),{RemotePayloadObject:xK}=zi(),{ErrorCode:aN}=require("nats"),oN=cN.get(h_.CONFIG_PARAMS.CLUSTERING_ENABLED),_N=cN.get(h_.CONFIG_PARAMS.CLUSTERING_NODENAME);lN.exports={clusterStatus:VK,buildNodeStatus:uN};async function VK(){let e={node_name:_N,is_enabled:oN,connections:[]};if(!oN)return e;let t=await Ad.getAllNodeRecords();if(GK.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(uN(t[s],e.connections));return await Promise.allSettled(r),e}a(VK,"clusterStatus");async function uN(e,t){let r=e.name,s=new xK(h_.OPERATIONS_ENUM.CLUSTER_STATUS,_N,void 0,await Ad.getSystemInfo()),n,i,o=Bs.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await FK.request(Bs.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Bs.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Bs.CLUSTER_STATUS_STATUSES.CLOSED,Rd.error(`Error getting node status from ${r} `,n))}catch(_){Rd.warn(`Error getting node status from ${r}`,_),_.code===aN.NoResponders?o=Bs.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===aN.Timeout?o=Bs.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Bs.CLUSTER_STATUS_STATUSES.CLOSED}let c=new kK(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!==h_.PRE_4_0_0_VERSION&&await Ad.upsertNodeRecord(_)}catch(_){Rd.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(uN,"buildNodeStatus");function kK(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(kK,"NodeStatusObject")});var Od=f((i6,EN)=>{"use strict";var{handleHDBError:$K,hdb_errors:YK}=y(),{HTTP_STATUS_CODES:KK}=YK,WK=He(),QK=Nr(),gd=b(),f_=require("joi"),JK=re(),zK=2e3,XK=f_.object({timeout:f_.number().min(1),connected_nodes:f_.boolean(),routes:f_.boolean()});EN.exports=ZK;async function ZK(e){QK.checkClusteringEnabled();let t=JK.validateBySchema(e,XK);if(t)throw $K(t,t.message,KK.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||gd.autoCastBoolean(s),o=n===void 0||gd.autoCastBoolean(n),c={nodes:[]},_=await WK.getServerList(r??zK),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 m={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(m.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(m.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:gd.autoCast(R.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(ZK,"clusterNetwork")});var SN=f((o6,fN)=>{"use strict";var Nd=require("joi"),dN=re(),{route_constraints:hN}=Fu();fN.exports={setRoutesValidator:jK,deleteRoutesValidator:eW};function jK(e){let t=Nd.object({server:Nd.valid("hub","leaf").required(),routes:hN.required()});return dN.validateBySchema(e,t)}a(jK,"setRoutesValidator");function eW(e){let t=Nd.object({routes:hN.required()});return dN.validateBySchema(e,t)}a(eW,"deleteRoutesValidator")});var bd=f((_6,AN)=>{"use strict";var Hs=fr(),Id=b(),S_=T(),TN=SN(),{handleHDBError:mN,hdb_errors:tW}=y(),{HTTP_STATUS_CODES:RN}=tW,rW="cluster routes successfully set",sW="cluster routes successfully deleted";AN.exports={setRoutes:nW,getRoutes:iW,deleteRoutes:aW};function nW(e){let t=TN.setRoutesValidator(e);if(t)throw mN(t,t.message,RN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.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=Id.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"?Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:rW,set:o,skipped:i}}a(nW,"setRoutes");function iW(){let e=Hs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(iW,"getRoutes");function aW(e){let t=TN.deleteRoutesValidator(e);if(t)throw mN(t,t.message,RN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.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,m=s.length;h<m;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 m=0,R=n.length;m<R;m++){let g=n[m];if(E.host===g.host&&E.port===g.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=Id.isEmptyOrZeroLength(s)?null:s,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=Id.isEmptyOrZeroLength(n)?null:n,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:sW,deleted:i,skipped:o}}a(aW,"deleteRoutes")});var gN=f((l6,pN)=>{"use strict";var ra=require("alasql"),qs=require("recursive-iterator"),kt=I(),oW=b(),sa=T(),T_=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,_W(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=>sa.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=>!sa.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][sa.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=cW(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=>!sa.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new ra.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(T_,"sql_statement_bucket");function cW(e){return e.filter(t=>t[sa.PERMS_CRUD_ENUM.READ])}a(cW,"filterReadRestrictedAttrs");function _W(e,t,r,s,n){uW(e,t,r,s,n)}a(_W,"interpretAST");function na(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(na,"addSchemaTableToMap");function uW(e,t,r,s,n){if(!e){kt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ra.yy.Insert?hW(e,t,r):e instanceof ra.yy.Select?lW(e,t,r,s,n):e instanceof ra.yy.Update?EW(e,t,r):e instanceof ra.yy.Delete?dW(e,t,r):kt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(uW,"getRecordAttributesAST");function lW(e,t,r,s,n){if(!e){kt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(oW.isEmptyOrZeroLength(i)){kt.error("No schema specified");return}e.from.forEach(c=>{na(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),na(c.table,t,r,s,n)});let o=new qs(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{kt.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 qs(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{kt.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 qs(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{kt.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 qs(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{kt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(lW,"getSelectAttributes");function EW(e,t,r){if(!e){kt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wd(e.table.tableid,n,i.columnid,t,r)}a(EW,"getUpdateAttributes");function dW(e,t,r){if(!e){kt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new qs(e.where),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&wd(e.table.tableid,n,i.columnid,t,r)}a(dW,"getDeleteAttributes");function hW(e,t,r){if(!e){kt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.into.databaseid;na(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&wd(e.into.tableid,n,i.columnid,t,r)}a(hW,"getInsertAttributes");function wd(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(wd,"pushAttribute");pN.exports=T_});var IN=f((d6,NN)=>{var fW=require("os"),ON=U();NN.exports={checkPermission:SW};function SW(){if(fW.userInfo().username!==ON.get("install_user"))throw new Error(`Error: Must execute as ${ON.get("install_user")}`)}a(SW,"checkPermission")});var yd=f((f6,UN)=>{var R_=Ts(),bN=require("chalk"),nr=I(),wN=IN(),CN=require("prompt"),{promisify:TW}=require("util"),m_=T(),mW=require("fs-extra"),RW=require("path"),AW=b(),pW=_d(),yN=U();yN.initSync();var gW=require("moment"),OW=TW(CN.get),NW=RW.join(yN.getHdbBasePath(),m_.LICENSE_KEY_DIR_NAME,m_.LICENSE_FILE_NAME,m_.LICENSE_FILE_NAME);UN.exports={getFingerprint:bW,setLicense:IW,parseLicense:Cd,register:wW,getRegistrationInfo:yW};async function IW(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Cd(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(IW,"setLicense");async function bW(){try{wN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await R_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(bW,"getFingerprint");async function Cd(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=R_.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{nr.info("writing license to disk"),await mW.writeFile(NW,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(Cd,"parseLicense");async function wW(){let e=await CW();return Cd(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(wW,"register");async function CW(){try{wN.checkPermission()}catch(s){return console.error(s.message)}let e=await R_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:bN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:bN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{CN.start()}catch(s){nr.error(s)}let r;try{r=await OW(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(CW,"promptForRegistration");async function yW(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await R_.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(AW.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=pW.version(),e.storage_type=m_.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=gW.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(yW,"getRegistrationInfo")});var MN=f((T6,LN)=>{"use strict";var UW=le(),A_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,m){this.port=t,o===null&&(o=void 0),this.server_name=r+UW.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:m}},this.system_account="SYS"}};a(A_,"HubConfigObject");LN.exports=A_});var vN=f((R6,PN)=>{"use strict";var DN=le(),p_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+DN.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+DN.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(p_,"LeafConfigObject");PN.exports=p_});var HN=f((p6,BN)=>{"use strict";var g_=class{constructor(t,r){this.user=t,this.password=r}};a(g_,"HdbUserObject");BN.exports=g_});var FN=f((O6,qN)=>{"use strict";var LW=le(),O_=class{constructor(t,r){this.user=t+LW.SERVER_SUFFIX.ADMIN,this.password=r}};a(O_,"SysUserObject");qN.exports=O_});var Md=f((I6,VN)=>{"use strict";var ia=require("path"),w_=require("fs-extra"),MW=MN(),DW=vN(),PW=HN(),vW=FN(),Ud=er(),Mn=b(),je=fr(),b_=T(),N_=le(),{CONFIG_PARAMS:he}=b_,oa=I(),C_=U(),GN=Yr(),Ld=He(),aa="clustering",BW=1e4,xN=5;VN.exports={generateNatsConfig:HW,removeNatsConfig:qW};async function HW(e=!1,t=void 0){C_.initSync();let r=C_.get(he.ROOTPATH),s=ia.join(r,aa,N_.PID_FILES.HUB),n=ia.join(r,aa,N_.PID_FILES.LEAF),i=je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ia.join(r,aa,N_.NATS_CONFIG_FILES.HUB_SERVER),c=ia.join(r,aa,N_.NATS_CONFIG_FILES.LEAF_SERVER),_=je.getConfigFromFile(he.CLUSTERING_TLS_CERTIFICATE),u=je.getConfigFromFile(he.CLUSTERING_TLS_PRIVATEKEY),l=je.getConfigFromFile(he.CLUSTERING_TLS_CERT_AUTH),E=je.getConfigFromFile(he.CLUSTERING_TLS_INSECURE),d=je.getConfigFromFile(he.CLUSTERING_TLS_VERIFY),h=je.getConfigFromFile(he.CLUSTERING_NODENAME),m=je.getConfigFromFile(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Ld.checkNATSServerInstalled()||y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await Ud.listUsers(),g=je.getConfigFromFile(he.CLUSTERING_USER),H=await Ud.getClusterUser();(Mn.isEmpty(H)||H.active!==!0)&&y_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await I_(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_NETWORK_PORT),await I_(he.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[us,Mr]of R.entries())Mr.role.role===b_.ROLE_TYPES_ENUM.CLUSTER_USER&&Mr.active&&(x.push(new vW(Mr.username,GN.decrypt(Mr.hash))),q.push(new PW(Mr.username,GN.decrypt(Mr.hash))));let Ue=[],{hub_routes:M}=je.getClusteringRoutes();if(!Mn.isEmptyOrZeroLength(M))for(let us of M)Ue.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${us.host}:${us.port}`);let $=new MW(je.getConfigFromFile(he.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,m,je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NAME),je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ue,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=Mn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await w_.writeJson(o,$),oa.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,oe=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,kn=new DW(je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[oe],x,q,_,u,l,E);l==null&&delete kn.tls.ca_file,(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await w_.writeJson(c,kn),oa.trace(`Leaf server config written to ${c}`))}a(HW,"generateNatsConfig");async function I_(e){let t=C_.get(e);return Mn.isEmpty(t)&&y_(`port undefined for '${e}'`),await Mn.isPortTaken(t)&&y_(`'${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(I_,"isPortAvailable");function y_(e){let t=`Error generating clustering config: ${e}`;oa.error(t),console.error(t),process.exit(1)}a(y_,"generateNatsConfigError");async function qW(e){let{port:t,config_file:r}=Ld.getServerConfig(e),{username:s,decrypt_hash:n}=await Ud.getClusterUser(),i=0,o=500;for(;i<xN;){try{let u=await Ld.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){oa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=xN)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 Mn.async_set_timeout(o*i)}let c="0".repeat(BW),_=ia.join(C_.get(he.ROOTPATH),aa,r);await w_.writeFile(_,c),await w_.remove(_),oa.notify(e,"started.")}a(qW,"removeNatsConfig")});var QN=f((w6,WN)=>{"use strict";var ft=U(),FW=Ts(),G=T(),ca=le(),Ir=require("path"),{PACKAGE_ROOT:U_}=T(),kN=U(),Dn="/dev/null",GW=Ir.join(U_,"launchServiceScripts"),$N=Ir.join(U_,"utility/scripts"),xW=Ir.join($N,G.HDB_RESTART_SCRIPT),YN=Ir.resolve(U_,"dependencies",`${process.platform}-${process.arch}`,ca.NATS_BINARY_NAME);function KN(){let t=FW.licenseSearch().ram_allocation||G.RAM_ALLOCATION_ENUM.DEFAULT,r=G.MEM_SETTING_KEY+t;return{name:G.PROCESS_DESCRIPTORS.HDB,script:G.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:U_}}a(KN,"generateMainServerConfig");var VW=9930;function kW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.HUB_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=kN.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==VW?"-"+s:""),script:YN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(kW,"generateNatsHubServerConfig");var $W=9940;function YW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.LEAF_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=kN.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==$W?"-"+s:""),script:YN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(YW,"generateNatsLeafServerConfig");function KW(){ft.initSync();let e=Ir.join(ft.get(G.CONFIG_PARAMS.LOGGING_ROOT),G.LOG_NAMES.HDB),t={name:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:G.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:GW,autorestart:!1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Dn,t.error_file=Dn),t}a(KW,"generateClusteringUpgradeV4ServiceConfig");function WW(){return{...{name:G.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:$N},script:xW}}a(WW,"generateRestart");function QW(){return{apps:[KN()]}}a(QW,"generateAllServiceConfigs");WN.exports={generateAllServiceConfigs:QW,generateMainServerConfig:KN,generateRestart:WW,generateNatsHubServerConfig:kW,generateNatsLeafServerConfig:YW,generateClusteringUpgradeV4ServiceConfig:KW}});var _I=f((v6,cI)=>{"use strict";var Y=T(),zN=b(),_a=Md(),L_=He(),ir=le(),K=require("pm2"),ss=QN(),M_=U(),br=I(),JW=Nr(),{startWorker:Dd,onMessageFromWorkers:zW}=cn(),y6=Ln(),XW=require("util"),XN=require("child_process"),{execFile:ZW}=XN,U6=XW.promisify(XN.exec),L6=require("systeminformation");cI.exports={enterPM2Mode:jW,start:Fs,stop:Pd,reload:ZN,restart:jN,list:vd,describe:Bd,connect:wr,kill:n1,startAllServices:i1,startService:Hd,getUniqueServicesList:tI,restartAllServices:a1,isServiceRegistered:rI,reloadStopStart:sI,restartHdb:eI,deleteProcess:r1,startClusteringProcesses:aI,startClusteringThreads:oI,isHdbRestartRunning:s1,isClusteringRunning:c1,stopClustering:o1,reloadClustering:_1};var{PACKAGE_ROOT:M6}=T(),D6=T(),{loggerWithTag:P6}=br,ua=!1;zW(e=>{e.type==="restart"&&M_.initSync(!0)});function jW(){ua=!0}a(jW,"enterPM2Mode");function wr(){return new Promise((e,t)=>{K.connect((r,s)=>{br.setupConsoleLogging(),r&&t(r),e(s)})})}a(wr,"connect");var et,e1=10,JN;function Fs(e){if(ua)return t1(e);let t=ZW(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=et.indexOf(t);i>-1&&et.splice(i,1),!JN&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<e1&&Fs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=M_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=ir.LOG_LEVELS[E]}if(ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!et){et=[];let n=a(()=>{JN=!0,et&&(et.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)}et.push(t)}a(Fs,"start");function t1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(t1,"startWithPM2");function Pd(e){if(!ua){for(let t of et||[])t.name===e&&(et.splice(et.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await wr()}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(Pd,"stop");function ZN(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(ZN,"reload");function jN(e){if(!ua)for(let t of et||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(jN,"restart");function r1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(r1,"deleteProcess");async function eI(){await Fs(ss.generateRestart())}a(eI,"restartHdb");async function s1(){let e=await vd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(s1,"isHdbRestartRunning");function vd(){return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(vd,"list");function Bd(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Bd,"describe");function n1(){if(!ua){for(let e of et||[])e.kill();et=[];return}return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(n1,"kill");async function i1(){try{await aI(),await oI(),await Fs(ss.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(i1,"startAllServices");async function Hd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ss.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ss.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ss.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ss.generateNatsHubServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ss.generateNatsLeafServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ss.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Fs(t)}catch(t){throw K.disconnect(),t}}a(Hd,"startService");async function tI(){try{let e=await vd(),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(tI,"getUniqueServicesList");async function a1(e=[]){try{let t=!1,r=await tI();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 jN(o))}t&&await sI(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(a1,"restartAllServices");async function rI(e){return et?.find(t=>t.name===e)?!0:!zN.isEmptyOrZeroLength(await Bd(e))}a(rI,"isServiceRegistered");async function sI(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?M_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):M_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Bd(e),s=zN.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await Pd(e),await Hd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await eI():await ZN(e)}a(sI,"reloadStopStart");var nI,iI;async function aI(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await Hd(t)}}a(aI,"startClusteringProcesses");async function oI(){nI=Dd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),iI=Dd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await L_.createWorkQueueStream(ir.WORK_QUEUE_CONSUMER_NAMES),await L_.updateLocalStreams();let e=await JW.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){br.info("Starting clustering upgrade 4.0.0 process"),Dd(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(oI,"startClusteringThreads");async function o1(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await nI.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await iI.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await Pd(t)}}a(o1,"stopClustering");async function c1(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await rI(t)===!1)return!1}return!0}a(c1,"isClusteringRunning");async function _1(){await _a.generateNatsConfig(!0),await L_.reloadNATSHub(),await L_.reloadNATSLeaf(),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(_1,"reloadClustering")});var $d=f((H6,fI)=>{"use strict";var u1=require("minimist"),{isMainThread:Gd,parentPort:EI}=require("worker_threads"),ne=T(),{PROCESS_DESCRIPTORS_VALIDATE:la}=ne,ar=I(),xd=b(),D_=Md(),Pn=He(),qd=le(),dI=fr(),or=_I(),uI=Ln(),l1=Uu(),{restartWorkers:P_,onMessageFromWorkers:E1}=cn(),{handleHDBError:d1,hdb_errors:h1}=y(),{HTTP_STATUS_CODES:f1}=h1,v_=U();v_.initSync();var Ea=`Restarting HarperDB. This may take up to ${ne.RESTART_TIMEOUT_MS/1e3} seconds.`,S1="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lI="Clustering is not enabled so cannot be restarted",T1="Invalid service",Gs,$t;fI.exports={restart:hI,restartService:Vd};Gd&&E1(e=>{e.type===ne.ITC_EVENT_TYPES.RESTART&&(e.workerType?Vd({service:e.workerType}):hI({operation:"restart"}))});async function hI(e){$t=Object.keys(e).length===0,Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR);let t=u1(process.argv);if(t.service){await Vd(t);return}if($t&&!Gs){console.error(S1);return}if($t&&console.log(Ea),Gs){or.enterPM2Mode(),ar.notify(Ea);let r=l1(Object.keys(ne.CONFIG_PARAM_MAP),!0);return xd.isEmptyOrZeroLength(Object.keys(r))||dI.updateConfigValue(void 0,void 0,r,!0,!0),R1(),Ea}return Gd?(ar.notify(Ea),await kd(),setTimeout(()=>{P_()},50)):EI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART}),Ea}a(hI,"restart");async function Vd(e){let{service:t}=e;if(ne.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw d1(new Error,T1,f1.BAD_REQUEST,void 0,void 0,!0);if(Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR),!Gd)return EI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case la.clustering:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lI;break}$t&&console.log("Restarting clustering"),ar.notify("Restarting clustering"),await kd();break;case la.clustering_config:case la["clustering config"]:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lI;break}$t&&console.log("Restarting clustering_config"),ar.notify("Restarting clustering_config"),await or.reloadClustering();break;case"custom_functions":case"custom functions":case la.harperdb:case la.http_workers:if($t&&!Gs){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}$t&&console.log("Restarting http_workers"),ar.notify("Restarting http_workers"),Gs?await or.restart(ne.HDB_PROC_DESCRIPTOR):setTimeout(()=>{P_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ar.error(r),$t&&console.error(r),r):`Restarting ${t}`}a(Vd,"restartService");async function m1(){await Pn.publishToStream(`${qd.SUBJECT_PREFIXES.TXN}.${qd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,qd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Pn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(m1,"postDummyNatsMsg");async function R1(){await kd(),await or.restart(ne.HDB_PROC_DESCRIPTOR),await xd.async_set_timeout(2e3),v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Fd(),$t&&(await Pn.closeConnection(),process.exit(0))}a(R1,"restartPM2Mode");async function kd(){if(!dI.getConfigFromFile(ne.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uI.getHDBProcessInfo()).clustering.length===0)ar.trace("Clustering not running, restart will start clustering services"),await D_.generateNatsConfig(!0),await or.startClusteringProcesses(),await or.startClusteringThreads(),await Fd(),$t&&await Pn.closeConnection();else{await m1(),await D_.generateNatsConfig(!0),Gs?(ar.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uI.getHDBProcessInfo()).clustering.forEach(n=>{ar.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await xd.async_set_timeout(3e3),await Fd(),await Pn.updateLocalStreams(),$t&&await Pn.closeConnection(),ar.trace("Restart clustering restarting ingest and reply service threads");let t=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(kd,"restartClustering");async function Fd(){await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Fd,"removeNatsConfig")});var bI=f((G6,II)=>{"use strict";var F6=require("lodash"),Fe=T(),{handleHDBError:SI,hdb_errors:A1}=y(),{HDB_ERROR_MSGS:p1,HTTP_STATUS_CODES:g1}=A1,Yd=I();II.exports={getRolePermissions:N1};var xs=Object.create(null),O1=a(e=>({key:e,perms:{}}),"perms_template_obj"),AI=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),pI=a((e=!1,t=!1,r=!1,s=!1)=>({[Fe.PERMS_CRUD_ENUM.READ]:e,[Fe.PERMS_CRUD_ENUM.INSERT]:t,[Fe.PERMS_CRUD_ENUM.UPDATE]:r,[Fe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Kd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...pI(t,r,s,n)}),"table_perms_template"),TI=a((e,t=pI())=>({attribute_name:e,describe:NI(t),[da]:t[da],[Wd]:t[Wd],[Qd]:t[Qd]}),"attr_perms_template"),mI=a((e,t=!1)=>({attribute_name:e,describe:t,[da]:t}),"timestamp_attr_perms_template"),{READ:da,INSERT:Wd,UPDATE:Qd}=Fe.PERMS_CRUD_ENUM,gI=Object.values(Fe.PERMS_CRUD_ENUM),OI=[da,Wd,Qd];function N1(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[Fe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(xs[t]&&xs[t].key===s)return xs[t].perms;let n=I1(e,r);return xs[t]?xs[t].key=s:xs[t]=O1(s),xs[t].perms=n,n}catch(r){if(!e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fe.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),SI(new Error,p1.OUTDATED_PERMS_TRANSLATION_ERROR,g1.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw Yd.error(s),SI(new Error)}}}a(N1,"getRolePermissions");function I1(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Fe.SYSTEM_SCHEMA_NAME]=s[Fe.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]=b1(t[i]);return}r[i]=AI(),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=w1(c,_);r[i].describe||gI.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Kd()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Kd()})}),r}a(I1,"translateRolePermissions");function b1(e){let t=AI(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Kd(!0,!0,!0,!0,!0)}),t}a(b1,"createStructureUserPermissions");function w1(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 Fe.TIME_STAMP_NAMES.includes(E)&&(d=mI(E,l[da])),u[E]=d,u},{}),o=t[Fe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=TI(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=NI(l),n.attribute_permissions.push(l),c||C1(l,_)}else if(u!==o){let l;Fe.TIME_STAMP_NAMES.includes(u)?l=mI(u):l=TI(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=RI(n),n}else return e.describe=RI(e),e}a(w1,"getTableAttrPerms");function RI(e){return gI.filter(t=>e[t]).length>0}a(RI,"getSchemaTableDescribePerm");function NI(e){return OI.filter(t=>e[t]).length>0}a(NI,"getAttributeDescribePerm");function C1(e,t){OI.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(C1,"checkForHashPerms")});var DI=f((V6,MI)=>{"use strict";var fe=require("joi"),wI=require("fs-extra"),CI=require("path"),vn=re(),yI=U(),UI=T(),LI=I(),{hdb_errors:y1}=y(),{HDB_ERROR_MSGS:tt}=y1,ns=/^[a-zA-Z0-9-_]+$/;MI.exports={getDropCustomFunctionValidator:L1,setCustomFunctionValidator:M1,addCustomFunctionProjectValidator:D1,dropCustomFunctionProjectValidator:P1,packageCustomFunctionProjectValidator:v1,deployCustomFunctionProjectValidator:B1};function ha(e,t,r){try{let s=yI.get(UI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=CI.join(s,t);return wI.existsSync(n)?e?t:r.message(tt.PROJECT_EXISTS):e?r.message(tt.NO_PROJECT):t}catch(s){return LI.error(s),r.message(tt.VALIDATION_ERR)}}a(ha,"checkProjectExists");function U1(e,t,r,s){try{let n=yI.get(UI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=CI.join(n,e,t,r+".js");return wI.existsSync(i)?r:s.message(tt.NO_FILE)}catch(n){return LI.error(n),s.message(tt.VALIDATION_ERR)}}a(U1,"checkFileExists");function L1(e){let t=fe.object({project:fe.string().pattern(ns).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(ns).custom(U1.bind(null,e.project,e.type)).required().messages({"string.pattern.base":tt.BAD_FILE_NAME})});return vn.validateBySchema(e,t)}a(L1,"getDropCustomFunctionValidator");function M1(e){let t=fe.object({project:fe.string().pattern(ns).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(ns).required().messages({"string.pattern.base":tt.BAD_FILE_NAME}),function_content:fe.string().required()});return vn.validateBySchema(e,t)}a(M1,"setCustomFunctionValidator");function D1(e){let t=fe.object({project:fe.string().pattern(ns).custom(ha.bind(null,!1)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(D1,"addCustomFunctionProjectValidator");function P1(e){let t=fe.object({project:fe.string().pattern(ns).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(P1,"dropCustomFunctionProjectValidator");function v1(e){let t=fe.object({project:fe.string().pattern(ns).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),skip_node_modules:fe.boolean()});return vn.validateBySchema(e,t)}a(v1,"packageCustomFunctionProjectValidator");function B1(e){let t=fe.object({project:fe.string().pattern(ns).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),payload:fe.string().required().messages({"string.pattern.base":tt.BAD_PACKAGE})});return vn.validateBySchema(e,t)}a(B1,"deployCustomFunctionProjectValidator")});var jd=f(($6,BI)=>{"use strict";var we=require("fs-extra"),Jd=require("fast-glob"),te=require("path"),PI=require("tar-fs"),vI=require("uuid").v4,zd=require("normalize-path"),Vs=DI(),Oe=I(),St=T(),Tt=U(),{PACKAGE_ROOT:H1}=T(),{handleHDBError:Ge,hdb_errors:q1}=y(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:xe}=q1,F1=te.join(H1,"custom_function_template"),Xd=te.join(Tt.get(St.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Zd(){let e=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,is.NOT_ENABLED,xe.BAD_REQUEST,void 0,void 0,!0)}a(Zd,"isCFEnabled");function G1(){Oe.trace("getting custom api status");let e={};try{e={is_enabled:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,is.FUNCTION_STATUS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,t)}return e}a(G1,"customFunctionsStatus");function x1(){Oe.trace("getting custom api endpoints");let e={},t=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Jd.sync(zd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Jd.sync(zd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Jd.sync(zd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,is.GET_FUNCTIONS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,r)}return e}a(x1,"getCustomFunctions");function V1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("getting custom api endpoint file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=te.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,is.GET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(V1,"getCustomFunction");function k1(e){Zd(),e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("setting custom function file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(te.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,is.SET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(k1,"setCustomFunction");function $1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function file");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(te.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,is.DROP_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,o)}}a($1,"dropCustomFunction");function Y1(e){Zd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("adding custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(F1,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,is.ADD_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(Y1,"addCustomFunctionProject");function K1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,is.DROP_FUNCTION_PROJECT,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(K1,"dropCustomFunctionProject");async function W1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("packaging custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=te.join(r,s),i=vI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Oe.error(l),l}we.ensureDirSync(Xd);let c=te.join(Xd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(te.join(n,"node_modules"))}),PI.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(W1,"packageCustomFunctionProject");async function Q1(e){Zd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("deploying custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=te.join(r,s);await we.ensureDir(i);let o,c;do o=te.join(Xd,vI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(PI.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(Q1,"deployCustomFunctionProject");BI.exports={customFunctionsStatus:G1,getCustomFunctions:x1,getCustomFunction:V1,setCustomFunction:k1,dropCustomFunction:$1,addCustomFunctionProject:Y1,dropCustomFunctionProject:K1,packageCustomFunctionProject:W1,deployCustomFunctionProject:Q1}});var eh=f((K6,qI)=>{"use strict";var cr=require("joi"),HI=re();qI.exports={readTransactionLogValidator:J1,deleteTransactionLogsBeforeValidator:z1};function J1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),from:cr.date().timestamp(),to:cr.date().timestamp(),limit:cr.number().min(1)});return HI.validateBySchema(e,t)}a(J1,"readTransactionLogValidator");function z1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),timestamp:cr.date().timestamp().required()});return HI.validateBySchema(e,t)}a(z1,"deleteTransactionLogsBeforeValidator")});var H_=f((Q6,kI)=>{"use strict";var th=T(),B_=He(),FI=b(),GI=U(),xI=Yr(),{handleHDBError:Bn,hdb_errors:X1}=y(),{HTTP_STATUS_CODES:Hn}=X1,{readTransactionLogValidator:Z1,deleteTransactionLogsBeforeValidator:j1}=eh(),VI="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.";kI.exports={readTransactionLog:rQ,deleteTransactionLogsBefore:sQ};async function*rQ(e){let t=Z1(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!GI.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,VI,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=FI.checkSchemaTableExist(r,s);if(n)throw Bn(new Error,n,Hn.NOT_FOUND,void 0,void 0,!0);let i=xI.createNatsTableStreamName(r,s),o=await B_.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===th.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(rQ,"readTransactionLog");async function sQ(e){let t=j1(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!GI.get(th.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,VI,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=FI.checkSchemaTableExist(r,s);if(i)throw Bn(new Error,i,Hn.NOT_FOUND,void 0,void 0,!0);let o=xI.createNatsTableStreamName(r,s),{jsm:c}=await B_.getNATSReferences(),_=await B_.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 B_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(sQ,"deleteTransactionLogsBefore")});var sh=f((z6,jI)=>{"use strict";var q_=require("joi"),F_=require("path"),$I=require("fs-extra"),{exec:nQ}=require("child_process"),iQ=require("util"),YI=iQ.promisify(nQ),aQ=T(),{handleHDBError:qn,hdb_errors:oQ}=y(),{HTTP_STATUS_CODES:Fn}=oQ,KI=U(),cQ=re(),G_=I();KI.initSync();var rh=KI.get(aQ.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),WI="npm install --omit=dev --json",_Q=`${WI} --dry-run`;jI.exports={installModules:uQ,auditModules:lQ};async function QI(e,t=void 0){let{stdout:r,stderr:s}=await YI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
`,"")}a(Zp,"runCommand");async function Yx(){try{await yx.access(TE)}catch{return!1}let e=await Zp(`${TE} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Ux.eq(t,kx)}a(Yx,"checkNATSServerInstalled");async function gE(e,t,r,s=!0,n="127.0.0.1"){return Bx({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ge.get(Q.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(gE,"createConnection");async function Kx(){Vt&&(await Vt.drain(),Vt=void 0)}a(Kx,"closeConnection");async function Mc(){if(!Vt){let e=await Kp.getClusterUser();if(Us(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Vt=await gE(t,e.username,e.decrypt_hash)}return Vt}a(Mc,"getConnection");async function Vi(){if(qi)return qi;Us(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Us(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qi=await Vt.jetstreamManager({domain:e}),qi}a(Vi,"getJetStreamManager");async function jp(){if(Fi)return Fi;Us(Vt)&&await Mc();let{domain:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Us(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Fi=Vt.jetstream({domain:e}),Fi}a(jp,"getJetStream");async function ht(){let e=Vt||await Mc(),t=qi||await Vi(),r=Fi||await jp();return{connection:e,jsm:t,js:r}}a(ht,"getNATSReferences");async function Wx(e){let t=ge.get(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Kp.getClusterUser(),n=await gE(t,r,s),i=pE(),o=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of o){let E=Xp.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 Uc.async_set_timeout(e),await o.drain(),await n.close(),await u,c}a(Wx,"getServerList");async function OE(e,t){let{jsm:r}=await ht(),s=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Qp.File,retention:Jp.Limits,subjects:t,discard:Hx.Old,duplicate_window:Wp,max_msgs:n,max_bytes:i,max_age:s})}a(OE,"createLocalStream");async function eg(){let{jsm:e}=await ht(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eg,"listStreams");async function Qx(e){let{jsm:t}=await ht();await t.streams.delete(e)}a(Qx,"deleteLocalStream");async function Jx(e){let{connection:t}=await ht(),r=[],s=pE(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Xp.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(Jx,"listRemoteStreams");async function zx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o=[],c={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(c.deliver_policy=xi.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=zp(l),d=RE(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(zx,"viewStream");async function*Xx(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await ht(),i=mE(),o={ack_policy:AE.None,durable_name:i,deliver_subject:i,deliver_policy:xi.All};t&&(o.deliver_policy=xi.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=zp(u),E=RE(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(Xx,"viewStreamIterator");async function Zx(e,t,r,s){zr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;ge.get(Q.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(V.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=tg(s,r);let{js:i}=await ht(),o=await $i(),c=`${e}.${o}`;try{zr.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,SE(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")zr.trace(`publishToStream creating stream: ${t}`),await OE(t,[c]),n&&await i.publish(c,SE(s),{headers:r});else throw _}}a(Zx,"publishToStream");function tg(e,t){t===void 0&&(t=Fx());let r=ge.get(Q.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(V.MSG_HEADERS.NATS_MSG_ID)){let s=Uc.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${mE()}`;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(tg,"addNatsMsgHeader");function ki(e){e=e.toLowerCase();let t=Gi.join(ge.get(Q.CONFIG_PARAMS.ROOTPATH),Vx);if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Us(fE)&&(fE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Gi.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),fE;if(e===Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Us(hE)&&(hE={port:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:Bi.getConfigFromFile(Q.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Gi.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),hE;zr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ki,"getServerConfig");async function jx(e){let{jsm:t}=await ht(),r=await $i();try{await t.streams.add({name:e.stream_name,storage:Qp.File,retention:Jp.Workqueue,duplicate_window:Wp,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:AE.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:xi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}a(jx,"createWorkQueueStream");async function rg(e,t,r){let{jsm:s}=await ht(),n=await s.streams.info(t),i=sg(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Lc.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 m={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(rg,"addSourceToWorkStream");function sg(e){return e.split(".")[1]}a(sg,"extractServerName");async function ng(e,t,r){let{schema:s,table:n}=r,i=Lc.createNatsTableStreamName(s,n),{jsm:o}=await ht(),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(ng,"removeSourceFromWorkStream");async function eV(e,t,r=2e3,s=pE()){if(!Uc.isObject(t))throw new Error("data param must be an object");let n=SE(t),{connection:i}=await ht(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return RE(c.data)}a(eV,"request");function NE(e){return new Promise(async(t,r)=>{let s=Px(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(NE,"reloadNATS");async function tV(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await NE(e)}a(tV,"reloadNATSHub");async function rV(){let{pid_file_path:e}=ki(Q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await NE(e)}a(rV,"reloadNATSLeaf");function sV(e,t,r){let s;switch(e.code){case $p.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case $p.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(sV,"requestErrorHandler");async function nV(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await vx.writeTransaction(Q.SYSTEM_SCHEMA_NAME,Q.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await rg(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await ng(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(nV,"updateWorkStream");async function ig(e,t){let r=Lc.createNatsTableStreamName(e,t),s=await $i(),n=cV(e,t,s);await OE(r,[n])}a(ig,"createLocalTableStream");async function iV(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await ig(s,n)}}a(iV,"createTableStreams");async function ag(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Lc.createNatsTableStreamName(e,t),{jsm:s}=await ht();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")zr.warn(r);else throw r}}a(ag,"purgeTableStream");async function aV(e,t){if(ge.get(Q.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await ag(e,t[r])}a(aV,"purgeSchemaTableStreams");async function oV(e){return(await Vi()).streams.info(e)}a(oV,"getStreamInfo");function cV(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(cV,"createSubjectName");async function $i(){if(Hi)return Hi;if(Hi=(await Vi())?.nc?.info?.server_name,Hi===void 0)throw new Error("Unable to get jetstream manager server name");return Hi}a($i,"getJsmServerName");async function _V(){let e=await Vi(),t=await $i(),r=await eg();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=uV(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}`;zr.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}`;zr.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(".");zr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(_V,"updateLocalStreams");function uV(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=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=ge.get(Q.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=ge.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(uV,"updateStreamLimits")});var IE=f((Pj,cg)=>{"use strict";var Dc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Dc,"ClusteringOriginObject");cg.exports=Dc});var Yi=f((Bj,_g)=>{"use strict";var lV=b(),bE=U(),Xr=T(),EV=le(),dV=He(),sr=I(),hV=IE(),fV=Yr();bE.initSync();_g.exports={postOperationHandler:TV};async function Pc(e,t,r,s){if(e.schema===Xr.SYSTEM_SCHEMA_NAME)return;let n=SV(e,t,r);n&&(sr.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await dV.publishToStream(`${EV.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,fV.createNatsTableStreamName(e.schema,e.table),s,n))}a(Pc,"sendOperationTransaction");function SV(e,t,r){if(lV.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===Xr.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(SV,"convertCRUDOperationToTransaction");async function TV(e,t,r){if(!bE.get(Xr.CONFIG_PARAMS.CLUSTERING_ENABLED))return;sr.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=bE.get(Xr.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new hV(t.txn_time,s,n);switch(e.operation){case Xr.OPERATIONS_ENUM.INSERT:try{await Pc(e,t.inserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for insert."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.DELETE:try{await Pc(e,t.deleted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for delete."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPDATE:try{await Pc(e,t.update_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for update."),sr.error(o)}break;case Xr.OPERATIONS_ENUM.UPSERT:try{await Pc(e,t.upserted_hashes,i,r)}catch(o){sr.error("There was an error calling clustering postOperationHandler for upsert."),sr.error(o)}break;default:break}return t}a(TV,"postOperationHandler")});var hg=f((qj,dg)=>{"use strict";var mV=bt(),RV=Ar(),ug=I(),lg=It(),AV=yc(),pV=require("clone"),CE=require("alasql"),gV=Oc(),Eg=require("util"),OV=Eg.promisify(RV.getTableSchema),NV=Eg.promisify(mV.search),IV=T(),wE=b(),bV=Yi();gV(CE);dg.exports={update:CV};var wV="There was a problem performing this update. Please check the logs and try again.";async function CV({statement:e,hdb_user:t}){let r=await OV(e.table.databaseid,e.table.tableid),s=yV(e.columns);wE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=pV(n),c=wE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=CE.parse(_).statements[0],l=await AV.writeTransaction(r.schema,r.name,async()=>{let E=await NV(u),d=UV(s,E);return LV(o,d,t)});return await lg.flush({schema:r.schema,table:r.name}),l}a(CV,"update");function yV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=CE.compile(`SELECT ${r.expression.toString()} AS [${IV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw ug.error(t),new Error(wV)}}a(yV,"createUpdateRecord");function UV(e,t){return wE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(UV,"buildUpdateRecords");async function LV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await lg.update(s);await bV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){ug.error(`Error delete new_attributes from update response: ${i}`)}return n}a(LV,"updateRecords")});var Sg=f((Gj,fg)=>{var MV=require("alasql"),DV=bt(),PV=I(),vV=Xt(),UE=require("util"),yE=b(),BV=T(),HV=Ar(),qV=yc(),FV=Yi(),GV=It(),xV="record",VV="successfully deleted",kV=UE.callbackify(WV),$V=UE.promisify(DV.search),YV=UE.promisify(HV.getTableSchema);fg.exports={convertDelete:kV};function KV(e){return`${e.deleted_hashes.length} ${xV}${e.deleted_hashes.length===1?"":"s"} ${VV}`}a(KV,"generateReturnMessage");async function WV({statement:e,hdb_user:t}){let r=await YV(e.table.databaseid,e.table.tableid);yE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=yE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=MV.parse(o).statements[0],_={operation:BV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await qV.writeTransaction(r.schema,r.name,async()=>(_.records=await $V(c),vV.deleteRecords(_)));return await GV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await FV.postOperationHandler(_,u),yE.isEmptyOrZeroLength(u.message)&&(u.message=KV(u)),delete u.txn_time,u}catch(u){throw PV.error(u),u.hdb_code?u.message:u}}a(WV,"convertDelete")});var Rg=f((Vj,mg)=>{"use strict";var ME=Ns(),{hdb_errors:LE}=y();mg.exports={checkSchemaExists:Tg,checkSchemaTableExists:QV,schema_describe:ME};async function Tg(e){if(!global.hdb_schema[e])try{let t=await ME.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return LE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(Tg,"checkSchemaExists");async function QV(e,t){let r=await Tg(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await ME.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return LE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(QV,"checkSchemaTableExists")});var Bc=f((Yj,Og)=>{"use strict";var On=Oo(),Ls=Rg(),JV=I(),zV=require("uuid").v4,$j=require("clone"),Nn=ln(),Ms=T(),XV=require("util"),Ds=Xt(),{handleHDBError:Qe,hdb_errors:ZV}=y(),{HDB_ERROR_MSGS:vc,HTTP_STATUS_CODES:Je}=ZV,{SchemaEventMsg:In}=Kr(),Ag=He();Og.exports={createSchema:jV,createSchemaStructure:pg,createTable:ek,createTableStructure:gg,createAttribute:ik,dropSchema:tk,dropTable:rk,dropAttribute:sk};async function jV(e){try{let t=await pg(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(jV,"createSchema");async function pg(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);if(!await Ls.checkSchemaExists(e.schema))throw Qe(new Error,vc.SCHEMA_EXISTS_ERR(e.schema),Je.BAD_REQUEST,Ms.LOG_LEVELS.ERROR,vc.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ds.createSchema(e),`schema '${e.schema}' successfully created`}a(pg,"createSchemaStructure");async function ek(e){let t=await gg(e);return Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),t}a(ek,"createTable");async function gg(e){let t=On.create_table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);On.validateTableResidence(e.residence);let r=await Ls.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);if(!await Ls.checkSchemaTableExists(e.schema,e.table))throw Qe(new Error,vc.TABLE_EXISTS_ERR(e.schema,e.table),Je.BAD_REQUEST,Ms.LOG_LEVELS.ERROR,vc.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ds.createTable(n,e);else throw Qe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Je.BAD_REQUEST);else await Ds.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(gg,"createTableStructure");async function tk(e){let t=On.schema_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaExists(e.schema);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);let s=await Ls.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ds.dropSchema(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await Ag.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(tk,"dropSchema");async function rk(e){let t=On.table_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);return await Ds.dropTable(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table)),await Ag.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(rk,"dropTable");async function sk(e){let t=On.attribute_object(e);if(t)throw Qe(t,t.message,Je.BAD_REQUEST,void 0,void 0,!0);let r=await Ls.checkSchemaTableExists(e.schema,e.table);if(r)throw Qe(new Error,r,Je.NOT_FOUND,Ms.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qe(new Error,"You cannot drop a hash attribute",Je.BAD_REQUEST,void 0,void 0,!0);if(Ms.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Je.BAD_REQUEST,void 0,void 0,!0);try{return await Ds.dropAttribute(e),nk(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw JV.error(`Got an error deleting attribute ${XV.inspect(e)}.`),s}}a(sk,"dropAttribute");function nk(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(nk,"dropAttributeFromGlobal");async function ik(e){return await Ds.createAttribute(e),Nn.signalSchemaChange(new In(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(ik,"createAttribute")});var Ig=f((Wj,Ng)=>{"use strict";var{OPERATIONS_ENUM:ak}=T(),Hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=ak.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Hc,"ReadAuditLogObject");Ng.exports=Hc});var DE=f((zj,Ug)=>{"use strict";var ok=Xt(),Jj=Ig(),qc=b(),Fc=T(),ck=U(),{handleHDBError:bg,hdb_errors:_k}=y(),{HDB_ERROR_MSGS:wg,HTTP_STATUS_CODES:Cg}=_k,uk=Object.values(Fc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yg="To use this operation audit log must be enabled in harperdb-config.yaml";Ug.exports=lk;async function lk(e){if(qc.isEmpty(e.schema))throw new Error(wg.SCHEMA_REQUIRED_ERR);if(qc.isEmpty(e.table))throw new Error(wg.TABLE_REQUIRED_ERR);if(!ck.get(Fc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bg(new Error,yg,Cg.BAD_REQUEST,Fc.LOG_LEVELS.ERROR,yg,!0);let t=qc.checkSchemaTableExist(e.schema,e.table);if(t)throw bg(new Error,t,Cg.NOT_FOUND,Fc.LOG_LEVELS.ERROR,t,!0);if(!qc.isEmpty(e.search_type)&&uk.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await ok.readAuditLog(e)}a(lk,"readAuditLog")});var Bg=f((Zj,vg)=>{var Zr=require("validate.js"),Mg=re(),bn=T(),{handleHDBError:Ek,hdb_errors:dk}=y(),{HDB_ERROR_MSGS:_e,HTTP_STATUS_CODES:hk}=dk,PE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),fk={STRUCTURE_USER:"structure_user"},Lg=Object.values(bn.ROLE_TYPES_ENUM),Sk="attribute_permissions",Tk="attribute_name",{PERMS_CRUD_ENUM:wn}=bn,mk=[Sk,...Object.values(wn)],Dg=[wn.READ,wn.INSERT,wn.UPDATE],Rk=[Tk,...Dg];function Ak(e){let t=PE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Pg(e,t)}a(Ak,"addRoleValidation");function pk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Pg(e,t)}a(pk,"alterRoleValidation");function gk(e){let t=PE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Mg.validateObject(e,t)}a(gk,"dropRoleValidation");var Ok=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Pg(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Ok.includes(s[o])||n.push(s[o]);n.length>0&&de(_e.INVALID_ROLE_JSON_KEYS(n),r);let i=Mg.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{de(o,r)}),e.permission){let o=Nk(e);o&&de(o,r),Lg.forEach(c=>{e.permission[c]&&!Zr.isBoolean(e.permission[c])&&de(_e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Lg.indexOf(o)<0){if(o===fk.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]||de(_e.SCHEMA_NOT_FOUND(E),r)}continue}de(_e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){de(_e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){de(_e.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{mk.includes(l)||de(_e.INVALID_PERM_KEY(l),r,o,_)}),Object.values(wn).forEach(l=>{Zr.isDefined(u[l])?Zr.isBoolean(u[l])||de(_e.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):de(_e.TABLE_PERM_MISSING(l),r,o,_)}),Zr.isDefined(u.attribute_permissions)){if(!Zr.isArray(u.attribute_permissions)){de(_e.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{de(_e.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=>{!Rk.includes(R)&&R!==wn.DELETE&&de(_e.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Zr.isDefined(h.attribute_name)){de(_e.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){de(_e.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}Dg.forEach(R=>{Zr.isDefined(h[R])?Zr.isBoolean(h[R])||de(_e.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):de(_e.ATTR_PERM_MISSING(R,m),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}.${_}`;de(_e.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return Ik(r)}a(Pg,"customValidate");vg.exports={addRoleValidation:Ak,alterRoleValidation:pk,dropRoleValidation:gk};function Nk(e){let{operation:t,permission:r}=e;if(t===bn.OPERATIONS_ENUM.ADD_ROLE||t===bn.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 _e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?bn.ROLE_TYPES_ENUM.SUPER_USER:bn.ROLE_TYPES_ENUM.CLUSTER_USER;return _e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Nk,"validateNoSUPerms");function Ik(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:_e.ROLE_PERMS_ERROR,...e};return Ek(new Error,s,hk.BAD_REQUEST)}else return null}a(Ik,"generateRolePermResponse");function de(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(de,"addPermError")});var VE=f((e8,Vg)=>{"use strict";var Hg=It(),qg=bt(),bk=gs(),HE=Bg(),qE=ln(),wk=require("uuid").v4,FE=require("util"),Ck=ms(),Or=T(),Fg=b(),GE=FE.promisify(qg.searchByValue),yk=FE.promisify(qg.searchByHash),Uk=FE.promisify(bk.delete),Lk=Gt(),Mk=Sn(),{hdb_errors:Dk,handleHDBError:Ki}=y(),{HDB_ERROR_MSGS:Gg,HTTP_STATUS_CODES:vE}=Dk,{UserEventMsg:xE}=Kr();Vg.exports={addRole:Pk,alterRole:Bk,dropRole:Hk,listRoles:xg};function BE(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(BE,"scrubRoleDetails");async function Pk(e){let t=HE.addRoleValidation(e);if(t)throw t;if(!(await Ck.getLicense()).enterprise){let o=await xg();if(vk(e,o))throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Or.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_NON_CU_ROLES+Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Or.SUPPORT_HELP_MSG}`)}e=BE(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 GE(s)||[])}catch(o){throw Ki(o)}if(n&&n.length>0)throw Ki(new Error,Gg.ROLE_ALREADY_EXISTS(e.role),vE.CONFLICT,void 0,void 0,!0);e.id||(e.id=wk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Hg.insert(i),qE.signalUserChange(new xE(process.pid)),e=BE(e),e}a(Pk,"addRole");function vk(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(!Fg.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(vk,"checkClusterUserRole");async function Bk(e){let t=HE.alterRoleValidation(e);if(t)throw t;e=BE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Hg.update(r)}catch(s){throw Ki(s)}return qE.signalUserChange(new xE(process.pid)),e}a(Bk,"alterRole");async function Hk(e){let t=HE.dropRoleValidation(e);if(t)throw Ki(new Error,t,vE.BAD_REQUEST,void 0,void 0,!0);let r=new Mk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await yk(r));if(s.length===0)throw Ki(new Error,Gg.ROLE_NOT_FOUND,vE.NOT_FOUND,void 0,void 0,!0);let n=new Lk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await GE(n)),o=!1;if(Fg.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 Uk(c),qE.signalUserChange(new xE(process.pid)),`${s[0].role} successfully deleted`}a(Hk,"dropRole");async function xg(){return GE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(xg,"listRoles")});var Kg=f((r8,Yg)=>{"use strict";var qk=U(),jr=require("joi"),Fk=re(),kg=require("moment"),Gk=require("fs-extra"),kE=require("path"),xk=require("lodash"),Wi=T(),{LOG_LEVELS:Ps}=T(),Vk="YYYY-MM-DD hh:mm:ss",kk=kE.resolve(__dirname,"../logs");Yg.exports=function(e){return Fk.validateBySchema(e,$k)};var $k=jr.object({from:jr.custom($g),until:jr.custom($g),level:jr.valid(Ps.NOTIFY,Ps.FATAL,Ps.ERROR,Ps.WARN,Ps.INFO,Ps.DEBUG,Ps.TRACE),order:jr.valid("asc","desc"),limit:jr.number().min(1),start:jr.number().min(0),log_name:jr.custom(Yk)});function $g(e,t){if(kg(e,kg.ISO_8601).format(Vk)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($g,"validateDatetime");function Yk(e,t){if(xk.invert(Wi.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=qk.get(Wi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Wi.LOG_NAMES.HDB:e,i=n===Wi.LOG_NAMES.INSTALL?kE.join(kk,Wi.LOG_NAMES.INSTALL):kE.join(s,n);return Gk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Yk,"validateReadLogPath")});var YE=f((n8,Wg)=>{"use strict";var Gc=T(),Kk=I(),Wk=U(),Qk=Kg(),$E=require("path"),Jk=require("fs-extra"),{once:zk}=require("events"),{handleHDBError:Xk,hdb_errors:Zk}=y(),{PACKAGE_ROOT:jk}=T(),e$=$E.join(jk,"logs"),t$=1e3;Wg.exports=r$;async function r$(e){let t=Qk(e);if(t)throw Xk(t,t.message,Zk.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Wk.get(Gc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Gc.LOG_NAMES.HDB:e.log_name,n=s===Gc.LOG_NAMES.INSTALL?$E.join(e$,Gc.LOG_NAMES.INSTALL):$E.join(r,s),i=Jk.createReadStream(n);i.on("error",M=>{Kk.error(M)});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?t$:e.limit,h=e.order===void 0?void 0:e.order,m=e.start===void 0?0:e.start,R=m+d,g=0,H=[],x="",q;i.on("data",M=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;M=x+M;let ue=0,oe;for(;(oe=$.exec(M))&&!i.destroyed;){q&&(q.message=M.slice(ue,oe.index),Ue(q));let[kn,ls,Mr]=oe,va=Mr.split("] ["),pC=va[0],gC=va[1];va.splice(0,2),q={timestamp:ls,thread:pC,level:gC,tags:va,message:""},ue=oe.index+kn.length}x=M.slice(ue)}),i.on("end",M=>{i.destroyed||q&&(q.message=x.trim(),Ue(q))}),i.resume();function Ue(M){let $,ue,oe;switch(!0){case(o&&_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),M.level===c&&$>=ue&&$<=oe&&g<m?g++:M.level===c&&$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&_):$=new Date(M.timestamp),ue=new Date(u),M.level===c&&$>=ue&&g<m?g++:M.level===c&&$>=ue&&(es(M,h,H),g++,g===R&&i.destroy());break;case(o&&l):$=new Date(M.timestamp),oe=new Date(E),M.level===c&&$<=oe&&g<m?g++:M.level===c&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case(_&&l):$=new Date(M.timestamp),ue=new Date(u),oe=new Date(E),$>=ue&&$<=oe&&g<m?g++:$>=ue&&$<=oe&&(es(M,h,H),g++,g===R&&i.destroy());break;case o:M.level===c&&g<m?g++:M.level===c&&(es(M,h,H),g++,g===R&&i.destroy());break;case _:$=new Date(M.timestamp),ue=new Date(u),$>=ue&&g<m?g++:$>=ue&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;case l:$=new Date(M.timestamp),oe=new Date(E),$<=oe&&g<m?g++:$<=oe&&g>=m&&(es(M,h,H),g++,g===R&&i.destroy());break;default:g<m?g++:(es(M,h,H),g++,g===R&&i.destroy())}}return a(Ue,"onLogMessage"),await zk(i,"close"),H}a(r$,"readLog");function es(e,t,r){t==="desc"?s$(e,r):t==="asc"?n$(e,r):r.push(e)}a(es,"pushLineToResult");function s$(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(s$,"insertDescending");function n$(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(n$,"insertAscending")});var Vc=f((c8,zg)=>{"use strict";var KE=require("joi"),{string:xc,boolean:Qg,date:i$}=KE.types(),a$=re(),{validateSchemaExists:a8,validateTableExists:o8,validateSchemaName:o$}=zt(),c$=T(),_$=le(),u$=U(),l$=xc.invalid(u$.get(c$.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(_$.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(),Jg={operation:xc.valid("add_node","update_node"),node_name:l$,subscriptions:KE.array().items({table:xc.required(),schema:xc.custom(o$).required(),subscribe:Qg.required(),publish:Qg.required().custom(d$),start_time:i$.iso()}).min(1).required()};function E$(e){return a$.validateBySchema(e,KE.object(Jg))}a(E$,"addUpdateNodeValidator");function d$(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(d$,"checkForFalsy");zg.exports={addUpdateNodeValidator:E$,validation_schema:Jg}});var Zg=f((u8,Xg)=>{var h$=re(),f$={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Xg.exports=function(e){return h$.validateObject(e,f$)}});var WE=f((l8,jg)=>{"use strict";var S$=T().OPERATIONS_ENUM,kc=class{constructor(t,r,s,n=void 0){this.operation=S$.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kc,"UpdateObject");jg.exports=kc});var tO=f((d8,eO)=>{"use strict";var T$={OPERATION:"operation",REFRESH:"refresh"},$c=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a($c,"JWTTokens");var Yc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Yc,"JWTRSAKeys");eO.exports={JWTTokens:$c,TOKEN_TYPE_ENUM:T$,JWTRSAKeys:Yc}});var Jc=f((f8,iO)=>{"use strict";var Ji=require("jsonwebtoken"),QE=require("fs-extra"),JE=b(),wt=T(),{handleHDBError:ze,hdb_errors:m$}=y(),{HTTP_STATUS_CODES:Xe,AUTHENTICATION_ERROR_MSGS:Ze}=m$,Qi=I(),rO=Do(),ZE=er(),R$=It().update,A$=WE(),p$=ln(),{UserEventMsg:g$}=Kr(),ts=U();ts.initSync();var zE=require("path"),{JWTTokens:O$,JWTRSAKeys:N$,TOKEN_TYPE_ENUM:Kc}=tO(),I$=ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",b$=ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ts.get(wt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Wc="RS256",XE;iO.exports={createTokens:w$,validateOperationToken:y$,refreshOperationToken:C$,validateRefreshToken:nO};async function w$(e){if(JE.isEmpty(e)||typeof e!="object")throw ze(new Error,Ze.INVALID_AUTH_OBJECT,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.username))throw ze(new Error,Ze.USERNAME_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);if(JE.isEmpty(e.password))throw ze(new Error,Ze.PASSWORD_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ZE.findAndValidateUser(e.username,e.password),!t)throw ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Qi.error(d),ze(new Error,Ze.INVALID_CREDENTIALS,Xe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Qc(),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 sO(i,r.private_key,r.passphrase),c=await Ji.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:b$,algorithm:Wc,subject:Kc.REFRESH}),_=rO.hash(c),u=new A$(wt.SYSTEM_SCHEMA_NAME,wt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await R$(u)}catch(d){Qi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ze(new Error,Ze.REFRESH_TOKEN_SAVE_FAILED,Xe.INTERNAL_SERVER_ERROR);return p$.signalUserChange(new g$(process.pid)),new O$(o,c)}a(w$,"createTokens");async function sO(e,t,r){return await Ji.sign(e,{key:t,passphrase:r},{expiresIn:I$,algorithm:Wc,subject:Kc.OPERATION})}a(sO,"signOperationToken");async function Qc(){if(XE===void 0)try{let e=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=zE.join(ts.getHdbBasePath(),wt.LICENSE_KEY_DIR_NAME,wt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await QE.readFile(e)).toString(),n=(await QE.readFile(t)).toString(),i=(await QE.readFile(r)).toString();XE=new N$(i,n,s)}catch(e){throw Qi.error(e),ze(new Error,Ze.NO_ENCRYPTION_KEYS,Xe.INTERNAL_SERVER_ERROR)}return XE}a(Qc,"getJWTRSAKeys");async function C$(e){if(!e)throw ze(new Error,Ze.INVALID_BODY,Xe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ze(new Error,Ze.REFRESH_TOKEN_REQUIRED,Xe.BAD_REQUEST,void 0,void 0,!0);await nO(e.refresh_token);let t=await Qc(),r=await Ji.decode(e.refresh_token);return{operation_token:await sO({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(C$,"refreshOperationToken");async function y$(e){try{let t=await Qc(),r=await Ji.verify(e,t.public_key,{algorithms:Wc,subject:Kc.OPERATION});return await ZE.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Qi.warn(t),t.name&&t.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}}a(y$,"validateOperationToken");async function nO(e){let t;try{let r=await Qc(),s=await Ji.verify(e,r.public_key,{algorithms:Wc,subject:Kc.REFRESH});t=await ZE.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Qi.warn(r),r.name&&r.name==="TokenExpiredError"?ze(new Error,Ze.TOKEN_EXPIRED,Xe.FORBIDDEN):ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED)}if(!rO.validate(t.refresh_token,e))throw ze(new Error,Ze.INVALID_TOKEN,Xe.UNAUTHORIZED);return t}a(nO,"validateRefreshToken")});var jE=f((m8,cO)=>{"use strict";var U$=Zg(),Cn=require("passport"),L$=require("passport-local").Strategy,M$=require("passport-http").BasicStrategy,D$=require("util"),P$=er(),oO=D$.callbackify(P$.findAndValidateUser),T8=at(),v$=T(),aO=Jc();Cn.use(new L$(function(e,t,r){oO(e,t,r)}));Cn.use(new M$(function(e,t,r){oO(e,t,r)}));Cn.serializeUser(function(e,t){t(null,e)});Cn.deserializeUser(function(e,t){t(null,e)});function B$(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":Cn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===v$.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?aO.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):aO.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Cn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(B$,"authorize");function H$(e,t){let r=U$(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(H$,"checkPermissions");cO.exports={authorize:B$,checkPermissions:H$}});var yn=f((A8,_O)=>{"use strict";var zc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(zc,"Node");var Xc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Xc,"NodeSubscription");_O.exports={Node:zc,NodeSubscription:Xc}});var lO=f((g8,uO)=>{"use strict";var q$=T().OPERATIONS_ENUM,Zc=class{constructor(t,r,s,n=void 0){this.operation=q$.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Zc,"UpsertObject");uO.exports=Zc});var zi=f((N8,EO)=>{"use strict";var jc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(jc,"RemotePayloadObject");var e_=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(e_,"RemotePayloadSubscription");EO.exports={RemotePayloadObject:jc,RemotePayloadSubscription:e_}});var hO=f((b8,dO)=>{"use strict";var t_=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(t_,"TableSizeObject");dO.exports=t_});var SO=f((C8,fO)=>{"use strict";var F$=hO(),G$=Le(),Un=z(),x$=I(),{getSchemaPath:V$,getTransactionAuditStorePath:k$}=j();fO.exports=$$;async function $$(e){let t=new F$;try{let r=V$(e.schema,e.name),s=await Un.openEnvironment(r,e.name),n=Un.statDBI(s,e.hash_attribute),i=k$(e.schema,e.name),o=await Un.openEnvironment(i,e.name,!0),c=Un.statDBI(o,G$.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Un.environmentDataSize(r,e.name),u=await Un.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){x$.warn(`unable to stat table dbi due to ${r}`)}return t}a($$,"lmdbGetTableSize")});var mO=f((U8,TO)=>{"use strict";var r_=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(r_,"SystemInformationObject");TO.exports=r_});var Ln=f((M8,gO)=>{"use strict";var Y$=require("fs-extra"),K$=require("path"),qe=require("systeminformation"),rs=I(),ed=T(),W$=SO(),AO=Ns(),{getThreadInfo:RO}=cn(),pO=U();pO.initSync();var Q$=mO(),{openEnvironment:J$}=z(),{getSchemaPath:z$}=j(),s_;gO.exports={getHDBProcessInfo:nd,getNetworkInfo:ad,getDiskInfo:id,getMemoryInfo:sd,getCPUInfo:rd,getTimeInfo:td,getSystemInformation:od,systemInformation:X$,getTableSize:cd,getMetrics:_d};function td(){return qe.time()}a(td,"getTimeInfo");async function rd(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await qe.cpu();l.cpu_speed=await qe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:g,cpus:H,...x}=await qe.currentLoad();return x.cpus=[],H.forEach(q=>{let{raw_load:Ue,raw_load_idle:M,raw_load_irq:$,raw_load_nice:ue,raw_load_system:oe,raw_load_user:kn,...ls}=q;x.cpus.push(ls)}),l.current_load=x,l}catch(e){return rs.error(`error in getCPUInfo: ${e}`),{}}}a(rd,"getCPUInfo");async function sd(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return rs.error(`error in getMemoryInfo: ${e}`),{}}}a(sd,"getMemoryInfo");async function nd(){let e={core:[],clustering:[]};try{let t=await qe.processes(),r;try{r=Number.parseInt(await Y$.readFile(K$.join(pO.get(ed.CONFIG_PARAMS.ROOTPATH),ed.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===ed.NODE_ERROR_CODES.ENOENT)rs.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 rs.error(`error in getHDBProcessInfo: ${t}`),e}}a(nd,"getHDBProcessInfo");async function id(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await qe.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await qe.fsStats();return e.read_write=u,e.size=await qe.fsSize(),e}catch(t){return rs.error(`error in getDiskInfo: ${t}`),e}}a(id,"getDiskInfo");async function ad(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await qe.networkInterfaceDefault(),e.latency=await qe.inetChecksite("google.com"),(await qe.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 qe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return rs.error(`error in getNetworkInfo: ${t}`),e}}a(ad,"getNetworkInfo");async function od(){if(s_!==void 0)return s_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await qe.osInfo();e=c;let _=await qe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,s_=e,s_}catch(t){return rs.error(`error in getSystemInformation: ${t}`),e}}a(od,"getSystemInformation");async function cd(){let e=[],t=await AO.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await W$(s));return e}a(cd,"getTableSize");async function _d(){let e=await AO.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=z$(r,n),c=(await J$(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){rs.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(_d,"getMetrics");async function X$(e){let t=new Q$;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await od(),t.time=td(),t.cpu=await rd(),t.memory=await sd(),t.disk=await id(),t.network=await ad(),t.harperdb_processes=await nd(),t.table_size=await cd(),t.metrics=await _d(),t.threads=await RO(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await od();break;case"time":t.time=td();break;case"cpu":t.cpu=await rd();break;case"memory":t.memory=await sd();break;case"disk":t.disk=await id();break;case"network":t.network=await ad();break;case"harperdb_processes":t.harperdb_processes=await nd();break;case"table_size":t.table_size=await cd();break;case"database_metrics":case"metrics":t.metrics=await _d();break;case"threads":t.threads=await RO();break;default:break}return t}a(X$,"systemInformation")});var ud=f((B8,OO)=>{"use strict";var P8=require("fs-extra"),v8=I();OO.exports={version:Z$,printVersion:eY,nodeVersion:j$};var ss=ei();function Z$(){if(ss)return ss.version}a(Z$,"version");function j$(){if(ss&&ss.engines&&ss.engines["preferred-node"])return ss.engines["preferred-node"]}a(j$,"nodeVersion");function eY(){ss&&console.log(`HarperDB Version ${ss.version}`)}a(eY,"printVersion")});var Nr=f((G8,wO)=>{"use strict";var tY=It(),ld=b(),Ed=require("util"),vs=T(),NO=U();NO.initSync();var rY=jE(),IO=bt(),{Node:q8,NodeSubscription:F8}=yn(),sY=Sn(),nY=lO(),{RemotePayloadObject:iY,RemotePayloadSubscription:aY}=zi(),{handleHDBError:oY,hdb_errors:cY}=y(),{HTTP_STATUS_CODES:_Y,HDB_ERROR_MSGS:uY}=cY,lY=Gt(),EY=Ln(),dY=ud(),hY=Ed.promisify(rY.authorize),fY=Ed.promisify(IO.searchByHash),SY=Ed.promisify(IO.searchByValue);wO.exports={authHeaderToUser:TY,isEmpty:mY,getNodeRecord:RY,upsertNodeRecord:AY,buildNodePayloads:pY,checkClusteringEnabled:gY,getAllNodeRecords:OY,getSystemInfo:NY,reverseSubscription:bO};async function TY(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await hY(t,null),e}a(TY,"authHeaderToUser");function mY(e){return e==null}a(mY,"isEmpty");async function RY(e){let t=new sY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return fY(t)}a(RY,"getNodeRecord");async function AY(e){let t=new nY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return tY.upsert(t)}a(AY,"upsertNodeRecord");function bO(e){if(ld.isEmpty(e.subscribe)||ld.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(bO,"reverseSubscription");function pY(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=ld.getTableHashAttribute(_,u),{subscribe:E,publish:d}=bO(c),h=new aY(_,u,l,d,E,c.start_time);n.push(h)}return new iY(r,t,n,s)}a(pY,"buildNodePayloads");function gY(){if(!NO.get(vs.CONFIG_PARAMS.CLUSTERING_ENABLED))throw oY(new Error,uY.CLUSTERING_NOT_ENABLED,_Y.BAD_REQUEST,void 0,void 0,!0)}a(gY,"checkClusteringEnabled");async function OY(){let e=new lY(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await SY(e))}a(OY,"getAllNodeRecords");async function NY(){let e=await EY.getSystemInformation();return{hdb_version:dY.version(),node_version:e.node_version,platform:e.platform}}a(NY,"getSystemInfo")});var hd=f((V8,DO)=>{"use strict";var dd=He(),CO=b(),yO=le(),IY=T(),n_=I(),UO=Bc(),bY=jl(),{RemotePayloadObject:wY}=zi(),{handleHDBError:LO,hdb_errors:CY}=y(),{HTTP_STATUS_CODES:MO}=CY,{NodeSubscription:yY}=yn();DO.exports=UY;async function UY(e,t){let r;try{r=await dd.request(`${t}.${yO.REQUEST_SUFFIX}`,new wY(IY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=dd.requestErrorHandler(o,"add_node",t);throw LO(new Error,c,MO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===yO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw LO(new Error,o,MO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=CO.doesSchemaExist(c),l=s[c]!==void 0,E=CO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(n_.trace(`addNode creating schema: ${c}`),await UO.createSchema({operation:"create_schema",schema:c})),!E&&d){n_.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new bY(c,_,s[c][_].hash_attribute);await UO.createTable(m)}await dd.createLocalTableStream(c,_);let h=new yY(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(UY,"reviewSubscriptions")});var o_=f(($8,BO)=>{"use strict";var{handleHDBError:i_,hdb_errors:LY}=y(),{HTTP_STATUS_CODES:a_}=LY,{addUpdateNodeValidator:MY}=Vc(),Xi=I(),vO=T(),PO=le(),DY=b(),fd=He(),Zi=Nr(),PY=U(),vY=hd(),{Node:BY,NodeSubscription:HY}=yn(),qY="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",FY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",GY=PY.get(vO.CONFIG_PARAMS.CLUSTERING_NODENAME);BO.exports=xY;async function xY(e,t=!1){Xi.trace("addNode called with:",e),Zi.checkClusteringEnabled();let r=MY(e);if(r)throw i_(r,r.message,a_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Zi.getNodeRecord(s);if(!DY.isEmptyOrZeroLength(E))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await vY(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=qY,o;let c=Zi.buildNodePayloads(n,GY,vO.OPERATIONS_ENUM.ADD_NODE,await Zi.getSystemInfo());Xi.trace("addNode sending remote payload:",c);let _;try{_=await fd.request(`${s}.${PO.REQUEST_SUFFIX}`,c)}catch(E){Xi.error(`addNode received error from request: ${E}`);let d=fd.requestErrorHandler(E,"add_node",s);throw i_(new Error,d,a_.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===PO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw i_(new Error,E,a_.INTERNAL_SERVER_ERROR,"error",E)}Xi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];Xi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await fd.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new HY(h.schema,h.table,h.publish,h.subscribe))}let l=new BY(s,u,_.system_info);return await Zi.upsertNodeRecord(l),i.length>0?o.message=FY:o.message=`Successfully added '${s}' to manifest`,o}a(xY,"addNode")});var Td=f((K8,FO)=>{"use strict";var{handleHDBError:c_,hdb_errors:VY}=y(),{HTTP_STATUS_CODES:__}=VY,{addUpdateNodeValidator:kY}=Vc(),ji=I(),qO=T(),HO=le(),$Y=b(),Sd=He(),ea=Nr(),YY=U(),{cloneDeep:KY}=require("lodash"),WY=hd(),{NodeSubscription:QY}=yn(),JY="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",zY="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",XY=YY.get(qO.CONFIG_PARAMS.CLUSTERING_NODENAME);FO.exports=ZY;async function ZY(e){ji.trace("updateNode called with:",e),ea.checkClusteringEnabled();let t=kY(e);if(t)throw c_(t,t.message,__.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=KY(await ea.getNodeRecord(r));if($Y.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,__.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await WY(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=JY,o;let c=ea.buildNodePayloads(n,XY,qO.OPERATIONS_ENUM.UPDATE_NODE,await ea.getSystemInfo());ji.trace("updateNode sending remote payload:",c);let _;try{_=await Sd.request(`${r}.${HO.REQUEST_SUFFIX}`,c)}catch(u){ji.error(`updateNode received error from request: ${u}`);let l=Sd.requestErrorHandler(u,"update_node",r);throw c_(new Error,l,__.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===HO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw c_(new Error,u,__.INTERNAL_SERVER_ERROR,"error",u)}ji.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];ji.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await Sd.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await jY(s[0],n,_.system_info),i.length>0?o.message=zY:o.message=`Successfully updated '${r}'`,o}a(ZY,"updateNode");async function jY(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 QY(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ea.upsertNodeRecord(s)}a(jY,"updateNodeTable")});var $O=f((Q8,kO)=>{"use strict";var VO=require("joi"),{string:GO}=VO.types(),eK=re(),xO=T(),tK=U(),rK=le();kO.exports=sK;function sK(e){let t=GO.invalid(tK.get(xO.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),r=VO.object({operation:GO.valid(xO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return eK.validateBySchema(e,r)}a(sK,"removeNodeValidator")});var l_=f((z8,zO)=>{"use strict";var{handleHDBError:YO,hdb_errors:nK}=y(),{HTTP_STATUS_CODES:KO}=nK,iK=$O(),ta=I(),WO=Nr(),aK=b(),u_=T(),QO=le(),JO=He(),oK=U(),{RemotePayloadObject:cK}=zi(),{NodeSubscription:_K}=yn(),uK=Ci(),lK=gs(),EK=oK.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);zO.exports=dK;async function dK(e){ta.trace("removeNode called with:",e),WO.checkClusteringEnabled();let t=iK(e);if(t)throw YO(t,t.message,KO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await WO.getNodeRecord(r);if(aK.isEmptyOrZeroLength(s))throw YO(new Error,`Node '${r}' was not found.`,KO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new cK(u_.OPERATIONS_ENUM.REMOVE_NODE,EK,[]),i,o=!1;try{i=await JO.request(`${r}.${QO.REQUEST_SUFFIX}`,n),ta.trace("Remove node reply from remote node:",r,i)}catch(_){ta.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];ta.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new _K(l.schema,l.table,!1,!1);await JO.updateWorkStream(E,r)}let c=new uK(u_.SYSTEM_SCHEMA_NAME,u_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await lK.deleteRecord(c),i?.status===QO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ta.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(dK,"removeNode")});var jO=f((Z8,ZO)=>{"use strict";var XO=require("joi"),{string:hK,array:fK}=XO.types(),SK=re(),TK=Vc();ZO.exports=mK;function mK(e){let t=XO.object({operation:hK.valid("configure_cluster").required(),connections:fK.items(TK.validation_schema).required()});return SK.validateBySchema(e,t)}a(mK,"configureClusterValidator")});var md=f((e6,nN)=>{"use strict";var RK=T(),E_=I(),AK=b(),pK=l_(),gK=o_(),eN=Nr(),OK=jO(),{handleHDBError:tN,hdb_errors:NK}=y(),{HTTP_STATUS_CODES:rN}=NK,IK="Configure cluster complete.",bK="Failed to configure the cluster. Check the logs for more details.",wK="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";nN.exports=CK;async function CK(e){E_.trace("configure cluster called with:",e),eN.checkClusteringEnabled();let t=OK(e);if(t)throw tN(t,t.message,rN.BAD_REQUEST,void 0,void 0,!0);let r=await eN.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(sN(pK,{operation:RK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);E_.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(sN(gK,h,h.node_name))}let c=await Promise.allSettled(i);E_.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 m=E[d];m.status==="rejected"&&(E_.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(AK.isEmptyOrZeroLength(_))return{message:IK,connections:u};if(l)return{message:wK,failed_nodes:_,connections:u};throw tN(new Error,bK,rN.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(CK,"configureCluster");async function sN(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(sN,"functionWrapper")});var aN=f((r6,iN)=>{"use strict";var d_=require("joi"),yK=re(),{validateSchemaExists:UK,validateTableExists:LK,validateSchemaName:MK}=zt(),DK=d_.object({operation:d_.string().valid("purge_stream"),schema:d_.string().custom(UK).custom(MK).required(),table:d_.string().custom(LK).required()});function PK(e){return yK.validateBySchema(e,DK)}a(PK,"purgeStreamValidator");iN.exports=PK});var Rd=f((n6,oN)=>{"use strict";var{handleHDBError:vK,hdb_errors:BK}=y(),{HTTP_STATUS_CODES:HK}=BK,qK=aN(),FK=He(),GK=Nr();oN.exports=xK;async function xK(e){let t=qK(e);if(t)throw vK(t,t.message,HK.BAD_REQUEST,void 0,void 0,!0);GK.checkClusteringEnabled();let{schema:r,table:s}=e;return await FK.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(xK,"purgeStream")});var gd=f((a6,dN)=>{"use strict";var pd=Nr(),VK=He(),uN=U(),h_=T(),Bs=le(),kK=b(),Ad=I(),{RemotePayloadObject:$K}=zi(),{ErrorCode:cN}=require("nats"),_N=uN.get(h_.CONFIG_PARAMS.CLUSTERING_ENABLED),lN=uN.get(h_.CONFIG_PARAMS.CLUSTERING_NODENAME);dN.exports={clusterStatus:YK,buildNodeStatus:EN};async function YK(){let e={node_name:lN,is_enabled:_N,connections:[]};if(!_N)return e;let t=await pd.getAllNodeRecords();if(kK.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(EN(t[s],e.connections));return await Promise.allSettled(r),e}a(YK,"clusterStatus");async function EN(e,t){let r=e.name,s=new $K(h_.OPERATIONS_ENUM.CLUSTER_STATUS,lN,void 0,await pd.getSystemInfo()),n,i,o=Bs.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await VK.request(Bs.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Bs.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Bs.CLUSTER_STATUS_STATUSES.CLOSED,Ad.error(`Error getting node status from ${r} `,n))}catch(_){Ad.warn(`Error getting node status from ${r}`,_),_.code===cN.NoResponders?o=Bs.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===cN.Timeout?o=Bs.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Bs.CLUSTER_STATUS_STATUSES.CLOSED}let c=new KK(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!==h_.PRE_4_0_0_VERSION&&await pd.upsertNodeRecord(_)}catch(_){Ad.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(EN,"buildNodeStatus");function KK(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(KK,"NodeStatusObject")});var Nd=f((c6,hN)=>{"use strict";var{handleHDBError:WK,hdb_errors:QK}=y(),{HTTP_STATUS_CODES:JK}=QK,zK=He(),XK=Nr(),Od=b(),f_=require("joi"),ZK=re(),jK=2e3,eW=f_.object({timeout:f_.number().min(1),connected_nodes:f_.boolean(),routes:f_.boolean()});hN.exports=tW;async function tW(e){XK.checkClusteringEnabled();let t=ZK.validateBySchema(e,eW);if(t)throw WK(t,t.message,JK.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Od.autoCastBoolean(s),o=n===void 0||Od.autoCastBoolean(n),c={nodes:[]},_=await zK.getServerList(r??jK),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 m={name:d.name.slice(0,-4),response_time:_[l].response_time};i&&(m.connected_nodes=u[d.name]?u[d.name].map(R=>R.name.slice(0,-4)):[]),o&&(m.routes=h.cluster?.urls?h.cluster?.urls.map(R=>({host:R.split(":")[0],port:Od.autoCast(R.split(":")[1])})):[]),c.nodes.push(m)}}return c}a(tW,"clusterNetwork")});var mN=f((u6,TN)=>{"use strict";var Id=require("joi"),fN=re(),{route_constraints:SN}=Fu();TN.exports={setRoutesValidator:rW,deleteRoutesValidator:sW};function rW(e){let t=Id.object({server:Id.valid("hub","leaf").required(),routes:SN.required()});return fN.validateBySchema(e,t)}a(rW,"setRoutesValidator");function sW(e){let t=Id.object({routes:SN.required()});return fN.validateBySchema(e,t)}a(sW,"deleteRoutesValidator")});var wd=f((E6,gN)=>{"use strict";var Hs=fr(),bd=b(),S_=T(),RN=mN(),{handleHDBError:AN,hdb_errors:nW}=y(),{HTTP_STATUS_CODES:pN}=nW,iW="cluster routes successfully set",aW="cluster routes successfully deleted";gN.exports={setRoutes:oW,getRoutes:cW,deleteRoutes:_W};function oW(e){let t=RN.setRoutesValidator(e);if(t)throw AN(t,t.message,pN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.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=bd.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"?Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:iW,set:o,skipped:i}}a(oW,"setRoutes");function cW(){let e=Hs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(cW,"getRoutes");function _W(e){let t=RN.deleteRoutesValidator(e);if(t)throw AN(t,t.message,pN.BAD_REQUEST,void 0,void 0,!0);let r=Hs.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,m=s.length;h<m;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 m=0,R=n.length;m<R;m++){let g=n[m];if(E.host===g.host&&E.port===g.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=bd.isEmptyOrZeroLength(s)?null:s,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=bd.isEmptyOrZeroLength(n)?null:n,Hs.updateConfigValue(S_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:aW,deleted:i,skipped:o}}a(_W,"deleteRoutes")});var NN=f((h6,ON)=>{"use strict";var ra=require("alasql"),qs=require("recursive-iterator"),kt=I(),uW=b(),sa=T(),T_=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,EW(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=>sa.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=>!sa.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][sa.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=lW(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=>!sa.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new ra.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(T_,"sql_statement_bucket");function lW(e){return e.filter(t=>t[sa.PERMS_CRUD_ENUM.READ])}a(lW,"filterReadRestrictedAttrs");function EW(e,t,r,s,n){dW(e,t,r,s,n)}a(EW,"interpretAST");function na(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(na,"addSchemaTableToMap");function dW(e,t,r,s,n){if(!e){kt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ra.yy.Insert?TW(e,t,r):e instanceof ra.yy.Select?hW(e,t,r,s,n):e instanceof ra.yy.Update?fW(e,t,r):e instanceof ra.yy.Delete?SW(e,t,r):kt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(dW,"getRecordAttributesAST");function hW(e,t,r,s,n){if(!e){kt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(uW.isEmptyOrZeroLength(i)){kt.error("No schema specified");return}e.from.forEach(c=>{na(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),na(c.table,t,r,s,n)});let o=new qs(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{kt.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 qs(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{kt.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 qs(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{kt.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 qs(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{kt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(hW,"getSelectAttributes");function fW(e,t,r){if(!e){kt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.table.tableid,n,i.columnid,t,r)}a(fW,"getUpdateAttributes");function SW(e,t,r){if(!e){kt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new qs(e.where),n=e.table.databaseid;na(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.table.tableid,n,i.columnid,t,r)}a(SW,"getDeleteAttributes");function TW(e,t,r){if(!e){kt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new qs(e.columns),n=e.into.databaseid;na(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&Cd(e.into.tableid,n,i.columnid,t,r)}a(TW,"getInsertAttributes");function Cd(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(Cd,"pushAttribute");ON.exports=T_});var wN=f((S6,bN)=>{var mW=require("os"),IN=U();bN.exports={checkPermission:RW};function RW(){if(mW.userInfo().username!==IN.get("install_user"))throw new Error(`Error: Must execute as ${IN.get("install_user")}`)}a(RW,"checkPermission")});var Ud=f((m6,MN)=>{var R_=ms(),CN=require("chalk"),nr=I(),yN=wN(),UN=require("prompt"),{promisify:AW}=require("util"),m_=T(),pW=require("fs-extra"),gW=require("path"),OW=b(),NW=ud(),LN=U();LN.initSync();var IW=require("moment"),bW=AW(UN.get),wW=gW.join(LN.getHdbBasePath(),m_.LICENSE_KEY_DIR_NAME,m_.LICENSE_FILE_NAME,m_.LICENSE_FILE_NAME);MN.exports={getFingerprint:yW,setLicense:CW,parseLicense:yd,register:UW,getRegistrationInfo:MW};async function CW(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await yd(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(CW,"setLicense");async function yW(){try{yN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await R_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(yW,"getFingerprint");async function yd(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=R_.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{nr.info("writing license to disk"),await pW.writeFile(wW,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(yd,"parseLicense");async function UW(){let e=await LW();return yd(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(UW,"register");async function LW(){try{yN.checkPermission()}catch(s){return console.error(s.message)}let e=await R_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:CN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:CN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{UN.start()}catch(s){nr.error(s)}let r;try{r=await bW(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(LW,"promptForRegistration");async function MW(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await R_.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(OW.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=NW.version(),e.storage_type=m_.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=IW.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(MW,"getRegistrationInfo")});var PN=f((A6,DN)=>{"use strict";var DW=le(),A_=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h,m){this.port=t,o===null&&(o=void 0),this.server_name=r+DW.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:m}},this.system_account="SYS"}};a(A_,"HubConfigObject");DN.exports=A_});var HN=f((g6,BN)=>{"use strict";var vN=le(),p_=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+vN.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+vN.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(p_,"LeafConfigObject");BN.exports=p_});var FN=f((N6,qN)=>{"use strict";var g_=class{constructor(t,r){this.user=t,this.password=r}};a(g_,"HdbUserObject");qN.exports=g_});var xN=f((b6,GN)=>{"use strict";var PW=le(),O_=class{constructor(t,r){this.user=t+PW.SERVER_SUFFIX.ADMIN,this.password=r}};a(O_,"SysUserObject");GN.exports=O_});var Dd=f((C6,$N)=>{"use strict";var ia=require("path"),w_=require("fs-extra"),vW=PN(),BW=HN(),HW=FN(),qW=xN(),Ld=er(),Mn=b(),je=fr(),b_=T(),N_=le(),{CONFIG_PARAMS:he}=b_,oa=I(),C_=U(),VN=Yr(),Md=He(),aa="clustering",FW=1e4,kN=5;$N.exports={generateNatsConfig:GW,removeNatsConfig:xW};async function GW(e=!1,t=void 0){C_.initSync();let r=C_.get(he.ROOTPATH),s=ia.join(r,aa,N_.PID_FILES.HUB),n=ia.join(r,aa,N_.PID_FILES.LEAF),i=je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ia.join(r,aa,N_.NATS_CONFIG_FILES.HUB_SERVER),c=ia.join(r,aa,N_.NATS_CONFIG_FILES.LEAF_SERVER),_=je.getConfigFromFile(he.CLUSTERING_TLS_CERTIFICATE),u=je.getConfigFromFile(he.CLUSTERING_TLS_PRIVATEKEY),l=je.getConfigFromFile(he.CLUSTERING_TLS_CERT_AUTH),E=je.getConfigFromFile(he.CLUSTERING_TLS_INSECURE),d=je.getConfigFromFile(he.CLUSTERING_TLS_VERIFY),h=je.getConfigFromFile(he.CLUSTERING_NODENAME),m=je.getConfigFromFile(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Md.checkNATSServerInstalled()||y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let R=await Ld.listUsers(),g=je.getConfigFromFile(he.CLUSTERING_USER),H=await Ld.getClusterUser();(Mn.isEmpty(H)||H.active!==!0)&&y_(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await I_(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await I_(he.CLUSTERING_HUBSERVER_NETWORK_PORT),await I_(he.CLUSTERING_LEAFSERVER_NETWORK_PORT));let x=[],q=[];for(let[ls,Mr]of R.entries())Mr.role.role===b_.ROLE_TYPES_ENUM.CLUSTER_USER&&Mr.active&&(x.push(new qW(Mr.username,VN.decrypt(Mr.hash))),q.push(new HW(Mr.username,VN.decrypt(Mr.hash))));let Ue=[],{hub_routes:M}=je.getClusteringRoutes();if(!Mn.isEmptyOrZeroLength(M))for(let ls of M)Ue.push(`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@${ls.host}:${ls.port}`);let $=new vW(je.getConfigFromFile(he.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,_,u,l,E,d,m,je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NAME),je.getConfigFromFile(he.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ue,x,q);l==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=Mn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await w_.writeJson(o,$),oa.trace(`Hub server config written to ${o}`));let ue=`tls://${H.sys_name_encoded}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,oe=`tls://${H.uri_encoded_name}:${H.uri_encoded_d_hash}@0.0.0.0:${m}`,kn=new BW(je.getConfigFromFile(he.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[ue],[oe],x,q,_,u,l,E);l==null&&delete kn.tls.ca_file,(t===void 0||t===b_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await w_.writeJson(c,kn),oa.trace(`Leaf server config written to ${c}`))}a(GW,"generateNatsConfig");async function I_(e){let t=C_.get(e);return Mn.isEmpty(t)&&y_(`port undefined for '${e}'`),await Mn.isPortTaken(t)&&y_(`'${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(I_,"isPortAvailable");function y_(e){let t=`Error generating clustering config: ${e}`;oa.error(t),console.error(t),process.exit(1)}a(y_,"generateNatsConfigError");async function xW(e){let{port:t,config_file:r}=Md.getServerConfig(e),{username:s,decrypt_hash:n}=await Ld.getClusterUser(),i=0,o=500;for(;i<kN;){try{let u=await Md.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){oa.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=kN)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 Mn.async_set_timeout(o*i)}let c="0".repeat(FW),_=ia.join(C_.get(he.ROOTPATH),aa,r);await w_.writeFile(_,c),await w_.remove(_),oa.notify(e,"started.")}a(xW,"removeNatsConfig")});var zN=f((U6,JN)=>{"use strict";var ft=U(),VW=ms(),G=T(),ca=le(),Ir=require("path"),{PACKAGE_ROOT:U_}=T(),YN=U(),Dn="/dev/null",kW=Ir.join(U_,"launchServiceScripts"),KN=Ir.join(U_,"utility/scripts"),$W=Ir.join(KN,G.HDB_RESTART_SCRIPT),WN=Ir.resolve(U_,"dependencies",`${process.platform}-${process.arch}`,ca.NATS_BINARY_NAME);function QN(){let t=VW.licenseSearch().ram_allocation||G.RAM_ALLOCATION_ENUM.DEFAULT,r=G.MEM_SETTING_KEY+t;return{name:G.PROCESS_DESCRIPTORS.HDB,script:G.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:U_}}a(QN,"generateMainServerConfig");var YW=9930;function KW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.HUB_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=YN.get(G.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==YW?"-"+s:""),script:WN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(KW,"generateNatsHubServerConfig");var WW=9940;function QW(){ft.initSync(!0);let e=ft.get(G.CONFIG_PARAMS.ROOTPATH),t=Ir.join(e,"clustering",ca.NATS_CONFIG_FILES.LEAF_SERVER),r=Ir.join(ft.get(G.HDB_SETTINGS_NAMES.LOG_PATH_KEY),G.LOG_NAMES.HDB),s=YN.get(G.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ca.LOG_LEVEL_FLAGS[ft.get(G.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==WW?"-"+s:""),script:WN,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Dn,i.error_file=Dn),i}a(QW,"generateNatsLeafServerConfig");function JW(){ft.initSync();let e=Ir.join(ft.get(G.CONFIG_PARAMS.LOGGING_ROOT),G.LOG_NAMES.HDB),t={name:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:G.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:kW,autorestart:!1};return ft.get(G.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Dn,t.error_file=Dn),t}a(JW,"generateClusteringUpgradeV4ServiceConfig");function zW(){return{...{name:G.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[G.PROCESS_NAME_ENV_PROP]:G.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:KN},script:$W}}a(zW,"generateRestart");function XW(){return{apps:[QN()]}}a(XW,"generateAllServiceConfigs");JN.exports={generateAllServiceConfigs:XW,generateMainServerConfig:QN,generateRestart:zW,generateNatsHubServerConfig:KW,generateNatsLeafServerConfig:QW,generateClusteringUpgradeV4ServiceConfig:JW}});var lI=f((q6,uI)=>{"use strict";var Y=T(),ZN=b(),_a=Dd(),L_=He(),ir=le(),K=require("pm2"),ns=zN(),M_=U(),br=I(),ZW=Nr(),{startWorker:Pd,onMessageFromWorkers:jW}=cn(),M6=Ln(),e1=require("util"),jN=require("child_process"),{execFile:t1}=jN,D6=e1.promisify(jN.exec),P6=require("systeminformation");uI.exports={enterPM2Mode:r1,start:Fs,stop:vd,reload:eI,restart:tI,list:Bd,describe:Hd,connect:wr,kill:o1,startAllServices:c1,startService:qd,getUniqueServicesList:sI,restartAllServices:_1,isServiceRegistered:nI,reloadStopStart:iI,restartHdb:rI,deleteProcess:i1,startClusteringProcesses:cI,startClusteringThreads:_I,isHdbRestartRunning:a1,isClusteringRunning:l1,stopClustering:u1,reloadClustering:E1};var{PACKAGE_ROOT:v6}=T(),B6=T(),{loggerWithTag:H6}=br,ua=!1;jW(e=>{e.type==="restart"&&M_.initSync(!0)});function r1(){ua=!0}a(r1,"enterPM2Mode");function wr(){return new Promise((e,t)=>{K.connect((r,s)=>{br.setupConsoleLogging(),r&&t(r),e(s)})})}a(wr,"connect");var et,s1=10,XN;function Fs(e){if(ua)return n1(e);let t=t1(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=et.indexOf(t);i>-1&&et.splice(i,1),!XN&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<s1&&Fs(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=M_.get(Y.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=o.exec(n);){if(c.index&&ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=ir.LOG_LEVELS[E]}if(ir.LOG_LEVEL_HIERARCHY[i]>=ir.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===ir.LOG_LEVELS.ERR||u===ir.LOG_LEVELS.WRN?br.OUTPUTS.STDERR:br.OUTPUTS.STDOUT;br.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!et){et=[];let n=a(()=>{XN=!0,et&&(et.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)}et.push(t)}a(Fs,"start");function n1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.start(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(n1,"startWithPM2");function vd(e){if(!ua){for(let t of et||[])t.name===e&&(et.splice(et.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await wr()}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(vd,"stop");function eI(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.reload(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(eI,"reload");function tI(e){if(!ua)for(let t of et||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.restart(e,(s,n)=>{K.disconnect(),t(n)})})}a(tI,"restart");function i1(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.delete(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(i1,"deleteProcess");async function rI(){await Fs(ns.generateRestart())}a(rI,"restartHdb");async function a1(){let e=await Bd();for(let t in e)if(e[t].name===Y.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(a1,"isHdbRestartRunning");function Bd(){return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.list((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(Bd,"list");function Hd(e){return new Promise(async(t,r)=>{try{await wr()}catch(s){r(s)}K.describe(e,(s,n)=>{s&&(K.disconnect(),r(s)),K.disconnect(),t(n)})})}a(Hd,"describe");function o1(){if(!ua){for(let e of et||[])e.kill();et=[];return}return new Promise(async(e,t)=>{try{await wr()}catch(r){t(r)}K.killDaemon((r,s)=>{r&&(K.disconnect(),t(r)),K.disconnect(),e(s)})})}a(o1,"kill");async function c1(){try{await cI(),await _I(),await Fs(ns.generateAllServiceConfigs())}catch(e){throw K.disconnect(),e}}a(c1,"startAllServices");async function qd(e){try{let t;switch(e=e.toLowerCase(),e){case Y.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ns.generateMainServerConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ns.generateNatsIngestServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ns.generateNatsReplyServiceConfig();break;case Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ns.generateNatsHubServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ns.generateNatsLeafServerConfig(),await Fs(t),await _a.removeNatsConfig(e);return;case Y.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ns.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Fs(t)}catch(t){throw K.disconnect(),t}}a(qd,"startService");async function sI(){try{let e=await Bd(),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(sI,"getUniqueServicesList");async function _1(e=[]){try{let t=!1,r=await sI();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 tI(o))}t&&await iI(Y.PROCESS_DESCRIPTORS.HDB)}catch(t){throw K.disconnect(),t}}a(_1,"restartAllServices");async function nI(e){return et?.find(t=>t.name===e)?!0:!ZN.isEmptyOrZeroLength(await Hd(e))}a(nI,"isServiceRegistered");async function iI(e){let t=e===Y.PROCESS_DESCRIPTORS.HDB?M_.get(Y.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):M_.get(Y.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Hd(e),s=ZN.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await vd(e),await qd(e)):e===Y.PROCESS_DESCRIPTORS.HDB?await rI():await eI(e)}a(iI,"reloadStopStart");var aI,oI;async function cI(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];await qd(t)}}a(cI,"startClusteringProcesses");async function _I(){aI=Pd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),oI=Pd(Y.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await L_.createWorkQueueStream(ir.WORK_QUEUE_CONSUMER_NAMES),await L_.updateLocalStreams();let e=await ZW.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Y.PRE_4_0_0_VERSION){br.info("Starting clustering upgrade 4.0.0 process"),Pd(Y.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(_I,"startClusteringThreads");async function u1(){for(let e in Y.CLUSTERING_PROCESSES)if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await aI.terminate();else if(e===Y.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await oI.terminate();else{let t=Y.CLUSTERING_PROCESSES[e];await vd(t)}}a(u1,"stopClustering");async function l1(){for(let e in Y.CLUSTERING_PROCESSES){let t=Y.CLUSTERING_PROCESSES[e];if(await nI(t)===!1)return!1}return!0}a(l1,"isClusteringRunning");async function E1(){await _a.generateNatsConfig(!0),await L_.reloadNATSHub(),await L_.reloadNATSLeaf(),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await _a.removeNatsConfig(Y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(E1,"reloadClustering")});var Yd=f((G6,TI)=>{"use strict";var d1=require("minimist"),{isMainThread:xd,parentPort:hI}=require("worker_threads"),ne=T(),{PROCESS_DESCRIPTORS_VALIDATE:la}=ne,ar=I(),Vd=b(),D_=Dd(),Pn=He(),Fd=le(),fI=fr(),or=lI(),EI=Ln(),h1=Uu(),{restartWorkers:P_,onMessageFromWorkers:f1}=cn(),{handleHDBError:S1,hdb_errors:T1}=y(),{HTTP_STATUS_CODES:m1}=T1,v_=U();v_.initSync();var Ea=`Restarting HarperDB. This may take up to ${ne.RESTART_TIMEOUT_MS/1e3} seconds.`,R1="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dI="Clustering is not enabled so cannot be restarted",A1="Invalid service",Gs,$t;TI.exports={restart:SI,restartService:kd};xd&&f1(e=>{e.type===ne.ITC_EVENT_TYPES.RESTART&&(e.workerType?kd({service:e.workerType}):SI({operation:"restart"}))});async function SI(e){$t=Object.keys(e).length===0,Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR);let t=d1(process.argv);if(t.service){await kd(t);return}if($t&&!Gs){console.error(R1);return}if($t&&console.log(Ea),Gs){or.enterPM2Mode(),ar.notify(Ea);let r=h1(Object.keys(ne.CONFIG_PARAM_MAP),!0);return Vd.isEmptyOrZeroLength(Object.keys(r))||fI.updateConfigValue(void 0,void 0,r,!0,!0),g1(),Ea}return xd?(ar.notify(Ea),await $d(),setTimeout(()=>{P_()},50)):hI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART}),Ea}a(SI,"restart");async function kd(e){let{service:t}=e;if(ne.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw S1(new Error,A1,m1.BAD_REQUEST,void 0,void 0,!0);if(Gs=await or.isServiceRegistered(ne.HDB_PROC_DESCRIPTOR),!xd)return hI.postMessage({type:ne.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case la.clustering:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dI;break}$t&&console.log("Restarting clustering"),ar.notify("Restarting clustering"),await $d();break;case la.clustering_config:case la["clustering config"]:if(!v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dI;break}$t&&console.log("Restarting clustering_config"),ar.notify("Restarting clustering_config"),await or.reloadClustering();break;case"custom_functions":case"custom functions":case la.harperdb:case la.http_workers:if($t&&!Gs){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}$t&&console.log("Restarting http_workers"),ar.notify("Restarting http_workers"),Gs?await or.restart(ne.HDB_PROC_DESCRIPTOR):setTimeout(()=>{P_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ar.error(r),$t&&console.error(r),r):`Restarting ${t}`}a(kd,"restartService");async function p1(){await Pn.publishToStream(`${Fd.SUBJECT_PREFIXES.TXN}.${Fd.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Fd.WORK_QUEUE_CONSUMER_NAMES.stream_name,Pn.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(p1,"postDummyNatsMsg");async function g1(){await $d(),await or.restart(ne.HDB_PROC_DESCRIPTOR),await Vd.async_set_timeout(2e3),v_.get(ne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Gd(),$t&&(await Pn.closeConnection(),process.exit(0))}a(g1,"restartPM2Mode");async function $d(){if(!fI.getConfigFromFile(ne.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await EI.getHDBProcessInfo()).clustering.length===0)ar.trace("Clustering not running, restart will start clustering services"),await D_.generateNatsConfig(!0),await or.startClusteringProcesses(),await or.startClusteringThreads(),await Gd(),$t&&await Pn.closeConnection();else{await p1(),await D_.generateNatsConfig(!0),Gs?(ar.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await or.restart(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await EI.getHDBProcessInfo()).clustering.forEach(n=>{ar.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Vd.async_set_timeout(3e3),await Gd(),await Pn.updateLocalStreams(),$t&&await Pn.closeConnection(),ar.trace("Restart clustering restarting ingest and reply service threads");let t=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=P_(ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a($d,"restartClustering");async function Gd(){await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await D_.removeNatsConfig(ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Gd,"removeNatsConfig")});var CI=f((k6,wI)=>{"use strict";var V6=require("lodash"),Fe=T(),{handleHDBError:mI,hdb_errors:O1}=y(),{HDB_ERROR_MSGS:N1,HTTP_STATUS_CODES:I1}=O1,Kd=I();wI.exports={getRolePermissions:w1};var xs=Object.create(null),b1=a(e=>({key:e,perms:{}}),"perms_template_obj"),gI=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OI=a((e=!1,t=!1,r=!1,s=!1)=>({[Fe.PERMS_CRUD_ENUM.READ]:e,[Fe.PERMS_CRUD_ENUM.INSERT]:t,[Fe.PERMS_CRUD_ENUM.UPDATE]:r,[Fe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Wd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...OI(t,r,s,n)}),"table_perms_template"),RI=a((e,t=OI())=>({attribute_name:e,describe:bI(t),[da]:t[da],[Qd]:t[Qd],[Jd]:t[Jd]}),"attr_perms_template"),AI=a((e,t=!1)=>({attribute_name:e,describe:t,[da]:t}),"timestamp_attr_perms_template"),{READ:da,INSERT:Qd,UPDATE:Jd}=Fe.PERMS_CRUD_ENUM,NI=Object.values(Fe.PERMS_CRUD_ENUM),II=[da,Qd,Jd];function w1(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[Fe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(xs[t]&&xs[t].key===s)return xs[t].perms;let n=C1(e,r);return xs[t]?xs[t].key=s:xs[t]=b1(s),xs[t].perms=n,n}catch(r){if(!e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Fe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Fe.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 Kd.error(s),Kd.debug(r),mI(new Error,N1.OUTDATED_PERMS_TRANSLATION_ERROR,I1.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw Kd.error(s),mI(new Error)}}}a(w1,"getRolePermissions");function C1(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Fe.SYSTEM_SCHEMA_NAME]=s[Fe.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]=y1(t[i]);return}r[i]=gI(),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=U1(c,_);r[i].describe||NI.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Wd()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Wd()})}),r}a(C1,"translateRolePermissions");function y1(e){let t=gI(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Wd(!0,!0,!0,!0,!0)}),t}a(y1,"createStructureUserPermissions");function U1(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 Fe.TIME_STAMP_NAMES.includes(E)&&(d=AI(E,l[da])),u[E]=d,u},{}),o=t[Fe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=RI(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=bI(l),n.attribute_permissions.push(l),c||L1(l,_)}else if(u!==o){let l;Fe.TIME_STAMP_NAMES.includes(u)?l=AI(u):l=RI(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=pI(n),n}else return e.describe=pI(e),e}a(U1,"getTableAttrPerms");function pI(e){return NI.filter(t=>e[t]).length>0}a(pI,"getSchemaTableDescribePerm");function bI(e){return II.filter(t=>e[t]).length>0}a(bI,"getAttributeDescribePerm");function L1(e,t){II.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(L1,"checkForHashPerms")});var vI=f((Y6,PI)=>{"use strict";var fe=require("joi"),yI=require("fs-extra"),UI=require("path"),vn=re(),LI=U(),MI=T(),DI=I(),{hdb_errors:M1}=y(),{HDB_ERROR_MSGS:tt}=M1,is=/^[a-zA-Z0-9-_]+$/;PI.exports={getDropCustomFunctionValidator:P1,setCustomFunctionValidator:v1,addCustomFunctionProjectValidator:B1,dropCustomFunctionProjectValidator:H1,packageCustomFunctionProjectValidator:q1,deployCustomFunctionProjectValidator:F1};function ha(e,t,r){try{let s=LI.get(MI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=UI.join(s,t);return yI.existsSync(n)?e?t:r.message(tt.PROJECT_EXISTS):e?r.message(tt.NO_PROJECT):t}catch(s){return DI.error(s),r.message(tt.VALIDATION_ERR)}}a(ha,"checkProjectExists");function D1(e,t,r,s){try{let n=LI.get(MI.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=UI.join(n,e,t,r+".js");return yI.existsSync(i)?r:s.message(tt.NO_FILE)}catch(n){return DI.error(n),s.message(tt.VALIDATION_ERR)}}a(D1,"checkFileExists");function P1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(is).custom(D1.bind(null,e.project,e.type)).required().messages({"string.pattern.base":tt.BAD_FILE_NAME})});return vn.validateBySchema(e,t)}a(P1,"getDropCustomFunctionValidator");function v1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(is).required().messages({"string.pattern.base":tt.BAD_FILE_NAME}),function_content:fe.string().required()});return vn.validateBySchema(e,t)}a(v1,"setCustomFunctionValidator");function B1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!1)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(B1,"addCustomFunctionProjectValidator");function H1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME})});return vn.validateBySchema(e,t)}a(H1,"dropCustomFunctionProjectValidator");function q1(e){let t=fe.object({project:fe.string().pattern(is).custom(ha.bind(null,!0)).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),skip_node_modules:fe.boolean()});return vn.validateBySchema(e,t)}a(q1,"packageCustomFunctionProjectValidator");function F1(e){let t=fe.object({project:fe.string().pattern(is).required().messages({"string.pattern.base":tt.BAD_PROJECT_NAME}),payload:fe.string().required().messages({"string.pattern.base":tt.BAD_PACKAGE})});return vn.validateBySchema(e,t)}a(F1,"deployCustomFunctionProjectValidator")});var eh=f((W6,qI)=>{"use strict";var we=require("fs-extra"),zd=require("fast-glob"),te=require("path"),BI=require("tar-fs"),HI=require("uuid").v4,Xd=require("normalize-path"),Vs=vI(),Oe=I(),St=T(),Tt=U(),{PACKAGE_ROOT:G1}=T(),{handleHDBError:Ge,hdb_errors:x1}=y(),{HDB_ERROR_MSGS:as,HTTP_STATUS_CODES:xe}=x1,V1=te.join(G1,"custom_function_template"),Zd=te.join(Tt.get(St.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function jd(){let e=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Ge(new Error,as.NOT_ENABLED,xe.BAD_REQUEST,void 0,void 0,!0)}a(jd,"isCFEnabled");function k1(){Oe.trace("getting custom api status");let e={};try{e={is_enabled:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Ge(new Error,as.FUNCTION_STATUS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,t)}return e}a(k1,"customFunctionsStatus");function $1(){Oe.trace("getting custom api endpoints");let e={},t=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{zd.sync(Xd(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:zd.sync(Xd(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:zd.sync(Xd(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ge(new Error,as.GET_FUNCTIONS,xe.INTERNAL_SERVER_ERROR,Oe.ERR,r)}return e}a($1,"getCustomFunctions");function Y1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("getting custom api endpoint file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=te.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ge(new Error,as.GET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(Y1,"getCustomFunction");function K1(e){jd(),e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.setCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("setting custom function file content");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(te.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ge(new Error,as.SET_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,c)}}a(K1,"setCustomFunction");function W1(e){e.project&&(e.project=te.parse(e.project).name),e.file&&(e.file=te.parse(e.file).name);let t=Vs.getDropCustomFunctionValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function file");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(te.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ge(new Error,as.DROP_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,o)}}a(W1,"dropCustomFunction");function Q1(e){jd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.addCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("adding custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(V1,n),`Successfully created custom function project: ${s}`}catch(n){throw Ge(new Error,as.ADD_FUNCTION,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(Q1,"addCustomFunctionProject");function J1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.dropCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("dropping custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=te.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Ge(new Error,as.DROP_FUNCTION_PROJECT,xe.INTERNAL_SERVER_ERROR,Oe.ERR,n)}}a(J1,"dropCustomFunctionProject");async function z1(e){e.project&&(e.project=te.parse(e.project).name);let t=Vs.packageCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("packaging custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=te.join(r,s),i=HI();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Oe.error(l),l}we.ensureDirSync(Zd);let c=te.join(Zd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(te.join(n,"node_modules"))}),BI.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(z1,"packageCustomFunctionProject");async function X1(e){jd(),e.project&&(e.project=te.parse(e.project).name);let t=Vs.deployCustomFunctionProjectValidator(e);if(t)throw Ge(t,t.message,xe.BAD_REQUEST);Oe.trace("deploying custom function project");let r=Tt.get(St.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n}=e,i=te.join(r,s);await we.ensureDir(i);let o,c;do o=te.join(Zd,HI()+".tar"),c=await we.pathExists(o);while(c);await we.outputFile(o,n,{encoding:"base64"});let _=we.createReadStream(o);return _.pipe(BI.extract(i)),await new Promise(u=>_.on("end",u)),await we.unlink(o),`Successfully deployed project: ${s}`}a(X1,"deployCustomFunctionProject");qI.exports={customFunctionsStatus:k1,getCustomFunctions:$1,getCustomFunction:Y1,setCustomFunction:K1,dropCustomFunction:W1,addCustomFunctionProject:Q1,dropCustomFunctionProject:J1,packageCustomFunctionProject:z1,deployCustomFunctionProject:X1}});var th=f((J6,GI)=>{"use strict";var cr=require("joi"),FI=re();GI.exports={readTransactionLogValidator:Z1,deleteTransactionLogsBeforeValidator:j1};function Z1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),from:cr.date().timestamp(),to:cr.date().timestamp(),limit:cr.number().min(1)});return FI.validateBySchema(e,t)}a(Z1,"readTransactionLogValidator");function j1(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),timestamp:cr.date().timestamp().required()});return FI.validateBySchema(e,t)}a(j1,"deleteTransactionLogsBeforeValidator")});var H_=f((X6,YI)=>{"use strict";var rh=T(),B_=He(),xI=b(),VI=U(),kI=Yr(),{handleHDBError:Bn,hdb_errors:eQ}=y(),{HTTP_STATUS_CODES:Hn}=eQ,{readTransactionLogValidator:tQ,deleteTransactionLogsBeforeValidator:rQ}=th(),$I="This operation relies on clustering and cannot run with it disable.",sQ="Logs successfully deleted from transaction log.",nQ="All logs successfully deleted from transaction log.";YI.exports={readTransactionLog:iQ,deleteTransactionLogsBefore:aQ};async function*iQ(e){let t=tQ(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!VI.get(rh.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,$I,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xI.checkSchemaTableExist(r,s);if(n)throw Bn(new Error,n,Hn.NOT_FOUND,void 0,void 0,!0);let i=kI.createNatsTableStreamName(r,s),o=await B_.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===rh.OPERATIONS_ENUM.DELETE&&(u.hash_values=c?.entry?.hash_values),yield u}}a(iQ,"readTransactionLog");async function aQ(e){let t=rQ(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!VI.get(rh.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Bn(new Error,$I,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xI.checkSchemaTableExist(r,s);if(i)throw Bn(new Error,i,Hn.NOT_FOUND,void 0,void 0,!0);let o=kI.createNatsTableStreamName(r,s),{jsm:c}=await B_.getNATSReferences(),_=await B_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=sQ,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=nQ):E=(await B_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(aQ,"deleteTransactionLogsBefore")});var nh=f((j6,tb)=>{"use strict";var q_=require("joi"),F_=require("path"),KI=require("fs-extra"),{exec:oQ}=require("child_process"),cQ=require("util"),WI=cQ.promisify(oQ),_Q=T(),{handleHDBError:qn,hdb_errors:uQ}=y(),{HTTP_STATUS_CODES:Fn}=uQ,QI=U(),lQ=re(),G_=I();QI.initSync();var sh=QI.get(_Q.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),JI="npm install --omit=dev --json",EQ=`${JI} --dry-run`;tb.exports={installModules:dQ,auditModules:hQ};async function zI(e,t=void 0){let{stdout:r,stderr:s}=await WI(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(zI,"runCommand");async function dQ(e){G_.info(`starting installModules for request: ${e}`);let t=eb(e);if(t)throw qn(t,t.message,Fn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?EQ:JI;await ZI(),await jI(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=F_.join(sh,_),l,E=null;try{let{stdout:d,stderr:h}=await WI(n,{cwd:u});l=d?d.replace(`
|
|
11
11
|
`,""):null,E=h?h.replace(`
|
|
12
|
-
`,""):null}catch(d){d.stderr?i[_].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(JI,"parseNPMStdErr");async function lQ(e){G_.info(`starting auditModules for request: ${e}`);let t=ZI(e);if(t)throw qn(t,t.message,Fn.BAD_REQUEST);let{projects:r}=e;await zI(),await XI(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=F_.join(rh,o);s[o]={npm_output:null,npm_error:null};try{let _=await QI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=JI(_.stderr)}}return G_.info(`finished auditModules with response ${s}`),s}a(lQ,"auditModules");async function zI(){try{return await QI("npm -v"),!0}catch{throw qn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Fn.BAD_REQUEST,void 0,void 0,!0)}}a(zI,"checkNPMInstalled");async function XI(e){if(!Array.isArray(e)||e.length===0)throw qn(new Error,"projects argument must be an array with at least 1 element",Fn.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=F_.join(rh,i.toString());if(!await $I.pathExists(o)){t.push(i);continue}let _=F_.join(o,"package.json");await $I.pathExists(_)||r.push(i)}if(t.length>0)throw qn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Fn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw qn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Fn.BAD_REQUEST,void 0,void 0,!0)}a(XI,"checkProjectPaths");function ZI(e){let t=q_.object({projects:q_.array().min(1).items(q_.string()).required(),dry_run:q_.boolean().default(!1)});return cQ.validateBySchema(e,t)}a(ZI,"modulesValidator")});var tb=f((Z6,eb)=>{"use strict";var x_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(x_,"PermissionTableResponseObject");eb.exports=x_});var sb=f((e9,rb)=>{"use strict";var V_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(V_,"PermissionAttributeResponseObject");rb.exports=V_});var nh=f((r9,ib)=>{"use strict";var nb=tb(),EQ=sb(),{HDB_ERROR_MSGS:dQ}=at(),k_=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 nb(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 nb(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(k_,"PermissionResponseObject");ib.exports=k_});var W_=f((n9,Ab)=>{"use strict";var ih=It(),$_=bt(),yt=Bc(),Ta=Os(),ah=ps(),hQ=DE(),ma=er(),Y_=VE(),Re=I(),fQ=YE(),SQ=o_(),TQ=Sd(),mQ=l_(),RQ=Td(),AQ=md(),pQ=pd(),gQ=Od(),oh=bd(),Cr=b(),OQ=gN(),ch=yd(),cb=$d(),Ct=T(),_b=bI(),NQ=Ln(),ub=Jc(),lb=fr(),yr=jd(),IQ=require("alasql"),Eb=H_(),db=sh(),hb=nh(),{handleHDBError:rt,hdb_errors:fb}=y(),{HDB_ERROR_MSGS:Ce,HTTP_STATUS_CODES:fa}=fb,p=new Map,Sb="delete",as="insert",os="read",ks="update",Sa="describe",ab=Ta.describeSchema.name,ob=Ta.describeTable.name,Tb={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},bQ="catchup",wQ="handleGetJob",CQ="handleGetJobsByStartDate",K_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},yQ=[yt.createTable.name,yt.createAttribute.name,yt.dropTable.name,yt.dropAttribute.name],mb={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},O=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(O,"permission");p.set(ih.insert.name,new O(!1,[as]));p.set(ih.update.name,new O(!1,[ks]));p.set(ih.upsert.name,new O(!1,[as,ks]));p.set($_.searchByConditions.name,new O(!1,[os]));p.set($_.searchByHash.name,new O(!1,[os]));p.set($_.searchByValue.name,new O(!1,[os]));p.set($_.search.name,new O(!1,[os]));p.set(yt.createSchema.name,new O(!0,[]));p.set(yt.createTable.name,new O(!0,[]));p.set(yt.createAttribute.name,new O(!1,[as]));p.set(yt.dropSchema.name,new O(!0,[]));p.set(yt.dropTable.name,new O(!0,[]));p.set(yt.dropAttribute.name,new O(!0,[]));p.set(Ta.describeSchema.name,new O(!1,[os]));p.set(Ta.describeTable.name,new O(!1,[os]));p.set(ah.deleteRecord.name,new O(!1,[Sb]));p.set(ma.addUser.name,new O(!0,[]));p.set(ma.alterUser.name,new O(!0,[]));p.set(ma.dropUser.name,new O(!0,[]));p.set(ma.listUsersExternal.name,new O(!0,[]));p.set(Y_.listRoles.name,new O(!0,[]));p.set(Y_.addRole.name,new O(!0,[]));p.set(Y_.alterRole.name,new O(!0,[]));p.set(Y_.dropRole.name,new O(!0,[]));p.set(fQ.name,new O(!0,[]));p.set(SQ.name,new O(!0,[]));p.set(TQ.name,new O(!0,[]));p.set(mQ.name,new O(!0,[]));p.set(RQ.name,new O(!0,[]));p.set(AQ.name,new O(!0,[]));p.set(oh.setRoutes.name,new O(!0,[]));p.set(oh.getRoutes.name,new O(!0,[]));p.set(oh.deleteRoutes.name,new O(!0,[]));p.set(lb.setConfiguration.name,new O(!0,[]));p.set(pQ.clusterStatus.name,new O(!0,[]));p.set(gQ.name,new O(!0,[]));p.set(ch.getFingerprint.name,new O(!0,[]));p.set(ch.setLicense.name,new O(!0,[]));p.set(ah.deleteFilesBefore.name,new O(!0,[]));p.set(ah.deleteAuditLogsBefore.name,new O(!0,[]));p.set(cb.restart.name,new O(!0,[]));p.set(cb.restartService.name,new O(!0,[]));p.set(hQ.name,new O(!0,[]));p.set(NQ.systemInformation.name,new O(!0,[]));p.set(lb.getConfiguration.name,new O(!0,[]));p.set(Eb.readTransactionLog.name,new O(!0,[]));p.set(Eb.deleteTransactionLogsBefore.name,new O(!0,[]));p.set(db.installModules.name,new O(!0,[]));p.set(db.auditModules.name,new O(!0,[]));p.set(ub.createTokens.name,new O(!1,[]));p.set(ub.refreshOperationToken.name,new O(!1,[]));p.set(yr.customFunctionsStatus.name,new O(!0,[]));p.set(yr.getCustomFunctions.name,new O(!0,[]));p.set(yr.getCustomFunction.name,new O(!0,[]));p.set(yr.setCustomFunction.name,new O(!0,[]));p.set(yr.dropCustomFunction.name,new O(!0,[]));p.set(yr.addCustomFunctionProject.name,new O(!0,[]));p.set(yr.dropCustomFunctionProject.name,new O(!0,[]));p.set(yr.packageCustomFunctionProject.name,new O(!0,[]));p.set(yr.deployCustomFunctionProject.name,new O(!0,[]));p.set(ch.getRegistrationInfo.name,new O(!1,[]));p.set(ma.userInfo.name,new O(!1,[]));p.set(Ta.describeAll.name,new O(!1,[]));p.set(wQ,new O(!1,[]));p.set(CQ,new O(!0,[]));p.set(bQ,new O(!0,[]));p.set(K_.CSV_DATA_LOAD,new O(!1,[as,ks]));p.set(K_.CSV_URL_LOAD,new O(!1,[as,ks]));p.set(K_.CSV_FILE_LOAD,new O(!1,[as,ks]));p.set(K_.IMPORT_FROM_S3,new O(!1,[as,ks]));p.set(mb.EXPORT_TO_S3,new O(!0,[]));p.set(mb.EXPORT_LOCAL,new O(!0,[]));p.set(Ct.VALID_SQL_OPS_ENUM.DELETE,new O(!1,[Sb]));p.set(Ct.VALID_SQL_OPS_ENUM.SELECT,new O(!1,[os]));p.set(Ct.VALID_SQL_OPS_ENUM.INSERT,new O(!1,[as]));p.set(Ct.VALID_SQL_OPS_ENUM.UPDATE,new O(!1,[ks]));Ab.exports={verifyPerms:LQ,verifyPermsAst:UQ,verifyBulkLoadAttributePerms:DQ};function UQ(e,t,r){if(Cr.isEmptyOrZeroLength(e))throw Re.info("verify_perms_ast has an empty user parameter"),rt(new Error);if(Cr.isEmptyOrZeroLength(t))throw Re.info("verify_perms_ast has an empty user parameter"),rt(new Error);if(Cr.isEmptyOrZeroLength(r))throw Re.info("verify_perms_ast has a null operation parameter"),rt(new Error);try{let s=new hb,n=new OQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Re.info("No schemas defined in verifyPermsAst(), will not continue."),rt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&Tb[r])throw rt(new Error,Ce.DROP_SYSTEM,fa.FORBIDDEN);if(c&&!_)return null;let u=_b.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=Rb(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let m=n.getAttributesBySchemaTableName(d,E[h]),R=uh(t.role.permission,d,E[h]);_h(m,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw rt(s)}}a(UQ,"verifyPermsAst");function LQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Re.info("null required parameter in verifyPerms"),rt(new Error,Ce.DEFAULT_INVALID_REQUEST,fa.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 hb;if(Cr.isEmptyOrZeroLength(e.hdb_user.role)||Cr.isEmptyOrZeroLength(e.hdb_user.role.permission))return Re.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ce.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(Ct.SYSTEM_SCHEMA_NAME)||n===Ct.SYSTEM_SCHEMA_NAME;if(l&&Tb[r])throw rt(new Error,Ce.DROP_SYSTEM,fa.FORBIDDEN);if(_&&!l||u===!0&&(r===yt.createSchema.name||r===yt.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=_b.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===ab||r===ob){if(n===Ct.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ce.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===ab&&(!E[n]||!E[n][Sa]))return c.handleInvalidItem(Ce.SCHEMA_NOT_FOUND(n));if(r===ob&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][Sa]))return c.handleInvalidItem(Ce.TABLE_NOT_FOUND(n,i))}}let d=Rb(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&&Ct.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[Ct.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[Ct.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),m=uh(e.hdb_user.role.permission,n,i);return _h(h,m,r,i,n,c,s),c.getPermsResponse()}a(LQ,"verifyPerms");function Rb(e,t,r,s,n){if(Cr.arrayHasEmptyValues([e,t,r]))throw Re.info("hasPermissions has an invalid parameter"),rt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw Re.info(`operation ${t} not found.`),rt(new Error,Ce.OP_NOT_FOUND(t),fa.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return Re.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ce.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][Sa]===!1){s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[Sa]===!1)s.addInvalidItem(Ce.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Cr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let m=0;m<h.length;m++){let R=h[m],g=E[R];(g==null||g===!1)&&(Re.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=Ce.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw Re.error(h),Re.error(d),rt(fb.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(Rb,"hasPermissions");function _h(e,t,r,s,n,i,o){if(!e||!t)throw Re.info("no attributes specified in checkAttributePerms."),rt(new Error);let c=p.get(r).perms;if(!c||c==="")throw Re.info(`no permissions found for ${r} in checkAttributePerms().`),rt(new Error);if(Cr.isEmptyOrZeroLength(t))return Re.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[Sa]===!1){i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Ct.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==os)throw rt(new Error,Ce.SYSTEM_TIMESTAMP_PERMS_ERR,fa.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(_h,"checkAttributePerms");function MQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ct.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){Re.info(r)}return t}a(MQ,"getRecordAttributes");function uh(e,t,r){let s=new Map;if(Cr.isEmpty(e))return Re.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{Re.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(uh,"getAttributePermissions");function DQ(e,t,r,s,n,i,o){let c=new Set(i),_=uh(e,s,n);_h(c,_,t,n,s,o,r)}a(DQ,"verifyBulkLoadAttributePerms")});var J_=f((a9,Ib)=>{"use strict";Ib.exports={evaluateSQL:QQ,processAST:Nb,convertSQLToAST:Ob,checkASTPermissions:gb};var pb=It(),dh=require("util"),PQ=dh.callbackify(pb.insert),vQ=bt().search,BQ=dg().update,HQ=dh.callbackify(BQ),qQ=fg().convertDelete,cs=require("alasql"),FQ=W_(),Aa=I(),GQ=Oc(),xQ=b(),Ra=T(),{hdb_errors:VQ,handleHDBError:lh}=y(),{HTTP_STATUS_CODES:Eh}=VQ,kQ=Yi();function $Q(e,t){return Promise.all([kQ.postOperationHandler(e,t,void 0),pb.flush(e)])}a($Q,"postWrite");var YQ=dh.callbackify($Q);GQ(cs);var KQ=403,WQ="There was a problem performing this insert. Please check the logs and try again.",Q_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(Q_,"ParsedSQLObject");function QQ(e,t){let r=e.parsed_sql_object;if(!r){r=Ob(e.sql);let s,n=r.ast.statements[0];if(n instanceof cs.yy.Insert?s=n.into.databaseid:n instanceof cs.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof cs.yy.Update||n instanceof cs.yy.Delete?s=n.table.databaseid:Aa.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof cs.yy.Select)&&xQ.isEmptyOrZeroLength(s))return t("No schema specified",null)}Nb(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(QQ,"evaluateSQL");function gb(e,t){let r;try{r=FQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(gb,"checkASTPermissions");function Ob(e){let t=new Q_;if(!e)throw lh(new Error,"The 'sql' parameter is missing from the request body",Eh.BAD_REQUEST);try{let r=e.trim(),s=cs.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?lh(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Eh.BAD_REQUEST):lh(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Eh.BAD_REQUEST)}return t}a(Ob,"convertSQLToAST");function Nb(e,t,r){try{let s=JQ;if(!e.bypass_auth&&!t.permissions_checked){let i=gb(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 Ra.VALID_SQL_OPS_ENUM.SELECT:s=vQ,n=t.ast.statements[0];break;case Ra.VALID_SQL_OPS_ENUM.INSERT:s=zQ;break;case Ra.VALID_SQL_OPS_ENUM.UPDATE:s=HQ;break;case Ra.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(Nb,"processAST");function JQ(e,t){Aa.info(e),t("unknown sql statement")}a(JQ,"nullFunction");function zQ({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=XQ(i,e.values)}catch(o){return r(o)}PQ(n,(o,c)=>{if(o)return r(o);YQ(n,c,_=>{_&&Aa.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){Aa.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(zQ,"convertInsert");function XQ(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]]=cs.compile(`SELECT ${n.toString()} AS [${Ra.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Aa.error(r),new Error(WQ)}}a(XQ,"createDataObjects")});var hh=f((c9,wb)=>{"use strict";var{S3:ZQ,GetObjectCommand:jQ}=require("@aws-sdk/client-s3");wb.exports={getFileStreamFromS3:eJ,getS3AuthObj:bb};async function eJ(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await bb(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new jQ(r))).Body}a(eJ,"getFileStreamFromS3");function bb(e,t,r){return new ZQ({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(bb,"getS3AuthObj")});var Oa=f((u9,Bb)=>{"use strict";var Ub=bt(),tJ=J_(),rJ=hh(),{AsyncParser:sJ,Transform:nJ}=require("json2csv"),ga=require("stream"),mt=b(),fh=require("fs-extra"),iJ=require("path"),Ut=I(),{promisify:z_}=require("util"),pa=b(),{handleHDBError:Se,hdb_errors:aJ}=y(),{HDB_ERROR_MSGS:st,HTTP_STATUS_CODES:Te}=aJ,{streamAsJSON:oJ}=to(),{Upload:cJ}=require("@aws-sdk/lib-storage"),Cb=["search_by_value","search_by_hash","sql"],yb=["json","csv"],Lb="json",Mb="csv",_J="Successfully exported JSON locally.",uJ="Successfully exported CSV locally.",lJ=1e3,EJ=z_(Ub.searchByHash),dJ=z_(Ub.searchByValue),hJ=z_(tJ.evaluateSQL),fJ=z_(ga.finished);Bb.exports={export_to_s3:RJ,export_local:SJ,toCsvStream:Db};async function SJ(e){Ut.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Pb(e);if(!mt.isEmpty(t))throw Ut.error(t),Se(new Error,t,Te.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw Ut.error(st.MISSING_VALUE("path")),Se(new Error,st.MISSING_VALUE("path"),Te.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(iJ.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 vb(e);return await mJ(s,e.format,n)}a(SJ,"export_local");async function TJ(e){if(Ut.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw Se(new Error,`Invalid path: ${e}`,Te.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await fh.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,Ut.error(s),Se(new Error,s,Te.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 Ut.error(r),Se(new Error,r,Te.BAD_REQUEST,void 0,void 0,!0)}return!0}a(TJ,"confirmPath");async function mJ(e,t,r){if(Ut.trace("in saveToLocal"),pa.isEmptyOrZeroLength(e))throw Se(new Error,st.INVALID_VALUE("file_path"),Te.BAD_REQUEST,void 0,void 0,!0);if(pa.isEmptyOrZeroLength(t))throw Se(new Error,st.INVALID_VALUE("Source format"),Te.BAD_REQUEST,void 0,void 0,!0);if(pa.isEmpty(r))throw Se(new Error,st.NOT_FOUND("Data"),Te.BAD_REQUEST,void 0,void 0,!0);if(t===Lb){let s=fh.createWriteStream(e);return oJ(r).pipe(s),await fJ(s),{message:_J,path:e}}else if(t===Mb){let s=fh.createWriteStream(e),n=ga.Readable.from(r),i={},o={objectMode:!0};return await new sJ(i,o).fromInput(n).toOutput(s).promise(!1),{message:uJ,path:e}}throw Se(new Error,st.INVALID_VALUE("format"),Te.BAD_REQUEST)}a(mJ,"saveToLocal");async function RJ(e){if(!e.s3||Object.keys(e.s3).length===0)throw Se(new Error,st.MISSING_VALUE("S3 object"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Se(new Error,st.MISSING_VALUE("aws_access_key_id"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Se(new Error,st.MISSING_VALUE("aws_secret_access_key"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw Se(new Error,st.MISSING_VALUE("bucket"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw Se(new Error,st.MISSING_VALUE("key"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw Se(new Error,st.MISSING_VALUE("region"),Te.BAD_REQUEST);let t=Pb(e);if(!mt.isEmpty(t))throw Se(new Error,t,Te.BAD_REQUEST);Ut.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vb(e)}catch(_){throw Ut.error(_),_}let s,n=await rJ.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ga.PassThrough;if(e.format===Mb){i=e.s3.key+".csv";let _=Db(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Lb){i=e.s3.key+".json";let _=new ga.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%lJ===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw Se(new Error,st.INVALID_VALUE("format"),Te.BAD_REQUEST);return new cJ({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(RJ,"export_to_s3");function Db(e){let t=ga.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new nJ(r,s);return t.pipe(n)}a(Db,"toCsvStream");function Pb(e){if(Ut.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(yb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(Cb.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Cb.join(", ")}`}a(Pb,"exportCoreValidation");async function vb(e){Ut.trace("in getRecords");let t,r;if(pa.isEmpty(e.search_operation)||pa.isEmptyOrZeroLength(e.search_operation.operation))throw Se(new Error,st.INVALID_VALUE("Search operation"),Te.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=dJ;break;case"search_by_hash":t=EJ;break;case"sql":t=hJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ut.error(r),Se(new Error,r,Te.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(vb,"getRecords")});var Rh=f((E9,xb)=>{var ru=require("clone"),su=re(),AJ=b(),eu=T(),pJ=I(),X_=require("fs"),Sh=require("joi"),{string:tu}=Sh.types(),{hdb_errors:gJ,handleHDBError:Na}=y(),{HDB_ERROR_MSGS:OJ,HTTP_STATUS_CODES:Z_}=gJ,{common_validators:j_}=zt(),Hb=1e9,qb=" is required",NJ=["insert","update","upsert"],Th={schema:{presence:!0,format:j_.schema_format,length:j_.schema_length},table:{presence:!0,format:j_.schema_format,length:j_.schema_length},action:{inclusion:{within:NJ,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},IJ={schema:tu.required(),table:tu.required(),action:tu.valid("insert","update","upsert")},{AWS_ACCESS_KEY:bJ,AWS_SECRET:wJ,AWS_BUCKET:CJ,AWS_FILE_KEY:yJ,REGION:UJ}=eu.S3_BUCKET_AUTH_KEYS,LJ={s3:{presence:!0},[`s3.${bJ}`]:{presence:!0,type:"String"},[`s3.${wJ}`]:{presence:!0,type:"String"},[`s3.${CJ}`]:{presence:!0,type:"String"},[`s3.${yJ}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${UJ}`]:{presence:!0,type:"String"}},Fb=ru(Th);Fb.data.presence={message:qb};var Gb=ru(Th);Gb.file_path.presence={message:qb};var MJ=Object.assign(ru(Th),LJ),mh=ru(IJ);mh.csv_url=tu.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();mh.passthrough_headers=Sh.object();function DJ(e){let t=su.validateObject(e,Fb);return nu(e,t)}a(DJ,"dataObject");function PJ(e){let t=su.validateBySchema(e,Sh.object(mh));return nu(e,t)}a(PJ,"urlObject");function vJ(e){let t=su.validateObject(e,Gb);return nu(e,t)}a(vJ,"fileObject");function BJ(e){let t=su.validateObject(e,MJ);return nu(e,t)}a(BJ,"s3FileObject");function nu(e,t){if(!t){let r=AJ.checkGlobalSchemaTable(e.schema,e.table);if(r)return Na(new Error,r,Z_.BAD_REQUEST);if(e.operation===eu.OPERATIONS_ENUM.CSV_FILE_LOAD){try{X_.accessSync(e.file_path,X_.constants.R_OK|X_.constants.F_OK)}catch(s){return s.code===eu.NODE_ERROR_CODES.ENOENT?Na(s,`No such file or directory ${s.path}`,Z_.BAD_REQUEST):s.code===eu.NODE_ERROR_CODES.EACCES?Na(s,`Permission denied ${s.path}`,Z_.BAD_REQUEST):Na(s)}try{let s=X_.statSync(e.file_path).size;if(s>Hb)return Na(new Error,OJ.MAX_FILE_SIZE_ERR(s,Hb),Z_.BAD_REQUEST)}catch(s){pJ.error(s),console.error(s)}}}return t}a(nu,"postValidateChecks");xb.exports={dataObject:DJ,urlObject:PJ,fileObject:vJ,s3FileObject:BJ}});var Ah=f((h9,Vb)=>{"use strict";var Ia=I(),iu=T();async function HJ(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===iu.OPERATIONS_ENUM.INSERT||t.operation===iu.OPERATIONS_ENUM.UPDATE||t.operation===iu.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===iu.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ia.info(i.message),i):i.http_resp_msg?(Ia.error(`Error calling operation: ${e.name}`),Ia.error(i.http_resp_msg),i):(Ia.error(`Error calling operation: ${e.name}`),Ia.error(i),i)}}a(HJ,"callOperationFunctionAsAwait");Vb.exports={callOperationFunctionAsAwait:HJ}});var $b=f((S9,kb)=>{"use strict";var au=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(au,"BulkLoadFileObject");var ou=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(ou,"BulkLoadDataObject");kb.exports={BulkLoadFileObject:au,BulkLoadDataObject:ou}});var Ih=f((m9,ow)=>{"use strict";var cu=It(),lu=Rh(),qJ=require("needle"),Rt=T(),FJ=le(),ba=b(),{handleHDBError:ie,hdb_errors:jb}=y(),{HTTP_STATUS_CODES:ye,HDB_ERROR_MSGS:Ae,CHECK_LOGS_WRAPPER:Ks}=jb,Ys=I(),_u=require("papaparse");ba.promisifyPapaParse();var Yt=require("fs-extra"),GJ=require("path"),{chain:Yb}=require("stream-chain"),Kb=require("stream-json/streamers/StreamArray"),Wb=require("stream-json/utils/Batch"),Qb=require("stream-chain/utils/comp"),{finished:Jb}=require("stream"),ph=U(),ew=Ah(),xJ=hh(),{BulkLoadFileObject:gh,BulkLoadDataObject:VJ}=$b(),Oh=nh(),{verifyBulkLoadAttributePerms:tw}=W_(),kJ=IE(),$J=He(),YJ=Yr(),zb="No records parsed from csv file.",$s=`${ph.get("HDB_ROOT")}/tmp`,{schema_regex:KJ}=zt(),Xb=1024*1024*5,Zb=5e3,WJ={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ow.exports={csvDataLoad:QJ,csvURLLoad:JJ,csvFileLoad:zJ,importFromS3:XJ};async function QJ(e,t){let r=lu.dataObject(e);if(r)throw ie(r,r.message,ye.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=_u.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new Oh;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&tw(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 ie(new Error,o,ye.BAD_REQUEST,void 0,void 0,!0);let c=new VJ(e.action,e.schema,e.table,n.data);return s=await ew.callOperationFunctionAsAwait(nw,c,iw.bind(null,n.meta.fields),t),s.message===zb?zb:aw(s.records,s.number_written)}catch(n){throw Ws(n)}}a(QJ,"csvDataLoad");async function JJ(e){let t=lu.urlObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${$s}/${r}`;try{await ZJ(e,r)}catch(n){throw Ys.error(Ae.DOWNLOAD_FILE_ERR(r)+" - "+n),ie(n,Ks(Ae.DOWNLOAD_FILE_ERR(r)))}try{let n=new gh(this.job_operation_function.name,e.action,e.schema,e.table,s,Rt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Nh(n);return await uu(s),i}catch(n){throw await uu(s),Ws(n)}}a(JJ,"csvURLLoad");async function zJ(e){let t=lu.fileObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r=new gh(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Nh(r)}catch(s){throw Ws(s)}}a(zJ,"csvFileLoad");async function XJ(e){let t=lu.s3FileObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=GJ.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${$s}/${n}`;let i=new gh(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await jJ(n,e);let o=await Nh(i);return await uu(r),o}catch(s){throw await uu(r),Ws(s)}}a(XJ,"importFromS3");async function ZJ(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await qJ("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 ie(s,n,s.statusCode,Rt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}tz(r,e.csv_url),await ez(t,r.raw)}a(ZJ,"downloadCSVFile");async function jJ(e,t){try{let r=`${$s}/${e}`;await Yt.mkdirp($s),await Yt.writeFile(`${$s}/${e}`,"",{flag:"a+"});let s=await Yt.createWriteStream(r),n=await xJ.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(){Ys.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ys.error(Ae.S3_DOWNLOAD_ERR+" - "+r),ie(r,Ks(Ae.S3_DOWNLOAD_ERR))}}a(jJ,"downloadFileFromS3");async function ez(e,t){try{await Yt.mkdirp($s),await Yt.writeFile(`${$s}/${e}`,t)}catch(r){throw Ys.error(Ae.WRITE_TEMP_FILE_ERR),ie(r,Ks(Ae.DEFAULT_BULK_LOAD_ERR))}}a(ez,"writeFileToTempFolder");async function uu(e){if(e)try{await Yt.access(e),await Yt.unlink(e)}catch{Ys.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(uu,"deleteTempFile");function tz(e,t){if(e.statusCode!==jb.HTTP_STATUS_CODES.OK)throw ie(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ye.BAD_REQUEST);if(!WJ[e.headers["content-type"]])throw ie(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ye.BAD_REQUEST);if(!e.raw)throw ie(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ye.BAD_REQUEST)}a(tz,"validateURLResponse");async function Nh(e){try{let t;switch(e.file_type){case Rt.VALID_S3_FILE_TYPES.CSV:t=await rz(e);break;case Rt.VALID_S3_FILE_TYPES.JSON:t=await sz(e);break;default:throw ie(new Error,Ae.DEFAULT_BULK_LOAD_ERR,ye.BAD_REQUEST,Rt.LOG_LEVELS.ERROR,Ae.INVALID_FILE_EXT_ERR(e))}return aw(t.records,t.number_written)}catch(t){throw Ws(t)}}a(Nh,"fileLoad");async function rw(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 cu.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&tw(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ie(c);r(_)}}a(rw,"validateChunk");async function sw(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ba.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ba.isEmpty(c)&&!ba.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 ew.callOperationFunctionAsAwait(nw,c,iw.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ie(c,Ks(Ae.INSERT_CSV_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.INSERT_CSV_ERR+" - "+c);r(_)}}a(sw,"insertChunk");async function rz(e){let t={records:0,number_written:0};try{let r=new Oh,s=Yt.createReadStream(e.file_path,{highWaterMark:Xb});s.setEncoding("utf8"),await _u.parsePromise(s,rw.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ie(new Error,n,ye.BAD_REQUEST);return s=Yt.createReadStream(e.file_path,{highWaterMark:Xb}),s.setEncoding("utf8"),await _u.parsePromise(s,sw.bind(null,e,t)),s.destroy(),t}catch(r){throw ie(r,Ks(Ae.PAPA_PARSE_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.PAPA_PARSE_ERR+r)}}a(rz,"callPapaParse");async function sz(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Oh,n=Yb([Yt.createReadStream(e.file_path,{encoding:"utf-8"}),Kb.withParser(),c=>c.value,new Wb({batchSize:Zb}),Qb(async c=>{await rw(e,s,r,c)})]);await new Promise((c,_)=>{Jb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ie(new Error,i,ye.BAD_REQUEST);let o=Yb([Yt.createReadStream(e.file_path,{encoding:"utf-8"}),Kb.withParser(),c=>c.value,new Wb({batchSize:Zb}),Qb(async c=>{await sw(e,t,r,c)})]);return await new Promise((c,_)=>{Jb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ie(s,Ks(Ae.INSERT_JSON_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.INSERT_JSON_ERR+s)}}a(sz,"insertJson");async function nw(e){let t={};try{e.data&&e.data.length>0&&nz(e.data[0])?t=await iz(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ys.info(t.message))}catch(r){throw Ws(r)}return t}a(nw,"callBulkFileLoad");function nz(e){let t=Object.keys(e);for(let r of t)if(!KJ.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(nz,"validateColumnNames");async function iz(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=cu.insert;break;case"update":i=cu.update;break;case"upsert":i=cu.upsert;break;default:throw ie(new Error,Ae.INVALID_ACTION_PARAM_ERR(s),ye.BAD_REQUEST,Rt.LOG_LEVELS.ERROR,Ae.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 _=ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Ws(o)}}a(iz,"bulkFileLoad");async function iw(e,t,r,s){try{if(t.data.length===0||!ph.get(Rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=_u.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 kJ(r.txn_time,i,ph.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await $J.publishToStream(`${FJ.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,YJ.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){Ys.error(n)}}a(iw,"postCSVLoadFunction");function aw(e,t){return`successfully loaded ${t} of ${e} records`}a(aw,"buildResponseMsg");function Ws(e){return ie(e,Ks(Ae.DEFAULT_BULK_LOAD_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ws,"buildTopLevelErrMsg")});var _w=f((A9,cw)=>{"use strict";var Eu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(Eu,"SqlSearchObject");cw.exports=Eu});var Ew=f((g9,lw)=>{"use strict";var az=T(),uw=require("moment"),oz=require("uuid").v4,du=class{constructor(){this.id=oz(),this.type=void 0,this.start_datetime=uw().valueOf(),this.created_datetime=uw().valueOf(),this.end_datetime=void 0,this.status=az.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(du,"JobObject");lw.exports=du});var wh=f((N9,mw)=>{"use strict";var cz=require("uuid").v4,fw=It(),Sw=bt(),_z=Gt(),uz=Sn(),lz=_w(),ae=T(),Ez=Ew(),dz=WE(),Lt=I(),hz=di(),Gn=b(),{promisify:bh}=require("util"),Qs=require("moment"),fz=J_(),hu=Rh(),dw=yl(),{deleteTransactionLogsBeforeValidator:Sz}=eh(),{handleHDBError:Tz,hdb_errors:mz}=y(),{HTTP_STATUS_CODES:Rz}=mz,hw=bh(Sw.searchByValue),Az=bh(Sw.searchByHash),pz=fw.insert,gz=bh(fz.evaluateSQL),Oz=fw.update;mw.exports={addJob:bz,updateJob:Cz,handleGetJob:Nz,handleGetJobsByStartDate:Iz,getJobById:Tw};async function Nz(e){try{let t=await Tw(e.id);return Gn.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(Nz,"handleGetJob");async function Iz(e){try{let t=await wz(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=Qs(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Qs(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(Iz,"handleGetJobsByStartDate");async function bz(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Gn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Lt.info(l),t.error=l,t}if(!ae.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ae.OPERATIONS_ENUM.CSV_FILE_LOAD:s=hu.fileObject(e);break;case ae.OPERATIONS_ENUM.CSV_URL_LOAD:s=hu.urlObject(e);break;case ae.OPERATIONS_ENUM.CSV_DATA_LOAD:s=hu.dataObject(e);break;case ae.OPERATIONS_ENUM.IMPORT_FROM_S3:s=hu.s3FileObject(e);break;case ae.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ae.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=dw(e,"date");break;case ae.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=dw(e,"timestamp");break;case ae.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Sz(e);break;default:break}if(s)throw Tz(s,s.message,Rz.BAD_REQUEST,void 0,void 0,!0);let n=new Ez;n.type=e.operation===ae.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ae.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new _z(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await hw(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=cz();try{o=await hw(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 hz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await pz(_)}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(bz,"addJob");async function wz(e){let t=Qs(e.from_date,Qs.ISO_8601),r=Qs(e.to_date,Qs.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 lz(s,e.hdb_user);try{return await gz(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(wz,"getJobsInDateRange");async function Tw(e){if(Gn.isEmptyOrZeroLength(e))return Gn.errorizeMessage("Invalid job ID specified.");let t=new uz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Az(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lt.error(s),Gn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Tw,"getJobById");async function Cz(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Gn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ae.JOB_STATUS_ENUM.COMPLETE||e.status===ae.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Qs().valueOf());let t=new dz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await Oz(t)}catch(s){throw new Error(s)}return r}a(Cz,"updateJob")});var Nw=f((b9,Ow)=>{"use strict";var Rw=b(),nt=T(),yz=require("moment"),fu=Ih(),Su=I(),Aw=wh(),pw=Oa(),gw=ps(),Uz=cn(),Lz=H_(),Tu=class{constructor(t,r){this.job=t,this.json=r}};a(Tu,"RunnerMessage");async function Mz(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(Rw.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Rw.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case nt.JOB_TYPE_ENUM.csv_file_load:await Ur(e,fu.csvFileLoad);break;case nt.JOB_TYPE_ENUM.csv_url_load:await Ur(e,fu.csvURLLoad);break;case nt.JOB_TYPE_ENUM.csv_data_load:await Ur(e,fu.csvDataLoad);break;case nt.JOB_TYPE_ENUM.import_from_s3:await Ur(e,fu.importFromS3);break;case nt.JOB_TYPE_ENUM.empty_trash:break;case nt.JOB_TYPE_ENUM.export_local:await Ur(e,pw.export_local);break;case nt.JOB_TYPE_ENUM.export_to_s3:await Ur(e,pw.export_to_s3);break;case nt.JOB_TYPE_ENUM.delete_files_before:case nt.JOB_TYPE_ENUM.delete_records_before:await Ur(e,gw.deleteFilesBefore);break;case nt.JOB_TYPE_ENUM.delete_audit_logs_before:await Ur(e,gw.deleteAuditLogsBefore);break;case nt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ur(e,Lz.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Mz,"parseMessage");async function Ur(e,t){try{e.job.status=nt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=yz().valueOf(),await Aw.updateJob(e.job),await Dz(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):Su.error(`There was an error running ${t.name} job with id ${e.job.id}`),Su.error(s),e.job.message=s,e.job.status=nt.JOB_STATUS_ENUM.ERROR;try{await Aw.updateJob(e.job)}catch(n){throw Su.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Ur,"runJob");async function Dz(e){Su.trace("launching job thread:",e),Uz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[nt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Dz,"launchJobThread");Ow.exports={parseMessage:Mz,RunnerMessage:Tu}});var bw=f((C9,Iw)=>{"use strict";var mu=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(mu,"OperationFunctionObject");Iw.exports=mu});var Fw=f((U9,qw)=>{"use strict";var pu=bt(),Lh=J_(),Ru=Ih(),xn=Bc(),Ch=Os(),Ca=ps(),Pz=DE(),wa=er(),Au=VE(),Lr=jd(),Ve=I(),vz=YE(),Bz=o_(),Hz=Sd(),qz=l_(),Fz=Td(),Gz=md(),xz=pd(),Vz=Od(),yh=bd(),ww=Oa(),kz=W_(),Mh=wh(),A=T(),{hdb_errors:Ua,handleHDBError:ya}=y(),{HTTP_STATUS_CODES:Cw}=Ua,Uh=yd(),yw=$d(),gu=require("util"),Js=It(),$z=Ar(),Yz=Ln(),Bw=Yi(),Uw=Nw(),Lw=Jc(),Mw=fr(),Dw=H_(),Pw=sh(),Kz=Ah(),Wz=gu.promisify(pu.searchByHash),Qz=gu.promisify(pu.searchByValue),Jz=gu.promisify(pu.search),zz=gu.promisify(Lh.evaluateSQL),Xz={[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},N=bw();function Zz(e,t,r){return Promise.all([Bw.postOperationHandler(e,t,r),e.table?Js.flush(e):null])}a(Zz,"postWrite");async function jz(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;Ve.info(c)}}catch(n){Ve.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:Zz,s=await Kz.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return Xz[e.body.operation]&&$z.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}a(jz,"processLocalTransaction");var vw=rX();qw.exports={chooseOperation:eX,getOperationFunction:Hw,processLocalTransaction:jz};function eX(e){let t;try{t=Hw(e)}catch(n){throw Ve.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=Lh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Lh.checkASTPermissions(e,i);if(o)throw Ve.error(`${Cw.FORBIDDEN} from operation ${e.search_operation}`),ya(new Error,o,Ua.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=kz.verifyPerms(i,n);if(o)throw Ve.error(`${Cw.FORBIDDEN} from operation ${e.operation}`),ya(new Error,o,Ua.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw ya(n,"There was an error when trying to choose an operation path")}return r}a(eX,"chooseOperation");function Hw(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),vw.has(e.operation))return vw.get(e.operation);throw ya(new Error,Ua.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ua.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Hw,"getOperationFunction");async function tX(e){Ve.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 Js.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Js.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Js.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Ca.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await Bw.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(tX,"catchup");async function _r(e){let t,r;try{r=await Mh.addJob(e),t=r.createdJob;let s=new Uw.RunnerMessage(t,e);return await Uw.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 Ve.error(n),ya(s,n)}}a(_r,"executeJob");function rX(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(Js.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(Js.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(Js.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N(pu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(Wz)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(Qz)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(Jz)),e.set(A.OPERATIONS_ENUM.SQL,new N(zz)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(_r,Ru.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(_r,Ru.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(_r,Ru.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(_r,Ru.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(xn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(xn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(xn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(xn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(xn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(xn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(Ch.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(Ch.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(Ch.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(Ca.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(wa.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(wa.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(wa.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(wa.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(Au.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(Au.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(Au.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(Au.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(wa.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(vz)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(Bz)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N(Hz)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(qz)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(Fz)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new N(Gz)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(Mw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N(xz.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new N(Vz)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(yh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(yh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(yh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(_r,ww.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(_r,Ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(_r,Ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(_r,ww.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(Mh.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(Mh.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N(Uh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N(Uh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N(Uh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(yw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(yw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(tX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(Yz.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(_r,Ca.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(Pz)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(Lw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(Lw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(Mw.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Lr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Lr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Lr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Lr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Lr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Lr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Lr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Lr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Lr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(Dw.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(_r,Dw.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(Pw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(Pw.auditModules)),e}a(rX,"initializeOperationFunctionMap")});var Nu=f((M9,Vw)=>{"use strict";var sX=T(),nX=b(),La=I(),{handleHDBError:Dh,hdb_errors:Ou}=y(),{isMainThread:iX}=require("worker_threads"),Gw=require("os"),aX=require("util"),oX=jE(),cX=aX.promisify(oX.authorize),xw=Fw();function _X(e){let t=`Found an uncaught exception with message: ${e.message}. ${Gw.EOL}Stack: ${e.stack} ${Gw.EOL}Terminating ${iX?"HDB":"thread"}.`;console.error(t),La.fatal(t),process.exit(1)}a(_X,"handleServerUncaughtException");function uX(e,t,r){if(La[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg=="string"?r.code(e.http_resp_code).send({error:e.http_resp_msg}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Ou.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(uX,"serverErrorHandler");function lX(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Dh(new Error,"Invalid JSON.",Ou.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(nX.isEmpty(e.body.operation)){let s=Dh(new Error,"Request body must include an 'operation' property.",Ou.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(lX,"reqBodyValidationHandler");function EX(e,t,r){let s;e.body.operation!==sX.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS?cX(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{La.warn(n),La.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Dh(n,i,Ou.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,r())}a(EX,"authHandler");async function dX(e,t=!1){let r;try{return t&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=t),r=xw.chooseOperation(e.body),xw.processLocalTransaction(e,r)}catch(s){throw La.error(s),s}}a(dX,"handlePostRequest");Vw.exports={authHandler:EX,handlePostRequest:dX,handleServerUncaughtException:_X,serverErrorHandler:uX,reqBodyValidationHandler:lX}});var Ph=f((P9,zw)=>{"use strict";var{streamAsJSON:Iu}=to(),{toCsvStream:$w}=Oa(),{pack:Yw,unpack:hX,encodeIter:Kw}=require("msgpackr"),{decode:fX,EncoderStream:Ww}=require("cbor-x"),{Readable:Qw}=require("stream"),kw={"application/json":{serialize:Iu,q:.8},"application/cbor":{serialize:function(e){return new Ww(bu).end(e)},q:1},"application/x-msgpack":{serialize:function(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Qw.from(Kw(e,bu)):Yw(e)},q:.9},"text/csv":{serialize:function(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),$w(e)},q:.1},"*/*":{type:"application/json",serialize:Iu,q:.8}},bu={useRecords:!1};function SX(e){e.register(mX,{serializers:[{regex:/^application\/json$/,serializer:Iu},{regex:/^application\/cbor$/,serializer:function(t){return new Ww(bu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Qw.from(Kw(t,bu)):Yw(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),$w(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,hX(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,fX(r))}catch(n){n.statusCode=400,s(n)}})}a(SX,"registerContentHandlers");var TX=require("fastify-plugin"),mX=TX(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Jw(s.raw);n.type(c),n.serializer(o)}),r()},{name:"content-type-negotiation"});function Jw(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[_,...u]=c.split(/\s*;\s*/),l=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}l=+E.q;let d=kw[_];if(d){let h=(d.q||1)*l;h>s&&(r=d.serialize,n=d.type||_,s=h,i=E)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Object.keys(kw).join(", "))}};r=Iu,n="application/json"}return{serializer:r,type:n,parameters:i}}a(Jw,"findBestSerializer");zw.exports={registerContentHandlers:SX,findBestSerializer:Jw}});var jw=f((F9,Zw)=>{"use strict";var RX=require("cluster"),Dt=U();Dt.initSync();var Bh=T(),AX=require("util"),Mt=I(),{streamAsJSON:B9}=to(),vh=require("fs"),pX=require("fastify"),gX=ei(),OX=require("@fastify/cors"),NX=require("@fastify/compress"),IX=require("@fastify/static"),bX=Yu(),wX=require("path"),{PACKAGE_ROOT:CX}=T(),yX=Ar(),UX=b(),LX=er(),MX=Ts(),{isMainThread:DX}=require("worker_threads"),{registerServer:PX}=Hh(),{toCsvStream:H9}=Oa(),vX=AX.promisify(yX.setSchemaDataToGlobal),{authHandler:BX,handlePostRequest:HX,handleServerUncaughtException:qX,serverErrorHandler:FX,reqBodyValidationHandler:GX}=Nu(),q9=require("net"),{registerContentHandlers:xX}=Ph(),VX=1024*1024*1024,Xw="TRUE",{HDB_SETTINGS_NAMES:_s,CONFIG_PARAMS:kX}=Bh,$X=_s.CORS_ENABLED_KEY,YX="CORS_ACCESSLIST",KX=_s.SERVER_TIMEOUT_KEY,WX=_s.SERVER_KEEP_ALIVE_TIMEOUT_KEY,QX=_s.SERVER_HEADERS_TIMEOUT_KEY,JX=_s.PRIVATE_KEY_KEY,zX=_s.CERT_KEY,XX=_s.HTTP_SECURE_ENABLED_KEY,ZX=_s.SERVER_PORT_KEY,zs;Zw.exports={hdbServer:jX};async function jX(){try{Mt.info("In Fastify server"+process.cwd()),Mt.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mt.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=RX.isMaster,process.on("uncaughtException",qX),await eZ();let e=Dt.get(XX),t=Dt.get(ZX),r=e&&(e===!0||e.toUpperCase()===Xw);zs=tZ(r),await zs.ready();let s=r?"HTTPS":"HTTP";try{PX(Bh.SERVICES.HDB_CORE,zs),DX?(await zs.listen({port:t,host:"::"}),Mt.info(`HarperDB ${gX.version} ${s} Server running on port ${t}`)):zs.server.closeIdleConnections||await zs.listen({port:0,host:"::"})}catch(n){throw zs.close(),Mt.error(n),Mt.error(`Error configuring ${s} server`),n}}catch(e){Mt.error(`Failed to build server on ${process.pid}`),Mt.fatal(e),process.exit(1)}}a(jX,"hdbServer");async function eZ(){try{Mt.trace("Configuring HarperDB process."),await vX(),await LX.setUsersToGlobal(),await MX.getLicense()}catch(e){Mt.error(e)}}a(eZ,"setUp");function tZ(e){Mt.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=rZ(e),r=pX(t);r.server.headersTimeout=nZ(),r.setErrorHandler(FX);let s=sZ();s&&r.register(OX,s),r.register(function(i,o,c){i.setNotFoundHandler(function(_,u){u.code(404).send({error:"Not Found",statusCode:404})}),c()}),r.register(bX),r.register(NX),r.register(IX,{root:wX.join(CX,"docs")}),xX(r);let n=Dt.get(Bh.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!UX.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[GX,BX]},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),HX(i)}),Mt.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(tZ,"buildServer");function rZ(e){let t=Dt.get(KX),r=Dt.get(WX),s={bodyLimit:VX,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Dt.get(JX),i=Dt.get(zX),o=Dt.get(kX.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:vh.readFileSync(n),cert:vh.readFileSync(i)+(o?`
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=XI(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 G_.info(`finished installModules with response ${i}`),i}a(dQ,"installModules");function XI(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(XI,"parseNPMStdErr");async function hQ(e){G_.info(`starting auditModules for request: ${e}`);let t=eb(e);if(t)throw qn(t,t.message,Fn.BAD_REQUEST);let{projects:r}=e;await ZI(),await jI(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=F_.join(sh,o);s[o]={npm_output:null,npm_error:null};try{let _=await zI("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=XI(_.stderr)}}return G_.info(`finished auditModules with response ${s}`),s}a(hQ,"auditModules");async function ZI(){try{return await zI("npm -v"),!0}catch{throw qn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Fn.BAD_REQUEST,void 0,void 0,!0)}}a(ZI,"checkNPMInstalled");async function jI(e){if(!Array.isArray(e)||e.length===0)throw qn(new Error,"projects argument must be an array with at least 1 element",Fn.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=F_.join(sh,i.toString());if(!await KI.pathExists(o)){t.push(i);continue}let _=F_.join(o,"package.json");await KI.pathExists(_)||r.push(i)}if(t.length>0)throw qn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Fn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw qn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Fn.BAD_REQUEST,void 0,void 0,!0)}a(jI,"checkProjectPaths");function eb(e){let t=q_.object({projects:q_.array().min(1).items(q_.string()).required(),dry_run:q_.boolean().default(!1)});return lQ.validateBySchema(e,t)}a(eb,"modulesValidator")});var sb=f((t9,rb)=>{"use strict";var x_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(x_,"PermissionTableResponseObject");rb.exports=x_});var ib=f((s9,nb)=>{"use strict";var V_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(V_,"PermissionAttributeResponseObject");nb.exports=V_});var ih=f((i9,ob)=>{"use strict";var ab=sb(),fQ=ib(),{HDB_ERROR_MSGS:SQ}=at(),k_=class{constructor(){this.error=SQ.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 ab(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new fQ(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 ab(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(k_,"PermissionResponseObject");ob.exports=k_});var W_=f((o9,gb)=>{"use strict";var ah=It(),$_=bt(),yt=Bc(),Ta=Ns(),oh=gs(),TQ=DE(),ma=er(),Y_=VE(),Re=I(),mQ=YE(),RQ=o_(),AQ=Td(),pQ=l_(),gQ=md(),OQ=Rd(),NQ=gd(),IQ=Nd(),ch=wd(),Cr=b(),bQ=NN(),_h=Ud(),ub=Yd(),Ct=T(),lb=CI(),wQ=Ln(),Eb=Jc(),db=fr(),yr=eh(),CQ=require("alasql"),hb=H_(),fb=nh(),Sb=ih(),{handleHDBError:rt,hdb_errors:Tb}=y(),{HDB_ERROR_MSGS:Ce,HTTP_STATUS_CODES:fa}=Tb,p=new Map,mb="delete",os="insert",cs="read",ks="update",Sa="describe",cb=Ta.describeSchema.name,_b=Ta.describeTable.name,Rb={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},yQ="catchup",UQ="handleGetJob",LQ="handleGetJobsByStartDate",K_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},MQ=[yt.createTable.name,yt.createAttribute.name,yt.dropTable.name,yt.dropAttribute.name],Ab={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},O=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(O,"permission");p.set(ah.insert.name,new O(!1,[os]));p.set(ah.update.name,new O(!1,[ks]));p.set(ah.upsert.name,new O(!1,[os,ks]));p.set($_.searchByConditions.name,new O(!1,[cs]));p.set($_.searchByHash.name,new O(!1,[cs]));p.set($_.searchByValue.name,new O(!1,[cs]));p.set($_.search.name,new O(!1,[cs]));p.set(yt.createSchema.name,new O(!0,[]));p.set(yt.createTable.name,new O(!0,[]));p.set(yt.createAttribute.name,new O(!1,[os]));p.set(yt.dropSchema.name,new O(!0,[]));p.set(yt.dropTable.name,new O(!0,[]));p.set(yt.dropAttribute.name,new O(!0,[]));p.set(Ta.describeSchema.name,new O(!1,[cs]));p.set(Ta.describeTable.name,new O(!1,[cs]));p.set(oh.deleteRecord.name,new O(!1,[mb]));p.set(ma.addUser.name,new O(!0,[]));p.set(ma.alterUser.name,new O(!0,[]));p.set(ma.dropUser.name,new O(!0,[]));p.set(ma.listUsersExternal.name,new O(!0,[]));p.set(Y_.listRoles.name,new O(!0,[]));p.set(Y_.addRole.name,new O(!0,[]));p.set(Y_.alterRole.name,new O(!0,[]));p.set(Y_.dropRole.name,new O(!0,[]));p.set(mQ.name,new O(!0,[]));p.set(RQ.name,new O(!0,[]));p.set(AQ.name,new O(!0,[]));p.set(pQ.name,new O(!0,[]));p.set(gQ.name,new O(!0,[]));p.set(OQ.name,new O(!0,[]));p.set(ch.setRoutes.name,new O(!0,[]));p.set(ch.getRoutes.name,new O(!0,[]));p.set(ch.deleteRoutes.name,new O(!0,[]));p.set(db.setConfiguration.name,new O(!0,[]));p.set(NQ.clusterStatus.name,new O(!0,[]));p.set(IQ.name,new O(!0,[]));p.set(_h.getFingerprint.name,new O(!0,[]));p.set(_h.setLicense.name,new O(!0,[]));p.set(oh.deleteFilesBefore.name,new O(!0,[]));p.set(oh.deleteAuditLogsBefore.name,new O(!0,[]));p.set(ub.restart.name,new O(!0,[]));p.set(ub.restartService.name,new O(!0,[]));p.set(TQ.name,new O(!0,[]));p.set(wQ.systemInformation.name,new O(!0,[]));p.set(db.getConfiguration.name,new O(!0,[]));p.set(hb.readTransactionLog.name,new O(!0,[]));p.set(hb.deleteTransactionLogsBefore.name,new O(!0,[]));p.set(fb.installModules.name,new O(!0,[]));p.set(fb.auditModules.name,new O(!0,[]));p.set(Eb.createTokens.name,new O(!1,[]));p.set(Eb.refreshOperationToken.name,new O(!1,[]));p.set(yr.customFunctionsStatus.name,new O(!0,[]));p.set(yr.getCustomFunctions.name,new O(!0,[]));p.set(yr.getCustomFunction.name,new O(!0,[]));p.set(yr.setCustomFunction.name,new O(!0,[]));p.set(yr.dropCustomFunction.name,new O(!0,[]));p.set(yr.addCustomFunctionProject.name,new O(!0,[]));p.set(yr.dropCustomFunctionProject.name,new O(!0,[]));p.set(yr.packageCustomFunctionProject.name,new O(!0,[]));p.set(yr.deployCustomFunctionProject.name,new O(!0,[]));p.set(_h.getRegistrationInfo.name,new O(!1,[]));p.set(ma.userInfo.name,new O(!1,[]));p.set(Ta.describeAll.name,new O(!1,[]));p.set(UQ,new O(!1,[]));p.set(LQ,new O(!0,[]));p.set(yQ,new O(!0,[]));p.set(K_.CSV_DATA_LOAD,new O(!1,[os,ks]));p.set(K_.CSV_URL_LOAD,new O(!1,[os,ks]));p.set(K_.CSV_FILE_LOAD,new O(!1,[os,ks]));p.set(K_.IMPORT_FROM_S3,new O(!1,[os,ks]));p.set(Ab.EXPORT_TO_S3,new O(!0,[]));p.set(Ab.EXPORT_LOCAL,new O(!0,[]));p.set(Ct.VALID_SQL_OPS_ENUM.DELETE,new O(!1,[mb]));p.set(Ct.VALID_SQL_OPS_ENUM.SELECT,new O(!1,[cs]));p.set(Ct.VALID_SQL_OPS_ENUM.INSERT,new O(!1,[os]));p.set(Ct.VALID_SQL_OPS_ENUM.UPDATE,new O(!1,[ks]));gb.exports={verifyPerms:PQ,verifyPermsAst:DQ,verifyBulkLoadAttributePerms:BQ};function DQ(e,t,r){if(Cr.isEmptyOrZeroLength(e))throw Re.info("verify_perms_ast has an empty user parameter"),rt(new Error);if(Cr.isEmptyOrZeroLength(t))throw Re.info("verify_perms_ast has an empty user parameter"),rt(new Error);if(Cr.isEmptyOrZeroLength(r))throw Re.info("verify_perms_ast has a null operation parameter"),rt(new Error);try{let s=new Sb,n=new bQ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Re.info("No schemas defined in verifyPermsAst(), will not continue."),rt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&Rb[r])throw rt(new Error,Ce.DROP_SYSTEM,fa.FORBIDDEN);if(c&&!_)return null;let u=lb.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof CQ.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=pb(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let m=n.getAttributesBySchemaTableName(d,E[h]),R=lh(t.role.permission,d,E[h]);uh(m,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw rt(s)}}a(DQ,"verifyPermsAst");function PQ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Re.info("null required parameter in verifyPerms"),rt(new Error,Ce.DEFAULT_INVALID_REQUEST,fa.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 Sb;if(Cr.isEmptyOrZeroLength(e.hdb_user.role)||Cr.isEmptyOrZeroLength(e.hdb_user.role.permission))return Re.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ce.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(Ct.SYSTEM_SCHEMA_NAME)||n===Ct.SYSTEM_SCHEMA_NAME;if(l&&Rb[r])throw rt(new Error,Ce.DROP_SYSTEM,fa.FORBIDDEN);if(_&&!l||u===!0&&(r===yt.createSchema.name||r===yt.dropSchema.name))return null;if(MQ.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=lb.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===cb||r===_b){if(n===Ct.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ce.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===cb&&(!E[n]||!E[n][Sa]))return c.handleInvalidItem(Ce.SCHEMA_NOT_FOUND(n));if(r===_b&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][Sa]))return c.handleInvalidItem(Ce.TABLE_NOT_FOUND(n,i))}}let d=pb(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&&Ct.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],g=E[n].tables[i];g[Ct.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(x=>x[Ct.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=vQ(e),m=lh(e.hdb_user.role.permission,n,i);return uh(h,m,r,i,n,c,s),c.getPermsResponse()}a(PQ,"verifyPerms");function pb(e,t,r,s,n){if(Cr.arrayHasEmptyValues([e,t,r]))throw Re.info("hasPermissions has an invalid parameter"),rt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!p.get(t))throw Re.info(`operation ${t} not found.`),rt(new Error,Ce.OP_NOT_FOUND(t),fa.BAD_REQUEST);if(p.get(t)&&p.get(t).requires_su)return Re.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ce.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][Sa]===!1){s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ce.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[Sa]===!1)s.addInvalidItem(Ce.TABLE_NOT_FOUND(_,l));else try{let d=[],h=p.get(t).perms;!Cr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let m=0;m<h.length;m++){let R=h[m],g=E[R];(g==null||g===!1)&&(Re.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=Ce.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw Re.error(h),Re.error(d),rt(Tb.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(pb,"hasPermissions");function uh(e,t,r,s,n,i,o){if(!e||!t)throw Re.info("no attributes specified in checkAttributePerms."),rt(new Error);let c=p.get(r).perms;if(!c||c==="")throw Re.info(`no permissions found for ${r} in checkAttributePerms().`),rt(new Error);if(Cr.isEmptyOrZeroLength(t))return Re.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[Sa]===!1){i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Ct.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==cs)throw rt(new Error,Ce.SYSTEM_TIMESTAMP_PERMS_ERR,fa.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ce.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(uh,"checkAttributePerms");function vQ(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ct.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){Re.info(r)}return t}a(vQ,"getRecordAttributes");function lh(e,t,r){let s=new Map;if(Cr.isEmpty(e))return Re.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{Re.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(lh,"getAttributePermissions");function BQ(e,t,r,s,n,i,o){let c=new Set(i),_=lh(e,s,n);uh(c,_,t,n,s,o,r)}a(BQ,"verifyBulkLoadAttributePerms")});var J_=f((_9,wb)=>{"use strict";wb.exports={evaluateSQL:XQ,processAST:bb,convertSQLToAST:Ib,checkASTPermissions:Nb};var Ob=It(),hh=require("util"),HQ=hh.callbackify(Ob.insert),qQ=bt().search,FQ=hg().update,GQ=hh.callbackify(FQ),xQ=Sg().convertDelete,_s=require("alasql"),VQ=W_(),Aa=I(),kQ=Oc(),$Q=b(),Ra=T(),{hdb_errors:YQ,handleHDBError:Eh}=y(),{HTTP_STATUS_CODES:dh}=YQ,KQ=Yi();function WQ(e,t){return Promise.all([KQ.postOperationHandler(e,t,void 0),Ob.flush(e)])}a(WQ,"postWrite");var QQ=hh.callbackify(WQ);kQ(_s);var JQ=403,zQ="There was a problem performing this insert. Please check the logs and try again.",Q_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(Q_,"ParsedSQLObject");function XQ(e,t){let r=e.parsed_sql_object;if(!r){r=Ib(e.sql);let s,n=r.ast.statements[0];if(n instanceof _s.yy.Insert?s=n.into.databaseid:n instanceof _s.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof _s.yy.Update||n instanceof _s.yy.Delete?s=n.table.databaseid:Aa.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof _s.yy.Select)&&$Q.isEmptyOrZeroLength(s))return t("No schema specified",null)}bb(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(XQ,"evaluateSQL");function Nb(e,t){let r;try{r=VQ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Nb,"checkASTPermissions");function Ib(e){let t=new Q_;if(!e)throw Eh(new Error,"The 'sql' parameter is missing from the request body",dh.BAD_REQUEST);try{let r=e.trim(),s=_s.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
+
`);throw s[1]?Eh(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,dh.BAD_REQUEST):Eh(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",dh.BAD_REQUEST)}return t}a(Ib,"convertSQLToAST");function bb(e,t,r){try{let s=ZQ;if(!e.bypass_auth&&!t.permissions_checked){let i=Nb(e,t);if(i&&i.length>0)return r(JQ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ra.VALID_SQL_OPS_ENUM.SELECT:s=qQ,n=t.ast.statements[0];break;case Ra.VALID_SQL_OPS_ENUM.INSERT:s=jQ;break;case Ra.VALID_SQL_OPS_ENUM.UPDATE:s=GQ;break;case Ra.VALID_SQL_OPS_ENUM.DELETE:s=xQ;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(bb,"processAST");function ZQ(e,t){Aa.info(e),t("unknown sql statement")}a(ZQ,"nullFunction");function jQ({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=eJ(i,e.values)}catch(o){return r(o)}HQ(n,(o,c)=>{if(o)return r(o);QQ(n,c,_=>{_&&Aa.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){Aa.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(jQ,"convertInsert");function eJ(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]]=_s.compile(`SELECT ${n.toString()} AS [${Ra.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Aa.error(r),new Error(zQ)}}a(eJ,"createDataObjects")});var fh=f((l9,yb)=>{"use strict";var{S3:tJ,GetObjectCommand:rJ}=require("@aws-sdk/client-s3");yb.exports={getFileStreamFromS3:sJ,getS3AuthObj:Cb};async function sJ(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Cb(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new rJ(r))).Body}a(sJ,"getFileStreamFromS3");function Cb(e,t,r){return new tJ({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Cb,"getS3AuthObj")});var Oa=f((d9,qb)=>{"use strict";var Mb=bt(),nJ=J_(),iJ=fh(),{AsyncParser:aJ,Transform:oJ}=require("json2csv"),ga=require("stream"),mt=b(),Sh=require("fs-extra"),cJ=require("path"),Ut=I(),{promisify:z_}=require("util"),pa=b(),{handleHDBError:Se,hdb_errors:_J}=y(),{HDB_ERROR_MSGS:st,HTTP_STATUS_CODES:Te}=_J,{streamAsJSON:uJ}=to(),{Upload:lJ}=require("@aws-sdk/lib-storage"),Ub=["search_by_value","search_by_hash","sql"],Lb=["json","csv"],Db="json",Pb="csv",EJ="Successfully exported JSON locally.",dJ="Successfully exported CSV locally.",hJ=1e3,fJ=z_(Mb.searchByHash),SJ=z_(Mb.searchByValue),TJ=z_(nJ.evaluateSQL),mJ=z_(ga.finished);qb.exports={export_to_s3:gJ,export_local:RJ,toCsvStream:vb};async function RJ(e){Ut.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Bb(e);if(!mt.isEmpty(t))throw Ut.error(t),Se(new Error,t,Te.BAD_REQUEST,void 0,void 0,!0);if(mt.isEmpty(e.path))throw Ut.error(st.MISSING_VALUE("path")),Se(new Error,st.MISSING_VALUE("path"),Te.BAD_REQUEST,void 0,void 0,!0);let r=(mt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(cJ.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=mt.buildFolderPath(e.path,r);await AJ(e.path);let n=await Hb(e);return await pJ(s,e.format,n)}a(RJ,"export_local");async function AJ(e){if(Ut.trace("in confirmPath"),mt.isEmptyOrZeroLength(e))throw Se(new Error,`Invalid path: ${e}`,Te.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Sh.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,Ut.error(s),Se(new Error,s,Te.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 Ut.error(r),Se(new Error,r,Te.BAD_REQUEST,void 0,void 0,!0)}return!0}a(AJ,"confirmPath");async function pJ(e,t,r){if(Ut.trace("in saveToLocal"),pa.isEmptyOrZeroLength(e))throw Se(new Error,st.INVALID_VALUE("file_path"),Te.BAD_REQUEST,void 0,void 0,!0);if(pa.isEmptyOrZeroLength(t))throw Se(new Error,st.INVALID_VALUE("Source format"),Te.BAD_REQUEST,void 0,void 0,!0);if(pa.isEmpty(r))throw Se(new Error,st.NOT_FOUND("Data"),Te.BAD_REQUEST,void 0,void 0,!0);if(t===Db){let s=Sh.createWriteStream(e);return uJ(r).pipe(s),await mJ(s),{message:EJ,path:e}}else if(t===Pb){let s=Sh.createWriteStream(e),n=ga.Readable.from(r),i={},o={objectMode:!0};return await new aJ(i,o).fromInput(n).toOutput(s).promise(!1),{message:dJ,path:e}}throw Se(new Error,st.INVALID_VALUE("format"),Te.BAD_REQUEST)}a(pJ,"saveToLocal");async function gJ(e){if(!e.s3||Object.keys(e.s3).length===0)throw Se(new Error,st.MISSING_VALUE("S3 object"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Se(new Error,st.MISSING_VALUE("aws_access_key_id"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Se(new Error,st.MISSING_VALUE("aws_secret_access_key"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.bucket))throw Se(new Error,st.MISSING_VALUE("bucket"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.key))throw Se(new Error,st.MISSING_VALUE("key"),Te.BAD_REQUEST);if(mt.isEmptyOrZeroLength(e.s3.region))throw Se(new Error,st.MISSING_VALUE("region"),Te.BAD_REQUEST);let t=Bb(e);if(!mt.isEmpty(t))throw Se(new Error,t,Te.BAD_REQUEST);Ut.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Hb(e)}catch(_){throw Ut.error(_),_}let s,n=await iJ.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ga.PassThrough;if(e.format===Pb){i=e.s3.key+".csv";let _=vb(r);_.on("error",u=>{throw u}),_.pipe(o)}else if(e.format===Db){i=e.s3.key+".json";let _=new ga.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%hJ===0&&(_.push(l),l="")}l.length!==0&&_.push(l),_.push("]"),_.push(null)}else throw Se(new Error,st.INVALID_VALUE("format"),Te.BAD_REQUEST);return new lJ({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gJ,"export_to_s3");function vb(e){let t=ga.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new oJ(r,s);return t.pipe(n)}a(vb,"toCsvStream");function Bb(e){if(Ut.trace("in exportCoreValidation"),mt.isEmpty(e.format))return"format missing";if(Lb.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Lb.join(", ")}`;let t=e.search_operation.operation;if(mt.isEmpty(t))return"search_operation.operation missing";if(Ub.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Ub.join(", ")}`}a(Bb,"exportCoreValidation");async function Hb(e){Ut.trace("in getRecords");let t,r;if(pa.isEmpty(e.search_operation)||pa.isEmptyOrZeroLength(e.search_operation.operation))throw Se(new Error,st.INVALID_VALUE("Search operation"),Te.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=SJ;break;case"search_by_hash":t=fJ;break;case"sql":t=TJ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ut.error(r),Se(new Error,r,Te.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Hb,"getRecords")});var Ah=f((f9,kb)=>{var ru=require("clone"),su=re(),OJ=b(),eu=T(),NJ=I(),X_=require("fs"),Th=require("joi"),{string:tu}=Th.types(),{hdb_errors:IJ,handleHDBError:Na}=y(),{HDB_ERROR_MSGS:bJ,HTTP_STATUS_CODES:Z_}=IJ,{common_validators:j_}=zt(),Fb=1e9,Gb=" is required",wJ=["insert","update","upsert"],mh={schema:{presence:!0,format:j_.schema_format,length:j_.schema_length},table:{presence:!0,format:j_.schema_format,length:j_.schema_length},action:{inclusion:{within:wJ,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},CJ={schema:tu.required(),table:tu.required(),action:tu.valid("insert","update","upsert")},{AWS_ACCESS_KEY:yJ,AWS_SECRET:UJ,AWS_BUCKET:LJ,AWS_FILE_KEY:MJ,REGION:DJ}=eu.S3_BUCKET_AUTH_KEYS,PJ={s3:{presence:!0},[`s3.${yJ}`]:{presence:!0,type:"String"},[`s3.${UJ}`]:{presence:!0,type:"String"},[`s3.${LJ}`]:{presence:!0,type:"String"},[`s3.${MJ}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${DJ}`]:{presence:!0,type:"String"}},xb=ru(mh);xb.data.presence={message:Gb};var Vb=ru(mh);Vb.file_path.presence={message:Gb};var vJ=Object.assign(ru(mh),PJ),Rh=ru(CJ);Rh.csv_url=tu.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Rh.passthrough_headers=Th.object();function BJ(e){let t=su.validateObject(e,xb);return nu(e,t)}a(BJ,"dataObject");function HJ(e){let t=su.validateBySchema(e,Th.object(Rh));return nu(e,t)}a(HJ,"urlObject");function qJ(e){let t=su.validateObject(e,Vb);return nu(e,t)}a(qJ,"fileObject");function FJ(e){let t=su.validateObject(e,vJ);return nu(e,t)}a(FJ,"s3FileObject");function nu(e,t){if(!t){let r=OJ.checkGlobalSchemaTable(e.schema,e.table);if(r)return Na(new Error,r,Z_.BAD_REQUEST);if(e.operation===eu.OPERATIONS_ENUM.CSV_FILE_LOAD){try{X_.accessSync(e.file_path,X_.constants.R_OK|X_.constants.F_OK)}catch(s){return s.code===eu.NODE_ERROR_CODES.ENOENT?Na(s,`No such file or directory ${s.path}`,Z_.BAD_REQUEST):s.code===eu.NODE_ERROR_CODES.EACCES?Na(s,`Permission denied ${s.path}`,Z_.BAD_REQUEST):Na(s)}try{let s=X_.statSync(e.file_path).size;if(s>Fb)return Na(new Error,bJ.MAX_FILE_SIZE_ERR(s,Fb),Z_.BAD_REQUEST)}catch(s){NJ.error(s),console.error(s)}}}return t}a(nu,"postValidateChecks");kb.exports={dataObject:BJ,urlObject:HJ,fileObject:qJ,s3FileObject:FJ}});var ph=f((T9,$b)=>{"use strict";var Ia=I(),iu=T();async function GJ(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===iu.OPERATIONS_ENUM.INSERT||t.operation===iu.OPERATIONS_ENUM.UPDATE||t.operation===iu.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===iu.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ia.info(i.message),i):i.http_resp_msg?(Ia.error(`Error calling operation: ${e.name}`),Ia.error(i.http_resp_msg),i):(Ia.error(`Error calling operation: ${e.name}`),Ia.error(i),i)}}a(GJ,"callOperationFunctionAsAwait");$b.exports={callOperationFunctionAsAwait:GJ}});var Kb=f((R9,Yb)=>{"use strict";var au=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(au,"BulkLoadFileObject");var ou=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(ou,"BulkLoadDataObject");Yb.exports={BulkLoadFileObject:au,BulkLoadDataObject:ou}});var bh=f((p9,_w)=>{"use strict";var cu=It(),lu=Ah(),xJ=require("needle"),Rt=T(),VJ=le(),ba=b(),{handleHDBError:ie,hdb_errors:tw}=y(),{HTTP_STATUS_CODES:ye,HDB_ERROR_MSGS:Ae,CHECK_LOGS_WRAPPER:Ks}=tw,Ys=I(),_u=require("papaparse");ba.promisifyPapaParse();var Yt=require("fs-extra"),kJ=require("path"),{chain:Wb}=require("stream-chain"),Qb=require("stream-json/streamers/StreamArray"),Jb=require("stream-json/utils/Batch"),zb=require("stream-chain/utils/comp"),{finished:Xb}=require("stream"),gh=U(),rw=ph(),$J=fh(),{BulkLoadFileObject:Oh,BulkLoadDataObject:YJ}=Kb(),Nh=ih(),{verifyBulkLoadAttributePerms:sw}=W_(),KJ=IE(),WJ=He(),QJ=Yr(),Zb="No records parsed from csv file.",$s=`${gh.get("HDB_ROOT")}/tmp`,{schema_regex:JJ}=zt(),jb=1024*1024*5,ew=5e3,zJ={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_w.exports={csvDataLoad:XJ,csvURLLoad:ZJ,csvFileLoad:jJ,importFromS3:ez};async function XJ(e,t){let r=lu.dataObject(e);if(r)throw ie(r,r.message,ye.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=_u.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new Nh;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&sw(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 ie(new Error,o,ye.BAD_REQUEST,void 0,void 0,!0);let c=new YJ(e.action,e.schema,e.table,n.data);return s=await rw.callOperationFunctionAsAwait(aw,c,ow.bind(null,n.meta.fields),t),s.message===Zb?Zb:cw(s.records,s.number_written)}catch(n){throw Ws(n)}}a(XJ,"csvDataLoad");async function ZJ(e){let t=lu.urlObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${$s}/${r}`;try{await tz(e,r)}catch(n){throw Ys.error(Ae.DOWNLOAD_FILE_ERR(r)+" - "+n),ie(n,Ks(Ae.DOWNLOAD_FILE_ERR(r)))}try{let n=new Oh(this.job_operation_function.name,e.action,e.schema,e.table,s,Rt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Ih(n);return await uu(s),i}catch(n){throw await uu(s),Ws(n)}}a(ZJ,"csvURLLoad");async function jJ(e){let t=lu.fileObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r=new Oh(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Ih(r)}catch(s){throw Ws(s)}}a(jJ,"csvFileLoad");async function ez(e){let t=lu.s3FileObject(e);if(t)throw ie(t,t.message,ye.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=kJ.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${$s}/${n}`;let i=new Oh(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await rz(n,e);let o=await Ih(i);return await uu(r),o}catch(s){throw await uu(r),Ws(s)}}a(ez,"importFromS3");async function tz(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await xJ("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 ie(s,n,s.statusCode,Rt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}nz(r,e.csv_url),await sz(t,r.raw)}a(tz,"downloadCSVFile");async function rz(e,t){try{let r=`${$s}/${e}`;await Yt.mkdirp($s),await Yt.writeFile(`${$s}/${e}`,"",{flag:"a+"});let s=await Yt.createWriteStream(r),n=await $J.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(){Ys.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ys.error(Ae.S3_DOWNLOAD_ERR+" - "+r),ie(r,Ks(Ae.S3_DOWNLOAD_ERR))}}a(rz,"downloadFileFromS3");async function sz(e,t){try{await Yt.mkdirp($s),await Yt.writeFile(`${$s}/${e}`,t)}catch(r){throw Ys.error(Ae.WRITE_TEMP_FILE_ERR),ie(r,Ks(Ae.DEFAULT_BULK_LOAD_ERR))}}a(sz,"writeFileToTempFolder");async function uu(e){if(e)try{await Yt.access(e),await Yt.unlink(e)}catch{Ys.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(uu,"deleteTempFile");function nz(e,t){if(e.statusCode!==tw.HTTP_STATUS_CODES.OK)throw ie(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,ye.BAD_REQUEST);if(!zJ[e.headers["content-type"]])throw ie(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,ye.BAD_REQUEST);if(!e.raw)throw ie(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,ye.BAD_REQUEST)}a(nz,"validateURLResponse");async function Ih(e){try{let t;switch(e.file_type){case Rt.VALID_S3_FILE_TYPES.CSV:t=await iz(e);break;case Rt.VALID_S3_FILE_TYPES.JSON:t=await az(e);break;default:throw ie(new Error,Ae.DEFAULT_BULK_LOAD_ERR,ye.BAD_REQUEST,Rt.LOG_LEVELS.ERROR,Ae.INVALID_FILE_EXT_ERR(e))}return cw(t.records,t.number_written)}catch(t){throw Ws(t)}}a(Ih,"fileLoad");async function nw(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 cu.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&sw(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ie(c);r(_)}}a(nw,"validateChunk");async function iw(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ba.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ba.isEmpty(c)&&!ba.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 rw.callOperationFunctionAsAwait(aw,c,ow.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ie(c,Ks(Ae.INSERT_CSV_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.INSERT_CSV_ERR+" - "+c);r(_)}}a(iw,"insertChunk");async function iz(e){let t={records:0,number_written:0};try{let r=new Nh,s=Yt.createReadStream(e.file_path,{highWaterMark:jb});s.setEncoding("utf8"),await _u.parsePromise(s,nw.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ie(new Error,n,ye.BAD_REQUEST);return s=Yt.createReadStream(e.file_path,{highWaterMark:jb}),s.setEncoding("utf8"),await _u.parsePromise(s,iw.bind(null,e,t)),s.destroy(),t}catch(r){throw ie(r,Ks(Ae.PAPA_PARSE_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.PAPA_PARSE_ERR+r)}}a(iz,"callPapaParse");async function az(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Nh,n=Wb([Yt.createReadStream(e.file_path,{encoding:"utf-8"}),Qb.withParser(),c=>c.value,new Jb({batchSize:ew}),zb(async c=>{await nw(e,s,r,c)})]);await new Promise((c,_)=>{Xb(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ie(new Error,i,ye.BAD_REQUEST);let o=Wb([Yt.createReadStream(e.file_path,{encoding:"utf-8"}),Qb.withParser(),c=>c.value,new Jb({batchSize:ew}),zb(async c=>{await iw(e,t,r,c)})]);return await new Promise((c,_)=>{Xb(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ie(s,Ks(Ae.INSERT_JSON_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.INSERT_JSON_ERR+s)}}a(az,"insertJson");async function aw(e){let t={};try{e.data&&e.data.length>0&&oz(e.data[0])?t=await cz(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ys.info(t.message))}catch(r){throw Ws(r)}return t}a(aw,"callBulkFileLoad");function oz(e){let t=Object.keys(e);for(let r of t)if(!JJ.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(oz,"validateColumnNames");async function cz(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=cu.insert;break;case"update":i=cu.update;break;case"upsert":i=cu.upsert;break;default:throw ie(new Error,Ae.INVALID_ACTION_PARAM_ERR(s),ye.BAD_REQUEST,Rt.LOG_LEVELS.ERROR,Ae.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 _=ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Ws(o)}}a(cz,"bulkFileLoad");async function ow(e,t,r,s){try{if(t.data.length===0||!gh.get(Rt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=_u.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 KJ(r.txn_time,i,gh.get(Rt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await WJ.publishToStream(`${VJ.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,QJ.createNatsTableStreamName(t.schema,t.table),s,o),delete r.new_attributes}catch(n){Ys.error(n)}}a(ow,"postCSVLoadFunction");function cw(e,t){return`successfully loaded ${t} of ${e} records`}a(cw,"buildResponseMsg");function Ws(e){return ie(e,Ks(Ae.DEFAULT_BULK_LOAD_ERR),ye.INTERNAL_SERVER_ERROR,Rt.LOG_LEVELS.ERROR,Ae.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ws,"buildTopLevelErrMsg")});var lw=f((O9,uw)=>{"use strict";var Eu=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(Eu,"SqlSearchObject");uw.exports=Eu});var hw=f((I9,dw)=>{"use strict";var _z=T(),Ew=require("moment"),uz=require("uuid").v4,du=class{constructor(){this.id=uz(),this.type=void 0,this.start_datetime=Ew().valueOf(),this.created_datetime=Ew().valueOf(),this.end_datetime=void 0,this.status=_z.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(du,"JobObject");dw.exports=du});var Ch=f((w9,Aw)=>{"use strict";var lz=require("uuid").v4,Tw=It(),mw=bt(),Ez=Gt(),dz=Sn(),hz=lw(),ae=T(),fz=hw(),Sz=WE(),Lt=I(),Tz=di(),Gn=b(),{promisify:wh}=require("util"),Qs=require("moment"),mz=J_(),hu=Ah(),fw=yl(),{deleteTransactionLogsBeforeValidator:Rz}=th(),{handleHDBError:Az,hdb_errors:pz}=y(),{HTTP_STATUS_CODES:gz}=pz,Sw=wh(mw.searchByValue),Oz=wh(mw.searchByHash),Nz=Tw.insert,Iz=wh(mz.evaluateSQL),bz=Tw.update;Aw.exports={addJob:yz,updateJob:Lz,handleGetJob:wz,handleGetJobsByStartDate:Cz,getJobById:Rw};async function wz(e){try{let t=await Rw(e.id);return Gn.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(wz,"handleGetJob");async function Cz(e){try{let t=await Uz(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=Qs(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Qs(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(Cz,"handleGetJobsByStartDate");async function yz(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Gn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Lt.info(l),t.error=l,t}if(!ae.JOB_TYPE_ENUM[e.operation])return Lt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case ae.OPERATIONS_ENUM.CSV_FILE_LOAD:s=hu.fileObject(e);break;case ae.OPERATIONS_ENUM.CSV_URL_LOAD:s=hu.urlObject(e);break;case ae.OPERATIONS_ENUM.CSV_DATA_LOAD:s=hu.dataObject(e);break;case ae.OPERATIONS_ENUM.IMPORT_FROM_S3:s=hu.s3FileObject(e);break;case ae.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case ae.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=fw(e,"date");break;case ae.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=fw(e,"timestamp");break;case ae.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Rz(e);break;default:break}if(s)throw Az(s,s.message,gz.BAD_REQUEST,void 0,void 0,!0);let n=new fz;n.type=e.operation===ae.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?ae.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Ez(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await Sw(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=lz();try{o=await Sw(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 Tz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await Nz(_)}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(yz,"addJob");async function Uz(e){let t=Qs(e.from_date,Qs.ISO_8601),r=Qs(e.to_date,Qs.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 hz(s,e.hdb_user);try{return await Iz(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(Uz,"getJobsInDateRange");async function Rw(e){if(Gn.isEmptyOrZeroLength(e))return Gn.errorizeMessage("Invalid job ID specified.");let t=new dz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Oz(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lt.error(s),Gn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Rw,"getJobById");async function Lz(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Gn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===ae.JOB_STATUS_ENUM.COMPLETE||e.status===ae.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Qs().valueOf());let t=new Sz(ae.SYSTEM_SCHEMA_NAME,ae.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await bz(t)}catch(s){throw new Error(s)}return r}a(Lz,"updateJob")});var bw=f((y9,Iw)=>{"use strict";var pw=b(),nt=T(),Mz=require("moment"),fu=bh(),Su=I(),gw=Ch(),Ow=Oa(),Nw=gs(),Dz=cn(),Pz=H_(),Tu=class{constructor(t,r){this.job=t,this.json=r}};a(Tu,"RunnerMessage");async function vz(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(pw.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(pw.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case nt.JOB_TYPE_ENUM.csv_file_load:await Ur(e,fu.csvFileLoad);break;case nt.JOB_TYPE_ENUM.csv_url_load:await Ur(e,fu.csvURLLoad);break;case nt.JOB_TYPE_ENUM.csv_data_load:await Ur(e,fu.csvDataLoad);break;case nt.JOB_TYPE_ENUM.import_from_s3:await Ur(e,fu.importFromS3);break;case nt.JOB_TYPE_ENUM.empty_trash:break;case nt.JOB_TYPE_ENUM.export_local:await Ur(e,Ow.export_local);break;case nt.JOB_TYPE_ENUM.export_to_s3:await Ur(e,Ow.export_to_s3);break;case nt.JOB_TYPE_ENUM.delete_files_before:case nt.JOB_TYPE_ENUM.delete_records_before:await Ur(e,Nw.deleteFilesBefore);break;case nt.JOB_TYPE_ENUM.delete_audit_logs_before:await Ur(e,Nw.deleteAuditLogsBefore);break;case nt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ur(e,Pz.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(vz,"parseMessage");async function Ur(e,t){try{e.job.status=nt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Mz().valueOf(),await gw.updateJob(e.job),await Bz(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):Su.error(`There was an error running ${t.name} job with id ${e.job.id}`),Su.error(s),e.job.message=s,e.job.status=nt.JOB_STATUS_ENUM.ERROR;try{await gw.updateJob(e.job)}catch(n){throw Su.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Ur,"runJob");async function Bz(e){Su.trace("launching job thread:",e),Dz.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[nt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Bz,"launchJobThread");Iw.exports={parseMessage:vz,RunnerMessage:Tu}});var Cw=f((L9,ww)=>{"use strict";var mu=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(mu,"OperationFunctionObject");ww.exports=mu});var xw=f((D9,Gw)=>{"use strict";var pu=bt(),Mh=J_(),Ru=bh(),xn=Bc(),yh=Ns(),Ca=gs(),Hz=DE(),wa=er(),Au=VE(),Lr=eh(),Ve=I(),qz=YE(),Fz=o_(),Gz=Td(),xz=l_(),Vz=md(),kz=Rd(),$z=gd(),Yz=Nd(),Uh=wd(),yw=Oa(),Kz=W_(),Dh=Ch(),A=T(),{hdb_errors:Ua,handleHDBError:ya}=y(),{HTTP_STATUS_CODES:Uw}=Ua,Lh=Ud(),Lw=Yd(),gu=require("util"),Js=It(),Wz=Ar(),Qz=Ln(),qw=Yi(),Mw=bw(),Dw=Jc(),Pw=fr(),vw=H_(),Bw=nh(),Jz=ph(),zz=gu.promisify(pu.searchByHash),Xz=gu.promisify(pu.searchByValue),Zz=gu.promisify(pu.search),jz=gu.promisify(Mh.evaluateSQL),eX={[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},N=Cw();function tX(e,t,r){return Promise.all([qw.postOperationHandler(e,t,r),e.table?Js.flush(e):null])}a(tX,"postWrite");async function rX(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:i,password:o,...c}=e.body;Ve.info(c)}}catch(n){Ve.error(n)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:tX,s=await Jz.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return eX[e.body.operation]&&Wz.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}a(rX,"processLocalTransaction");var Hw=iX();Gw.exports={chooseOperation:sX,getOperationFunction:Fw,processLocalTransaction:rX};function sX(e){let t;try{t=Fw(e)}catch(n){throw Ve.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=Mh.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Mh.checkASTPermissions(e,i);if(o)throw Ve.error(`${Uw.FORBIDDEN} from operation ${e.search_operation}`),ya(new Error,o,Ua.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=Kz.verifyPerms(i,n);if(o)throw Ve.error(`${Uw.FORBIDDEN} from operation ${e.operation}`),ya(new Error,o,Ua.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw ya(n,"There was an error when trying to choose an operation path")}return r}a(sX,"chooseOperation");function Fw(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),Hw.has(e.operation))return Hw.get(e.operation);throw ya(new Error,Ua.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ua.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Fw,"getOperationFunction");async function nX(e){Ve.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 Js.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Js.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Js.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await Ca.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await qw.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(nX,"catchup");async function _r(e){let t,r;try{r=await Dh.addJob(e),t=r.createdJob;let s=new Mw.RunnerMessage(t,e);return await Mw.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 Ve.error(n),ya(s,n)}}a(_r,"executeJob");function iX(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(Js.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(Js.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(Js.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N(pu.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(zz)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(Xz)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(Zz)),e.set(A.OPERATIONS_ENUM.SQL,new N(jz)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(_r,Ru.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(_r,Ru.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(_r,Ru.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(_r,Ru.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(xn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(xn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(xn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(xn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(xn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(xn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(yh.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(yh.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(yh.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(Ca.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(wa.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(wa.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(wa.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(wa.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(Au.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(Au.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(Au.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(Au.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(wa.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(qz)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(Fz)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N(Gz)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(xz)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(Vz)),e.set(A.OPERATIONS_ENUM.PURGE_STREAM,new N(kz)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(Pw.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N($z.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_NETWORK,new N(Yz)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(Uh.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(Uh.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(Uh.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(_r,yw.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(_r,Ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(_r,Ca.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(_r,yw.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(Dh.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(Dh.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N(Lh.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N(Lh.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N(Lh.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(Lw.restart)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(Lw.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(nX)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(Qz.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(_r,Ca.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(Hz)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(Dw.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(Dw.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(Pw.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Lr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Lr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Lr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Lr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Lr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Lr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Lr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Lr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Lr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(vw.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(_r,vw.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(Bw.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(Bw.auditModules)),e}a(iX,"initializeOperationFunctionMap")});var Nu=f((v9,$w)=>{"use strict";var aX=T(),oX=b(),La=I(),{handleHDBError:Ph,hdb_errors:Ou}=y(),{isMainThread:cX}=require("worker_threads"),Vw=require("os"),_X=require("util"),uX=jE(),lX=_X.promisify(uX.authorize),kw=xw();function EX(e){let t=`Found an uncaught exception with message: ${e.message}. ${Vw.EOL}Stack: ${e.stack} ${Vw.EOL}Terminating ${cX?"HDB":"thread"}.`;console.error(t),La.fatal(t),process.exit(1)}a(EX,"handleServerUncaughtException");function dX(e,t,r){if(La[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg=="string"?r.code(e.http_resp_code).send({error:e.http_resp_msg}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Ou.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(dX,"serverErrorHandler");function hX(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Ph(new Error,"Invalid JSON.",Ou.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(oX.isEmpty(e.body.operation)){let s=Ph(new Error,"Request body must include an 'operation' property.",Ou.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(hX,"reqBodyValidationHandler");function fX(e,t,r){let s;e.body.operation!==aX.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS?lX(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{La.warn(n),La.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Ph(n,i,Ou.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,r())}a(fX,"authHandler");async function SX(e,t=!1){let r;try{return t&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=t),r=kw.chooseOperation(e.body),kw.processLocalTransaction(e,r)}catch(s){throw La.error(s),s}}a(SX,"handlePostRequest");$w.exports={authHandler:fX,handlePostRequest:SX,handleServerUncaughtException:EX,serverErrorHandler:dX,reqBodyValidationHandler:hX}});var vh=f((H9,Zw)=>{"use strict";var{streamAsJSON:Iu}=to(),{toCsvStream:Kw}=Oa(),{pack:Ww,unpack:TX,encodeIter:Qw}=require("msgpackr"),{decode:mX,EncoderStream:Jw}=require("cbor-x"),{Readable:zw}=require("stream"),Yw={"application/json":{serialize:Iu,q:.8},"application/cbor":{serialize:function(e){return new Jw(bu).end(e)},q:1},"application/x-msgpack":{serialize:function(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zw.from(Qw(e,bu)):Ww(e)},q:.9},"text/csv":{serialize:function(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Kw(e)},q:.1},"*/*":{type:"application/json",serialize:Iu,q:.8}},bu={useRecords:!1};function RX(e){e.register(pX,{serializers:[{regex:/^application\/json$/,serializer:Iu},{regex:/^application\/cbor$/,serializer:function(t){return new Jw(bu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zw.from(Qw(t,bu)):Ww(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),Kw(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,TX(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,mX(r))}catch(n){n.statusCode=400,s(n)}})}a(RX,"registerContentHandlers");var AX=require("fastify-plugin"),pX=AX(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Xw(s.raw);n.type(c),n.serializer(o)}),r()},{name:"content-type-negotiation"});function Xw(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[_,...u]=c.split(/\s*;\s*/),l=1,E={q:1};for(let h of u){let m=h.indexOf("=");E[h.substring(0,m)]=h.substring(m+1)}l=+E.q;let d=Yw[_];if(d){let h=(d.q||1)*l;h>s&&(r=d.serialize,n=d.type||_,s=h,i=E)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Object.keys(Yw).join(", "))}};r=Iu,n="application/json"}return{serializer:r,type:n,parameters:i}}a(Xw,"findBestSerializer");Zw.exports={registerContentHandlers:RX,findBestSerializer:Xw}});var tC=f((V9,eC)=>{"use strict";var gX=require("cluster"),Dt=U();Dt.initSync();var Hh=T(),OX=require("util"),Mt=I(),{streamAsJSON:F9}=to(),Bh=require("fs"),NX=require("fastify"),IX=ei(),bX=require("@fastify/cors"),wX=require("@fastify/compress"),CX=require("@fastify/static"),yX=Yu(),UX=require("path"),{PACKAGE_ROOT:LX}=T(),MX=Ar(),DX=b(),PX=er(),vX=ms(),{isMainThread:BX}=require("worker_threads"),{registerServer:HX}=qh(),{toCsvStream:G9}=Oa(),qX=OX.promisify(MX.setSchemaDataToGlobal),{authHandler:FX,handlePostRequest:GX,handleServerUncaughtException:xX,serverErrorHandler:VX,reqBodyValidationHandler:kX}=Nu(),x9=require("net"),{registerContentHandlers:$X}=vh(),YX=1024*1024*1024,jw="TRUE",{HDB_SETTINGS_NAMES:us,CONFIG_PARAMS:KX}=Hh,WX=us.CORS_ENABLED_KEY,QX="CORS_ACCESSLIST",JX=us.SERVER_TIMEOUT_KEY,zX=us.SERVER_KEEP_ALIVE_TIMEOUT_KEY,XX=us.SERVER_HEADERS_TIMEOUT_KEY,ZX=us.PRIVATE_KEY_KEY,jX=us.CERT_KEY,e3=us.HTTP_SECURE_ENABLED_KEY,t3=us.SERVER_PORT_KEY,zs;eC.exports={hdbServer:r3};async function r3(){try{Mt.info("In Fastify server"+process.cwd()),Mt.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mt.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=gX.isMaster,process.on("uncaughtException",xX),await s3();let e=Dt.get(e3),t=Dt.get(t3),r=e&&(e===!0||e.toUpperCase()===jw);zs=n3(r),await zs.ready();let s=r?"HTTPS":"HTTP";try{HX(Hh.SERVICES.HDB_CORE,zs),BX?(await zs.listen({port:t,host:"::"}),Mt.info(`HarperDB ${IX.version} ${s} Server running on port ${t}`)):zs.server.closeIdleConnections||await zs.listen({port:0,host:"::"})}catch(n){throw zs.close(),Mt.error(n),Mt.error(`Error configuring ${s} server`),n}}catch(e){Mt.error(`Failed to build server on ${process.pid}`),Mt.fatal(e),process.exit(1)}}a(r3,"hdbServer");async function s3(){try{Mt.trace("Configuring HarperDB process."),await qX(),await PX.setUsersToGlobal(),await vX.getLicense()}catch(e){Mt.error(e)}}a(s3,"setUp");function n3(e){Mt.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=i3(e),r=NX(t);r.server.headersTimeout=o3(),r.setErrorHandler(VX);let s=a3();s&&r.register(bX,s),r.register(function(i,o,c){i.setNotFoundHandler(function(_,u){u.code(404).send({error:"Not Found",statusCode:404})}),c()}),r.register(yX),r.register(wX),r.register(CX,{root:UX.join(LX,"docs")}),$X(r);let n=Dt.get(Hh.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!DX.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[kX,FX]},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),GX(i)}),Mt.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(n3,"buildServer");function i3(e){let t=Dt.get(JX),r=Dt.get(zX),s={bodyLimit:YX,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Dt.get(ZX),i=Dt.get(jX),o=Dt.get(KX.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:Bh.readFileSync(n),cert:Bh.readFileSync(i)+(o?`
|
|
15
15
|
|
|
16
|
-
`+
|
|
16
|
+
`+Bh.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(i3,"getServerOptions");function a3(){let e=Dt.get(WX),t=Dt.get(QX),r;return e&&(e===!0||e.toUpperCase()===jw)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(a3,"getCORSOpts");function o3(){return Dt.get(XX)}a(o3,"getHeaderTimeoutConfig")});var sC=f(($9,rC)=>{"use strict";var Fh=require("fs"),Vn=U();Vn.initSync();var{CONFIG_PARAMS:Ma}=T(),c3=1024*1024*1024;function _3(e){let t=Vn.get(Ma.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Vn.get(Ma.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:c3,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Vn.get(Ma.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Vn.get(Ma.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Vn.get(Ma.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Fh.readFileSync(`${n}`),cert:Fh.readFileSync(i)+(o?`
|
|
17
17
|
|
|
18
|
-
`+
|
|
18
|
+
`+Fh.readFileSync(o):"")},s.http2=!0}return s}a(_3,"getServerOptions");rC.exports=_3});var aC=f((K9,iC)=>{"use strict";var Gh=U();Gh.initSync();var{CONFIG_PARAMS:nC}=T();function u3(){let e=Gh.get(nC.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Gh.get(nC.CUSTOMFUNCTIONS_NETWORK_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(u3,"getCORSOptions");iC.exports=u3});var _C=f((Q9,cC)=>{"use strict";var oC=U();oC.initSync();var l3=T();function E3(){return oC.get(l3.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(E3,"getHeaderTimeoutConfig");cC.exports=E3});var EC=f((z9,lC)=>{"use strict";var d3=require("fastify-plugin"),{handlePostRequest:uC,authHandler:h3,reqBodyValidationHandler:f3}=Nu();async function S3(e){e.decorate("hdbCore",{preValidation:[f3,h3],request:uC,requestWithoutAuthentication:t=>uC(t,!0)})}a(S3,"hdbCore");lC.exports=d3(S3)});var SC=f((j9,fC)=>{"use strict";var T3=require("util"),m3=require("path"),dC=require("fs"),R3=require("fastify"),A3=require("@fastify/cors"),p3=require("@fastify/autoload"),g3=Yu(),xh=U(),wu=T(),ee=I(),O3=Ar(),N3=er(),{isMainThread:I3}=require("worker_threads"),{registerServer:b3}=qh(),w3=sC(),C3=aC(),y3=_C(),U3=T3.promisify(O3.setSchemaDataToGlobal),{handleServerUncaughtException:L3,serverErrorHandler:M3}=Nu(),Z9=ei(),{registerContentHandlers:D3}=vh();fC.exports={customFunctionsServer:v3};var P3="TRUE",Xs,hC=xh.get(wu.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);async function v3(){try{ee.info("In Custom Functions Fastify server"+process.cwd()),ee.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ee.debug(`Custom Functions server process ${process.pid} starting up.`),process.on("uncaughtException",L3),await B3();let e=xh.get(wu.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=parseInt(xh.get(wu.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),r=e&&(e===!0||e.toUpperCase()===P3);try{Xs=q3(r)}catch(s){throw ee.error(`Custom Functions buildServer error: ${s}`),s}try{await Xs.ready()}catch(s){throw ee.error(`Custom Functions server.ready() error: ${s}`),s}try{ee.info(`Custom Functions process starting on port ${t}`),b3(wu.SERVICES.CUSTOM_FUNCTIONS,Xs),I3?(await Xs.listen({port:t,host:"::"}),ee.info(`Custom Functions process running on port ${t}`)):Xs.server.closeIdleConnections||await Xs.listen({port:0,host:"::"})}catch(s){throw Xs.close(),ee.error(`Custom Functions server.listen() error: ${s}`),s}}catch(e){ee.error(`Custom Functions ${process.pid} Error: ${e}`),ee.error(e),process.exit(1)}}a(v3,"customFunctionsServer");async function B3(){try{ee.info("Custom Functions starting configuration."),await U3(),await N3.setUsersToGlobal(),ee.info("Custom Functions completed configuration.")}catch(e){ee.error(e)}}a(B3,"setUp");async function H3(e){try{ee.info("Custom Functions starting buildRoutes"),await e.register(EC()),await e.after(),D3(e),dC.readdirSync(hC,{withFileTypes:!0}).forEach(r=>{if(!r.isDirectory()&&!r.isSymbolicLink())return;let s=r.name,n=m3.join(hC,s);ee.trace("Loading project folder "+n);let i=`${n}/routes`;dC.existsSync(i)&&e.register(p3,c=>({dir:i,dirNameRoutePrefix:!1,options:{hdbCore:c.hdbCore,logger:ee.loggerWithTag("custom-function"),prefix:`/${s}`}})).after((c,_,u)=>{c&&c.message?ee.error(c.message):c&&ee.error(c),u()})}),ee.info("Custom Functions completed buildRoutes")}catch(t){ee.error(`Custom Functions errored buildRoutes: ${t}`)}}a(H3,"buildRoutes");function q3(e){try{ee.info("Custom Functions starting buildServer.");let t=w3(e),r=R3(t);r.server.headersTimeout=y3(),r.setErrorHandler(M3);let s=C3();return s&&r.register(A3,s),r.register(g3),r.register(H3),ee.info("Custom Functions completed buildServer."),r}catch(t){ee.error(`Custom Functions process ${process.pid} buildServer error: ${t}`),ee.fatal(t),process.exit(1)}}a(q3,"buildServer")});var qh=f((r7,AC)=>{var F3=I(),{isMainThread:G3,parentPort:Da,threadId:t7}=require("worker_threads"),{Socket:x3}=require("net"),mC=U(),Vh=T();mC.initSync();var Pa={};AC.exports={registerServer:k3};G3||(tC().hdbServer(),mC.get(Vh.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY)&&SC().customFunctionsServer(),Da.on("message",t=>{let{type:r,fd:s,data:n}=t;if(s)RC(s,r,n);else if(t.requestId)V3(t);else if(r===Vh.ITC_EVENT_TYPES.SHUTDOWN)for(let i in Pa)Pa[i].close().then(()=>{process.exit(0)})}).ref(),Da.postMessage({type:Vh.ITC_EVENT_TYPES.CHILD_STARTED}));function RC(e,t,r){let s=new x3({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Pa[t];if(n)n.server.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Pa[t];c?(c.server.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(F3.error(`Server ${t} was not registered`),s.close())},1e3)},"retry");i(1)}return s}a(RC,"deliverSocket");var TC=new Map;function V3(e){let{type:t,event:r,data:s,requestId:n}=e,i;switch(i=TC.get(n),r){case"connection":i=RC(void 0,t),TC.set(n,i),i.write=(c,_,u)=>(Da.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,_,u)=>(Da.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Da.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(V3,"proxyRequest");function k3(e,t){Pa[e]=t}a(k3,"registerServer")});module.exports=qh();
|