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