harperdb 4.0.4 → 4.0.5
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 +18 -18
- package/launchServiceScripts/launchCustomFunctions.js +11 -11
- package/launchServiceScripts/launchHarperDB.js +11 -11
- package/launchServiceScripts/launchInstallNATSServer.js +2 -2
- package/launchServiceScripts/launchNatsIngestService.js +11 -11
- package/launchServiceScripts/launchNatsReplyService.js +6 -6
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +6 -6
- package/package.json +1 -1
- package/server/ipc/hdbIpcServer.js +5 -5
- package/server/jobs/jobProcess.js +11 -11
- package/utility/scripts/restartHdb.js +6 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Ah=Object.defineProperty;var a=(e,t)=>Ah(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var A=d((HD,L_)=>{"use strict";var ue=require("path"),mh=require("fs");function Nh(){let e=__dirname;for(;!mh.existsSync(ue.join(e,"package.json"));){let t=ue.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Nh,"getHDBPackageRoot");var Ye=Nh(),h_="js",Br=h_,Oh="harperdb-config.yaml",gh="defaultConfig.yaml",Ih="hdb",f_=`hdbServer.${Br}`,R_=`customFunctionsServer.${Br}`,A_=`hdbIpcServer.${Br}`,ph=`restartHdb.${Br}`,Wi="HarperDB",ws="Custom Functions",ys="Clustering Hub",Us="Clustering Leaf",Qi="Clustering Ingest Service",Ji="Clustering Reply Service",Ch="foreground.pid",$i={HDB:Wi,IPC:"IPC",CLUSTERING_HUB:ys,CLUSTERING_LEAF:Us,CLUSTERING_INGEST_SERVICE:Qi,CLUSTERING_REPLY_SERVICE:Ji,CUSTOM_FUNCTIONS:ws,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},bh={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},Lh={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},wh={harperdb:Wi,ipc:"IPC","clustering hub":ys,"clustering leaf":Us,"clustering ingest service":Qi,"clustering reply service":Ji,"custom functions":ws,custom_functions:ws,"pm2-logrotate":$i.PM2_LOGROTATE,logrotate:$i.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},yh={CLUSTERING_HUB_PROC_DESCRIPTOR:ys,CLUSTERING_LEAF_PROC_DESCRIPTOR:Us,CLUSTERING_INGEST_PROC_DESCRIPTOR:Qi,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Ji},Ls={HDB:ue.join(Ye,"server/harperdb"),IPC:ue.join(Ye,"server/ipc"),CUSTOM_FUNCTIONS:ue.join(Ye,"server/customFunctions"),CLUSTERING_HUB:ue.join(Ye,"server/nats"),CLUSTERING_LEAF:ue.join(Ye,"server/nats")},Uh={HDB:ue.join(Ls.HDB,f_),IPC:ue.join(Ls.IPC,A_),CUSTOM_FUNCTIONS:ue.join(Ls.CUSTOM_FUNCTIONS,R_)},Dh={HDB:ue.join(Ye,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:ue.join(Ye,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:ue.join(Ye,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ue.join(Ye,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ue.resolve(Ye,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Mh={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},m_="support@harperdb.io",Ph="customer-success@harperdb.io",N_=1,Bh=4141,O_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Hh="https://www.harperdb.io/product",Gh=`For support, please submit a request at ${O_} or contact ${m_}`,g_=`For license support, please contact ${Ph}`,vh="None of the specified records were found.",Fh="hash attribute not found",qh=`Your current license only supports ${N_} role. ${g_}`,Vh="Your current license only supports 3 connections to a node.",xh="127.0.0.1",Yh=1,kh=/^\.$/,Kh=/^\.\.$/,$h="U+002E",Wh=/\//g,Qh="U+002F",Jh=/U\+002F/g,Zh=/^U\+002E$/,Xh=/^U\+002EU\+002E$/,zh="d",jh=999999,ef="*",tf="--max-old-space-size=",rf="system",sf="__hdb_hash",nf=".harperdb",af=".hdb",of="keys",_f="hdb_boot_properties.file",cf=".updateConfig.json",uf="SIGTSTP",Ef=24,lf=6e4,df=448,Sf="blob",Tf="trash",hf="schema",ff="transactions",Rf=".count",Af="id",mf="install_log.log",Nf="run_log.log",Of="PROCESS_NAME",gf={SETTINGS_PATH_KEY:"settings_path"},I_=require("lodash"),If={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"},pf={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},Cf={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bf={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"},Lf={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"},Le="hdb_internal:",wf={CREATE_SCHEMA:Le+"create_schema",CREATE_TABLE:Le+"create_table",CREATE_ATTRIBUTE:Le+"create_attribute",ADD_USER:Le+"add_user",ALTER_USER:Le+"alter_user",DROP_USER:Le+"drop_user",HDB_NODES:Le+"hdb_nodes",HDB_USERS:Le+"hdb_users",HDB_WORKERS:Le+"hdb_workers",CATCHUP:Le+"catchup",SCHEMA_CATCHUP:Le+"schema_catchup",WORKER_ROOM:Le+"cluster_workers"},yf={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"},Uf="060493.ks",Df=".license",Mf={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},f={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",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"},Pf={CSV:".csv",JSON:".json"},Bf={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Hf={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},It={};It[f.CREATE_SCHEMA]=f.CREATE_SCHEMA;It[f.CREATE_TABLE]=f.CREATE_TABLE;It[f.CREATE_ATTRIBUTE]=f.CREATE_ATTRIBUTE;It[f.INSERT]=f.INSERT;It[f.UPDATE]=f.UPDATE;It[f.UPSERT]=f.UPSERT;It[f.DELETE]=f.DELETE;var H=Object.create(null);H[f.DESCRIBE_ALL]=f.DESCRIBE_ALL;H[f.DESCRIBE_TABLE]=f.DESCRIBE_TABLE;H[f.DESCRIBE_SCHEMA]=f.DESCRIBE_SCHEMA;H[f.READ_LOG]=f.READ_LOG;H[f.ADD_NODE]=f.ADD_NODE;H[f.LIST_USERS]=f.LIST_USERS;H[f.LIST_ROLES]=f.LIST_ROLES;H[f.USER_INFO]=f.USER_INFO;H[f.SQL]=f.SQL;H[f.GET_JOB]=f.GET_JOB;H[f.SEARCH_JOBS_BY_START_DATE]=f.SEARCH_JOBS_BY_START_DATE;H[f.DELETE_FILES_BEFORE]=f.DELETE_FILES_BEFORE;H[f.EXPORT_LOCAL]=f.EXPORT_LOCAL;H[f.EXPORT_TO_S3]=f.EXPORT_TO_S3;H[f.CLUSTER_STATUS]=f.CLUSTER_STATUS;H[f.REMOVE_NODE]=f.REMOVE_NODE;H[f.RESTART]=f.RESTART;H[f.CUSTOM_FUNCTIONS_STATUS]=f.CUSTOM_FUNCTIONS_STATUS;H[f.GET_CUSTOM_FUNCTIONS]=f.GET_CUSTOM_FUNCTIONS;H[f.GET_CUSTOM_FUNCTION]=f.GET_CUSTOM_FUNCTION;H[f.SET_CUSTOM_FUNCTION]=f.SET_CUSTOM_FUNCTION;H[f.DROP_CUSTOM_FUNCTION]=f.DROP_CUSTOM_FUNCTION;H[f.ADD_CUSTOM_FUNCTION_PROJECT]=f.ADD_CUSTOM_FUNCTION_PROJECT;H[f.DROP_CUSTOM_FUNCTION_PROJECT]=f.DROP_CUSTOM_FUNCTION_PROJECT;H[f.PACKAGE_CUSTOM_FUNCTION_PROJECT]=f.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[f.DEPLOY_CUSTOM_FUNCTION_PROJECT]=f.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Gf={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},vf={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},p_={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},Ff=I_.invert(p_),T={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_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",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",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",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"},qf={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},Vf={csv_file_load:"csv_file_load",csv_data_load:f.CSV_DATA_LOAD,csv_url_load:f.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"},xf={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"},Yf={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kf={FILE_SYSTEM:"fs",LMDB:"lmdb"},Kf={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},$f={DEVELOPMENT:8192,DEFAULT:512},Wf={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"},Qf={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"},Jf={ENOENT:"ENOENT",EACCES:"EACCES"},C_={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Zf="__clustering__",Xf=Object.values(C_),zf=15984864e5,b_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},jf=I_.invert(b_),eR={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"},tR=111,rR=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
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:yR.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(PR,"findPs")});var Ee=d((qD,Y_)=>{"use strict";var BR="__dbis__",HR="__environment_name__",GR="__dbi_defintion__",vR={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"},FR=["__createdtime__","__updatedtime__"],qR="\uFFFF",x_={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},VR=Object.values(x_);Y_.exports={INTERNAL_DBIS_NAME:BR,DBI_DEFINITION_NAME:GR,SEARCH_TYPES:vR,TIMESTAMP_NAMES:FR,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HR,TRANSACTIONS_DBI_NAMES_ENUM:x_,TRANSACTIONS_DBIS:VR,OVERFLOW_MARKER:qR}});var Me=d((VD,z_)=>{"use strict";var k_=A(),K_=Ee(),$_={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},W_=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Q_={500:W_("There was an error processing your request."),400:"Invalid request"},xR=Q_[$_.INTERNAL_SERVER_ERROR],YR={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.`},kR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KR={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"},$R={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_ARRAY:"ids must be an array",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 ${K_.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${K_.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"},WR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${k_.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 ${k_.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"},J_={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"},QR={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."},JR={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`},ZR={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"},XR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zR={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`},Z_={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.`},X_={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},jR={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."},eA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tA={...J_,...KR,...YR,...QR,...JR,...ZR,...XR,...zR,...WR,...Z_,...X_,...jR,...eA,...kR};z_.exports={CHECK_LOGS_WRAPPER:W_,HDB_ERROR_MSGS:tA,DEFAULT_ERROR_MSGS:Q_,DEFAULT_ERROR_RESP:xR,HTTP_STATUS_CODES:$_,LMDB_ERRORS_ENUM:$R,AUTHENTICATION_ERROR_MSGS:J_,VALIDATION_ERROR_MSGS:Z_,IPC_ERRORS:X_}});var J=d((xD,tc)=>{"use strict";var sr=Me(),rA=w(),sA=A(),Hr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,j_),this.http_resp_code=s||sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(sr.DEFAULT_ERROR_MSGS[s]?sr.DEFAULT_ERROR_MSGS[s]:sr.DEFAULT_ERROR_MSGS[sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&rA[n](i)}};a(Hr,"HdbError");function j_(e,t,r,s=sA.LOG_LEVELS.ERROR,n=null,i=!1){if(ec(e))return e;let o=new Hr(e,t,r,s,n);return i&&delete o.stack,o}a(j_,"handleHDBError");function ec(e){return e.__proto__.constructor.name===Hr.name}a(ec,"isHDBError");tc.exports={isHDBError:ec,handleHDBError:j_,hdb_errors:sr}});var p=d((kD,hc)=>{"use strict";var ta=require("path"),nA=require("fs-extra"),ee=w(),rc=require("fs-extra"),iA=require("truncate-utf8-bytes"),Gr=require("os"),aA=require("net"),oA=require("recursive-iterator"),se=A(),oc=V_(),sc=require("papaparse"),Ps=require("moment"),{inspect:_A}=require("util"),nc=require("is-number"),YD=require("lodash"),{hdb_errors:Bs}=J(),_c=require("util").promisify(setTimeout),cA=100,uA=5,EA="",lA=4,ic=255,ac={true:!0,false:!1,undefined:null,null:null,NaN:NaN};hc.exports={isEmpty:we,isEmptyOrZeroLength:je,arrayHasEmptyValues:TA,arrayHasEmptyOrZeroLengthValues:hA,buildFolderPath:fA,isBoolean:cc,errorizeMessage:dA,stripFileExtension:AA,autoCast:mA,autoCastJSONDeep:ra,removeDir:OA,compareVersions:gA,isCompatibleDataVersion:IA,escapeRawValue:Ec,unescapeValue:pA,stringifyProps:CA,valueConverter:bA,timeoutPromise:wA,isClusterOperation:UA,getClusterUser:PA,sendTransactionToSocketCluster:DA,checkGlobalSchemaTable:MA,getHomeDir:lc,getPropsFilePath:LA,promisifyPapaParse:BA,removeBOM:dc,createEventPromise:HA,checkProcessRunning:GA,checkSchemaTableExist:vA,checkSchemaExists:Sc,checkTableExists:Tc,getStartOfTomorrowInSeconds:FA,getLimitKey:qA,isObject:RA,isNotEmptyAndHasValue:SA,autoCasterIsNumberCheck:uc,backtickASTSchemaItems:VA,isPortTaken:yA,stopProcess:xA,createForkArgs:YA,autoCastBoolean:kA,async_set_timeout:_c,getTableHashAttribute:KA,doesSchemaExist:$A,doesTableExist:WA,stringifyObj:QA,ms_to_time:JA,PACKAGE_ROOT:se.PACKAGE_ROOT};function dA(e){return e instanceof Error?e:new Error(e)}a(dA,"errorizeMessage");function we(e){return e==null}a(we,"isEmpty");function SA(e){return!we(e)&&(e||e===0||e===""||cc(e))}a(SA,"isNotEmptyAndHasValue");function je(e){return we(e)||e.length===0||e.size===0}a(je,"isEmptyOrZeroLength");function TA(e){if(we(e))return!0;for(let t=0;t<e.length;t++)if(we(e[t]))return!0;return!1}a(TA,"arrayHasEmptyValues");function hA(e){if(je(e))return!0;for(let t=0;t<e.length;t++)if(je(e[t]))return!0;return!1}a(hA,"arrayHasEmptyOrZeroLengthValues");function fA(...e){try{return e.join(ta.sep)}catch{console.error(e)}}a(fA,"buildFolderPath");function cc(e){return we(e)?!1:e===!0||e===!1}a(cc,"isBoolean");function RA(e){return we(e)?!1:typeof e=="object"}a(RA,"isObject");function AA(e){return je(e)?EA:e.slice(0,-lA)}a(AA,"stripFileExtension");function mA(e){return we(e)||e===""||typeof e!="string"?e:ac[e]!==void 0?ac[e]:uc(e)===!0?Number(e):e}a(mA,"autoCast");function NA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(NA,"autoCastJSON");function ra(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=ra(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ra(r);s!==r&&(e[t]=s)}return e}else return NA(e)}a(ra,"autoCastJSONDeep");function uc(e){if(e.startsWith("0.")&&nc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&nc(e))}a(uc,"autoCasterIsNumberCheck");async function OA(e){if(je(e))throw new Error(`Directory path: ${e} does not exist`);try{await rc.emptyDir(e),await rc.remove(e)}catch(t){throw ee.error(`Error removing files in ${e} -- ${t}`),t}}a(OA,"removeDir");function gA(e,t){if(je(e)){ee.info("Invalid current version sent as parameter.");return}if(je(t)){ee.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("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(gA,"compareVersions");function IA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(IA,"isCompatibleDataVersion");function Ec(e){if(we(e))return e;let t=String(e);return t==="."?se.UNICODE_PERIOD:t===".."?se.UNICODE_PERIOD+se.UNICODE_PERIOD:t.replace(se.FORWARD_SLASH_REGEX,se.UNICODE_FORWARD_SLASH)}a(Ec,"escapeRawValue");function pA(e){if(we(e))return e;let t=String(e);return t===se.UNICODE_PERIOD?".":t===se.UNICODE_PERIOD+se.UNICODE_PERIOD?"..":String(e).replace(se.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(pA,"unescapeValue");function CA(e,t){if(we(e))return ee.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+Gr.EOL}!je(s)&&s[0]===";"?r+=" "+s+n+Gr.EOL:je(s)||(r+=s+"="+n+Gr.EOL)}catch{ee.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(CA,"stringifyProps");function bA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){ee.error(n),t=e}let r=String(Ec(t)),s=Buffer.byteLength(r)>ic?iA(r,ic)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(bA,"valueConverter");function lc(){let e;try{e=Gr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(lc,"getHomeDir");function LA(){let e=ta.join(lc(),se.HDB_HOME_DIR_NAME,se.BOOT_PROPS_FILE_NAME);return nA.existsSync(e)||(e=ta.join(__dirname,"../","hdb_boot_properties.file")),e}a(LA,"getPropsFilePath");function wA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wA,"timeoutPromise");async function yA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=aA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(yA,"isPortTaken");function UA(e){try{return se.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ee.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UA,"isClusterOperation");function DA(e,t,r){if(global.hdb_socket_client!==void 0){ee.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=se.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(DA,"sendTransactionToSocketCluster");function MA(e,t){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(MA,"checkGlobalSchemaTable");function PA(e,t){if(we(t)){ee.warn("No CLUSTERING_USER defined, clustering disabled");return}if(we(e)||je(e)){ee.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){ee.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ee.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(PA,"getClusterUser");function BA(){sc.parsePromise=function(e,t){return new Promise(function(r,s){sc.parse(e,{header:!0,transformHeader:dc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(BA,"promisifyPapaParse");function dc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dc,"removeBOM");function HA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ee.info(`Got cluster status event response: ${_A(n)}`);try{i.cancel()}catch{ee.error("Error trying to cancel timeout.")}s(n)})})}a(HA,"createEventPromise");async function GA(e){let t=!0,r=0;do await _c(cA*r++),(await oc.findPs(e)).length>0&&(t=!1);while(t&&r<uA);if(t)throw new Error(`process ${e} was not started`)}a(GA,"checkProcessRunning");function vA(e,t){let r=Sc(e);if(r)return r;let s=Tc(e,t);if(s)return s}a(vA,"checkSchemaTableExist");function Sc(e){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Sc,"checkSchemaExists");function Tc(e,t){if(!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tc,"checkTableExists");function FA(){let e=Ps().utc().add(1,se.MOMENT_DAYS_TAG).startOf(se.MOMENT_DAYS_TAG).unix(),t=Ps().utc().unix();return e-t}a(FA,"getStartOfTomorrowInSeconds");function qA(){return Ps().utc().format("DD-MM-YYYY")}a(qA,"getLimitKey");function VA(e){try{let t=new oA(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){ee.error("Got an error back ticking items."),ee.error(t)}}a(VA,"backtickASTSchemaItems");async function xA(e){let t=Gr.userInfo();(await oc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ee.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(xA,"stopProcess");function YA(e){return[e]}a(YA,"createForkArgs");function kA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kA,"autoCastBoolean");function KA(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(KA,"getTableHashAttribute");function $A(e){return global?.hdb_schema?.[e]!==void 0}a($A,"doesSchemaExist");function WA(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(WA,"doesTableExist");function QA(e){try{return JSON.stringify(e)}catch{return e}}a(QA,"stringifyObj");function JA(e){let t=Ps.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(JA,"ms_to_time")});var ut=d(($D,Rc)=>{"use strict";var{platform:KD}=require("os"),ZA="nats-server.zip",sa="nats-server",XA=process.platform==="win32"?`${sa}.exe`:sa,na="HDB",zA=/^[^\s.,*>]+$/,fc="__request__",jA=a(e=>`${e}.${fc}`,"REQUEST_SUBJECT"),em={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tm={HUB:"hub.pid",LEAF:"leaf.pid"},rm={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sm={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:na,deliver_subject:"__HDB__.WORKQUEUE"},nm={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:na,deliver_subject:"HDB.SCHEMAQUEUE"},im={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:na,deliver_subject:"HDB.USERQUEUE"},am={SUCCESS:"success",ERROR:"error"},om={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},_m={TXN:"txn",MSGID:"msgid"};Rc.exports={NATS_SERVER_ZIP:ZA,NATS_SERVER_NAME:sa,NATS_BINARY_NAME:XA,PID_FILES:tm,NATS_CONFIG_FILES:em,SERVER_SUFFIX:rm,WORK_QUEUE_CONSUMER_NAMES:sm,SCHEMA_QUEUE_CONSUMER_NAMES:nm,USER_QUEUE_CONSUMER_NAMES:im,NATS_TERM_CONSTRAINTS_RX:zA,REQUEST_SUFFIX:fc,UPDATE_REMOTE_RESPONSE_STATUSES:am,CLUSTER_STATUS_STATUSES:om,REQUEST_SUBJECT:jA,SUBJECT_PREFIXES:_m}});var mc=d((WD,Ac)=>{"use strict";var cm=ut(),Hs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+cm.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:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(Hs,"HubConfigObject");Ac.exports=Hs});var gc=d((QD,Oc)=>{"use strict";var Nc=ut(),Gs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+Nc.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Nc.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(Gs,"LeafConfigObject");Oc.exports=Gs});var pc=d((JD,Ic)=>{"use strict";var vs=class{constructor(t,r){this.user=t,this.password=r}};a(vs,"HdbUserObject");Ic.exports=vs});var bc=d((ZD,Cc)=>{"use strict";var um=ut(),Fs=class{constructor(t,r){this.user=t+um.SERVER_SUFFIX.ADMIN,this.password=r}};a(Fs,"SysUserObject");Cc.exports=Fs});var nr=d((XD,yc)=>{"use strict";var wc=p(),Lc=A(),Vs=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ia=require("joi"),qs={schema_format:{pattern:Vs,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Em=ia.alternatives(ia.string().min(1).max(qs.schema_length.maximum).pattern(Vs).messages({"string.pattern.base":"{:#label} "+qs.schema_format.message}),ia.number()).required();function lm(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qs.schema_length.maximum?`'${e}' maximum of 250 characters`:Vs.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(lm,"checkValidTable");function dm(e,t){return wc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(dm,"validateSchemaExists");function Sm(e,t){let r=t.state.ancestors[0].schema;return wc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Sm,"validateTableExists");function Tm(e,t){return e.toLowerCase()===Lc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Lc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Tm,"validateSchemaName");yc.exports={common_validators:qs,schema_regex:Vs,hdb_schema_table:Em,validateSchemaExists:dm,validateTableExists:Sm,validateSchemaName:Tm,checkValidTable:lm}});var Et=d((zD,Uc)=>{"use strict";var me=require("validate.js");me.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||me.validators.type.checks[t](e)?null:` must be a '${t}' value`};me.validators.type.checks={Object:function(e){return me.isObject(e)&&!me.isArray(e)},Array:me.isArray,Integer:me.isInteger,Number:me.isNumber,String:me.isString,Date:me.isDate,Boolean:function(e){return typeof e=="boolean"}};me.validators.hasValidFileExt=function(e,t){return!me.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Uc.exports={validateObject:hm,validateObjectAsync:fm,validateBySchema:Rm};function hm(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=me(e,t,{format:"flat"});return r?new Error(r):null}a(hm,"validateObject");async function fm(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await me.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(fm,"validateObjectAsync");function Rm(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Rm,"validateBySchema")});var oa=d((jD,Mc)=>{var{hdb_schema_table:Dc}=nr(),Am=Et(),aa=require("joi"),mm={undefined:"undefined",null:"null"},Nm=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||mm[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"),Om=aa.object({schema:Dc,table:Dc,records:aa.array().items(aa.object().custom(Nm)).required()});Mc.exports=function(e){return Am.validateBySchema(e,Om)}});var _a=d((eM,Pc)=>{"use strict";var xs=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(xs,"BridgeMethods");Pc.exports=xs});var xt=d((sM,vc)=>{"use strict";var Bc=Me().LMDB_ERRORS_ENUM,tM=require("lmdb"),gm=Ee(),rM=require("buffer").Buffer,Im=require("microtime"),{OVERFLOW_MARKER:Hc,MAX_SEARCH_KEY_LENGTH:Ys}=gm,Gc=["number","string","symbol","boolean","bigint"];function pm(e){if(!e)throw new Error(Bc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Bc.INVALID_ENVIRONMENT)}a(pm,"validateEnv");function Cm(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(Cm,"stringifyData");function bm(e){return e instanceof Date?e.valueOf():e}a(bm,"convertKeyValueToWrite");function Lm(e){if(e==null)return;if(Gc.includes(typeof e))return e.length>Ys?[e.slice(0,Ys)+Hc]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Gc.includes(typeof n)&&(n.length>Ys?t.push(n.slice(0,Ys)+Hc):t.push(n))}}return t}a(Lm,"getIndexedValues");function wm(){let e=Im.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(wm,"getMicroTime");vc.exports={validateEnv:pm,stringifyData:Cm,convertKeyValueToWrite:bm,getMicroTime:wm,getIndexedValues:Lm}});var qc=d((nM,Fc)=>{"use strict";var ks=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ks,"DBIDefinition");Fc.exports=ks});var xc=d((iM,Vc)=>{"use strict";var Ks=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ks,"OpenDBIObject");Vc.exports=Ks});var kc=d((aM,Yc)=>{"use strict";var $s=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a($s,"OpenEnvironmentObject");Yc.exports=$s});var $c=d((oM,Kc)=>{"use strict";var ym={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))},Um="certificate.pem",Dm="privateKey.pem",Mm="ca.pem";Kc.exports={CERTIFICATE_VALUES:ym,CERTIFICATE_PEM_NAME:Um,PRIVATEKEY_PEM_NAME:Dm,CA_PEM_NAME:Mm}});var Jc=d((_M,Qc)=>{"use strict";var Pm=require("fs-extra"),U=require("joi"),Bm=require("os"),{boolean:ne,string:dt,number:et,array:ca}=U.types(),ke=require("path"),Hm=w(),Ws=p(),St=$c(),Gm=Et(),lt="keys",vm=St.CERTIFICATE_PEM_NAME,Fm=St.PRIVATEKEY_PEM_NAME,qm=St.CA_PEM_NAME,Vm=St.CERTIFICATE_PEM_NAME,xm=St.PRIVATEKEY_PEM_NAME,Ym=St.CA_PEM_NAME,km=St.CERTIFICATE_PEM_NAME,Km=St.PRIVATEKEY_PEM_NAME,$m=St.CA_PEM_NAME,Wm="log",Qm="custom_functions",Jm="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Zm="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xm="rootPath config parameter is undefined",zm="clustering.enabled config parameter is undefined",Ct=et.min(0).required(),Qs=ca.items({host:dt.required(),port:Ct}).empty(null),Ne;Qc.exports={configValidator:jm,routesValidator:nN,route_constraints:Qs};function jm(e){if(Ne=e.rootPath,Ws.isEmpty(Ne))throw Xm;let t=ne.required(),r=U.valid("production","development").required(),s=et.min(1).max(1e3).empty(null).default(sN),n=dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=U.custom(tN).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Wc),o=dt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(Ws.isEmpty(_))throw zm;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:Ct,routes:Qs}).required()}).required(),leafNodes:U.object({network:U.object({port:Ct}).required()}).required(),network:U.object({port:Ct}).required()}).required(),leafServer:U.object({network:U.object({port:Ct,routes:Qs}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:Ct})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ne.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ne.required(),dateFormat:dt.required(),maxSize:dt.custom(rN).required(),retain:et.min(0).required(),rotate:ne.required(),rotateInterval:dt.required(),rotateModule:ne.required(),timezone:dt.required(),workerInterval:et.min(1).required()}).required(),root:n,stdStreams:ne.required(),auditLog:ne.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ne.required(),network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ne.required(),overlappingSync:ne.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(jm,"configValidator");function eN(e){return Pm.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eN,"doesPathExist");function tN(e,t){U.assert(e,dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=eN(e);if(r)return t.message(r)}a(tN,"validatePemFile");function rN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jm);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(Zm)}a(rN,"validateRotationMaxSize");function sN(e,t){let r=t.state.path.join("."),s=Bm.cpus().length,n=s-1;return n<=2&&(n=2),Hm.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(sN,"setDefaultThreads");function Wc(e,t){if(!Ws.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Ws.isEmpty(Ne))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ke.join(Ne,Qm);case"logging.root":return ke.join(Ne,Wm);case"operationsApi.tls.certificate":return ke.join(Ne,lt,vm);case"operationsApi.tls.privateKey":return ke.join(Ne,lt,Fm);case"operationsApi.tls.certificateAuthority":return ke.join(Ne,lt,qm);case"customFunctions.tls.certificate":return ke.join(Ne,lt,Vm);case"customFunctions.tls.privateKey":return ke.join(Ne,lt,xm);case"customFunctions.tls.certificateAuthority":return ke.join(Ne,lt,Ym);case"clustering.tls.certificate":return ke.join(Ne,lt,km);case"clustering.tls.privateKey":return ke.join(Ne,lt,Km);case"clustering.tls.certificateAuthority":return ke.join(Ne,lt,$m);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function nN(e){let t=U.object({routes:Qs});return Gm.validateBySchema({routes:e},t)}a(nN,"routesValidator")});var vr=d((cM,ru)=>{"use strict";var Y=A(),Pe=p(),le=w(),{configValidator:iN,routesValidator:Zc}=Jc(),Ke=require("fs-extra"),aN=require("yaml"),ir=require("path"),oN=require("is-number"),Xs=require("properties-reader"),_N=require("lodash"),{handleHDBError:cN}=J(),{HTTP_STATUS_CODES:uN,HDB_ERROR_MSGS:Js}=Me(),{PACKAGE_ROOT:EN}=A(),lN="Unable to get config value because config is uninitialized",dN="Config successfully initialized",SN="Error backing up config file",TN="Empty parameter sent to getConfigValue",Xc=ir.join(EN,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),hN="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Zs,Oe;ru.exports={createConfigFile:fN,getDefaultConfig:RN,getConfigValue:zc,initConfig:jc,flattenConfig:Yt,updateConfigValue:eu,updateConfigObject:AN,getConfiguration:mN,setConfiguration:NN,readConfigFile:la,getClusteringRoutes:ON,initOldConfig:tu,getConfigFromFile:gN};function fN(e){let t=ar(Xc);Zs=Yt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=ua(o,e[i]);try{t.setIn([..._],c)}catch(u){le.error(u)}}}Ea(t);let r=t.toJSON();Oe=Yt(r);let s=t.getIn(["rootPath"]),n=ir.join(s,Y.HDB_CONFIG_FILE);Ke.createFileSync(n),Ke.writeFileSync(n,String(t)),le.trace(`Config file written to ${n}`)}a(fN,"createConfigFile");function RN(e){if(Zs===void 0){let r=ar(Xc);Zs=Yt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Zs[t.toLowerCase()]}a(RN,"getDefaultConfig");function zc(e){if(Pe.isEmpty(e)){le.error(TN);return}if(Oe===void 0){le.trace(lN);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oe[t.toLowerCase()]}a(zc,"getConfigValue");function jc(e=!1){if(Oe===void 0||e){let t=Pe.getPropsFilePath();try{Ke.accessSync(t,Ke.constants.F_OK|Ke.constants.R_OK)}catch(o){throw le.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Xs(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{tu(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=ar(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){le.trace(`HarperDB config file not found at ${s}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw le.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ea(n);let i=n.toJSON();Oe=Yt(i),le.trace(dN)}}a(jc,"initConfig");function Ea(e){let t=e.toJSON(),r=iN(t);if(r.error)throw Js.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(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(Ea,"validateConfig");function AN(e,t){Oe===void 0&&(Oe={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Oe[r.toLowerCase()]=t}a(AN,"updateConfigObject");function eu(e,t,r=void 0,s=!1,n=!1){Oe===void 0&&jc();let i=zc(Y.CONFIG_PARAM_MAP.hdb_root),o=ir.join(i,Y.HDB_CONFIG_FILE),_=ar(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=ua(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=ua(l,r[E]);try{_.setIn([...h],S)}catch(m){le.error(m)}}}Ea(_);let c=_.getIn(["rootPath"]),u=ir.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=ir.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Ke.copySync(o,E),le.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){le.error(SN),le.error(E)}Ke.writeFileSync(u,String(_)),n&&(Oe=Yt(_.toJSON())),le.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eu,"updateConfigValue");function Yt(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Yt(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(Yt,"flattenConfig");function ua(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.CONFIG_PARAMS.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(oN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Pe.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 Pe.autoCast(t)}a(ua,"castConfigValue");function mN(){let e=Pe.getPropsFilePath(),r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(mN,"getConfiguration");async function NN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return eu(void 0,void 0,n,!0),hN}catch(i){throw typeof i=="string"||i instanceof String?cN(i,i,uN.BAD_REQUEST,void 0,void 0,!0):i}}a(NN,"setConfiguration");function la(){let e=Pe.getPropsFilePath();try{Ke.accessSync(e,Ke.constants.F_OK|Ke.constants.R_OK)}catch(n){throw le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(la,"readConfigFile");function ar(e){return aN.parseDocument(Ke.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ar,"parseYamlDoc");function ON(){let e=la(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Pe.isEmptyOrZeroLength(t)?[]:t;let r=Zc(t);if(r)throw Js.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Pe.isEmptyOrZeroLength(s)?[]:s;let n=Zc(s);if(n)throw Js.CONFIG_VALIDATION(n.message);if(!Pe.isEmptyOrZeroLength(s)&&!Pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Js.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ON,"getClusteringRoutes");function tu(e){let t=Xs(e);Oe={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(Pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Oe[n]=ir.dirname(s):Oe[n]=s}return Oe}a(tu,"initOldConfig");function gN(e){let t=la();return _N.get(t,e.replaceAll("_","."))}a(gN,"getConfigFromFile")});var de=d((uM,nu)=>{"use strict";var da=require("fs-extra"),tt=require("path"),IN=require("os"),pN=require("properties-reader"),Fr=w(),or=p(),g=A(),zs=vr(),CN="Error initializing environment manager",js="BOOT_PROPS_FILE_PATH",su=!1,bN={[g.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Tt={};nu.exports={BOOT_PROPS_FILE_PATH:js,getHdbBasePath:LN,setHdbBasePath:wN,get:yN,initSync:DN,setProperty:P,initTestEnvironment:MN};function LN(){return Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LN,"getHdbBasePath");function wN(e){Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(wN,"setHdbBasePath");function yN(e){let t=zs.getConfigValue(e);return t===void 0?Tt[e]:t}a(yN,"get");function P(e,t){bN[e]&&(Tt[e]=t),zs.updateConfigObject(e,t)}a(P,"setProperty");function UN(){let e;try{e=or.getPropsFilePath(),da.accessSync(e,da.constants.F_OK|da.constants.R_OK),su=!0;let t=pN(e);return Tt[g.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(g.HDB_SETTINGS_NAMES.INSTALL_USER),Tt[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Tt[js]=e,!0}catch{return Fr.trace(`Environment manager found no properties file at ${e}`),!1}}a(UN,"doesPropFileExist");function DN(e=!1){try{(su||UN())&&(zs.initConfig(e),Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zs.getConfigValue(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Fr.error(CN),Fr.error(t),console.error(t),process.exit(1)}}a(DN,"initSync");function MN(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:_}=e,c=tt.join(__dirname,"../../","unitTests");Tt[js]=tt.join(c,"hdb_boot_properties.file"),P(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tt.join(c,"settings.test")),P(g.HDB_SETTINGS_NAMES.INSTALL_USER,IN.userInfo().username),P(g.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.HDB_SETTINGS_NAMES.CERT_KEY,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tt.join(c,"envDir","log")),P(g.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(g.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,tt.join(c,"envDir")),P(g.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,or.isEmpty(n)?!0:n),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,or.isEmpty(n)?!0:n),P(g.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(g.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,or.isEmpty(i)?!1:i),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,or.isEmpty(i)?!1:i),P(g.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(g.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(g.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,tt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(g.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,or.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(g.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(g.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(g.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${js}. Please check your boot props and settings files`;Fr.fatal(r),Fr.error(t)}}a(MN,"initTestEnvironment")});var F=d((lM,hu)=>{"use strict";var Sa=require("lmdb"),Be=require("fs-extra"),$e=require("path"),tn=xt(),iu=w(),ie=Me().LMDB_ERRORS_ENUM,rn=qc(),Ta=xc(),au=kc(),bt=Ee(),EM=A(),qr=de();qr.initSync();var ou=qr.get("STORAGE_WRITEASYNC")===!0||qr.get("STORAGE_WRITEASYNC")==="true"||qr.get("STORAGE_WRITEASYNC")==="TRUE",_u=qr.get("STORAGE_OVERLAPPINGSYNC"),cu=1024*1024*1024,uu=1e4,Eu=1e3,We=bt.INTERNAL_DBIS_NAME,lu=bt.DBI_DEFINITION_NAME,PN="data.mdb",BN="lock.mdb",Vr=".mdb",HN="-lock",en=class{constructor(t,r,s=!1){this.dbi=He(t,r),this.key_type=this.dbi[bt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[bt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Sa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(en,"TransactionCursor");function ha(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(ha,"pathEnvNameValidation");async function fa(e,t,r=!0){try{await Be.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ie.INVALID_BASE_PATH):s}try{let s=$e.join(e,t+Vr);return await Be.access(s,Be.constants.R_OK|Be.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Be.access($e.join(e,t,PN),Be.constants.R_OK|Be.constants.F_OK),$e.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(fa,"validateEnvironmentPath");function sn(e,t){if(tn.validateEnv(e),t===void 0)throw new Error(ie.DBI_NAME_REQUIRED)}a(sn,"validateEnvDBIName");async function GN(e,t,r=!1,s=!1){ha(e,t),t=t.toString();try{return await fa(e,t,s),Ra(e,t,r)}catch(n){if(n.message===ie.INVALID_ENVIRONMENT){let i=$e.join(e,t);await Be.mkdirp(s?i:e);let o=new au(s?i:i+Vr,cu,uu,Eu,!1,ou,_u),_=Sa.open(o);_.dbis=Object.create(null);let c=new Ta(!1);_.openDB(We,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Aa(e,t,r);return _[bt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(GN,"createEnvironment");async function vN(e,t,r,s=!0){let n=await Ra(e,t);if(r===void 0)throw new Error(ie.DESTINATION_PATH_REQUIRED);try{await Be.access($e.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(vN,"copyEnvironment");async function Ra(e,t,r=!1){ha(e,t),t=t.toString();let s=Aa(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 fa(e,t),i=$e.join(e,t+Vr),o=n!=i,_=new au(n,cu,uu,Eu,o,ou,_u),c=Sa.open(_);c.dbis=Object.create(null);let u=Su(c);for(let E=0;E<u.length;E++)He(c,u[E]);return c[bt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ra,"openEnvironment");async function FN(e,t,r=!1){ha(e,t),t=t.toString();let s=$e.join(e,t+Vr),n=await fa(e,t);if(global.lmdb_map!==void 0){let i=Aa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await du(o),delete global.lmdb_map[i]}}await Be.remove(n),await Be.remove(n===s?n+HN:$e.join($e.dirname(n),BN))}a(FN,"deleteEnvironment");async function du(e){tn.validateEnv(e);let t=e[bt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(du,"closeEnvironment");function Aa(e,t,r=!1){let n=`${$e.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Aa,"getCachedEnvironmentName");function qN(e){tn.validateEnv(e);let t=Object.create(null),r=He(e,We);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==We)try{t[s]=Object.assign(new rn,n)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(qN,"listDBIDefinitions");function Su(e){tn.validateEnv(e);let t=[],r=He(e,We);for(let{key:s}of r.getRange({start:!1}))s!==We&&t.push(s);return t}a(Su,"listDBIs");function VN(e,t){let s=He(e,We).getEntry(t),n=new rn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(VN,"getDBIDefinition");function Tu(e,t,r,s=!1){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return He(e,t)}catch(n){if(n.message===ie.DBI_DOES_NOT_EXIST){let i=new Ta(r,s===!0),o=e.openDB(t,i),_=new rn(r===!0,s);return o[lu]=_,He(e,We).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Tu,"createDBI");function He(e,t){if(sn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==We?r=VN(e,t):r=new rn,r===void 0)throw new Error(ie.DBI_DOES_NOT_EXIST);let s;try{let n=new Ta(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[lu]=r,e.dbis[t]=s,s}a(He,"openDBI");function xN(e,t){sn(e,t),t=t.toString();let r=He(e,t),s=r.getStats();return r[bt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(xN,"statDBI");async function YN(e,t){try{let r=$e.join(e,t+Vr);return(await Be.stat(r)).size}catch{throw new Error(ie.INVALID_ENVIRONMENT)}}a(YN,"environmentDataSize");function kN(e,t){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_DROP_INTERNAL_DBIS_NAME);He(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],He(e,We).removeSync(t)}a(kN,"dropDBI");function KN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{He(e,n)}catch(i){if(i.message===ie.DBI_DOES_NOT_EXIST)Tu(e,n,n!==t,n===t);else throw i}}}a(KN,"initializeDBIs");hu.exports={openDBI:He,openEnvironment:Ra,createEnvironment:GN,listDBIs:Su,listDBIDefinitions:qN,createDBI:Tu,dropDBI:kN,statDBI:xN,deleteEnvironment:FN,initializeDBIs:KN,TransactionCursor:en,environmentDataSize:YN,copyEnvironment:vN,closeEnvironment:du}});var Ru=d((dM,fu)=>{"use strict";var nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(nn,"InsertRecordsResponseObject");fu.exports=nn});var mu=d((SM,Au)=>{"use strict";var an=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(an,"UpdateRecordsResponseObject");Au.exports=an});var Ou=d((TM,Nu)=>{"use strict";var on=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(on,"UpsertRecordsResponseObject");Nu.exports=on});var _r=d((AM,Iu)=>{"use strict";var $N=F(),WN=Ru(),QN=mu(),JN=Ou(),Yr=xt(),xr=Me().LMDB_ERRORS_ENUM,ZN=Ee(),Lt=A(),XN=p(),zN=require("uuid"),hM=require("lmdb"),{handleHDBError:jN,hdb_errors:eO}=J(),{OVERFLOW_MARKER:fM,MAX_SEARCH_KEY_LENGTH:RM}=ZN,ma=Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,kt=Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new WN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];gu(u,!0,n);let E=rO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Oa(o,_,s,i)}a(tO,"insertRecords");function rO(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 _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Lt.FUNC_VAL],s[o]=_)}let c=Yr.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[kt])})}a(rO,"insertRecord");function sO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(sO,"removeSkippedRecords");function gu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[kt]))&&(e[kt]=s),t===!0?(r===!0||!Number.isInteger(e[ma]))&&(e[ma]=s):delete e[ma]}a(gu,"setTimestamps");function Na(e,t,r){r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),$N.initializeDBIs(e,t,r)}a(Na,"initializeTransaction");async function nO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new QN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=ga(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Oa(_,c,s,i,o)}a(nO,"updateRecords");async function iO(e,t,r,s,n=!0){try{Ia(e,t,r,s)}catch(c){throw jN(c,c.message,eO.HTTP_STATUS_CODES.BAD_REQUEST)}Na(e,t,r);let i=new JN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;XN.isEmpty(u[t])?(E=zN.v4(),u[t]=E):E=u[t];let l=ga(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Oa(o,_,s,i)}a(iO,"upsertRecords");async function Oa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Yr.getMicroTime(),sO(r,n),s}a(Oa,"finalizeWrite");function ga(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(gu(r,!E,o),Number.isInteger(r[kt])&&u[kt]>r[kt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let N=r[m],C=e.dbis[m];if(C===void 0)continue;let fe=u[m];if(typeof N=="function"){let $=N([[u]]);Array.isArray($)&&(N=$[0][Lt.FUNC_VAL],r[m]=N)}if(N===fe)continue;let G=Yr.getIndexedValues(fe);if(G)for(let $=0,xe=G.length;$<xe;$++)C.remove(G[$],s);if(G=Yr.getIndexedValues(N),G)for(let $=0,xe=G.length;$<xe;$++)C.put(G[$],s)}let S=Object.assign({},u,r);_.put(s,S,S[kt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:ga(e,t,r,s,n,i,o))}a(ga,"updateUpsertRecord");function aO(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(xr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xr.WRITE_ATTRIBUTES_REQUIRED):new Error(xr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(aO,"validateBasic");function Ia(e,t,r,s){if(aO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(xr.RECORDS_REQUIRED):new Error(xr.RECORDS_MUST_BE_ARRAY)}a(Ia,"validateWrite");Iu.exports={insertRecords:tO,updateRecords:nO,upsertRecords:iO}});var x=d((mM,Cu)=>{"use strict";var pa=A(),cr=de(),Ca=require("path");cr.initSync();var _n,cn,un;function pu(){if(_n!==void 0)return _n;if(cr.getHdbBasePath()!==void 0)return _n=Ca.join(cr.getHdbBasePath(),pa.SCHEMA_DIR_NAME),_n}a(pu,"getBaseSchemaPath");function oO(){if(cn!==void 0)return cn;if(cr.getHdbBasePath()!==void 0)return cn=Ca.join(pu(),pa.SYSTEM_SCHEMA_NAME),cn}a(oO,"getSystemSchemaPath");function _O(){if(un!==void 0)return un;if(cr.getHdbBasePath()!==void 0)return un=Ca.join(cr.getHdbBasePath(),pa.TRANSACTIONS_DIR_NAME),un}a(_O,"getTransactionAuditStorePath");Cu.exports={getBaseSchemaPath:pu,getSystemSchemaPath:oO,getTransactionAuditStorePath:_O}});var Kt=d((NM,cO)=>{cO.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 ba=d((OM,bu)=>{var{common_validators:wt}=nr(),kr=Et(),Qe="is required",v={schema:{presence:!0,format:wt.schema_format,length:wt.schema_length},table:{presence:!0,format:wt.schema_format,length:wt.schema_length},attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length},hash_attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length}};function Kr(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(Kr,"makeAttributesStrings");function uO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence=!1,v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(uO,"schema_object");function EO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(EO,"table_object");function lO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence={message:Qe},kr.validateObject(e,v)}a(lO,"create_table_object");function dO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence={message:Qe},v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(dO,"attribute_object");function SO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(SO,"describe_table");function TO(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(TO,"validateTableResidence");bu.exports={schema_object:uO,create_table_object:lO,table_object:EO,attribute_object:dO,describe_table:SO,validateTableResidence:TO}});var wu=d((gM,Lu)=>{"use strict";var hO=require("uuid"),En=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(En,"CreateAttributeObject");Lu.exports=En});var dn=d((IM,yu)=>{"use strict";var fO=wu(),ln=class extends fO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(ln,"LMDBCreateAttributeObject");yu.exports=ln});var Du=d((pM,Uu)=>{"use strict";Uu.exports=AO;var RO="inserted";function AO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===RO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(AO,"returnObject")});var Sn=d((CM,Pu)=>{"use strict";var mO=A(),La=F(),NO=_r(),{getSystemSchemaPath:OO,getBaseSchemaPath:gO}=x(),IO=require("path"),pO=Kt(),CO=ba(),bO=dn(),LO=Du(),{handleHDBError:wO,hdb_errors:yO}=J(),UO=p(),wa=pO.hdb_attribute,Mu=[];for(let e=0;e<wa.attributes.length;e++)Mu.push(wa.attributes[e].attribute);var DO="inserted";Pu.exports=MO;async function MO(e){let t=CO.attribute_object(e);if(t)throw wO(new Error,t.message,yO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=UO.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new bO(e.schema,e.table,e.attribute,e.id);try{let n=await La.openEnvironment(IO.join(gO(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);La.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await La.openEnvironment(OO(),mO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await NO.insertRecords(i,wa.hash_attribute,Mu,[s]);return LO(DO,o,{records:[s]},_)}catch(n){throw n}}a(MO,"lmdbCreateAttribute")});var Tn=d((LM,Hu)=>{"use strict";var ht=p(),Bu=w(),bM=oa();Hu.exports=PO;function PO(e){if(ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ht.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(ht.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&&ht.isEmptyOrZeroLength(o[r]))throw Bu.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(!ht.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Bu.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`);!ht.isEmpty(o[r])&&o[r]!==""&&s.has(ht.autoCast(o[r]))&&(o.skip=!0),s.add(ht.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(PO,"insertUpdateValidate")});var fn=d((wM,Gu)=>{"use strict";var BO=A().OPERATIONS_ENUM,hn=class{constructor(t,r,s,n,i=void 0){this.operation=BO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(hn,"InsertObject");Gu.exports=hn});var An=d((UM,vu)=>{"use strict";var yM=fn(),Rn=A(),Ua=p(),ya=w(),HO=require("uuid"),{handleHDBError:$r,hdb_errors:GO}=J(),{HDB_ERROR_MSGS:Wr,HTTP_STATUS_CODES:Qr}=GO;vu.exports=vO;function vO(e,t,r){for(let n=0;n<t.length;n++)FO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qO(i,r,e.operation)}}a(vO,"processRows");function FO(e){if(Buffer.byteLength(String(e))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw $r(new Error,Wr.ATTR_NAME_LENGTH_ERR(e),Qr.BAD_REQUEST,void 0,void 0,!0);if(Ua.isEmptyOrZeroLength(e)||Ua.isEmpty(e.trim()))throw $r(new Error,Wr.ATTR_NAME_NULLISH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(FO,"validateAttribute");function qO(e,t,r){if(!e.hasOwnProperty(t)||Ua.isEmptyOrZeroLength(e[t])){if(r===Rn.OPERATIONS_ENUM.INSERT||r===Rn.OPERATIONS_ENUM.UPSERT){e[t]=HO.v4();return}throw ya.error("Update transaction aborted due to record with no hash value:",e),$r(new Error,Wr.RECORD_MISSING_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ya.error(e),$r(new Error,Wr.HASH_VAL_LENGTH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ya.error(e),$r(new Error,Wr.INVALID_FORWARD_SLASH_IN_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(qO,"validateHash")});var qu=d((DM,Fu)=>{"use strict";var mn=class{constructor(t,r){this.type=t,this.message=r}};a(mn,"IPCEventObject");Fu.exports=mn});var Zr=d((MM,Vu)=>{"use strict";var VO=w(),Da=p(),xO=A(),{IPC_ERRORS:Jr}=Me();Vu.exports={sendIpcEvent:YO,validateEvent:kO,SchemaEventMsg:KO,UserEventMsg:$O};function YO(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):VO.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(YO,"sendIpcEvent");function kO(e){if(typeof e!="object")return Jr.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Da.isEmpty(e.type))return Jr.MISSING_TYPE;if(!e.hasOwnProperty("message")||Da.isEmpty(e.message))return Jr.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Da.isEmpty(e.message.originator))return Jr.MISSING_ORIGIN;if(xO.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Jr.INVALID_EVENT(e.type)}a(kO,"validateEvent");function KO(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(KO,"SchemaEventMsg");function $O(e){this.originator=e}a($O,"UserEventMsg")});var On=d((BM,Ku)=>{"use strict";var xu=A(),PM=p(),Nn=w(),Yu=qu(),{sendIpcEvent:ku}=Zr();function WO(e){try{Nn.trace("signalSchemaChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.SCHEMA,e);ku(t)}catch(t){Nn.error(t)}}a(WO,"signalSchemaChange");function QO(e){try{Nn.trace("signalUserChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.USER,e);ku(t)}catch(t){Nn.error(t)}}a(QO,"signalUserChange");Ku.exports={signalSchemaChange:WO,signalUserChange:QO}});var gn=d((HM,Wu)=>{"use strict";var $u=p(),JO=A(),ZO=w(),XO=Sn(),zO=dn(),jO=On(),{SchemaEventMsg:eg}=Zr(),tg="already exists in";Wu.exports=rg;async function rg(e,t,r){try{if($u.isEmptyOrZeroLength(r))return r;let s=[];$u.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 sg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(rg,"lmdbCheckForNewAttributes");async function sg(e,t,r,s){let n=new zO(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ng(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(tg))ZO.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(sg,"createNewAttribute");async function ng(e){let t;try{return t=await XO(e),jO.signalSchemaChange(new eg(process.pid,JO.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ng,"createAttribute")});var ur=d((GM,Qu)=>{"use strict";var In=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(In,"LMDBTransactionObject");Qu.exports=In});var Zu=d((vM,Ju)=>{"use strict";var ig=ur(),ag=A().OPERATIONS_ENUM,pn=class extends ig{constructor(t,r,s,n,i=void 0){super(ag.INSERT,r,s,n,i),this.records=t}};a(pn,"LMDBInsertTransactionObject");Ju.exports=pn});var zu=d((FM,Xu)=>{"use strict";var og=ur(),_g=A().OPERATIONS_ENUM,Cn=class extends og{constructor(t,r,s,n,i,o=void 0){super(_g.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Cn,"LMDBUpdateTransactionObject");Xu.exports=Cn});var eE=d((qM,ju)=>{"use strict";var cg=ur(),ug=A().OPERATIONS_ENUM,bn=class extends cg{constructor(t,r,s,n,i,o=void 0){super(ug.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(bn,"LMDBUpsertTransactionObject");ju.exports=bn});var rE=d((VM,tE)=>{"use strict";var Eg=ur(),lg=A().OPERATIONS_ENUM,Ln=class extends Eg{constructor(t,r,s,n,i=void 0){super(lg.DELETE,s,n,t,i),this.original_records=r}};a(Ln,"LMDBDeleteTransactionObject");tE.exports=Ln});var Xr=d((xM,aE)=>{"use strict";var dg=require("path"),sE=F(),Sg=Zu(),Tg=zu(),hg=eE(),fg=rE(),Er=Ee(),nE=p(),{CONFIG_PARAMS:Rg}=A(),iE=de();iE.initSync();var wn=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:Ag}=x();aE.exports=mg;async function mg(e,t){if(iE.get(Rg.LOGGING_AUDITLOG)===!1)return;let r=dg.join(Ag(),e.schema.toString()),s=await sE.openEnvironment(r,e.table,!0),n=Ng(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){sE.initializeDBIs(s,Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Er.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),nE.isEmpty(n.user_name)||s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(mg,"writeTransaction");function Ng(e,t){let r=nE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===wn.INSERT)return new Sg(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPDATE)return new Tg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPSERT)return new hg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.DELETE)return new fg(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ng,"createTransactionObject")});var Ma=d((kM,oE)=>{"use strict";var Og=Tn(),YM=fn(),lr=A(),gg=An(),Ig=_r().insertRecords,pg=F(),Cg=require("path"),bg=w(),Lg=gn(),{getBaseSchemaPath:wg}=x(),yg=Xr();oE.exports=Ug;async function Ug(e){try{let{schema_table:t,attributes:r}=Og(e);gg(e,r,t.hash_attribute),e.schema!==lr.SYSTEM_SCHEMA_NAME&&(r.includes(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Lg(e.hdb_auth_header,t,r),n=Cg.join(wg(),e.schema.toString()),i=await pg.openEnvironment(n,e.table),o=await Ig(i,t.hash_attribute,r,e.records,e[lr.CLUSTERING_FLAG]!==!0);try{await yg(e,o)}catch(_){bg.error(`unable to write transaction due to ${_.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(Ug,"lmdbCreateRecords")});var uE=d((KM,cE)=>{"use strict";var _E=A(),Dg=Ma(),Mg=fn(),Pg=require("fs-extra"),Bg=require("path"),{getBaseSchemaPath:Hg}=x();cE.exports=Gg;async function Gg(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Mg(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Dg(r),await Pg.mkdirp(Bg.join(Hg(),e.schema.toString()))}a(Gg,"lmdbCreateSchema")});var lE=d(($M,EE)=>{"use strict";var yn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(yn,"DeleteRecordsResponseObject");EE.exports=yn});var Ha=d((ZM,TE)=>{"use strict";var dE=F(),Pa=xt(),Ba=Me().LMDB_ERRORS_ENUM,vg=Ee(),SE=w(),WM=p(),Fg=require("lmdb"),qg=lE(),{OVERFLOW_MARKER:QM,MAX_SEARCH_KEY_LENGTH:JM}=vg;async function Vg(e,t,r){if(Pa.validateEnv(e),t===void 0)throw new Error(Ba.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ba.IDS_REQUIRED):new Error(Ba.IDS_MUST_BE_ARRAY);try{let s=dE.listDBIs(e);dE.initializeDBIs(e,t,s);let n=new qg,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,Fg.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let C=s[N];if(!S.hasOwnProperty(C)||C===t)continue;let fe=e.dbis[C],G=S[C];if(G!=null)try{let $=Pa.getIndexedValues(G);if($)for(let xe=0,Cs=$.length;xe<Cs;xe++)fe.remove($[xe],i)}catch{SE.warn(`cannot delete from attribute: ${C}, ${G}:${i}`)}}});o.push(m),_.push(i),n.original_records.push(S)}catch(S){SE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=Pa.getMicroTime(),n}catch(s){throw s}}a(Vg,"deleteRecords");TE.exports={deleteRecords:Vg}});var zr=d((XM,fE)=>{"use strict";var dr=p(),xg=Ha(),Yg=F(),kg=require("path"),{getBaseSchemaPath:Kg}=x(),$g=Xr(),Wg=w();fE.exports=Qg;async function Qg(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(dr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(dr.isEmptyOrZeroLength(e.hash_values)&&!dr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];dr.isEmpty(c)||e.hash_values.push(c)}}if(dr.isEmptyOrZeroLength(e.hash_values))return hE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(dr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=kg.join(Kg(),e.schema.toString()),i=await Yg.openEnvironment(n,e.table),o=await xg.deleteRecords(i,s,e.hash_values);try{t===!0&&await $g(e,o)}catch(_){Wg.error(`unable to write transaction due to ${_.message}`)}return hE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Qg,"lmdbDeleteRecords");function hE(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(hE,"createDeleteResponse")});var va=d((jM,RE)=>{"use strict";var Jg=A(),zM=xt();function Ga(e,t){let r=Object.create(null);if(t.length===1&&Jg.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(Ga,"parseRow");function Zg(e,t,r,s){let n=Ga(r,e);s.push(n)}a(Zg,"searchAll");function Xg(e,t,r,s){let n=Ga(r,e);s[t]=n}a(Xg,"searchAllToMap");function zg(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zg,"iterateDBI");function $t(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($t,"pushResults");function jg(e,t,r,s,n,i){t.toString().endsWith(e)&&$t(t,r,s,n,i)}a(jg,"endsWith");function eI(e,t,r,s,n,i){t.toString().includes(e)&&$t(t,r,s,n,i)}a(eI,"contains");function tI(e,t,r,s,n,i){t>e&&$t(t,r,s,n,i)}a(tI,"greaterThanCompare");function rI(e,t,r,s,n,i){t>=e&&$t(t,r,s,n,i)}a(rI,"greaterThanEqualCompare");function sI(e,t,r,s,n,i){t<e&&$t(t,r,s,n,i)}a(sI,"lessThanCompare");function nI(e,t,r,s,n,i){t<=e&&$t(t,r,s,n,i)}a(nI,"lessThanEqualCompare");RE.exports={parseRow:Ga,searchAll:Zg,searchAllToMap:Xg,iterateDBI:zg,endsWith:jg,contains:eI,greaterThanCompare:tI,greaterThanEqualCompare:rI,lessThanCompare:sI,lessThanEqualCompare:nI,pushResults:$t}});var Sr=d((rP,IE)=>{"use strict";var Ge=F(),iI=w(),ye=xt(),yt=Ee(),W=Me().LMDB_ERRORS_ENUM,eP=p(),aI=A(),Je=va(),tP=require("lmdb"),{OVERFLOW_MARKER:AE,MAX_SEARCH_KEY_LENGTH:oI}=yt,jr={lazy:!0};function mE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fa(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(mE,"iterateFullIndex");function es(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Ge.openDBI(e,r),h=Fa(e,t,r);l[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,N=i===!0?!c:!u,C=i===!0?u:c;for(let{key:fe,value:G}of l.getRange({start:m,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:C}))Je.pushResults(h(fe,G),G,E,t,r);return E}a(es,"iterateRangeBetween");function Fa(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(AE)){if(!s)if(t)s=Ge.openDBI(e,t);else{let _=Ge.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Ge.openDBI(e,_[c]),!s[yt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,jr)[r]}return n}}a(Fa,"getOverflowCheck");function _I(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);Un(r),r=ts(e,r);let o=[],_=Ge.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Je.searchAll(r,c,u,o);return o}a(_I,"searchAll");function cI(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Un(r),r=ts(e,r),mE(e,t,t,Je.searchAllToMap.bind(null,r),s,n,i)}a(cI,"searchAllToMap");function uI(e,t,r=!1,s=void 0,n=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);return mE(e,void 0,t,Je.iterateDBI,r,s,n)}a(uI,"iterateDBI");function EI(e,t){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Ge.statDBI(e,t).entryCount}a(EI,"countAll");function lI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=Ge.openDBI(e,r);s=ye.convertKeyValueToWrite(s);let c=[[],[]];if(_[yt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,jr);u!==void 0&&Je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Je.pushResults(s,u,c,t,r);return c}a(lI,"equals");function dI(e,t,r){return Ut(e,t,r),Ge.openDBI(e,t).getValuesCount(r)}a(dI,"count");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=[[],[]],c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ye.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Je.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(SI,"startsWith");function TI(e,t,r,s,n=!1,i=void 0,o=void 0){return NE(e,t,r,s,n,i,o,!0)}a(TI,"endsWith");function NE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Ut(e,r,s);let c=[[],[]],u=Ge.openDBI(e,r);u[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=Fa(e,t,r);o=Number.isInteger(o)?o:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(AE))for(let m of u.getValues(h)){let N=E(h,m);(_?N.endsWith(s):N.includes(s))&&l(N,m)}else if(_?S.endsWith(s):S.includes(s))if(u[yt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let m of u.getValues(h))l(h,m)}function l(h,S){if(o>0){o--;return}i!==0&&(Je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(NE,"contains");function hI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!0,!1)}a(hI,"greaterThan");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!1,!1)}a(fI,"greaterThanEqual");function RI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!0)}a(RI,"lessThan");function AI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!1)}a(AI,"lessThanEqual");function mI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(ye.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=ye.convertKeyValueToWrite(s),n=ye.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return es(e,t,r,s,n,i,o,_)}a(mI,"between");function NI(e,t,r,s){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),r=ts(e,r),s===void 0)throw new Error(W.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?jr:void 0);return i&&(n=Je.parseRow(i,r)),n}a(NI,"searchByHash");function OI(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,jr)===void 0&&(s=!1),s}a(OI,"checkHashExists");function gI(e,t,r,s,n=[]){gE(e,t,r,s,n);let i=OE(e,t,r,s,n);return Object.values(i)}a(gI,"batchSearchByHash");function II(e,t,r,s,n=[]){return gE(e,t,r,s,n),OE(e,t,r,s,n)}a(II,"batchSearchByHashToMap");function OE(e,t,r,s,n=[]){r=ts(e,r);let i=Object.create(null),o=r.length<3?jr:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw iI.warn(u),u}}return i}a(OE,"batchHashSearch");function gE(e,t,r,s,n){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),!Array.isArray(s))throw s===void 0?new Error(W.IDS_REQUIRED):new Error(W.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(gE,"initializeBatchSearchByHash");function Un(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Un,"validateFetchAttributes");function Ut(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>oI)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(Ut,"validateComparisonFunctions");function ts(e,t){return t.length===1&&aI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ge.listDBIs(e)),t}a(ts,"setGetWholeRowAttributes");IE.exports={searchAll:_I,searchAllToMap:cI,count:dI,countAll:EI,equals:lI,startsWith:SI,endsWith:TI,contains:NE,searchByHash:NI,setGetWholeRowAttributes:ts,batchSearchByHash:gI,batchSearchByHashToMap:II,checkHashExists:OI,iterateDBI:uI,greaterThan:hI,greaterThanEqual:fI,lessThan:RI,lessThanEqual:AI,between:mI}});var rs=d((nP,LE)=>{var pE=require("lodash"),CE=Et(),B=require("joi"),pI=p(),{hdb_schema_table:Ze,checkValidTable:bE}=nr(),{handleHDBError:CI,hdb_errors:bI}=J(),{HTTP_STATUS_CODES:LI}=bI,sP=B.object({schema:Ze,table:Ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(Ze).required()}),wI=B.object({schema:Ze,table:Ze,search_attribute:Ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(Ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),yI=B.object({schema:Ze,table:Ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(Ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:Ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});LE.exports=function(e,t){let r=null;switch(t){case"value":r=CE.validateBySchema(e,wI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(bE("schema",e.schema)),i(bE("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=CE.validateBySchema(e,yI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=pI.checkGlobalSchemaTable(e.schema,e.table);if(n)return CI(new Error,n,LI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=pE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!pE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var qa=d((iP,wE)=>{"use strict";var UI=F(),DI=rs(),MI=require("path"),{getBaseSchemaPath:PI}=x();wE.exports=BI;function BI(e){let t=DI(e,"hashes");if(t)throw t;let r=MI.join(PI(),e.schema.toString());return UI.openEnvironment(r,e.table)}a(BI,"initialize")});var Va=d((aP,yE)=>{"use strict";var HI=Sr(),GI=qa();yE.exports=vI;async function vI(e){try{let t=await GI(e),r=global.hdb_schema[e.schema][e.table];return HI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(vI,"lmdbGetDataByHash")});var ss=d((oP,UE)=>{"use strict";var Dn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Dn,"SearchByHashObject");UE.exports=Dn});var ME=d((cP,DE)=>{"use strict";var _P=ss(),FI=Sr(),qI=qa();DE.exports=VI;async function VI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return FI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(VI,"lmdbSearchByHash")});var ft=d((uP,PE)=>{"use strict";var Mn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=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=_,this.reverse=c,this.limit=u,this.offset=E}};a(Mn,"SearchObject");PE.exports=Mn});var Pn=d((EP,FE)=>{"use strict";var Se=Sr(),xI=F(),YI=require("path"),kI=p(),O=Ee(),Wt=A(),{getBaseSchemaPath:KI}=x(),$I=Kt(),BE=Me().LMDB_ERRORS_ENUM,{compareKeys:Tr}=require("ordered-binary"),Rt=Wt.SEARCH_WILDCARDS;async function WI(e,t,r){let s;e.schema===Wt.SYSTEM_SCHEMA_NAME?s=$I[e.table]:s=global.hdb_schema[e.schema][e.table];let n=vE(e,s.hash_attribute,r,t);return HE(e,n,s.hash_attribute,r)}a(WI,"prepSearch");async function HE(e,t,r,s){let n=YI.join(KI(),e.schema.toString()),i=await xI.openEnvironment(n,e.table),o=GE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(ZI(e,r)===!1)return s===!0?JI(o):o[1];let c=o[0];return s===!0?Se.batchSearchByHashToMap(i,r,e.get_attributes,c):Se.batchSearchByHash(i,r,e.get_attributes,c)}a(HE,"executeSearch");function GE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Se.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Se.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Se.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Se.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Se.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Se.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Se.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Se.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Se.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Se.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Se.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Se.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Se.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(GE,"searchByType");function QI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Tr(i,s[0])>=0&&Tr(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Tr(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tr(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Tr(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tr(n[r],s)<=0;default:return Object.create(null)}}a(QI,"filterByType");function JI(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(JI,"createMapFromArrays");function ZI(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(ZI,"checkToFetchMore");function vE(e,t,r,s){if(kI.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),_=!1;if(e.search_attribute===t&&(_=!0),Rt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rt[0])<0&&n.indexOf(Rt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Rt.indexOf(i)>=0&&Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Rt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rt[0])||n.includes(Rt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(BE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Wt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(BE.UNKNOWN_SEARCH_TYPE)}}a(vE,"createSearchTypeFromSearchObject");FE.exports={executeSearch:HE,createSearchTypeFromSearchObject:vE,prepSearch:WI,searchByType:GE,filterByType:QI}});var VE=d((dP,qE)=>{"use strict";var lP=ft(),XI=rs(),zI=p(),jI=A(),ep=Pn();qE.exports=tp;async function tp(e,t){if(!zI.isEmpty(t)&&jI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=XI(e,"value");if(s)throw s;let n=!0;try{return await ep.prepSearch(e,t,n)}catch(i){throw i}}a(tp,"lmdbGetDataByValue")});var hr=d((TP,xE)=>{"use strict";var SP=ft(),rp=rs(),sp=p(),np=A(),ip=Pn();xE.exports=ap;async function ap(e,t){if(!sp.isEmpty(t)&&np.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rp(e,"value");if(s)throw s;let n=!1;try{return await ip.prepSearch(e,t,n)}catch(i){throw i}}a(ap,"lmdbSearchByValue")});var kE=d((fP,YE)=>{"use strict";var hP=Ee(),Bn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Bn,"SearchByConditionsObject");var Hn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Hn,"SearchCondition");var Gn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Gn,"SortAttribute");YE.exports={SearchByConditionsObject:Bn,SearchCondition:Hn,SortAttribute:Gn}});var ZE=d((AP,JE)=>{"use strict";var RP=kE().SearchByConditionsObject,op=ft(),_p=rs(),xa=Sr(),vn=Ee(),QE=Pn(),cp=va(),KE=require("lodash"),{getBaseSchemaPath:up}=x(),Ep=require("path"),lp=F(),{handleHDBError:$E,hdb_errors:dp}=J(),{HTTP_STATUS_CODES:Sp}=dp,Tp=1e8,hp={lazy:!0};JE.exports=fp;async function fp(e){try{let t=_p(e,"conditions");if(t)throw $E(t,t.message,Sp.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=Ep.join(up(),e.schema.toString()),s=await lp.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=KE.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===vn.SEARCH_TYPES.EQUALS?o.estimated_count=xa.count(s,o.search_attribute,o.search_value):_===vn.SEARCH_TYPES.CONTAINS||_===vn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=Tp}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await WE(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(QE.filterByType),u=c.length,E=[],l=xa.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let N=_.get(m,hp);for(let C=0;C<u;C++)if(!c[C](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(cp.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await WE(s,e,c,n.hash_attribute);_.push(u)}if(o=KE.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return xa.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw $E(t)}}a(fp,"lmdbSearchByConditions");async function WE(e,t,r,s){let n=new op(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===vn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,QE.searchByType(e,n,i,s)}a(WE,"executeConditionSearch")});var qn=d((mP,XE)=>{"use strict";var Rp=A().OPERATIONS_ENUM,Fn=class{constructor(t,r,s,n=void 0){this.operation=Rp.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Fn,"DeleteObject");XE.exports=Fn});var Ya=d((NP,zE)=>{"use strict";var Vn=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Vn,"DropAttributeObject");zE.exports=Vn});var Ka=d((gP,jE)=>{"use strict";var Ap=ft(),mp=qn(),OP=Ya(),rt=A(),Np=p(),ka=F(),Op=Kt(),gp=hr(),Ip=zr(),{getBaseSchemaPath:pp}=x(),Cp=require("path");jE.exports=bp;async function bp(e,t=!0){let r;e.schema===rt.SYSTEM_SCHEMA_NAME?r=Op[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await wp(e),n=Cp.join(pp(),e.schema.toString()),i=await ka.openEnvironment(n,e.table);return t===!0&&await Lp(e,i,r.hash_attribute),ka.dropDBI(i,e.attribute),s}a(bp,"lmdbDropAttribute");async function Lp(e,t,r){let s=ka.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(Lp,"removeAttributeFromAllObjects");async function wp(e){let t=new Ap(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await gp(t)).filter(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Np.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mp(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Ip(i)}a(wp,"dropAttributeFromSystem")});var sl=d((IP,rl)=>{"use strict";var yp=Ka(),Up=Ya(),el=p(),tl=w(),Dp=Me().LMDB_ERRORS_ENUM;rl.exports=Mp;async function Mp(e){if(el.isEmpty(global.hdb_schema[e.schema])||el.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new Up(e.schema,e.table,r);try{await yp(n,!1)}catch(i){i.message!==Dp.DBI_DOES_NOT_EXIST&&tl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw tl.error(`Error dropping attribute ${r}`),s}}a(Mp,"lmdbDropAllAttributes")});var $a=d((CP,ll)=>{"use strict";var _l=ft(),cl=qn(),ul=hr(),El=zr(),pP=sl(),ge=A(),nl=p(),il=F(),{getBaseSchemaPath:Pp,getTransactionAuditStorePath:Bp}=x(),al=require("path"),ol=w();ll.exports=Hp;async function Hp(e){try{if(nl.isEmpty(global.hdb_schema[e.schema])||nl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Gp(e),await vp(e);let t=al.join(Pp(),e.schema.toString());try{await il.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=al.join(Bp(),e.schema.toString());await il.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Hp,"lmdbDropTable");async function Gp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await ul(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 cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await El(n)}a(Gp,"deleteAttributesFromSystem");async function vp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await ul(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 cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await El(n)}catch(i){throw i}}a(vp,"dropTableFromSystem")});var Sl=d((LP,dl)=>{"use strict";var Fp=require("fs-extra"),qp=ft(),Vp=ss(),xp=qn(),Yp=$a(),kp=zr(),Kp=Va(),$p=hr(),At=A(),bP=p(),Wp=require("path"),{getBaseSchemaPath:Qp}=x(),{handleHDBError:Jp,hdb_errors:Zp}=J(),{HDB_ERROR_MSGS:Xp,HTTP_STATUS_CODES:zp}=Zp;dl.exports=jp;async function jp(e){let t;try{t=await eC(e.schema);let r=new qp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await $p(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await Yp(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kp(n);let i=Wp.join(Qp(),t.toString());await Fp.remove(i)}catch(r){throw r}}a(jp,"lmdbDropSchema");async function eC(e){let t=new Vp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await Kp(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Jp(new Error,Xp.SCHEMA_NOT_FOUND(e),zp.NOT_FOUND,void 0,void 0,!0);return s}a(eC,"validateDropSchema")});var hl=d((wP,Tl)=>{"use strict";var xn=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(xn,"CreateTableObject");Tl.exports=xn});var Rl=d((UP,fl)=>{"use strict";var tC=require("path"),rC=require("fs-extra"),Yn=F(),{getTransactionAuditStorePath:sC}=x(),Wa=Ee(),yP=hl();fl.exports=nC;async function nC(e){let t;try{let r=tC.join(sC(),e.schema.toString());await rC.mkdirp(r),t=await Yn.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{Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Yn.createDBI(t,Wa.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(nC,"createTransactionsAuditEnvironment")});var Ol=d((DP,Nl)=>{"use strict";var Qa=A(),Al=F(),iC=_r(),aC=require("path"),{getSystemSchemaPath:oC,getBaseSchemaPath:_C}=x(),cC=Kt(),uC=Sn(),Ja=dn(),EC=w(),lC=Rl(),Xa=cC.hdb_table,ml=[];for(let e=0;e<Xa.attributes.length;e++)ml.push(Xa.attributes[e].attribute);Nl.exports=dC;async function dC(e,t){let r=aC.join(_C(),t.schema.toString()),s=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ja(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Al.createEnvironment(r,t.table),e!==void 0){let o=await Al.openEnvironment(oC(),Qa.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await iC.insertRecords(o,Xa.hash_attribute,ml,[e]),await Za(s),await Za(n),await Za(i)}await lC(t)}catch(o){throw o}}a(dC,"lmdbCreateTable");async function Za(e){try{await uC(e)}catch(t){EC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Za,"createAttribute")});var Il=d((MP,gl)=>{"use strict";var SC=Tn(),TC=An(),hC=gn(),fr=A(),fC=_r().updateRecords,RC=F(),AC=require("path"),{getBaseSchemaPath:mC}=x(),NC=Xr(),OC=w();gl.exports=gC;async function gC(e){try{let{schema_table:t,attributes:r}=SC(e);TC(e,r,t.hash_attribute),e.schema!==fr.SYSTEM_SCHEMA_NAME&&(r.includes(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await hC(e.hdb_auth_header,t,r),n=AC.join(mC(),e.schema.toString()),i=await RC.openEnvironment(n,e.table),o=await fC(i,t.hash_attribute,r,e.records,e[fr.CLUSTERING_FLAG]!==!0);try{await NC(e,o)}catch(_){OC.error(`unable to write transaction due to ${_.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(gC,"lmdbUpdateRecords")});var Cl=d((PP,pl)=>{"use strict";var IC=A().OPERATIONS_ENUM,kn=class{constructor(t,r,s,n=void 0){this.operation=IC.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kn,"UpsertObject");pl.exports=kn});var Ll=d((HP,bl)=>{"use strict";var BP=Cl(),pC=Tn(),CC=An(),bC=gn(),Rr=A(),LC=_r().upsertRecords,wC=F(),yC=require("path"),{getBaseSchemaPath:UC}=x(),DC=Xr(),MC=w(),{handleHDBError:PC,hdb_errors:BC}=J();bl.exports=HC;async function HC(e){let t;try{t=pC(e)}catch(c){throw PC(c,c.message,BC.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;CC(e,s,r.hash_attribute),e.schema!==Rr.SYSTEM_SCHEMA_NAME&&(s.includes(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bC(e.hdb_auth_header,r,s),i=yC.join(UC(),e.schema.toString()),o=await wC.openEnvironment(i,e.table),_=await LC(o,r.hash_attribute,s,e.records,e[Rr.CLUSTERING_FLAG]!==!0);try{await DC(e,_)}catch(c){MC.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(HC,"lmdbUpsertRecords")});var Pl=d((GP,Ml)=>{"use strict";var GC=ft(),wl=p(),yl=w(),vC=hr(),Ul=A(),FC=Ha().deleteRecords,qC=F(),VC=require("path"),{getBaseSchemaPath:xC}=x(),{promisify:YC}=require("util"),kC=YC(setTimeout),Dl=1e4,KC=10;Ml.exports=$C;async function $C(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(wl.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 GC(e.schema,e.table,Ul.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await vC(n,Ul.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return wl.isEmptyOrZeroLength(s)?(yl.trace("No records found to delete"),{message:"No records found to delete"}):await WC(e,s,t)}a($C,"lmdbDeleteRecordsBefore");async function WC(e,t,r){let s=VC.join(xC(),e.schema.toString()),n=await qC.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Dl){let c=t.slice(o,o+Dl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await FC(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await kC(KC)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(WC,"chunkDeletes")});var Hl=d((vP,Bl)=>{"use strict";var Kn=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Kn,"DeleteBeforeObject");Bl.exports=Kn});var vl=d((FP,Gl)=>{"use strict";var $n=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a($n,"DeleteAuditLogsBeforeResults");Gl.exports=$n});var Vl=d((VP,ql)=>{"use strict";var za=F(),{getTransactionAuditStorePath:QC}=x(),qP=Hl(),JC=require("path"),ns=Ee(),ZC=p(),Fl=vl(),XC=require("util").promisify,zC=XC(setTimeout),jC=1e4,eb=100;ql.exports=tb;async function tb(e){let t=JC.join(QC(),e.schema),r=await za.openEnvironment(t,e.table,!0),s=za.listDBIs(r);za.initializeDBIs(r,ns.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Fl;do n=await rb(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 zC(eb);while(n.transactions_deleted>0);return i}a(tb,"deleteAuditLogsBefore");async function rb(e,t){let r=new Fl;try{let s=e.dbis[ns.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 _=o[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ZC.isEmpty(_)||(n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>jC)break}return await n,r}catch(s){throw s}}a(rb,"deleteTransactions")});var Ql=d((xP,Wl)=>{"use strict";var ja=F(),Ar=Ee(),xl=xt(),eo=A(),Yl=p(),{getTransactionAuditStorePath:sb}=x(),nb=require("path"),ib=Sr(),Wn=ur(),ab=w();Wl.exports=ob;async function ob(e){let t=nb.join(sb(),e.schema),r=await ja.openEnvironment(t,e.table,!0),s=ja.listDBIs(r);ja.initializeDBIs(r,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return kl(r,e.search_values);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,cb(r,e.search_values,n);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _b(r,e.search_values);default:return kl(r)}}a(ob,"readAuditLog");function kl(e,t=[0,xl.getMicroTime()]){Yl.isEmpty(t[0])&&(t[0]=0),Yl.isEmpty(t[1])&&(t[1]=xl.getMicroTime());let r=[];try{let s=e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Wn,i);r.push(o)}return r}catch(s){throw s}}a(kl,"searchTransactionsByTimestamp");function _b(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[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,$l(e,i))}return Object.fromEntries(r)}a(_b,"searchTransactionsByUsername");function cb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=ib.equals(e,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=$l(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Kl(c,"records",r,E,o),Kl(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(cb,"searchTransactionsByHashValues");function Kl(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Wn(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Wn(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Kl,"loopRecords");function $l(e,t){let r=[];try{let s=e.dbis[Ar.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 Wn,i);r.push(o)}}catch(i){ab.warn(i)}return r}catch(s){throw s}}a($l,"batchSearchTransactions")});var Zl=d((YP,Jl)=>{"use strict";var ub=require("path"),{getBaseSchemaPath:Eb}=x(),lb=F();Jl.exports={writeTransaction:db};async function db(e,t,r){let s=ub.join(Eb(),e);return(await lb.openEnvironment(s,t)).transaction(r)}a(db,"writeTransaction")});var zl=d((kP,Xl)=>{"use strict";var Sb=require("path"),{getBaseSchemaPath:Tb}=x(),hb=F();Xl.exports={flush:fb};async function fb(e,t){let r=Sb.join(Tb(),e.toString());return(await hb.openEnvironment(r,t.toString())).flushed}a(fb,"flush")});var ed=d((KP,jl)=>{"use strict";var z=w(),{handleHDBError:Rb}=J(),Ab=_a(),mb=Sn(),Nb=Ma(),Ob=uE(),gb=zr(),Ib=Va(),pb=ME(),Cb=VE(),bb=hr(),Lb=ZE(),wb=Sl(),yb=Ol(),Ub=Il(),Db=Ll(),Mb=Pl(),Pb=Vl(),Bb=$a(),Hb=Ka(),Gb=Ql(),vb=Zl(),Fb=zl(),Qn=class extends Ab{async searchByConditions(t){try{return Lb(t)}catch(r){throw z.error(r),r}}async getDataByHash(t){try{return await Ib(t)}catch(r){throw z.error(r),r}}async searchByHash(t){try{return await pb(t)}catch(r){throw z.error(r),r}}async getDataByValue(t,r){try{return await Cb(t,r)}catch(s){throw z.error(s),s}}async searchByValue(t){try{return await bb(t)}catch(r){throw z.error(r),r}}async createSchema(t){try{return await Ob(t)}catch(r){throw z.error(r),r}}async dropSchema(t){try{return await wb(t)}catch(r){throw z.error(r),r}}async createTable(t,r){try{return await yb(t,r)}catch(s){throw z.error(s),s}}async dropTable(t){try{return await Bb(t)}catch(r){throw z.error(r),r}}async createAttribute(t){try{return await mb(t)}catch(r){throw z.error(r),r}}async createRecords(t){try{return await Nb(t)}catch(r){throw z.error(r),r}}async updateRecords(t){try{return await Ub(t)}catch(r){throw z.error(r),r}}async upsertRecords(t){try{return await Db(t)}catch(r){throw Rb(r,null,null,z.ERR,r)}}async deleteRecords(t){try{return await gb(t)}catch(r){throw z.error(r),r}}async deleteRecordsBefore(t){try{return await Mb(t)}catch(r){throw z.error(r),r}}async dropAttribute(t){try{return await Hb(t)}catch(r){throw z.error(r),r}}async deleteAuditLogsBefore(t){try{return await Pb(t)}catch(r){throw z.error(r),r}}async readAuditLog(t){try{return await Gb(t)}catch(r){throw z.error(r),r}}writeTransaction(t,r,s){return vb.writeTransaction(t,r,s)}flush(t,r){return Fb.flush(t,r)}};a(Qn,"LMDBBridge");jl.exports=Qn});var mr=d(($P,rd)=>{"use strict";var qb=ed(),Vb=_a(),xb=de();xb.initSync();var td;function Yb(){return td instanceof Vb?td:new qb}a(Yb,"getBridge");rd.exports=Yb()});var Td=d((QP,Sd)=>{"use strict";var to=require("recursive-iterator"),kb=require("alasql"),ro=require("clone"),sd=p(),{handleHDBError:nd,hdb_errors:Kb}=J(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:ad}=Kb,$b=["DISTINCT_ARRAY"],od=Symbol("validateTables"),so=Symbol("validateTable"),WP=Symbol("getAllColumns"),_d=Symbol("validateAllColumns"),Jn=Symbol("findColumn"),cd=Symbol("validateOrderBy"),is=Symbol("validateSegment"),no=Symbol("validateColumn"),ud=Symbol("setColumnsForTable"),Ed=Symbol("checkColumnsForAsterisk"),ld=Symbol("validateGroupBy"),dd=Symbol("hasColumns"),Zn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[od](),this[Ed](),this[_d]()}[od](){if(this[dd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[so](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[so](t.table)})}}[dd](){let t=!1,r=new to(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[so](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw nd(new Error,id.SCHEMA_NOT_FOUND(t.databaseid),ad.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw nd(new Error,id.TABLE_NOT_FOUND(t.databaseid,t.tableid),ad.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ro(s);n.table=ro(t),this.attributes.push(n)})}[Jn](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)}[Ed](){let t=new to(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ud](r.tableid)}[ud](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new kb.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_d](){this[is](this.statement.columns,!1),this[is](this.statement.joins,!1),this[is](this.statement.where,!1),this[ld](this.statement.group,!1),this[is](this.statement.order,!0)}[is](t,r){if(!t)return;let s=new to(t),n=[];for(let{node:i,path:o}of s)!sd.isEmpty(i)&&!sd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[cd](i):n.push(this[no](i)));return n}[ld](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$b.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ro(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Jn](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[Jn](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,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[cd](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[no](t)}[no](t){let r=this[Jn](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(Zn,"SelectValidator");Sd.exports=Zn});var Ad=d((JP,Rd)=>{"use strict";var hd=require("lodash"),as=require("mathjs"),Wb=require("jsonata"),fd=p();Rd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hd.uniqWith(e,hd.isEqual):e,searchJSON:Qb,mad:os.bind(null,as.mad),mean:os.bind(null,as.mean),mode:os.bind(null,as.mode),prod:os.bind(null,as.prod),median:os.bind(null,as.median)};function os(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(os,"aggregateFunction");function Qb(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(fd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fd.isEmpty(this.__ala__.res[r])){let s=Wb(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Qb,"searchJSON")});var Nd=d((ZP,md)=>{"use strict";var Z=require("moment"),io="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;md.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(io),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(io),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(io)}});var pd=d((XP,Id)=>{"use strict";var Jb=require("@turf/area"),Zb=require("@turf/length"),Xb=require("@turf/circle"),zb=require("@turf/difference"),jb=require("@turf/distance"),eL=require("@turf/boolean-contains"),tL=require("@turf/boolean-equal"),rL=require("@turf/boolean-disjoint"),sL=require("@turf/helpers"),Od=A(),D=p();Id.exports={geoArea:nL,geoLength:iL,geoCircle:aL,geoDifference:oL,geoDistance:gd,geoNear:_L,geoContains:cL,geoEqual:uL,geoCrosses:EL,geoConvert:lL};var ao="geo1 is required",oo="geo2 is required";function nL(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Jb.default(e)}a(nL,"geoArea");function iL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Zb.default(e,{units:t||"kilometers"})}a(iL,"geoLength");function aL(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),Xb.default(e,t,{units:r||"kilometers"})}a(aL,"geoCircle");function oL(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),zb(e,t)}a(oL,"geoDifference");function gd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),jb.default(e,t,{units:r||"kilometers"})}a(gd,"geoDistance");function _L(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return gd(e,t,s)<=r}a(_L,"geoNear");function cL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),eL.default(e,t)}a(cL,"geoContains");function uL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),tL.default(e,t)}a(uL,"geoEqual");function EL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!rL.default(e,t)}a(EL,"geoCrosses");function lL(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(Od.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Od.GEO_CONVERSION_ENUM).join(",")}`);return sL[t](e,r)}a(lL,"geoConvert")});var bd=d((zP,Cd)=>{var Qt=Ad(),Ue=Nd(),st=pd();Cd.exports=e=>{e.aggr.mad=e.aggr.MAD=Qt.mad,e.aggr.mean=e.aggr.MEAN=Qt.mean,e.aggr.mode=e.aggr.MODE=Qt.mode,e.aggr.prod=e.aggr.PROD=Qt.prod,e.aggr.median=e.aggr.MEDIAN=Qt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ue.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ue.current_time,e.fn.extract=e.fn.EXTRACT=Ue.extract,e.fn.date=e.fn.DATE=Ue.date,e.fn.date_format=e.fn.DATE_FORMAT=Ue.date_format,e.fn.date_add=e.fn.DATE_ADD=Ue.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ue.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ue.date_diff,e.fn.now=e.fn.NOW=Ue.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ue.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ue.get_server_time,e.fn.getdate=e.fn.GETDATE=Ue.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ue.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=st.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=st.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=st.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=st.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=st.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=st.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=st.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=st.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=st.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=st.geoNear}});var yd=d((jP,wd)=>{"use strict";var _s=require("lodash"),ae=require("alasql");ae.options.cache=!1;var dL=bd(),Ld=require("clone"),Xn=require("recursive-iterator"),b=w(),y=p(),Nr=mr(),SL=A(),{hdb_errors:TL}=J(),hL="IS NULL",cs="There was a problem performing this search. Please check the logs and try again.";dL(ae);var zn=class{constructor(t,r){if(y.isEmpty(t))throw b.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(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return b.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw b.error("Error thrown from checkEmptySQL in SQLSearch class method search."),b.error(s),new Error(cs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw b.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),b.error(s),new Error(cs)}if(Object.keys(this.data).length===0)return b.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw b.error("Error thrown from processJoins in SQLSearch class method search."),b.error(s),new Error(cs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw b.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),b.error(s),new Error(cs)}try{return t=await this._finalSQL(),t}catch(s){throw b.error("Error thrown from finalSQL in SQLSearch class method search."),b.error(s),new Error(cs)}}_getColumns(){let t=new Xn(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(Ld(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_s.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(y.isEmpty(this.statement.where)){b.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Xn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ae.yy.LogicValue({value:s}):r.right instanceof ae.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new ae.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ae.yy.LogicValue({value:i}):s instanceof ae.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ae.yy.NumValue({value:i}))});if(t){b.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Xn(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(!y.isEmpty(SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.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(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?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(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.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&&_s.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(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.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(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ae.promise(r)}catch(r){throw b.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),b.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(Ld(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(y.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(hL)>-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=_s.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}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(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,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await Nr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){b.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await Nr.getDataByValue(l);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(S)))}))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let m=await Nr.getDataByValue(_,S.operation);if(c)for(let N in m)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in m)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),b.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await Nr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),b.error(E)}}}_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 ae.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 ae.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ae.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 ae.yy.FuncValue:new ae.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${N}.${m}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,m=this._convertColumnsToIndexes(S,n);h=await ae.promise(m,t),t=null}catch(S){throw b.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),b.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,m=h.length;S<m;S++){let N=h[S];o.forEach(C=>{N[C.key]!==null&&N[C.key]!==void 0&&C.keys.add(N[C.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=_s.difference(m,[...S.keys].map(C=>C.toString()));for(let C=0,fe=N.length;C<fe;C++){let G=N[C];delete this.data[`${S.schema}_${S.table}`].__merged_data[G]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Xn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=_s.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){b.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),b.error(i)}}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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await Nr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let m=0;m<u;m++){let N=n.columns[m],C=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(C)}}}}catch(r){throw b.error("Error thrown from getDataByHash function in SQLSearch class method getData."),b.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 _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();b.trace(`Final SQL: ${n}`),s=await ae.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),b.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw b.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),b.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 b.error(TL.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),b.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,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Nr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){b.error("There was an error when processing this SQL operation. Check your logs"),b.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(zn,"SQLSearch");wd.exports=zn});var us=d((eB,Dd)=>{"use strict";var fL=Td();Dd.exports={searchByConditions:NL,searchByHash:OL,searchByValue:gL,search:IL};var _o=mr(),Ud=require("util"),RL=Ud.callbackify(_o.searchByHash),AL=Ud.callbackify(_o.searchByValue),mL=yd();async function NL(e){return _o.searchByConditions(e)}a(NL,"searchByConditions");function OL(e,t){try{RL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OL,"searchByHash");function gL(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),AL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(gL,"searchByValue");function IL(e,t){try{let r=new fL(e);r.validate(),new mL(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(IL,"search")});var ls=d((tB,Hd)=>{"use strict";var Es=require("crypto"),Pd="aes-256-cbc",pL=32,CL=16,co=64,Bd=32,bL=co+Bd,Md=new Map;Hd.exports={encrypt:LL,decrypt:wL,createNatsTableStreamName:yL};function LL(e){let t=Es.randomBytes(pL),r=Es.randomBytes(CL),s=Es.createCipheriv(Pd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(LL,"encrypt");function wL(e){let t=e.substr(0,co),r=e.substr(co,Bd),s=e.substr(bL,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Es.createDecipheriv(Pd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wL,"decrypt");function yL(e,t){let r=`${e}.${t}`,s=Md.get(r);return s||(s=Es.createHash("md5").update(`${e}.${t}`).digest("hex"),Md.set(r,s)),s}a(yL,"createNatsTableStreamName")});var lo=d((rB,Yd)=>{"use strict";var vd=us(),Dt=w(),Fd=ba(),UL=require("lodash"),DL=require("path"),ML=ls(),uo=p(),{promisify:qd}=require("util"),q=A(),{handleHDBError:jn,hdb_errors:PL}=J(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:Vd}=PL,BL=de();BL.initSync();var Gd=F(),HL=x(),ds=qd(vd.searchByValue),GL=qd(vd.searchByHash),Or="name",xd="hash_attribute",Eo="schema",vL="schema_table",FL="attribute";Yd.exports={describeAll:qL,describeTable:ti,describeSchema:xL};async function qL(e){try{let t=uo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Or,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[Or]},i=await ds(n);if(uo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:q.ID_ATTRIBUTE_STRING,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},u=await ds(c),E=[];for(let h of u)try{let S;if(t||s)S=await ti({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let m=r[h.schema].tables[h.name].attribute_permissions;S=await ti({schema:h.schema,table:h.name},m)}S&&E.push(S)}catch(S){Dt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Dt.error("Got an error in describeAll"),Dt.error(t),jn(new Error,ei.DESCRIBE_ALL_ERR)}}a(qL,"describeAll");async function ti(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=Fd.describe_table(e);if(o)throw o;if(r===q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[q.SYSTEM_SCHEMA_NAME][s];let _={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Or,search_value:s,hash_values:[],get_attributes:[q.WILDCARD_SEARCH_VALUE]},c=await ds(_);if(!c||c.length===0)throw jn(new Error,ei.TABLE_NOT_FOUND(e.schema,e.table),Vd.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw jn(new Error,ei.INVALID_TABLE_ERR(i));let E={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:vL,search_value:r+"."+s,get_attributes:[FL]},l=await ds(E);l=UL.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=VL(n)),i.attributes=l,i.clustering_stream_name=ML.createNatsTableStreamName(u.schema,u.name);try{let h=DL.join(HL.getBaseSchemaPath(),i.schema.toString()),S=await Gd.openEnvironment(h,i.name),m=Gd.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(h){Dt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Dt.error(`There was an error getting attributes for table '${u.name}'`),Dt.error(E)}return i}a(ti,"descTable");function VL(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(VL,"getAttrsByPerms");async function xL(e){let t=Fd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Eo,search_value:s,hash_values:[],get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},i=await ds(n);if(i&&i.length<1){let o={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Or]},_=await GL(o);if(_&&_.length<1)throw jn(new Error,ei.SCHEMA_NOT_FOUND(e.schema),Vd.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),uo.isEmpty(c)||c.describe){let u=await ti({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Dt.error(`Error describing schema table '${e.schema}.${_}'`),Dt.error(c)}})),o}}a(xL,"describeSchema")});var So=d((iB,Qd)=>{var sB=require("async"),gr=Kt(),nB=w(),{callbackify:$d,promisify:YL}=require("util");Qd.exports={setSchemaDataToGlobal:kd,getTableSchema:$L,getSystemSchema:QL,setSchemaDataToGlobalAsync:YL(kd)};var Wd=lo(),kL=$d(Wd.describeAll),KL=$d(Wd.describeTable);function kd(e){kL(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gr),global.hdb_schema=r,e(null,null)})}a(kd,"setSchemaDataToGlobal");function Kd(e,t){return e==="system"?gr[t]:global.hdb_schema[e][t]}a(Kd,"returnSchema");function $L(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?WL(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,Kd(e,t))}):r(null,Kd(e,t))}a($L,"getTableSchema");function WL(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gr:global.hdb_schema={system:gr},r();return}KL(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(WL,"setTableDataToGlobal");function QL(){return gr}a(QL,"getSystemSchema")});var ii=d((aB,Xd)=>{"use strict";var si=oa(),ve=p(),JL=require("util"),ni=mr(),ZL=So(),To=w(),{handleHDBError:Mt,hdb_errors:XL}=J(),{HTTP_STATUS_CODES:Jt}=XL,zL=JL.promisify(ZL.getTableSchema),jL="updated",Jd="inserted",Zd="upserted";Xd.exports={insert:tw,update:rw,upsert:sw,validation:ew,flush:nw};async function ew(e){if(ve.isEmpty(e))throw new Error("invalid update parameters defined.");if(ve.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ve.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await zL(e.schema,e.table),r=si(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(_=>{if(o&&ve.isEmptyOrZeroLength(_[s]))throw To.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ve.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw To.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ve.isEmpty(_[s])&&_[s]!==""&&n.has(ve.autoCast(_[s]))&&(_.skip=!0),n.add(ve.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(ew,"validation");async function tw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.createRecords(e);return ri(Jd,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(tw,"insertData");async function rw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.updateRecords(e);return ve.isEmpty(s.existing_rows)?ri(jL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):ri(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(rw,"updateData");async function sw(e){if(e.operation!=="upsert")throw Mt(new Error,"invalid operation, must be upsert",Jt.INTERNAL_SERVER_ERROR);let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.upsertRecords(e);return ri(Zd,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Mt(s,null,null,To.ERR,n)}}a(sw,"upsertData");function ri(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===Jd?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Zd?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(ri,"returnObject");function nw(e){return ni.flush(e.schema,e.table)}a(nw,"flush")});var tS=d((oB,eS)=>{var iw=Et(),ho=require("joi"),{hdb_schema_table:zd}=nr(),jd={schema:zd,table:zd},aw={date:ho.date().iso().required()},ow={timestamp:ho.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eS.exports=function(e,t){let r=t==="timestamp"?{...jd,...ow}:{...jd,...aw},s=ho.object(r);return iw.validateBySchema(e,s)}});var iS=d((_B,nS)=>{var _w=Et(),rS=require("joi"),{hdb_schema_table:sS}=nr(),cw=rS.object({schema:sS,table:sS,hash_values:rS.array().required()});nS.exports=function(e){return _w.validateBySchema(e,cw)}});var oS=d((cB,aS)=>{"use strict";var ai=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ai,"InsertObject");var oi=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(oi,"NoSQLSeachObject");var _i=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(_i,"DeleteResponseObject");aS.exports={InsertObject:ai,NoSQLSeachObject:oi,DeleteResponseObject:_i}});var dS=d((uB,lS)=>{"use strict";var cS=tS(),uw=iS(),ci=p(),_S=require("moment"),uS=w(),{promisify:Ew,callbackify:lw}=require("util"),Zt=A(),dw=So(),fo=Ew(dw.getTableSchema),Ro=mr(),{DeleteResponseObject:Sw}=oS(),{handleHDBError:Pt,hdb_errors:Tw}=J(),{HDB_ERROR_MSGS:ui,HTTP_STATUS_CODES:Bt}=Tw,hw="records successfully deleted",fw=lw(ES);lS.exports={delete:fw,deleteRecord:ES,deleteFilesBefore:Rw,deleteAuditLogsBefore:Aw};async function Rw(e){let t=cS(e,"date");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(!_S(e.date,_S.ISO_8601).isValid())throw Pt(new Error,ui.INVALID_DATE,Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_DATE,!0);let s=ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Pt(new Error,s,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,s,!0);try{let n=await Ro.deleteRecordsBefore(e);if(await fo(e.schema,e.table),uS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Rw,"deleteFilesBefore");async function Aw(e){let t=cS(e,"timestamp");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Pt(new Error,ui.INVALID_VALUE("Timestamp"),Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_VALUE("Timestamp"),!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{let s=await Ro.deleteAuditLogsBefore(e);return await fo(e.schema,e.table),uS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Aw,"deleteAuditLogsBefore");async function ES(e){let t=uw(e);if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{await fo(e.schema,e.table);let s=await Ro.deleteRecords(e);return ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hw}`),s}catch(s){if(s.message===Zt.SEARCH_NOT_FOUND_MESSAGE){let n=new Sw;return n.message=Zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(ES,"deleteRecord")});var Ei=d((EB,hS)=>{var mw=require("crypto"),SS=9;function Nw(e){let t=gw(SS),r=TS(e+t);return t+r}a(Nw,"createHash");function Ow(e,t){let r=e.substr(0,SS),s=r+TS(t+r);return e===s}a(Ow,"validateHash");function gw(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(gw,"generateSalt");function TS(e){return mw.createHash("md5").update(e).digest("hex")}a(TS,"md5");hS.exports={hash:Nw,validate:Ow}});var RS=d((lB,fS)=>{var Ao=Et(),Te={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 Iw(e){return Te.password.presence=!0,Te.username.presence=!0,Te.role.presence=!0,Te.active.presence=!0,Ao.validateObject(e,Te)}a(Iw,"addUserValidation");function pw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(pw,"alterUserValidation");function Cw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(Cw,"dropUserValidation");fS.exports={addUserValidation:Iw,alterUserValidation:pw,dropUserValidation:Cw}});var mS=d((dB,AS)=>{"use strict";var Ht=A(),Ss=class{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.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(Ss,"BaseLicense");var li=class extends Ss{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(li,"ExtendedLicense");AS.exports={BaseLicense:Ss,ExtendedLicense:li}});var Io=d((SB,CS)=>{"use strict";var pr=require("fs-extra"),NS=Ei(),OS=require("crypto"),bw=require("moment"),Lw=require("uuid").v4,he=w(),No=require("path"),ww=p(),De=A(),yw=mS().ExtendedLicense,Ir="invalid license key format",Uw="061183",Dw="mofi25",Mw="aes-256-cbc",Pw=16,Bw=32,gS=de();gS.initSync();var mo;CS.exports={validateLicense:IS,generateFingerPrint:Gw,licenseSearch:pS,getLicense:qw};function Oo(){return No.join(gS.getHdbBasePath(),De.LICENSE_KEY_DIR_NAME,De.LICENSE_FILE_NAME)}a(Oo,"getLicenseDirPath");function Hw(){let e=Oo();return No.join(e,De.LICENSE_FILE_NAME)}a(Hw,"getLicenseFilePath");function go(){let e=Oo();return No.join(e,De.REG_KEY_FILE_NAME)}a(go,"getFingerPrintFilePath");async function Gw(){let e=go();try{return await pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vw();throw he.error(`Error writing fingerprint file to ${e}`),he.error(t),new Error("There was an error generating the fingerprint")}}a(Gw,"generateFingerPrint");async function vw(){let e=Lw(),t=NS.hash(e),r=go();try{await pr.mkdirp(Oo()),await pr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw he.error(`Error writing fingerprint file to ${r}`),he.error(s),new Error("There was an error generating the fingerprint")}return t}a(vw,"writeFingerprint");function IS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:De.STORAGE_TYPES_ENUM.LMDB,api_call:De.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:De.RAM_ALLOCATION_ENUM.DEFAULT,version:De.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return he.error("empty license key passed to validate."),r;let s=go(),n=!1;try{n=pr.statSync(s)}catch(i){he.error(i)}if(n){let i;try{i=pr.readFileSync(s,"utf8")}catch{he.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Dw),_=o[1];_=Buffer.concat([Buffer.from(_)],Pw);let c=Buffer.concat([Buffer.from(i)],Bw),u=OS.createDecipheriv(Mw,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=Fw(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ir),he.error(Ir),new Error(Ir)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Ir),he.error(Ir),new Error(Ir)}else r.exp_date=E;r.exp_date<bw().valueOf()&&(r.valid_date=!1),NS.validate(o[1],`${Uw}${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||he.error("Invalid licence"),r}a(IS,"validateLicense");function Fw(e,t){try{let r=OS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{he.warn("Check old license failed")}}a(Fw,"checkOldLicense");function pS(){let e=new yw;e.api_call=0;let t=[];try{t=pr.readFileSync(Hw(),"utf-8").split(De.NEW_LINE)}catch(r){r.code==="ENOENT"?he.info("no license file found"):he.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(ww.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=IS(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){he.error("There was an error parsing the license string."),he.error(n),e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=De.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=De.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT),mo=e,e}a(pS,"licenseSearch");async function qw(){return mo||await pS(),mo}a(qw,"getLicense")});var hs=d((TB,qS)=>{"use strict";var yS="username is required",US="nothing to update, must supply active, role or password to update",DS="password cannot be an empty string",MS="If role is specified, it cannot be empty.",PS="active must be true or false";qS.exports={addUser:Qw,alterUser:Jw,dropUser:Xw,userInfo:zw,listUsers:Si,listUsersExternal:jw,setUsersToGlobal:Ts,findAndValidateUser:ry,getClusterUser:sy,USERNAME_REQUIRED:yS,ALTERUSER_NOTHING_TO_UPDATE:US,EMPTY_PASSWORD:DS,EMPTY_ROLE:MS,ACTIVE_BOOLEAN:PS};var BS=ii(),Vw=dS(),Co=Ei(),HS=RS(),GS=us(),bo=On(),te=p(),vS=require("validate.js"),L=w(),{promisify:Lo}=require("util"),wo=ls(),Xt=A(),bS=ut(),xw=vr(),yo=de(),Yw=Io(),kw=Kt(),{handleHDBError:nt,hdb_errors:Kw}=J(),{HTTP_STATUS_CODES:it,AUTHENTICATION_ERROR_MSGS:po,HDB_ERROR_MSGS:Cr}=Kw,{UserEventMsg:Uo}=Zr(),LS=require("lodash"),FS={username:!0,active:!0,role:!0,password:!0},wS=new Map,di=Lo(GS.searchByValue),$w=Lo(GS.searchByHash),Ww=Lo(Vw.delete);async function Qw(e){let t=vS.cleanAttributes(e,FS),r=HS.addUserValidation(t);if(r)throw nt(new Error,r.message,it.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 di(s)}catch(u){throw L.error("There was an error searching for a role in add user"),L.error(u),u}if(!n||n.length<1)throw nt(new Error,Cr.ROLE_NAME_NOT_FOUND(t.role),it.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nt(new Error,Cr.DUP_ROLES_FOUND(t.role),it.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await BS.insert(i)}catch(u){throw L.error("There was an error searching for a user."),L.error(u),u}L.debug(o);try{await Ts()}catch(u){throw L.error("Got an error setting users to global"),L.error(u),u}if(o.skipped_hashes.length===1)throw nt(new Error,Cr.USER_ALREADY_EXISTS(t.username),it.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ADD_USER,c,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${_.username} successfully added`}a(Qw,"addUser");async function Jw(e){let t=vS.cleanAttributes(e,FS);if(te.isEmptyOrZeroLength(t.username))throw new Error(yS);if(te.isEmptyOrZeroLength(t.password)&&te.isEmptyOrZeroLength(t.role)&&te.isEmptyOrZeroLength(t.active))throw new Error(US);if(!te.isEmpty(t.password)&&te.isEmptyOrZeroLength(t.password.trim()))throw new Error(DS);if(!te.isEmpty(t.active)&&!te.isBoolean(t.active))throw new Error(PS);let r=Zw(t.username);if(!te.isEmpty(t.password)&&!te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password)),t.role==="")throw new Error(MS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await di(o)}catch(c){throw L.error("Got an error searching for a role."),L.error(c),c}if(!_||_.length===0){let c=Cr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw L.error(c),nt(new Error,c,it.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Cr.ALTER_USER_DUP_ROLES(t.role);throw L.error(c),nt(new Error,c,it.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await BS.update(s)}catch(o){throw L.error("Error during update."),L.error(o),o}try{await Ts()}catch(o){throw L.error("Got an error setting users to global"),L.error(o),o}let i={user:null};return i.user=t,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ALTER_USER,i,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),n}a(Jw,"alterUser");function Zw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zw,"isClusterUser");async function Xw(e){try{let t=HS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(te.isEmpty(global.hdb_users.get(e.username)))throw nt(new Error,Cr.USER_NOT_EXIST(e.username),it.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Ww(r)}catch(i){throw L.error("Got an error deleting a user."),L.error(i),i}L.debug(s);try{await Ts()}catch(i){throw L.error("Got an error setting users to global."),L.error(i),i}let n={user:null};return n.user=e,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.DROP_USER,n,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Xw,"dropUser");async function zw(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 $w(r)}catch(n){throw L.error("Got an error searching for a role."),L.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw L.error(r),r}return t}a(zw,"userInfo");async function jw(){let e;try{e=await Si()}catch(t){throw L.error("Got an error listing users."),L.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(jw,"listUsersExternal");async function Si(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=LS.cloneDeep(await di(e))}catch(r){throw L.error("Got an error searching for roles."),L.error(r),r}if(!te.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=LS.cloneDeep(await di(s))}catch(o){throw L.error("Got an error searching for users."),L.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],ey(_.role),i.set(_.username,_)}return(await Yw.getLicense()).enterprise?i:ty(i)}}catch(e){throw L.error("got an error listing users"),L.error(e),te.errorizeMessage(e)}return null}a(Si,"listUsers");function ey(e){try{if(!e){L.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(kw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){L.error("Got an error trying to set system permissions."),L.error(t)}}a(ey,"appendSystemTablesToRole");function ty(e){try{if(L.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.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(i,n)):r.set(i,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?(L.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return L.error("error filtering users."),L.error(t),new Map}}a(ty,"nonEnterpriseFilter");async function Ts(){try{let e=await Si();global.hdb_users=e}catch(e){throw L.error(e),e}}a(Ts,"setUsersToGlobal");async function ry(e,t,r=!0){global.hdb_users||await Ts();let s=global.hdb_users.get(e);if(!s)throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nt(new Error,po.USER_INACTIVE,it.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(wS.get(t)===s.password)return n;if(Co.validate(s.password,t))wS.set(t,s.password);else throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ry,"findAndValidateUser");async function sy(){let e=await Si(),t=xw.getConfigFromFile(Xt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!te.isEmpty(r))return r.decrypt_hash=wo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+bS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+bS.SERVER_SUFFIX.ADMIN,r}a(sy,"getClusterUser")});var xS=d((hB,VS)=>{"use strict";var ny=mr();VS.exports={writeTransaction:iy};function iy(e,t,r){return ny.writeTransaction(e,t,r)}a(iy,"writeTransaction")});var Do=d((fB,ay)=>{ay.exports={name:"harperdb",version:"4.0.4",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.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && 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/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --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'","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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","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":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",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"},"newman-reporter-html":{newman:"5.2.3"}}}});var Yo=d((LB,_T)=>{"use strict";var at=de();at.initSync();var oy=require("fs-extra"),_y=require("semver"),Ns=require("path"),{monotonicFactory:cy}=require("ulidx"),uy=cy(),kS=require("util"),KS=require("child_process"),Ey=kS.promisify(KS.exec),ly=KS.spawn,V=ut(),k=A(),vo=p(),mt=w(),Ti=ls(),dy=xS(),fs=vr(),{encode:Bo,decode:$S}=require("msgpackr"),{isEmpty:zt}=vo,WS=hs(),RB=ss(),Sy=us(),AB=kS.promisify(Sy.searchByHash),{connect:Ty,StorageType:QS,RetentionPolicy:JS,AckPolicy:ZS,DeliverPolicy:Ho,NatsConnection:mB,JetStreamManager:NB,JetStreamClient:OB,StringCodec:gB,JSONCodec:hy,createInbox:Fo,StreamSource:IB,headers:fy,toJsMsg:Ry,nuid:pB,JetStreamOptions:CB,ErrorCode:YS,nanos:bB}=require("nats"),{PACKAGE_ROOT:Ay}=A(),my=Do(),XS=hy(),Ny="clustering",Oy=my.engines[V.NATS_SERVER_NAME],gy=Ns.join(Ay,"dependencies"),Go=Ns.join(gy,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),Mo,Po,Rs,As,ms,Xe;_T.exports={runCommand:zS,checkNATSServerInstalled:Iy,createConnection:qo,getConnection:hi,getJetStreamManager:br,getJetStream:jS,getNATSReferences:Fe,getServerList:Cy,createLocalStream:Vo,listStreams:eT,deleteLocalStream:by,getServerConfig:Os,listRemoteStreams:Ly,viewStream:wy,publishToStream:yy,createWorkQueueStream:Uy,addSourceToWorkStream:tT,request:Dy,removeSourceFromWorkStream:sT,reloadNATS:xo,reloadNATSHub:My,reloadNATSLeaf:Py,extractServerName:rT,requestErrorHandler:By,updateWorkStream:Hy,createLocalTableStream:iT,createTableStreams:Gy,purgeTableStream:aT,purgeSchemaTableStreams:vy,getStreamInfo:Fy,updateNodeNameLocalStreams:qy,closeConnection:py};async function zS(e,t=void 0){let{stdout:r,stderr:s}=await Ey(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var Sh=Object.defineProperty;var a=(e,t)=>Sh(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var m=d((AD,I_)=>{"use strict";var ue=require("path"),Th=require("fs");function hh(){let e=__dirname;for(;!Th.existsSync(ue.join(e,"package.json"));){let t=ue.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(hh,"getHDBPackageRoot");var Ve=hh(),d_="js",Dr=d_,fh="harperdb-config.yaml",Rh="defaultConfig.yaml",mh="hdb",S_=`hdbServer.${Dr}`,T_=`customFunctionsServer.${Dr}`,h_=`hdbIpcServer.${Dr}`,Ah=`restartHdb.${Dr}`,$i="HarperDB",bs="Custom Functions",Ls="Clustering Hub",ys="Clustering Leaf",Ki="Clustering Ingest Service",Wi="Clustering Reply Service",Nh="foreground.pid",ki={HDB:$i,IPC:"IPC",CLUSTERING_HUB:Ls,CLUSTERING_LEAF:ys,CLUSTERING_INGEST_SERVICE:Ki,CLUSTERING_REPLY_SERVICE:Wi,CUSTOM_FUNCTIONS:bs,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},Oh={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},gh={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},ph={harperdb:$i,ipc:"IPC","clustering hub":Ls,"clustering leaf":ys,"clustering ingest service":Ki,"clustering reply service":Wi,"custom functions":bs,custom_functions:bs,"pm2-logrotate":ki.PM2_LOGROTATE,logrotate:ki.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Ih={CLUSTERING_HUB_PROC_DESCRIPTOR:Ls,CLUSTERING_LEAF_PROC_DESCRIPTOR:ys,CLUSTERING_INGEST_PROC_DESCRIPTOR:Ki,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Wi},Cs={HDB:ue.join(Ve,"server/harperdb"),IPC:ue.join(Ve,"server/ipc"),CUSTOM_FUNCTIONS:ue.join(Ve,"server/customFunctions"),CLUSTERING_HUB:ue.join(Ve,"server/nats"),CLUSTERING_LEAF:ue.join(Ve,"server/nats")},Ch={HDB:ue.join(Cs.HDB,S_),IPC:ue.join(Cs.IPC,h_),CUSTOM_FUNCTIONS:ue.join(Cs.CUSTOM_FUNCTIONS,T_)},bh={HDB:ue.join(Ve,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:ue.join(Ve,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:ue.join(Ve,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ue.join(Ve,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ue.resolve(Ve,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Lh={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},f_="support@harperdb.io",yh="customer-success@harperdb.io",R_=1,wh=4141,m_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Uh="https://www.harperdb.io/product",Dh=`For support, please submit a request at ${m_} or contact ${f_}`,A_=`For license support, please contact ${yh}`,Mh="None of the specified records were found.",Ph="hash attribute not found",Hh=`Your current license only supports ${R_} role. ${A_}`,Bh="Your current license only supports 3 connections to a node.",vh="127.0.0.1",Gh=1,Fh=/^\.$/,qh=/^\.\.$/,xh="U+002E",Vh=/\//g,Yh="U+002F",kh=/U\+002F/g,$h=/^U\+002E$/,Kh=/^U\+002EU\+002E$/,Wh="d",Qh=999999,Jh="*",Xh="--max-old-space-size=",Zh="system",zh="__hdb_hash",jh=".harperdb",ef=".hdb",tf="keys",rf="hdb_boot_properties.file",sf=".updateConfig.json",nf="SIGTSTP",af=24,of=6e4,_f=448,cf="blob",uf="trash",Ef="schema",lf="transactions",df=".count",Sf="id",Tf="install_log.log",hf="run_log.log",ff="PROCESS_NAME",Rf={SETTINGS_PATH_KEY:"settings_path"},N_=require("lodash"),mf={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"},Af={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},Nf={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Of={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"},gf={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"},be="hdb_internal:",pf={CREATE_SCHEMA:be+"create_schema",CREATE_TABLE:be+"create_table",CREATE_ATTRIBUTE:be+"create_attribute",ADD_USER:be+"add_user",ALTER_USER:be+"alter_user",DROP_USER:be+"drop_user",HDB_NODES:be+"hdb_nodes",HDB_USERS:be+"hdb_users",HDB_WORKERS:be+"hdb_workers",CATCHUP:be+"catchup",SCHEMA_CATCHUP:be+"schema_catchup",WORKER_ROOM:be+"cluster_workers"},If={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"},Cf="060493.ks",bf=".license",Lf={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},f={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",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"},yf={CSV:".csv",JSON:".json"},wf={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Uf={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},At={};At[f.CREATE_SCHEMA]=f.CREATE_SCHEMA;At[f.CREATE_TABLE]=f.CREATE_TABLE;At[f.CREATE_ATTRIBUTE]=f.CREATE_ATTRIBUTE;At[f.INSERT]=f.INSERT;At[f.UPDATE]=f.UPDATE;At[f.UPSERT]=f.UPSERT;At[f.DELETE]=f.DELETE;var B=Object.create(null);B[f.DESCRIBE_ALL]=f.DESCRIBE_ALL;B[f.DESCRIBE_TABLE]=f.DESCRIBE_TABLE;B[f.DESCRIBE_SCHEMA]=f.DESCRIBE_SCHEMA;B[f.READ_LOG]=f.READ_LOG;B[f.ADD_NODE]=f.ADD_NODE;B[f.LIST_USERS]=f.LIST_USERS;B[f.LIST_ROLES]=f.LIST_ROLES;B[f.USER_INFO]=f.USER_INFO;B[f.SQL]=f.SQL;B[f.GET_JOB]=f.GET_JOB;B[f.SEARCH_JOBS_BY_START_DATE]=f.SEARCH_JOBS_BY_START_DATE;B[f.DELETE_FILES_BEFORE]=f.DELETE_FILES_BEFORE;B[f.EXPORT_LOCAL]=f.EXPORT_LOCAL;B[f.EXPORT_TO_S3]=f.EXPORT_TO_S3;B[f.CLUSTER_STATUS]=f.CLUSTER_STATUS;B[f.REMOVE_NODE]=f.REMOVE_NODE;B[f.RESTART]=f.RESTART;B[f.CUSTOM_FUNCTIONS_STATUS]=f.CUSTOM_FUNCTIONS_STATUS;B[f.GET_CUSTOM_FUNCTIONS]=f.GET_CUSTOM_FUNCTIONS;B[f.GET_CUSTOM_FUNCTION]=f.GET_CUSTOM_FUNCTION;B[f.SET_CUSTOM_FUNCTION]=f.SET_CUSTOM_FUNCTION;B[f.DROP_CUSTOM_FUNCTION]=f.DROP_CUSTOM_FUNCTION;B[f.ADD_CUSTOM_FUNCTION_PROJECT]=f.ADD_CUSTOM_FUNCTION_PROJECT;B[f.DROP_CUSTOM_FUNCTION_PROJECT]=f.DROP_CUSTOM_FUNCTION_PROJECT;B[f.PACKAGE_CUSTOM_FUNCTION_PROJECT]=f.PACKAGE_CUSTOM_FUNCTION_PROJECT;B[f.DEPLOY_CUSTOM_FUNCTION_PROJECT]=f.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Df={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},Mf={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},O_={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",IPC_SERVER_PORT:"IPC_SERVER_PORT",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"},Pf=N_.invert(O_),T={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_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",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",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",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",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"},Hf={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:T.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},Bf={csv_file_load:"csv_file_load",csv_data_load:f.CSV_DATA_LOAD,csv_url_load:f.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"},vf={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"},Gf={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Ff={FILE_SYSTEM:"fs",LMDB:"lmdb"},qf={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},xf={DEVELOPMENT:8192,DEFAULT:512},Vf={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"},Yf={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"},kf={ENOENT:"ENOENT",EACCES:"EACCES"},g_={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$f="__clustering__",Kf=Object.values(g_),Wf=15984864e5,p_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qf=N_.invert(p_),Jf={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"},Xf=111,Zf=`\r
|
|
2
|
+
`,zf={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},jf=["*","%"],eR="unauthorized_access",tR="func_val",rR={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},sR={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nR="hdb_ipc_server",iR="hdb_ipc_client_",aR={RESTART:"restart",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request"},oR={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},_R={STOPPED:"stopped",ONLINE:"online"},cR="3.x.x";I_.exports={LOCAL_HARPERDB_OPERATIONS:B,HDB_SUPPORT_ADDRESS:f_,HDB_SUPPORT_URL:m_,HDB_PRICING_URL:Uh,SUPPORT_HELP_MSG:Dh,LICENSE_HELP_MSG:A_,HDB_PROC_NAME:S_,HDB_PROC_DESCRIPTOR:$i,CLUSTERING_LEAF_PROC_DESCRIPTOR:ys,CLUSTERING_HUB_PROC_DESCRIPTOR:Ls,SYSTEM_SCHEMA_NAME:Zh,HASH_FOLDER_NAME:zh,HDB_HOME_DIR_NAME:jh,UPDATE_FILE_NAME:sf,LICENSE_KEY_DIR_NAME:tf,BOOT_PROPS_FILE_NAME:rf,JOB_TYPE_ENUM:Bf,JOB_STATUS_ENUM:Lf,SYSTEM_TABLE_NAMES:Of,SYSTEM_TABLE_HASH_ATTRIBUTES:gf,OPERATIONS_ENUM:f,VALID_S3_FILE_TYPES:yf,S3_BUCKET_AUTH_KEYS:wf,VALID_SQL_OPS_ENUM:Uf,GEO_CONVERSION_ENUM:Mf,HDB_SETTINGS_NAMES:O_,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Pf,SERVICE_ACTIONS_ENUM:Df,CLUSTER_MESSAGE_TYPE_ENUM:vf,CLUSTER_CONNECTION_DIRECTION_ENUM:Gf,CLUSTER_EVENTS_DEFS_ENUM:Vf,PERIOD_REGEX:Fh,DOUBLE_PERIOD_REGEX:qh,UNICODE_PERIOD:xh,FORWARD_SLASH_REGEX:Vh,UNICODE_FORWARD_SLASH:Yh,ESCAPED_FORWARD_SLASH_REGEX:kh,ESCAPED_PERIOD_REGEX:$h,ESCAPED_DOUBLE_PERIOD_REGEX:Kh,REG_KEY_FILE_NAME:Cf,RESTART_TIMEOUT_MS:of,HDB_FILE_PERMISSIONS:_f,SCHEMA_DIR_NAME:Ef,TRANSACTIONS_DIR_NAME:lf,LIMIT_COUNT_NAME:df,ID_ATTRIBUTE_STRING:Sf,INSERT_MODULE_ENUM:Af,UPGRADE_JSON_FIELD_NAMES_ENUM:Nf,RESTART_CODE:nf,RESTART_CODE_NUM:af,CLUSTER_OPERATIONS:At,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:If,HDB_INTERNAL_SC_CHANNEL_PREFIX:be,INTERNAL_SC_CHANNELS:pf,CLUSTERING_MESSAGE_TYPES:Jf,HDB_FILE_SUFFIX:ef,BLOB_FOLDER_NAME:cf,HDB_TRASH_DIR:uf,ORIGINATOR_SET_VALUE:Xf,LICENSE_VALUES:qf,RAM_ALLOCATION_ENUM:xf,STORAGE_TYPES_ENUM:Ff,TIME_STAMP_NAMES_ENUM:g_,TIME_STAMP_NAMES:Kf,PERMS_UPDATE_RELEASE_TIMESTAMP:Wf,SEARCH_NOT_FOUND_MESSAGE:Mh,SEARCH_ATTRIBUTE_NOT_FOUND:Ph,LICENSE_ROLE_DENIED_RESPONSE:Hh,LICENSE_MAX_CONNS_REACHED:Bh,BASIC_LICENSE_MAX_NON_CU_ROLES:R_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:wh,VALUE_SEARCH_COMPARATORS:p_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Qf,LICENSE_FILE_NAME:bf,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Yf,NEW_LINE:Zf,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Gh,MOMENT_DAYS_TAG:Wh,API_TURNOVER_SEC:Qh,LOOPBACK:vh,CODE_EXTENSION:Dr,WILDCARD_SEARCH_VALUE:Jh,NODE_ERROR_CODES:kf,JAVASCRIPT_EXTENSION:d_,PERMS_CRUD_ENUM:zf,UNAUTHORIZED_PERMISSION_NAME:eR,SEARCH_WILDCARDS:jf,FUNC_VAL:tR,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:rR,JWT_ENUM:sR,CLUSTERING_FLAG:$f,RUN_LOG:hf,INSTALL_LOG:Tf,IPC_SERVER_MODULE:h_,HDB_IPC_SERVER:nR,IPC_EVENT_TYPES:aR,HDB_IPC_CLIENT_PREFIX:iR,CUSTOM_FUNCTION_PROC_NAME:T_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:bs,SERVICES:oR,MEM_SETTING_KEY:Xh,HDB_RESTART_SCRIPT:Ah,PROCESS_DESCRIPTORS:ki,SERVICE_SERVERS:Ch,SERVICE_SERVERS_CWD:Cs,PROCESS_DESCRIPTORS_VALIDATE:ph,LAUNCH_SERVICE_SCRIPTS:bh,LOG_LEVELS:gh,PROCESS_NAME_ENV_PROP:ff,PROCESS_LOG_NAMES:Oh,PM2_PROCESS_STATUSES:_R,CONFIG_PARAM_MAP:Hf,CONFIG_PARAMS:T,HDB_CONFIG_FILE:fh,HDB_DEFAULT_CONFIG_FILE:Rh,ROLE_TYPES_ENUM:Lh,BOOT_PROP_PARAMS:Rf,INSTALL_PROMPTS:mf,HDB_ROOT_DIR_NAME:mh,CLUSTERING_PROCESSES:Ih,FOREGROUND_PID_FILE:Nh,PACKAGE_ROOT:Ve,PRE_4_0_0_VERSION:cR}});var y_=d((ND,L_)=>{"use strict";var C_=require("minimist");L_.exports=uR;function uR(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=b_(process.env),s=b_(C_(process.argv))):(r=process.env,s=C_(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(uR,"assignCMDENVVariables");function b_(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(b_,"objKeysToLowerCase")});var y=d((OD,B_)=>{"use strict";var Ht=require("fs-extra"),Bt=require("path"),U_=require("yaml"),D_=require("properties-reader"),Z=m(),ER=y_(),lR=require("os"),{PACKAGE_ROOT:Xi}=m(),me={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ws=Bt.join(Xi,"logs"),Nt=process.env.pm_id===void 0,dR=Bt.join(Xi,"config/yaml/",Z.HDB_DEFAULT_CONFIG_FILE),Zi=process.env.PROCESS_NAME===void 0?Z.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,zt,Xe,at,Re,Qi,jt;jt===void 0&&M_();B_.exports={createLogFile:SR,notify:fR,fatal:RR,error:Ji,warn:mR,info:TR,debug:hR,trace:H_,setLogLevel:NR,log_level:Re};function M_(){try{if(jt===void 0){let e=AR();jt=D_(e),{level:Re,config_log_path:Qi,to_file:Xe,to_stream:at}=OR(jt.get("settings_path"))}}catch(e){if(jt=void 0,e.code===Z.NODE_ERROR_CODES.ENOENT){let t=ER(Object.keys(Z.CONFIG_PARAM_MAP),!0);for(let i in t){let o=Z.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===Z.CONFIG_PARAMS.LOGGING_LEVEL){Re=_;continue}if(o===Z.CONFIG_PARAMS.LOGGING_STDSTREAMS){at=_;continue}o===Z.CONFIG_PARAMS.LOGGING_FILE&&(Xe=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=gR();Xe=Xe===void 0?s:Xe,Xe=w_(Xe),at=at===void 0?n:at,at=w_(at),Re=Re===void 0?r:Re,Qi=ws;return}throw Ji("Error initializing log settings"),Ji(e),e}}a(M_,"initLogSettings");function SR(e,t){if(!Nt){H_("createLogFile should only be used if the process is not being managed by pm2");return}jt===void 0&&M_(),Zi=t;let r;e===Z.PROCESS_LOG_NAMES.INSTALL?r=ws:r=Qi,Xe&&(zt=Bt.join(r,e),Ht.ensureFileSync(zt))}a(SR,"createLogFile");function vt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${Zi}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
|
+
`}a(vt,"createLogRecord");function P_(e){zt===void 0&&(Zi=Z.PROCESS_DESCRIPTORS.INSTALL,Ht.ensureDirSync(ws),zt=Bt.join(ws,Z.PROCESS_LOG_NAMES.INSTALL),Ht.ensureFileSync(zt)),Ht.appendFileSync(zt,e)}a(P_,"writeToLogFile");function Us(e){Xe&&P_(e),at&&process.stdout.write(e)}a(Us,"nonPm2LogStdOut");function zi(e){Xe&&P_(e),at&&process.stderr.write(e)}a(zi,"nonPm2LogStdErr");function TR(...e){if(me[Re]<=me.info){let t=vt("info",e);if(Nt){Us(t);return}process.stdout.write(t)}}a(TR,"info");function H_(...e){if(me[Re]<=me.trace){let t=vt("trace",e);if(Nt){Us(t);return}process.stdout.write(t)}}a(H_,"trace");function Ji(...e){if(me[Re]<=me.error){let t=vt("error",e);if(Nt){zi(t);return}process.stderr.write(t)}}a(Ji,"error");function hR(...e){if(me[Re]<=me.debug){let t=vt("debug",e);if(Nt){Us(t);return}process.stdout.write(t)}}a(hR,"debug");function fR(...e){if(me[Re]<=me.notify){let t=vt("notify",e);if(Nt){Us(t);return}process.stdout.write(t)}}a(fR,"notify");function RR(...e){if(me[Re]<=me.fatal){let t=vt("fatal",e);if(Nt){zi(t);return}process.stderr.write(t)}}a(RR,"fatal");function mR(...e){if(me[Re]<=me.warn){let t=vt("warn",e);if(Nt){zi(t);return}process.stderr.write(t)}}a(mR,"warn");function AR(){let e;try{e=lR.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Bt.join(e,Z.HDB_HOME_DIR_NAME,Z.BOOT_PROPS_FILE_NAME);return Ht.existsSync(t)||(t=Bt.join(Xi,"utility/hdb_boot_properties.file")),t}a(AR,"getPropsFilePath");function NR(e){Re=e}a(NR,"setLogLevel");function w_(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(w_,"autoCastBoolean");function OR(e){try{if(e.includes("config/settings.js")){let o=D_(e);return{level:o.get(Z.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Bt.dirname(o.get(Z.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Z.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Z.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=U_.parseDocument(Ht.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===Z.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(OR,"getLogConfig");function gR(){try{let e=U_.parseDocument(Ht.readFileSync(dR,"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(gR,"getDefaultConfig")});var G_=d((gD,v_)=>{"use strict";var pR=require("util"),IR=require("path"),CR=require("child_process"),bR=pR.promisify(CR.execFile),LR=1e3*1e3*10;v_.exports={findPs:yR};async function yR(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await bR("ps",["wwxo",`pid,${r}`],{maxBuffer:LR});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:IR.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(yR,"findPs")});var Ee=d((pD,q_)=>{"use strict";var wR="__dbis__",UR="__environment_name__",DR="__dbi_defintion__",MR={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"},PR=["__createdtime__","__updatedtime__"],HR="\uFFFF",F_={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},BR=Object.values(F_);q_.exports={INTERNAL_DBIS_NAME:wR,DBI_DEFINITION_NAME:DR,SEARCH_TYPES:MR,TIMESTAMP_NAMES:PR,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:UR,TRANSACTIONS_DBI_NAMES_ENUM:F_,TRANSACTIONS_DBIS:BR,OVERFLOW_MARKER:HR}});var De=d((ID,J_)=>{"use strict";var x_=m(),V_=Ee(),Y_={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},k_=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),$_={500:k_("There was an error processing your request."),400:"Invalid request"},vR=$_[Y_.INTERNAL_SERVER_ERROR],GR={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.`},FR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},qR={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"},xR={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_ARRAY:"ids must be an array",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 ${V_.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${V_.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"},VR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${x_.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 ${x_.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"},K_={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"},YR={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."},kR={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`},$R={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"},KR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},WR={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`},W_={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.`},Q_={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},QR={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."},JR={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},XR={...K_,...qR,...GR,...YR,...kR,...$R,...KR,...WR,...VR,...W_,...Q_,...QR,...JR,...FR};J_.exports={CHECK_LOGS_WRAPPER:k_,HDB_ERROR_MSGS:XR,DEFAULT_ERROR_MSGS:$_,DEFAULT_ERROR_RESP:vR,HTTP_STATUS_CODES:Y_,LMDB_ERRORS_ENUM:xR,AUTHENTICATION_ERROR_MSGS:K_,VALIDATION_ERROR_MSGS:W_,IPC_ERRORS:Q_}});var J=d((CD,z_)=>{"use strict";var er=De(),ZR=y(),zR=m(),Mr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,X_),this.http_resp_code=s||er.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(er.DEFAULT_ERROR_MSGS[s]?er.DEFAULT_ERROR_MSGS[s]:er.DEFAULT_ERROR_MSGS[er.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&ZR[n](i)}};a(Mr,"HdbError");function X_(e,t,r,s=zR.LOG_LEVELS.ERROR,n=null,i=!1){if(Z_(e))return e;let o=new Mr(e,t,r,s,n);return i&&delete o.stack,o}a(X_,"handleHDBError");function Z_(e){return e.__proto__.constructor.name===Mr.name}a(Z_,"isHDBError");z_.exports={isHDBError:Z_,handleHDBError:X_,hdb_errors:er}});var I=d((LD,dc)=>{"use strict";var Gt=require("path"),jR=require("fs-extra"),ee=y(),j_=require("fs-extra"),em=require("truncate-utf8-bytes"),Pr=require("os"),tm=require("net"),rm=require("recursive-iterator"),se=m(),nc=G_(),ec=require("papaparse"),Ds=require("moment"),{inspect:sm}=require("util"),tc=require("is-number"),bD=require("lodash"),{hdb_errors:Ms}=J(),ic=require("util").promisify(setTimeout),nm=100,im=5,am="",om=4,rc=255,sc={true:!0,false:!1,undefined:null,null:null,NaN:NaN};dc.exports={isEmpty:Le,isEmptyOrZeroLength:Ze,arrayHasEmptyValues:um,arrayHasEmptyOrZeroLengthValues:Em,buildFolderPath:lm,isBoolean:ac,errorizeMessage:_m,stripFileExtension:Sm,autoCast:Tm,autoCastJSONDeep:ji,removeDir:fm,compareVersions:Rm,isCompatibleDataVersion:mm,escapeRawValue:_c,unescapeValue:Am,stringifyProps:Nm,valueConverter:Om,timeoutPromise:pm,isClusterOperation:Cm,getClusterUser:ym,sendTransactionToSocketCluster:bm,checkGlobalSchemaTable:Lm,getHomeDir:cc,getPropsFilePath:gm,promisifyPapaParse:wm,removeBOM:uc,createEventPromise:Um,checkProcessRunning:Dm,checkSchemaTableExist:Mm,checkSchemaExists:Ec,checkTableExists:lc,getStartOfTomorrowInSeconds:Pm,getLimitKey:Hm,isObject:dm,isNotEmptyAndHasValue:cm,autoCasterIsNumberCheck:oc,backtickASTSchemaItems:Bm,isPortTaken:Im,stopProcess:vm,createForkArgs:Gm,autoCastBoolean:Fm,async_set_timeout:ic,getTableHashAttribute:qm,doesSchemaExist:xm,doesTableExist:Vm,stringifyObj:Ym,ms_to_time:km,changeExtension:$m,PACKAGE_ROOT:se.PACKAGE_ROOT};function _m(e){return e instanceof Error?e:new Error(e)}a(_m,"errorizeMessage");function Le(e){return e==null}a(Le,"isEmpty");function cm(e){return!Le(e)&&(e||e===0||e===""||ac(e))}a(cm,"isNotEmptyAndHasValue");function Ze(e){return Le(e)||e.length===0||e.size===0}a(Ze,"isEmptyOrZeroLength");function um(e){if(Le(e))return!0;for(let t=0;t<e.length;t++)if(Le(e[t]))return!0;return!1}a(um,"arrayHasEmptyValues");function Em(e){if(Ze(e))return!0;for(let t=0;t<e.length;t++)if(Ze(e[t]))return!0;return!1}a(Em,"arrayHasEmptyOrZeroLengthValues");function lm(...e){try{return e.join(Gt.sep)}catch{console.error(e)}}a(lm,"buildFolderPath");function ac(e){return Le(e)?!1:e===!0||e===!1}a(ac,"isBoolean");function dm(e){return Le(e)?!1:typeof e=="object"}a(dm,"isObject");function Sm(e){return Ze(e)?am:e.slice(0,-om)}a(Sm,"stripFileExtension");function Tm(e){return Le(e)||e===""||typeof e!="string"?e:sc[e]!==void 0?sc[e]:oc(e)===!0?Number(e):e}a(Tm,"autoCast");function hm(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hm,"autoCastJSON");function ji(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=ji(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ji(r);s!==r&&(e[t]=s)}return e}else return hm(e)}a(ji,"autoCastJSONDeep");function oc(e){if(e.startsWith("0.")&&tc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tc(e))}a(oc,"autoCasterIsNumberCheck");async function fm(e){if(Ze(e))throw new Error(`Directory path: ${e} does not exist`);try{await j_.emptyDir(e),await j_.remove(e)}catch(t){throw ee.error(`Error removing files in ${e} -- ${t}`),t}}a(fm,"removeDir");function Rm(e,t){if(Ze(e)){ee.info("Invalid current version sent as parameter.");return}if(Ze(t)){ee.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("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(Rm,"compareVersions");function mm(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(mm,"isCompatibleDataVersion");function _c(e){if(Le(e))return e;let t=String(e);return t==="."?se.UNICODE_PERIOD:t===".."?se.UNICODE_PERIOD+se.UNICODE_PERIOD:t.replace(se.FORWARD_SLASH_REGEX,se.UNICODE_FORWARD_SLASH)}a(_c,"escapeRawValue");function Am(e){if(Le(e))return e;let t=String(e);return t===se.UNICODE_PERIOD?".":t===se.UNICODE_PERIOD+se.UNICODE_PERIOD?"..":String(e).replace(se.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Am,"unescapeValue");function Nm(e,t){if(Le(e))return ee.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+Pr.EOL}!Ze(s)&&s[0]===";"?r+=" "+s+n+Pr.EOL:Ze(s)||(r+=s+"="+n+Pr.EOL)}catch{ee.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Nm,"stringifyProps");function Om(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){ee.error(n),t=e}let r=String(_c(t)),s=Buffer.byteLength(r)>rc?em(r,rc)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(Om,"valueConverter");function cc(){let e;try{e=Pr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(cc,"getHomeDir");function gm(){let e=Gt.join(cc(),se.HDB_HOME_DIR_NAME,se.BOOT_PROPS_FILE_NAME);return jR.existsSync(e)||(e=Gt.join(__dirname,"../","hdb_boot_properties.file")),e}a(gm,"getPropsFilePath");function pm(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(pm,"timeoutPromise");async function Im(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=tm.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Im,"isPortTaken");function Cm(e){try{return se.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ee.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Cm,"isClusterOperation");function bm(e,t,r){if(global.hdb_socket_client!==void 0){ee.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=se.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(bm,"sendTransactionToSocketCluster");function Lm(e,t){if(!global.hdb_schema[e])return Ms.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ms.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Lm,"checkGlobalSchemaTable");function ym(e,t){if(Le(t)){ee.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Le(e)||Ze(e)){ee.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){ee.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ee.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(ym,"getClusterUser");function wm(){ec.parsePromise=function(e,t){return new Promise(function(r,s){ec.parse(e,{header:!0,transformHeader:uc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(wm,"promisifyPapaParse");function uc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(uc,"removeBOM");function Um(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ee.info(`Got cluster status event response: ${sm(n)}`);try{i.cancel()}catch{ee.error("Error trying to cancel timeout.")}s(n)})})}a(Um,"createEventPromise");async function Dm(e){let t=!0,r=0;do await ic(nm*r++),(await nc.findPs(e)).length>0&&(t=!1);while(t&&r<im);if(t)throw new Error(`process ${e} was not started`)}a(Dm,"checkProcessRunning");function Mm(e,t){let r=Ec(e);if(r)return r;let s=lc(e,t);if(s)return s}a(Mm,"checkSchemaTableExist");function Ec(e){if(!global.hdb_schema[e])return Ms.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ec,"checkSchemaExists");function lc(e,t){if(!global.hdb_schema[e][t])return Ms.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lc,"checkTableExists");function Pm(){let e=Ds().utc().add(1,se.MOMENT_DAYS_TAG).startOf(se.MOMENT_DAYS_TAG).unix(),t=Ds().utc().unix();return e-t}a(Pm,"getStartOfTomorrowInSeconds");function Hm(){return Ds().utc().format("DD-MM-YYYY")}a(Hm,"getLimitKey");function Bm(e){try{let t=new rm(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){ee.error("Got an error back ticking items."),ee.error(t)}}a(Bm,"backtickASTSchemaItems");async function vm(e){let t=Pr.userInfo();(await nc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ee.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(vm,"stopProcess");function Gm(e){return[e]}a(Gm,"createForkArgs");function Fm(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Fm,"autoCastBoolean");function qm(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(qm,"getTableHashAttribute");function xm(e){return global?.hdb_schema?.[e]!==void 0}a(xm,"doesSchemaExist");function Vm(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(Vm,"doesTableExist");function Ym(e){try{return JSON.stringify(e)}catch{return e}}a(Ym,"stringifyObj");function km(e){let t=Ds.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(km,"ms_to_time");function $m(e,t){let r=Gt.basename(e,Gt.extname(e));return Gt.join(Gt.dirname(e),r+t)}a($m,"changeExtension")});var ot=d((wD,Tc)=>{"use strict";var{platform:yD}=require("os"),Km="nats-server.zip",ea="nats-server",Wm=process.platform==="win32"?`${ea}.exe`:ea,ta="HDB",Qm=/^[^\s.,*>]+$/,Sc="__request__",Jm=a(e=>`${e}.${Sc}`,"REQUEST_SUBJECT"),Xm={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Zm={HUB:"hub.pid",LEAF:"leaf.pid"},zm={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},jm={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ta,deliver_subject:"__HDB__.WORKQUEUE"},eA={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ta,deliver_subject:"HDB.SCHEMAQUEUE"},tA={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ta,deliver_subject:"HDB.USERQUEUE"},rA={SUCCESS:"success",ERROR:"error"},sA={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nA={TXN:"txn",MSGID:"msgid"};Tc.exports={NATS_SERVER_ZIP:Km,NATS_SERVER_NAME:ea,NATS_BINARY_NAME:Wm,PID_FILES:Zm,NATS_CONFIG_FILES:Xm,SERVER_SUFFIX:zm,WORK_QUEUE_CONSUMER_NAMES:jm,SCHEMA_QUEUE_CONSUMER_NAMES:eA,USER_QUEUE_CONSUMER_NAMES:tA,NATS_TERM_CONSTRAINTS_RX:Qm,REQUEST_SUFFIX:Sc,UPDATE_REMOTE_RESPONSE_STATUSES:rA,CLUSTER_STATUS_STATUSES:sA,REQUEST_SUBJECT:Jm,SUBJECT_PREFIXES:nA}});var fc=d((UD,hc)=>{"use strict";var iA=ot(),Ps=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,o===null&&(o=void 0),this.server_name=r+iA.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:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(Ps,"HubConfigObject");hc.exports=Ps});var Ac=d((DD,mc)=>{"use strict";var Rc=ot(),Hs=class{constructor(t,r,s,n,i,o,_,c,u,E,l){this.port=t,l===null&&(l=void 0),this.server_name=r+Rc.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Rc.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(Hs,"LeafConfigObject");mc.exports=Hs});var Oc=d((MD,Nc)=>{"use strict";var Bs=class{constructor(t,r){this.user=t,this.password=r}};a(Bs,"HdbUserObject");Nc.exports=Bs});var pc=d((PD,gc)=>{"use strict";var aA=ot(),vs=class{constructor(t,r){this.user=t+aA.SERVER_SUFFIX.ADMIN,this.password=r}};a(vs,"SysUserObject");gc.exports=vs});var tr=d((HD,bc)=>{"use strict";var Cc=I(),Ic=m(),Fs=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ra=require("joi"),Gs={schema_format:{pattern:Fs,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},oA=ra.alternatives(ra.string().min(1).max(Gs.schema_length.maximum).pattern(Fs).messages({"string.pattern.base":"{:#label} "+Gs.schema_format.message}),ra.number()).required();function _A(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Gs.schema_length.maximum?`'${e}' maximum of 250 characters`:Fs.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(_A,"checkValidTable");function cA(e,t){return Cc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(cA,"validateSchemaExists");function uA(e,t){let r=t.state.ancestors[0].schema;return Cc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(uA,"validateTableExists");function EA(e,t){return e.toLowerCase()===Ic.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Ic.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(EA,"validateSchemaName");bc.exports={common_validators:Gs,schema_regex:Fs,hdb_schema_table:oA,validateSchemaExists:cA,validateTableExists:uA,validateSchemaName:EA,checkValidTable:_A}});var _t=d((BD,Lc)=>{"use strict";var Ae=require("validate.js");Ae.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ae.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ae.validators.type.checks={Object:function(e){return Ae.isObject(e)&&!Ae.isArray(e)},Array:Ae.isArray,Integer:Ae.isInteger,Number:Ae.isNumber,String:Ae.isString,Date:Ae.isDate,Boolean:function(e){return typeof e=="boolean"}};Ae.validators.hasValidFileExt=function(e,t){return!Ae.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Lc.exports={validateObject:lA,validateObjectAsync:dA,validateBySchema:SA};function lA(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ae(e,t,{format:"flat"});return r?new Error(r):null}a(lA,"validateObject");async function dA(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ae.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(dA,"validateObjectAsync");function SA(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(SA,"validateBySchema")});var na=d((vD,wc)=>{var{hdb_schema_table:yc}=tr(),TA=_t(),sa=require("joi"),hA={undefined:"undefined",null:"null"},fA=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||hA[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"),RA=sa.object({schema:yc,table:yc,records:sa.array().items(sa.object().custom(fA)).required()});wc.exports=function(e){return TA.validateBySchema(e,RA)}});var ia=d((GD,Uc)=>{"use strict";var qs=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(qs,"BridgeMethods");Uc.exports=qs});var Ft=d((xD,Hc)=>{"use strict";var Dc=De().LMDB_ERRORS_ENUM,FD=require("lmdb"),mA=Ee(),qD=require("buffer").Buffer,AA=require("microtime"),{OVERFLOW_MARKER:Mc,MAX_SEARCH_KEY_LENGTH:xs}=mA,Pc=["number","string","symbol","boolean","bigint"];function NA(e){if(!e)throw new Error(Dc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Dc.INVALID_ENVIRONMENT)}a(NA,"validateEnv");function OA(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(OA,"stringifyData");function gA(e){return e instanceof Date?e.valueOf():e}a(gA,"convertKeyValueToWrite");function pA(e){if(e==null)return;if(Pc.includes(typeof e))return e.length>xs?[e.slice(0,xs)+Mc]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Pc.includes(typeof n)&&(n.length>xs?t.push(n.slice(0,xs)+Mc):t.push(n))}}return t}a(pA,"getIndexedValues");function IA(){let e=AA.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(IA,"getMicroTime");Hc.exports={validateEnv:NA,stringifyData:OA,convertKeyValueToWrite:gA,getMicroTime:IA,getIndexedValues:pA}});var vc=d((VD,Bc)=>{"use strict";var Vs=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Vs,"DBIDefinition");Bc.exports=Vs});var Fc=d((YD,Gc)=>{"use strict";var Ys=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ys,"OpenDBIObject");Gc.exports=Ys});var xc=d((kD,qc)=>{"use strict";var ks=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a(ks,"OpenEnvironmentObject");qc.exports=ks});var kc=d(($D,Yc)=>{"use strict";var CA=require("fs-extra"),U=require("joi"),bA=require("os"),{boolean:ne,string:ct,number:ze,array:aa}=U.types(),Vc=require("path"),LA=y(),$s=I(),yA=_t(),wA="log",UA="custom_functions",DA="Invalid logging.rotation.maxSize unit. Available units are G, M or K",MA="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",PA="rootPath config parameter is undefined",HA="clustering.enabled config parameter is undefined",Ot=ze.min(0).required(),Ks=aa.items({host:ct.required(),port:Ot}).empty(null),Hr;Yc.exports={configValidator:BA,routesValidator:VA,route_constraints:Ks};function BA(e){if(Hr=e.rootPath,$s.isEmpty(Hr))throw PA;let t=ne.required(),r=U.valid("production","development").required(),s=ze.min(1).max(1e3).empty(null).default(qA),n=ct.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(xA),i=U.custom(GA).messages({"any.custom":"{:#label} {:#error}"}),o=ct.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if($s.isEmpty(_))throw HA;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:Ot,routes:Ks}).required()}).required(),leafNodes:U.object({network:U.object({port:Ot}).required()}).required(),network:U.object({port:Ot}).required()}).required(),leafServer:U.object({network:U.object({port:Ot,routes:Ks}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ne.required(),corsAccessList:aa.required(),headersTimeout:ze.min(1).required(),https:ne.required(),keepAliveTimeout:ze.min(1).required(),port:Ot,timeout:ze.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:Ot})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ne.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ne.required(),dateFormat:ct.required(),maxSize:ct.custom(FA).required(),retain:ze.min(0).required(),rotate:ne.required(),rotateInterval:ct.required(),rotateModule:ne.required(),timezone:ct.required(),workerInterval:ze.min(1).required()}).required(),root:n,stdStreams:ne.required(),auditLog:ne.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ne.required(),network:U.object({cors:ne.required(),corsAccessList:aa.required(),headersTimeout:ze.min(1).required(),https:ne.required(),keepAliveTimeout:ze.min(1).required(),port:Ot,timeout:ze.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:ct.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ne.required(),overlappingSync:ne.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(BA,"configValidator");function vA(e){return CA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(vA,"doesPathExist");function GA(e,t){if(e===null)return;U.assert(e,ct.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=vA(e);return r?t.message(r):e}a(GA,"validatePemFile");function FA(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(DA);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(MA)}a(FA,"validateRotationMaxSize");function qA(e,t){let r=t.state.path.join("."),s=bA.cpus().length,n=s-1;return n<=2&&(n=2),LA.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(qA,"setDefaultThreads");function xA(e,t){if(!$s.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if($s.isEmpty(Hr))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Vc.join(Hr,UA);case"logging.root":return Vc.join(Hr,wA);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(xA,"setDefaultRoot");function VA(e){let t=U.object({routes:Ks});return yA.validateBySchema({routes:e},t)}a(VA,"routesValidator")});var Br=d((KD,Zc)=>{"use strict";var Y=m(),Me=I(),le=y(),{configValidator:YA,routesValidator:$c}=kc(),Ye=require("fs-extra"),kA=require("yaml"),rr=require("path"),$A=require("is-number"),Js=require("properties-reader"),KA=require("lodash"),{handleHDBError:WA}=J(),{HTTP_STATUS_CODES:QA,HDB_ERROR_MSGS:Ws}=De(),{PACKAGE_ROOT:JA}=m(),XA="Unable to get config value because config is uninitialized",ZA="Config successfully initialized",zA="Error backing up config file",jA="Empty parameter sent to getConfigValue",Kc=rr.join(JA,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),eN="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Qs,Ne;Zc.exports={createConfigFile:tN,getDefaultConfig:rN,getConfigValue:Wc,initConfig:Qc,flattenConfig:qt,updateConfigValue:Jc,updateConfigObject:sN,getConfiguration:nN,setConfiguration:iN,readConfigFile:ca,getClusteringRoutes:aN,initOldConfig:Xc,getConfigFromFile:oN};function tN(e){let t=sr(Kc);Qs=qt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=oa(o,e[i]);try{t.setIn([..._],c)}catch(u){le.error(u)}}}_a(t);let r=t.toJSON();Ne=qt(r);let s=t.getIn(["rootPath"]),n=rr.join(s,Y.HDB_CONFIG_FILE);Ye.createFileSync(n),Ye.writeFileSync(n,String(t)),le.trace(`Config file written to ${n}`)}a(tN,"createConfigFile");function rN(e){if(Qs===void 0){let r=sr(Kc);Qs=qt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Qs[t.toLowerCase()]}a(rN,"getDefaultConfig");function Wc(e){if(Me.isEmpty(e)){le.error(jA);return}if(Ne===void 0){le.trace(XA);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ne[t.toLowerCase()]}a(Wc,"getConfigValue");function Qc(e=!1){if(Ne===void 0||e){let t=Me.getPropsFilePath();try{Ye.accessSync(t,Ye.constants.F_OK|Ye.constants.R_OK)}catch(o){throw le.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Js(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Xc(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=sr(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){le.trace(`HarperDB config file not found at ${s}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw le.error(o),new Error(`Error reading HarperDB config file at ${s}`)}_a(n);let i=n.toJSON();Ne=qt(i),le.trace(ZA)}}a(Qc,"initConfig");function _a(e){let t=e.toJSON(),r=YA(t);if(r.error)throw Ws.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(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(_a,"validateConfig");function sN(e,t){Ne===void 0&&(Ne={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ne[r.toLowerCase()]=t}a(sN,"updateConfigObject");function Jc(e,t,r=void 0,s=!1,n=!1){Ne===void 0&&Qc();let i=Wc(Y.CONFIG_PARAM_MAP.hdb_root),o=rr.join(i,Y.HDB_CONFIG_FILE),_=sr(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=oa(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=oa(l,r[E]);try{_.setIn([...h],S)}catch(A){le.error(A)}}}_a(_);let c=_.getIn(["rootPath"]),u=rr.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=rr.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Ye.copySync(o,E),le.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){le.error(zA),le.error(E)}Ye.writeFileSync(u,String(_)),n&&(Ne=qt(_.toJSON())),le.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Jc,"updateConfigValue");function qt(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=qt(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(qt,"flattenConfig");function oa(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.CONFIG_PARAMS.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($A(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Me.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 Me.autoCast(t)}a(oa,"castConfigValue");function nN(){let e=Me.getPropsFilePath(),r=Js(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return sr(r).toJSON()}a(nN,"getConfiguration");async function iN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Jc(void 0,void 0,n,!0),eN}catch(i){throw typeof i=="string"||i instanceof String?WA(i,i,QA.BAD_REQUEST,void 0,void 0,!0):i}}a(iN,"setConfiguration");function ca(){let e=Me.getPropsFilePath();try{Ye.accessSync(e,Ye.constants.F_OK|Ye.constants.R_OK)}catch(n){throw le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Js(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return sr(r).toJSON()}a(ca,"readConfigFile");function sr(e){return kA.parseDocument(Ye.readFileSync(e,"utf8"),{simpleKeys:!0})}a(sr,"parseYamlDoc");function aN(){let e=ca(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Me.isEmptyOrZeroLength(t)?[]:t;let r=$c(t);if(r)throw Ws.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Me.isEmptyOrZeroLength(s)?[]:s;let n=$c(s);if(n)throw Ws.CONFIG_VALIDATION(n.message);if(!Me.isEmptyOrZeroLength(s)&&!Me.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Me.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ws.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(aN,"getClusteringRoutes");function Xc(e){let t=Js(e);Ne={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(Me.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Ne[n]=rr.dirname(s):Ne[n]=s}return Ne}a(Xc,"initOldConfig");function oN(e){let t=ca();return KA.get(t,e.replaceAll("_","."))}a(oN,"getConfigFromFile")});var de=d((WD,jc)=>{"use strict";var ua=require("fs-extra"),je=require("path"),_N=require("os"),cN=require("properties-reader"),vr=y(),nr=I(),g=m(),Xs=Br(),uN="Error initializing environment manager",Zs="BOOT_PROPS_FILE_PATH",zc=!1,EN={[g.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ut={};jc.exports={BOOT_PROPS_FILE_PATH:Zs,getHdbBasePath:lN,setHdbBasePath:dN,get:SN,initSync:hN,setProperty:P,initTestEnvironment:fN};function lN(){return ut[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(lN,"getHdbBasePath");function dN(e){ut[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(dN,"setHdbBasePath");function SN(e){let t=Xs.getConfigValue(e);return t===void 0?ut[e]:t}a(SN,"get");function P(e,t){EN[e]&&(ut[e]=t),Xs.updateConfigObject(e,t)}a(P,"setProperty");function TN(){let e;try{e=nr.getPropsFilePath(),ua.accessSync(e,ua.constants.F_OK|ua.constants.R_OK),zc=!0;let t=cN(e);return ut[g.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(g.HDB_SETTINGS_NAMES.INSTALL_USER),ut[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ut[Zs]=e,!0}catch{return vr.trace(`Environment manager found no properties file at ${e}`),!1}}a(TN,"doesPropFileExist");function hN(e=!1){try{(zc||TN())&&(Xs.initConfig(e),ut[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Xs.getConfigValue(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){vr.error(uN),vr.error(t),console.error(t),process.exit(1)}}a(hN,"initSync");function fN(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:_}=e,c=je.join(__dirname,"../../","unitTests");ut[Zs]=je.join(c,"hdb_boot_properties.file"),P(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,je.join(c,"settings.test")),P(g.HDB_SETTINGS_NAMES.INSTALL_USER,_N.userInfo().username),P(g.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,je.join(c,"envDir","utility","keys","privateKey.pem")),P(g.HDB_SETTINGS_NAMES.CERT_KEY,je.join(c,"envDir","utility","keys","certificate.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,je.join(c,"envDir","utility","keys","privateKey.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,je.join(c,"envDir","utility","keys","certificate.pem")),P(g.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY,je.join(c,"envDir","log")),P(g.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(g.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,je.join(c,"envDir")),P(g.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,nr.isEmpty(n)?!0:n),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,nr.isEmpty(n)?!0:n),P(g.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(g.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,nr.isEmpty(i)?!1:i),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,nr.isEmpty(i)?!1:i),P(g.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(g.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(g.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,je.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(g.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,nr.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(g.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(g.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(g.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Zs}. Please check your boot props and settings files`;vr.fatal(r),vr.error(t)}}a(fN,"initTestEnvironment")});var F=d((JD,Eu)=>{"use strict";var Ea=require("lmdb"),Pe=require("fs-extra"),ke=require("path"),js=Ft(),eu=y(),ie=De().LMDB_ERRORS_ENUM,en=vc(),la=Fc(),tu=xc(),gt=Ee(),QD=m(),Gr=de();Gr.initSync();var ru=Gr.get("STORAGE_WRITEASYNC")===!0||Gr.get("STORAGE_WRITEASYNC")==="true"||Gr.get("STORAGE_WRITEASYNC")==="TRUE",su=Gr.get("STORAGE_OVERLAPPINGSYNC"),nu=1024*1024*1024,iu=1e4,au=1e3,$e=gt.INTERNAL_DBIS_NAME,ou=gt.DBI_DEFINITION_NAME,RN="data.mdb",mN="lock.mdb",Fr=".mdb",AN="-lock",zs=class{constructor(t,r,s=!1){this.dbi=He(t,r),this.key_type=this.dbi[gt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[gt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ea.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(zs,"TransactionCursor");function da(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(da,"pathEnvNameValidation");async function Sa(e,t,r=!0){try{await Pe.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ie.INVALID_BASE_PATH):s}try{let s=ke.join(e,t+Fr);return await Pe.access(s,Pe.constants.R_OK|Pe.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Pe.access(ke.join(e,t,RN),Pe.constants.R_OK|Pe.constants.F_OK),ke.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(Sa,"validateEnvironmentPath");function tn(e,t){if(js.validateEnv(e),t===void 0)throw new Error(ie.DBI_NAME_REQUIRED)}a(tn,"validateEnvDBIName");async function NN(e,t,r=!1,s=!1){da(e,t),t=t.toString();try{return await Sa(e,t,s),Ta(e,t,r)}catch(n){if(n.message===ie.INVALID_ENVIRONMENT){let i=ke.join(e,t);await Pe.mkdirp(s?i:e);let o=new tu(s?i:i+Fr,nu,iu,au,!1,ru,su),_=Ea.open(o);_.dbis=Object.create(null);let c=new la(!1);_.openDB($e,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=ha(e,t,r);return _[gt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(NN,"createEnvironment");async function ON(e,t,r,s=!0){let n=await Ta(e,t);if(r===void 0)throw new Error(ie.DESTINATION_PATH_REQUIRED);try{await Pe.access(ke.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(ON,"copyEnvironment");async function Ta(e,t,r=!1){da(e,t),t=t.toString();let s=ha(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 Sa(e,t),i=ke.join(e,t+Fr),o=n!=i,_=new tu(n,nu,iu,au,o,ru,su),c=Ea.open(_);c.dbis=Object.create(null);let u=cu(c);for(let E=0;E<u.length;E++)He(c,u[E]);return c[gt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ta,"openEnvironment");async function gN(e,t,r=!1){da(e,t),t=t.toString();let s=ke.join(e,t+Fr),n=await Sa(e,t);if(global.lmdb_map!==void 0){let i=ha(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await _u(o),delete global.lmdb_map[i]}}await Pe.remove(n),await Pe.remove(n===s?n+AN:ke.join(ke.dirname(n),mN))}a(gN,"deleteEnvironment");async function _u(e){js.validateEnv(e);let t=e[gt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(_u,"closeEnvironment");function ha(e,t,r=!1){let n=`${ke.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ha,"getCachedEnvironmentName");function pN(e){js.validateEnv(e);let t=Object.create(null),r=He(e,$e);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==$e)try{t[s]=Object.assign(new en,n)}catch{eu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(pN,"listDBIDefinitions");function cu(e){js.validateEnv(e);let t=[],r=He(e,$e);for(let{key:s}of r.getRange({start:!1}))s!==$e&&t.push(s);return t}a(cu,"listDBIs");function IN(e,t){let s=He(e,$e).getEntry(t),n=new en;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{eu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(IN,"getDBIDefinition");function uu(e,t,r,s=!1){if(tn(e,t),t=t.toString(),t===$e)throw new Error(ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return He(e,t)}catch(n){if(n.message===ie.DBI_DOES_NOT_EXIST){let i=new la(r,s===!0),o=e.openDB(t,i),_=new en(r===!0,s);return o[ou]=_,He(e,$e).putSync(t,_),e.dbis[t]=o,o}throw n}}a(uu,"createDBI");function He(e,t){if(tn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==$e?r=IN(e,t):r=new en,r===void 0)throw new Error(ie.DBI_DOES_NOT_EXIST);let s;try{let n=new la(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[ou]=r,e.dbis[t]=s,s}a(He,"openDBI");function CN(e,t){tn(e,t),t=t.toString();let r=He(e,t),s=r.getStats();return r[gt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(CN,"statDBI");async function bN(e,t){try{let r=ke.join(e,t+Fr);return(await Pe.stat(r)).size}catch{throw new Error(ie.INVALID_ENVIRONMENT)}}a(bN,"environmentDataSize");function LN(e,t){if(tn(e,t),t=t.toString(),t===$e)throw new Error(ie.CANNOT_DROP_INTERNAL_DBIS_NAME);He(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],He(e,$e).removeSync(t)}a(LN,"dropDBI");function yN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{He(e,n)}catch(i){if(i.message===ie.DBI_DOES_NOT_EXIST)uu(e,n,n!==t,n===t);else throw i}}}a(yN,"initializeDBIs");Eu.exports={openDBI:He,openEnvironment:Ta,createEnvironment:NN,listDBIs:cu,listDBIDefinitions:pN,createDBI:uu,dropDBI:LN,statDBI:CN,deleteEnvironment:gN,initializeDBIs:yN,TransactionCursor:zs,environmentDataSize:bN,copyEnvironment:ON,closeEnvironment:_u}});var du=d((XD,lu)=>{"use strict";var rn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(rn,"InsertRecordsResponseObject");lu.exports=rn});var Tu=d((ZD,Su)=>{"use strict";var sn=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(sn,"UpdateRecordsResponseObject");Su.exports=sn});var fu=d((zD,hu)=>{"use strict";var nn=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(nn,"UpsertRecordsResponseObject");hu.exports=nn});var ir=d((rM,mu)=>{"use strict";var wN=F(),UN=du(),DN=Tu(),MN=fu(),xr=Ft(),qr=De().LMDB_ERRORS_ENUM,PN=Ee(),pt=m(),HN=I(),BN=require("uuid"),jD=require("lmdb"),{handleHDBError:vN,hdb_errors:GN}=J(),{OVERFLOW_MARKER:eM,MAX_SEARCH_KEY_LENGTH:tM}=PN,fa=pt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,xt=pt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function FN(e,t,r,s,n=!0){Na(e,t,r,s),Ra(e,t,r);let i=new UN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];Ru(u,!0,n);let E=qN(e,t,r,u),l=u[t];o.push(E),_.push(l)}return ma(o,_,s,i)}a(FN,"insertRecords");function qN(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 _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][pt.FUNC_VAL],s[o]=_)}let c=xr.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[xt])})}a(qN,"insertRecord");function xN(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xN,"removeSkippedRecords");function Ru(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[xt]))&&(e[xt]=s),t===!0?(r===!0||!Number.isInteger(e[fa]))&&(e[fa]=s):delete e[fa]}a(Ru,"setTimestamps");function Ra(e,t,r){r.indexOf(pt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(pt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(pt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(pt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),wN.initializeDBIs(e,t,r)}a(Ra,"initializeTransaction");async function VN(e,t,r,s,n=!0){Na(e,t,r,s),Ra(e,t,r);let i=new DN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=Aa(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return ma(_,c,s,i,o)}a(VN,"updateRecords");async function YN(e,t,r,s,n=!0){try{Na(e,t,r,s)}catch(c){throw vN(c,c.message,GN.HTTP_STATUS_CODES.BAD_REQUEST)}Ra(e,t,r);let i=new MN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;HN.isEmpty(u[t])?(E=BN.v4(),u[t]=E):E=u[t];let l=Aa(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return ma(o,_,s,i)}a(YN,"upsertRecords");async function ma(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=xr.getMicroTime(),xN(r,n),s}a(ma,"finalizeWrite");function Aa(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(Ru(r,!E,o),Number.isInteger(r[xt])&&u[xt]>r[xt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let A in r){if(!r.hasOwnProperty(A)||A===t)continue;let N=r[A],C=e.dbis[A];if(C===void 0)continue;let fe=u[A];if(typeof N=="function"){let K=N([[u]]);Array.isArray(K)&&(N=K[0][pt.FUNC_VAL],r[A]=N)}if(N===fe)continue;let v=xr.getIndexedValues(fe);if(v)for(let K=0,xe=v.length;K<xe;K++)C.remove(v[K],s);if(v=xr.getIndexedValues(N),v)for(let K=0,xe=v.length;K<xe;K++)C.put(v[K],s)}let S=Object.assign({},u,r);_.put(s,S,S[xt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:Aa(e,t,r,s,n,i,o))}a(Aa,"updateUpsertRecord");function kN(e,t,r){if(xr.validateEnv(e),t===void 0)throw new Error(qr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qr.WRITE_ATTRIBUTES_REQUIRED):new Error(qr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(kN,"validateBasic");function Na(e,t,r,s){if(kN(e,t,r),!Array.isArray(s))throw s===void 0?new Error(qr.RECORDS_REQUIRED):new Error(qr.RECORDS_MUST_BE_ARRAY)}a(Na,"validateWrite");mu.exports={insertRecords:FN,updateRecords:VN,upsertRecords:YN}});var V=d((sM,Nu)=>{"use strict";var Oa=m(),ar=de(),ga=require("path");ar.initSync();var an,on,_n;function Au(){if(an!==void 0)return an;if(ar.getHdbBasePath()!==void 0)return an=ga.join(ar.getHdbBasePath(),Oa.SCHEMA_DIR_NAME),an}a(Au,"getBaseSchemaPath");function $N(){if(on!==void 0)return on;if(ar.getHdbBasePath()!==void 0)return on=ga.join(Au(),Oa.SYSTEM_SCHEMA_NAME),on}a($N,"getSystemSchemaPath");function KN(){if(_n!==void 0)return _n;if(ar.getHdbBasePath()!==void 0)return _n=ga.join(ar.getHdbBasePath(),Oa.TRANSACTIONS_DIR_NAME),_n}a(KN,"getTransactionAuditStorePath");Nu.exports={getBaseSchemaPath:Au,getSystemSchemaPath:$N,getTransactionAuditStorePath:KN}});var Vt=d((nM,WN)=>{WN.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 pa=d((iM,Ou)=>{var{common_validators:It}=tr(),Vr=_t(),Ke="is required",G={schema:{presence:!0,format:It.schema_format,length:It.schema_length},table:{presence:!0,format:It.schema_format,length:It.schema_length},attribute:{presence:!0,format:It.schema_format,length:It.schema_length},hash_attribute:{presence:!0,format:It.schema_format,length:It.schema_length}};function Yr(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(Yr,"makeAttributesStrings");function QN(e){return e=Yr(e),G.schema.presence={message:Ke},G.table.presence=!1,G.attribute.presence=!1,G.hash_attribute.presence=!1,Vr.validateObject(e,G)}a(QN,"schema_object");function JN(e){return e=Yr(e),G.schema.presence={message:Ke},G.table.presence={message:Ke},G.attribute.presence=!1,G.hash_attribute.presence=!1,Vr.validateObject(e,G)}a(JN,"table_object");function XN(e){return e=Yr(e),G.schema.presence={message:Ke},G.table.presence={message:Ke},G.attribute.presence=!1,G.hash_attribute.presence={message:Ke},Vr.validateObject(e,G)}a(XN,"create_table_object");function ZN(e){return e=Yr(e),G.schema.presence={message:Ke},G.table.presence={message:Ke},G.attribute.presence={message:Ke},G.hash_attribute.presence=!1,Vr.validateObject(e,G)}a(ZN,"attribute_object");function zN(e){return e=Yr(e),G.schema.presence={message:Ke},G.table.presence={message:Ke},G.attribute.presence=!1,G.hash_attribute.presence=!1,Vr.validateObject(e,G)}a(zN,"describe_table");function jN(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(jN,"validateTableResidence");Ou.exports={schema_object:QN,create_table_object:XN,table_object:JN,attribute_object:ZN,describe_table:zN,validateTableResidence:jN}});var pu=d((aM,gu)=>{"use strict";var eO=require("uuid"),cn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||eO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(cn,"CreateAttributeObject");gu.exports=cn});var En=d((oM,Iu)=>{"use strict";var tO=pu(),un=class extends tO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(un,"LMDBCreateAttributeObject");Iu.exports=un});var bu=d((_M,Cu)=>{"use strict";Cu.exports=sO;var rO="inserted";function sO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===rO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(sO,"returnObject")});var ln=d((cM,yu)=>{"use strict";var nO=m(),Ia=F(),iO=ir(),{getSystemSchemaPath:aO,getBaseSchemaPath:oO}=V(),_O=require("path"),cO=Vt(),uO=pa(),EO=En(),lO=bu(),{handleHDBError:dO,hdb_errors:SO}=J(),TO=I(),Ca=cO.hdb_attribute,Lu=[];for(let e=0;e<Ca.attributes.length;e++)Lu.push(Ca.attributes[e].attribute);var hO="inserted";yu.exports=fO;async function fO(e){let t=uO.attribute_object(e);if(t)throw dO(new Error,t.message,SO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=TO.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new EO(e.schema,e.table,e.attribute,e.id);try{let n=await Ia.openEnvironment(_O.join(oO(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Ia.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Ia.openEnvironment(aO(),nO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await iO.insertRecords(i,Ca.hash_attribute,Lu,[s]);return lO(hO,o,{records:[s]},_)}catch(n){throw n}}a(fO,"lmdbCreateAttribute")});var dn=d((EM,Uu)=>{"use strict";var Et=I(),wu=y(),uM=na();Uu.exports=RO;function RO(e){if(Et.isEmpty(e))throw new Error("invalid update parameters defined.");if(Et.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Et.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(Et.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&&Et.isEmptyOrZeroLength(o[r]))throw wu.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(!Et.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw wu.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`);!Et.isEmpty(o[r])&&o[r]!==""&&s.has(Et.autoCast(o[r]))&&(o.skip=!0),s.add(Et.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(RO,"insertUpdateValidate")});var Tn=d((lM,Du)=>{"use strict";var mO=m().OPERATIONS_ENUM,Sn=class{constructor(t,r,s,n,i=void 0){this.operation=mO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Sn,"InsertObject");Du.exports=Sn});var fn=d((SM,Mu)=>{"use strict";var dM=Tn(),hn=m(),La=I(),ba=y(),AO=require("uuid"),{handleHDBError:kr,hdb_errors:NO}=J(),{HDB_ERROR_MSGS:$r,HTTP_STATUS_CODES:Kr}=NO;Mu.exports=OO;function OO(e,t,r){for(let n=0;n<t.length;n++)gO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];pO(i,r,e.operation)}}a(OO,"processRows");function gO(e){if(Buffer.byteLength(String(e))>hn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw kr(new Error,$r.ATTR_NAME_LENGTH_ERR(e),Kr.BAD_REQUEST,void 0,void 0,!0);if(La.isEmptyOrZeroLength(e)||La.isEmpty(e.trim()))throw kr(new Error,$r.ATTR_NAME_NULLISH_ERR,Kr.BAD_REQUEST,void 0,void 0,!0)}a(gO,"validateAttribute");function pO(e,t,r){if(!e.hasOwnProperty(t)||La.isEmptyOrZeroLength(e[t])){if(r===hn.OPERATIONS_ENUM.INSERT||r===hn.OPERATIONS_ENUM.UPSERT){e[t]=AO.v4();return}throw ba.error("Update transaction aborted due to record with no hash value:",e),kr(new Error,$r.RECORD_MISSING_HASH_ERR,Kr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>hn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ba.error(e),kr(new Error,$r.HASH_VAL_LENGTH_ERR,Kr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ba.error(e),kr(new Error,$r.INVALID_FORWARD_SLASH_IN_HASH_ERR,Kr.BAD_REQUEST,void 0,void 0,!0)}a(pO,"validateHash")});var Hu=d((TM,Pu)=>{"use strict";var Rn=class{constructor(t,r){this.type=t,this.message=r}};a(Rn,"IPCEventObject");Pu.exports=Rn});var Qr=d((hM,Bu)=>{"use strict";var IO=y(),ya=I(),CO=m(),{IPC_ERRORS:Wr}=De();Bu.exports={sendIpcEvent:bO,validateEvent:LO,SchemaEventMsg:yO,UserEventMsg:wO};function bO(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):IO.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(bO,"sendIpcEvent");function LO(e){if(typeof e!="object")return Wr.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ya.isEmpty(e.type))return Wr.MISSING_TYPE;if(!e.hasOwnProperty("message")||ya.isEmpty(e.message))return Wr.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ya.isEmpty(e.message.originator))return Wr.MISSING_ORIGIN;if(CO.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Wr.INVALID_EVENT(e.type)}a(LO,"validateEvent");function yO(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(yO,"SchemaEventMsg");function wO(e){this.originator=e}a(wO,"UserEventMsg")});var An=d((RM,qu)=>{"use strict";var vu=m(),fM=I(),mn=y(),Gu=Hu(),{sendIpcEvent:Fu}=Qr();function UO(e){try{mn.trace("signalSchemaChange called with message:",e);let t=new Gu(vu.IPC_EVENT_TYPES.SCHEMA,e);Fu(t)}catch(t){mn.error(t)}}a(UO,"signalSchemaChange");function DO(e){try{mn.trace("signalUserChange called with message:",e);let t=new Gu(vu.IPC_EVENT_TYPES.USER,e);Fu(t)}catch(t){mn.error(t)}}a(DO,"signalUserChange");qu.exports={signalSchemaChange:UO,signalUserChange:DO}});var Nn=d((mM,Vu)=>{"use strict";var xu=I(),MO=m(),PO=y(),HO=ln(),BO=En(),vO=An(),{SchemaEventMsg:GO}=Qr(),FO="already exists in";Vu.exports=qO;async function qO(e,t,r){try{if(xu.isEmptyOrZeroLength(r))return r;let s=[];xu.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 xO(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(qO,"lmdbCheckForNewAttributes");async function xO(e,t,r,s){let n=new BO(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await VO(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(FO))PO.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(xO,"createNewAttribute");async function VO(e){let t;try{return t=await HO(e),vO.signalSchemaChange(new GO(process.pid,MO.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(VO,"createAttribute")});var or=d((AM,Yu)=>{"use strict";var On=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(On,"LMDBTransactionObject");Yu.exports=On});var $u=d((NM,ku)=>{"use strict";var YO=or(),kO=m().OPERATIONS_ENUM,gn=class extends YO{constructor(t,r,s,n,i=void 0){super(kO.INSERT,r,s,n,i),this.records=t}};a(gn,"LMDBInsertTransactionObject");ku.exports=gn});var Wu=d((OM,Ku)=>{"use strict";var $O=or(),KO=m().OPERATIONS_ENUM,pn=class extends $O{constructor(t,r,s,n,i,o=void 0){super(KO.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(pn,"LMDBUpdateTransactionObject");Ku.exports=pn});var Ju=d((gM,Qu)=>{"use strict";var WO=or(),QO=m().OPERATIONS_ENUM,In=class extends WO{constructor(t,r,s,n,i,o=void 0){super(QO.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(In,"LMDBUpsertTransactionObject");Qu.exports=In});var Zu=d((pM,Xu)=>{"use strict";var JO=or(),XO=m().OPERATIONS_ENUM,Cn=class extends JO{constructor(t,r,s,n,i=void 0){super(XO.DELETE,s,n,t,i),this.original_records=r}};a(Cn,"LMDBDeleteTransactionObject");Xu.exports=Cn});var Jr=d((IM,tE)=>{"use strict";var ZO=require("path"),zu=F(),zO=$u(),jO=Wu(),eg=Ju(),tg=Zu(),_r=Ee(),ju=I(),{CONFIG_PARAMS:rg}=m(),eE=de();eE.initSync();var bn=m().OPERATIONS_ENUM,{getTransactionAuditStorePath:sg}=V();tE.exports=ng;async function ng(e,t){if(eE.get(rg.LOGGING_AUDITLOG)===!1)return;let r=ZO.join(sg(),e.schema.toString()),s=await zu.openEnvironment(r,e.table,!0),n=ig(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){zu.initializeDBIs(s,_r.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_r.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[_r.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[_r.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),ju.isEmpty(n.user_name)||s.dbis[_r.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[_r.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(ng,"writeTransaction");function ig(e,t){let r=ju.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===bn.INSERT)return new zO(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===bn.UPDATE)return new jO(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===bn.UPSERT)return new eg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===bn.DELETE)return new tg(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(ig,"createTransactionObject")});var wa=d((bM,rE)=>{"use strict";var ag=dn(),CM=Tn(),cr=m(),og=fn(),_g=ir().insertRecords,cg=F(),ug=require("path"),Eg=y(),lg=Nn(),{getBaseSchemaPath:dg}=V(),Sg=Jr();rE.exports=Tg;async function Tg(e){try{let{schema_table:t,attributes:r}=ag(e);og(e,r,t.hash_attribute),e.schema!==cr.SYSTEM_SCHEMA_NAME&&(r.includes(cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await lg(e.hdb_auth_header,t,r),n=ug.join(dg(),e.schema.toString()),i=await cg.openEnvironment(n,e.table),o=await _g(i,t.hash_attribute,r,e.records,e[cr.CLUSTERING_FLAG]!==!0);try{await Sg(e,o)}catch(_){Eg.error(`unable to write transaction due to ${_.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(Tg,"lmdbCreateRecords")});var iE=d((LM,nE)=>{"use strict";var sE=m(),hg=wa(),fg=Tn(),Rg=require("fs-extra"),mg=require("path"),{getBaseSchemaPath:Ag}=V();nE.exports=Ng;async function Ng(e){let t=[{name:e.schema,createddate:Date.now()}],r=new fg(sE.SYSTEM_SCHEMA_NAME,sE.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await hg(r),await Rg.mkdirp(mg.join(Ag(),e.schema.toString()))}a(Ng,"lmdbCreateSchema")});var oE=d((yM,aE)=>{"use strict";var Ln=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(Ln,"DeleteRecordsResponseObject");aE.exports=Ln});var Ma=d((MM,uE)=>{"use strict";var _E=F(),Ua=Ft(),Da=De().LMDB_ERRORS_ENUM,Og=Ee(),cE=y(),wM=I(),gg=require("lmdb"),pg=oE(),{OVERFLOW_MARKER:UM,MAX_SEARCH_KEY_LENGTH:DM}=Og;async function Ig(e,t,r){if(Ua.validateEnv(e),t===void 0)throw new Error(Da.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Da.IDS_REQUIRED):new Error(Da.IDS_MUST_BE_ARRAY);try{let s=_E.listDBIs(e);_E.initializeDBIs(e,t,s);let n=new pg,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let A=e.dbis[t].ifVersion(i,gg.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let C=s[N];if(!S.hasOwnProperty(C)||C===t)continue;let fe=e.dbis[C],v=S[C];if(v!=null)try{let K=Ua.getIndexedValues(v);if(K)for(let xe=0,ps=K.length;xe<ps;xe++)fe.remove(K[xe],i)}catch{cE.warn(`cannot delete from attribute: ${C}, ${v}:${i}`)}}});o.push(A),_.push(i),n.original_records.push(S)}catch(S){cE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=Ua.getMicroTime(),n}catch(s){throw s}}a(Ig,"deleteRecords");uE.exports={deleteRecords:Ig}});var Xr=d((PM,lE)=>{"use strict";var ur=I(),Cg=Ma(),bg=F(),Lg=require("path"),{getBaseSchemaPath:yg}=V(),wg=Jr(),Ug=y();lE.exports=Dg;async function Dg(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(ur.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ur.isEmptyOrZeroLength(e.hash_values)&&!ur.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];ur.isEmpty(c)||e.hash_values.push(c)}}if(ur.isEmptyOrZeroLength(e.hash_values))return EE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ur.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=Lg.join(yg(),e.schema.toString()),i=await bg.openEnvironment(n,e.table),o=await Cg.deleteRecords(i,s,e.hash_values);try{t===!0&&await wg(e,o)}catch(_){Ug.error(`unable to write transaction due to ${_.message}`)}return EE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Dg,"lmdbDeleteRecords");function EE(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(EE,"createDeleteResponse")});var Ha=d((BM,dE)=>{"use strict";var Mg=m(),HM=Ft();function Pa(e,t){let r=Object.create(null);if(t.length===1&&Mg.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(Pa,"parseRow");function Pg(e,t,r,s){let n=Pa(r,e);s.push(n)}a(Pg,"searchAll");function Hg(e,t,r,s){let n=Pa(r,e);s[t]=n}a(Hg,"searchAllToMap");function Bg(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Bg,"iterateDBI");function Yt(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(Yt,"pushResults");function vg(e,t,r,s,n,i){t.toString().endsWith(e)&&Yt(t,r,s,n,i)}a(vg,"endsWith");function Gg(e,t,r,s,n,i){t.toString().includes(e)&&Yt(t,r,s,n,i)}a(Gg,"contains");function Fg(e,t,r,s,n,i){t>e&&Yt(t,r,s,n,i)}a(Fg,"greaterThanCompare");function qg(e,t,r,s,n,i){t>=e&&Yt(t,r,s,n,i)}a(qg,"greaterThanEqualCompare");function xg(e,t,r,s,n,i){t<e&&Yt(t,r,s,n,i)}a(xg,"lessThanCompare");function Vg(e,t,r,s,n,i){t<=e&&Yt(t,r,s,n,i)}a(Vg,"lessThanEqualCompare");dE.exports={parseRow:Pa,searchAll:Pg,searchAllToMap:Hg,iterateDBI:Bg,endsWith:vg,contains:Gg,greaterThanCompare:Fg,greaterThanEqualCompare:qg,lessThanCompare:xg,lessThanEqualCompare:Vg,pushResults:Yt}});var Er=d((FM,mE)=>{"use strict";var Be=F(),Yg=y(),ye=Ft(),Ct=Ee(),W=De().LMDB_ERRORS_ENUM,vM=I(),kg=m(),We=Ha(),GM=require("lmdb"),{OVERFLOW_MARKER:SE,MAX_SEARCH_KEY_LENGTH:$g}=Ct,Zr={lazy:!0};function TE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Be.openDBI(e,r);c[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ba(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(TE,"iterateFullIndex");function zr(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Be.openDBI(e,r),h=Ba(e,t,r);l[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,A=i===!0?n:s,N=i===!0?!c:!u,C=i===!0?u:c;for(let{key:fe,value:v}of l.getRange({start:A,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:C}))We.pushResults(h(fe,v),v,E,t,r);return E}a(zr,"iterateRangeBetween");function Ba(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(SE)){if(!s)if(t)s=Be.openDBI(e,t);else{let _=Be.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Be.openDBI(e,_[c]),!s[Ct.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,Zr)[r]}return n}}a(Ba,"getOverflowCheck");function Kg(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);yn(r),r=jr(e,r);let o=[],_=Be.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))We.searchAll(r,c,u,o);return o}a(Kg,"searchAll");function Wg(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return yn(r),r=jr(e,r),TE(e,t,t,We.searchAllToMap.bind(null,r),s,n,i)}a(Wg,"searchAllToMap");function Qg(e,t,r=!1,s=void 0,n=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);return TE(e,void 0,t,We.iterateDBI,r,s,n)}a(Qg,"iterateDBI");function Jg(e,t){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Be.statDBI(e,t).entryCount}a(Jg,"countAll");function Xg(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=Be.openDBI(e,r);s=ye.convertKeyValueToWrite(s);let c=[[],[]];if(_[Ct.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,Zr);u!==void 0&&We.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))We.pushResults(s,u,c,t,r);return c}a(Xg,"equals");function Zg(e,t,r){return bt(e,t,r),Be.openDBI(e,t).getValuesCount(r)}a(Zg,"count");function zg(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=[[],[]],c=Be.openDBI(e,r);c[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ye.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))We.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))We.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(zg,"startsWith");function jg(e,t,r,s,n=!1,i=void 0,o=void 0){return hE(e,t,r,s,n,i,o,!0)}a(jg,"endsWith");function hE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){bt(e,r,s);let c=[[],[]],u=Be.openDBI(e,r);u[Ct.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=Ba(e,t,r);o=Number.isInteger(o)?o:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(SE))for(let A of u.getValues(h)){let N=E(h,A);(_?N.endsWith(s):N.includes(s))&&l(N,A)}else if(_?S.endsWith(s):S.includes(s))if(u[Ct.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let A of u.getValues(h))l(h,A)}function l(h,S){if(o>0){o--;return}i!==0&&(We.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(hE,"contains");function ep(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),zr(e,t,r,s,c,n,i,o,!0,!1)}a(ep,"greaterThan");function tp(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),zr(e,t,r,s,c,n,i,o,!1,!1)}a(tp,"greaterThanEqual");function rp(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),zr(e,t,r,c,s,n,i,o,!1,!0)}a(rp,"lessThan");function sp(e,t,r,s,n=!1,i=void 0,o=void 0){bt(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),zr(e,t,r,c,s,n,i,o,!1,!1)}a(sp,"lessThanEqual");function np(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(ye.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=ye.convertKeyValueToWrite(s),n=ye.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return zr(e,t,r,s,n,i,o,_)}a(np,"between");function ip(e,t,r,s){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(yn(r),r=jr(e,r),s===void 0)throw new Error(W.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?Zr:void 0);return i&&(n=We.parseRow(i,r)),n}a(ip,"searchByHash");function ap(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,Zr)===void 0&&(s=!1),s}a(ap,"checkHashExists");function op(e,t,r,s,n=[]){RE(e,t,r,s,n);let i=fE(e,t,r,s,n);return Object.values(i)}a(op,"batchSearchByHash");function _p(e,t,r,s,n=[]){return RE(e,t,r,s,n),fE(e,t,r,s,n)}a(_p,"batchSearchByHashToMap");function fE(e,t,r,s,n=[]){r=jr(e,r);let i=Object.create(null),o=r.length<3?Zr:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=We.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw Yg.warn(u),u}}return i}a(fE,"batchHashSearch");function RE(e,t,r,s,n){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(yn(r),!Array.isArray(s))throw s===void 0?new Error(W.IDS_REQUIRED):new Error(W.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(RE,"initializeBatchSearchByHash");function yn(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(yn,"validateFetchAttributes");function bt(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>$g)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(bt,"validateComparisonFunctions");function jr(e,t){return t.length===1&&kg.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Be.listDBIs(e)),t}a(jr,"setGetWholeRowAttributes");mE.exports={searchAll:Kg,searchAllToMap:Wg,count:Zg,countAll:Jg,equals:Xg,startsWith:zg,endsWith:jg,contains:hE,searchByHash:ip,setGetWholeRowAttributes:jr,batchSearchByHash:op,batchSearchByHashToMap:_p,checkHashExists:ap,iterateDBI:Qg,greaterThan:ep,greaterThanEqual:tp,lessThan:rp,lessThanEqual:sp,between:np}});var es=d((xM,gE)=>{var AE=require("lodash"),NE=_t(),H=require("joi"),cp=I(),{hdb_schema_table:Qe,checkValidTable:OE}=tr(),{handleHDBError:up,hdb_errors:Ep}=J(),{HTTP_STATUS_CODES:lp}=Ep,qM=H.object({schema:Qe,table:Qe,hash_values:H.array().min(1).items(H.alternatives(H.string(),H.number())).required(),get_attributes:H.array().min(1).items(Qe).required()}),dp=H.object({schema:Qe,table:Qe,search_attribute:Qe,search_value:H.any().required(),get_attributes:H.array().min(1).items(Qe).required(),desc:H.bool(),limit:H.number().integer().min(1),offset:H.number().integer().min(0)}),Sp=H.object({schema:Qe,table:Qe,operator:H.string().valid("and","or").default("and").lowercase(),offset:H.number().integer().min(0),limit:H.number().integer().min(1),get_attributes:H.array().min(1).items(Qe).required(),conditions:H.array().min(1).items(H.object({search_attribute:Qe,search_type:H.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:H.when("search_type",{switch:[{is:"equals",then:H.any()},{is:"between",then:H.array().items(H.alternatives([H.string(),H.number()])).length(2)}],otherwise:H.alternatives(H.string(),H.number())}).required()})).required()});gE.exports=function(e,t){let r=null;switch(t){case"value":r=NE.validateBySchema(e,dp);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(OE("schema",e.schema)),i(OE("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=NE.validateBySchema(e,Sp);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=cp.checkGlobalSchemaTable(e.schema,e.table);if(n)return up(new Error,n,lp.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=AE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!AE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var va=d((VM,pE)=>{"use strict";var Tp=F(),hp=es(),fp=require("path"),{getBaseSchemaPath:Rp}=V();pE.exports=mp;function mp(e){let t=hp(e,"hashes");if(t)throw t;let r=fp.join(Rp(),e.schema.toString());return Tp.openEnvironment(r,e.table)}a(mp,"initialize")});var Ga=d((YM,IE)=>{"use strict";var Ap=Er(),Np=va();IE.exports=Op;async function Op(e){try{let t=await Np(e),r=global.hdb_schema[e.schema][e.table];return Ap.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(Op,"lmdbGetDataByHash")});var ts=d((kM,CE)=>{"use strict";var wn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(wn,"SearchByHashObject");CE.exports=wn});var LE=d((KM,bE)=>{"use strict";var $M=ts(),gp=Er(),pp=va();bE.exports=Ip;async function Ip(e){try{let t=await pp(e),r=global.hdb_schema[e.schema][e.table];return gp.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(Ip,"lmdbSearchByHash")});var lt=d((WM,yE)=>{"use strict";var Un=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=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=_,this.reverse=c,this.limit=u,this.offset=E}};a(Un,"SearchObject");yE.exports=Un});var Dn=d((QM,PE)=>{"use strict";var Se=Er(),Cp=F(),bp=require("path"),Lp=I(),O=Ee(),kt=m(),{getBaseSchemaPath:yp}=V(),wp=Vt(),wE=De().LMDB_ERRORS_ENUM,{compareKeys:lr}=require("ordered-binary"),dt=kt.SEARCH_WILDCARDS;async function Up(e,t,r){let s;e.schema===kt.SYSTEM_SCHEMA_NAME?s=wp[e.table]:s=global.hdb_schema[e.schema][e.table];let n=ME(e,s.hash_attribute,r,t);return UE(e,n,s.hash_attribute,r)}a(Up,"prepSearch");async function UE(e,t,r,s){let n=bp.join(yp(),e.schema.toString()),i=await Cp.openEnvironment(n,e.table),o=DE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Pp(e,r)===!1)return s===!0?Mp(o):o[1];let c=o[0];return s===!0?Se.batchSearchByHashToMap(i,r,e.get_attributes,c):Se.batchSearchByHash(i,r,e.get_attributes,c)}a(UE,"executeSearch");function DE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Se.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Se.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Se.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Se.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Se.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Se.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Se.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Se.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Se.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Se.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Se.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Se.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Se.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(DE,"searchByType");function Dp(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return lr(i,s[0])>=0&&lr(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>lr(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>lr(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>lr(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>lr(n[r],s)<=0;default:return Object.create(null)}}a(Dp,"filterByType");function Mp(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(Mp,"createMapFromArrays");function Pp(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(Pp,"checkToFetchMore");function ME(e,t,r,s){if(Lp.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),_=!1;if(e.search_attribute===t&&(_=!0),dt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(dt[0])<0&&n.indexOf(dt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(dt.indexOf(i)>=0&&dt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(dt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(dt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(dt[0])||n.includes(dt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(wE.UNKNOWN_SEARCH_TYPE)}else switch(s){case kt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case kt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case kt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case kt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case kt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wE.UNKNOWN_SEARCH_TYPE)}}a(ME,"createSearchTypeFromSearchObject");PE.exports={executeSearch:UE,createSearchTypeFromSearchObject:ME,prepSearch:Up,searchByType:DE,filterByType:Dp}});var BE=d((XM,HE)=>{"use strict";var JM=lt(),Hp=es(),Bp=I(),vp=m(),Gp=Dn();HE.exports=Fp;async function Fp(e,t){if(!Bp.isEmpty(t)&&vp.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Hp(e,"value");if(s)throw s;let n=!0;try{return await Gp.prepSearch(e,t,n)}catch(i){throw i}}a(Fp,"lmdbGetDataByValue")});var dr=d((zM,vE)=>{"use strict";var ZM=lt(),qp=es(),xp=I(),Vp=m(),Yp=Dn();vE.exports=kp;async function kp(e,t){if(!xp.isEmpty(t)&&Vp.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=qp(e,"value");if(s)throw s;let n=!1;try{return await Yp.prepSearch(e,t,n)}catch(i){throw i}}a(kp,"lmdbSearchByValue")});var FE=d((eP,GE)=>{"use strict";var jM=Ee(),Mn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Mn,"SearchByConditionsObject");var Pn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Pn,"SearchCondition");var Hn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Hn,"SortAttribute");GE.exports={SearchByConditionsObject:Mn,SearchCondition:Pn,SortAttribute:Hn}});var $E=d((rP,kE)=>{"use strict";var tP=FE().SearchByConditionsObject,$p=lt(),Kp=es(),Fa=Er(),Bn=Ee(),YE=Dn(),Wp=Ha(),qE=require("lodash"),{getBaseSchemaPath:Qp}=V(),Jp=require("path"),Xp=F(),{handleHDBError:xE,hdb_errors:Zp}=J(),{HTTP_STATUS_CODES:zp}=Zp,jp=1e8,eI={lazy:!0};kE.exports=tI;async function tI(e){try{let t=Kp(e,"conditions");if(t)throw xE(t,t.message,zp.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=Jp.join(Qp(),e.schema.toString()),s=await Xp.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=qE.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===Bn.SEARCH_TYPES.EQUALS?o.estimated_count=Fa.count(s,o.search_attribute,o.search_value):_===Bn.SEARCH_TYPES.CONTAINS||_===Bn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=jp}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await VE(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(YE.filterByType),u=c.length,E=[],l=Fa.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let A of o){let N=_.get(A,eI);for(let C=0;C<u;C++)if(!c[C](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(Wp.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await VE(s,e,c,n.hash_attribute);_.push(u)}if(o=qE.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return Fa.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw xE(t)}}a(tI,"lmdbSearchByConditions");async function VE(e,t,r,s){let n=new $p(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Bn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,YE.searchByType(e,n,i,s)}a(VE,"executeConditionSearch")});var Gn=d((sP,KE)=>{"use strict";var rI=m().OPERATIONS_ENUM,vn=class{constructor(t,r,s,n=void 0){this.operation=rI.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(vn,"DeleteObject");KE.exports=vn});var qa=d((nP,WE)=>{"use strict";var Fn=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Fn,"DropAttributeObject");WE.exports=Fn});var Va=d((aP,QE)=>{"use strict";var sI=lt(),nI=Gn(),iP=qa(),et=m(),iI=I(),xa=F(),aI=Vt(),oI=dr(),_I=Xr(),{getBaseSchemaPath:cI}=V(),uI=require("path");QE.exports=EI;async function EI(e,t=!0){let r;e.schema===et.SYSTEM_SCHEMA_NAME?r=aI[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await dI(e),n=uI.join(cI(),e.schema.toString()),i=await xa.openEnvironment(n,e.table);return t===!0&&await lI(e,i,r.hash_attribute),xa.dropDBI(i,e.attribute),s}a(EI,"lmdbDropAttribute");async function lI(e,t,r){let s=xa.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(lI,"removeAttributeFromAllObjects");async function dI(e){let t=new sI(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,et.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[et.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,et.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await oI(t)).filter(o=>o[et.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(iI.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[et.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new nI(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return _I(i)}a(dI,"dropAttributeFromSystem")});var zE=d((oP,ZE)=>{"use strict";var SI=Va(),TI=qa(),JE=I(),XE=y(),hI=De().LMDB_ERRORS_ENUM;ZE.exports=fI;async function fI(e){if(JE.isEmpty(global.hdb_schema[e.schema])||JE.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new TI(e.schema,e.table,r);try{await SI(n,!1)}catch(i){i.message!==hI.DBI_DOES_NOT_EXIST&&XE.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw XE.error(`Error dropping attribute ${r}`),s}}a(fI,"lmdbDropAllAttributes")});var Ya=d((cP,ol)=>{"use strict";var sl=lt(),nl=Gn(),il=dr(),al=Xr(),_P=zE(),Oe=m(),jE=I(),el=F(),{getBaseSchemaPath:RI,getTransactionAuditStorePath:mI}=V(),tl=require("path"),rl=y();ol.exports=AI;async function AI(e){try{if(jE.isEmpty(global.hdb_schema[e.schema])||jE.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await NI(e),await OI(e);let t=tl.join(RI(),e.schema.toString());try{await el.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")rl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tl.join(mI(),e.schema.toString());await el.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")rl.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(AI,"lmdbDropTable");async function NI(e){let t=new sl(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await il(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 nl(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await al(n)}a(NI,"deleteAttributesFromSystem");async function OI(e){let t=new sl(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Oe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await il(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 nl(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await al(n)}catch(i){throw i}}a(OI,"dropTableFromSystem")});var cl=d((EP,_l)=>{"use strict";var gI=require("fs-extra"),pI=lt(),II=ts(),CI=Gn(),bI=Ya(),LI=Xr(),yI=Ga(),wI=dr(),St=m(),uP=I(),UI=require("path"),{getBaseSchemaPath:DI}=V(),{handleHDBError:MI,hdb_errors:PI}=J(),{HDB_ERROR_MSGS:HI,HTTP_STATUS_CODES:BI}=PI;_l.exports=vI;async function vI(e){let t;try{t=await GI(e.schema);let r=new pI(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,St.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[St.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await wI(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await bI(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new CI(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LI(n);let i=UI.join(DI(),t.toString());await gI.remove(i)}catch(r){throw r}}a(vI,"lmdbDropSchema");async function GI(e){let t=new II(St.SYSTEM_SCHEMA_NAME,St.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[St.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await yI(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw MI(new Error,HI.SCHEMA_NOT_FOUND(e),BI.NOT_FOUND,void 0,void 0,!0);return s}a(GI,"validateDropSchema")});var El=d((lP,ul)=>{"use strict";var qn=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(qn,"CreateTableObject");ul.exports=qn});var dl=d((SP,ll)=>{"use strict";var FI=require("path"),qI=require("fs-extra"),xn=F(),{getTransactionAuditStorePath:xI}=V(),ka=Ee(),dP=El();ll.exports=VI;async function VI(e){let t;try{let r=FI.join(xI(),e.schema.toString());await qI.mkdirp(r),t=await xn.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{xn.createDBI(t,ka.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),xn.createDBI(t,ka.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),xn.createDBI(t,ka.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(VI,"createTransactionsAuditEnvironment")});var fl=d((TP,hl)=>{"use strict";var $a=m(),Sl=F(),YI=ir(),kI=require("path"),{getSystemSchemaPath:$I,getBaseSchemaPath:KI}=V(),WI=Vt(),QI=ln(),Ka=En(),JI=y(),XI=dl(),Qa=WI.hdb_table,Tl=[];for(let e=0;e<Qa.attributes.length;e++)Tl.push(Qa.attributes[e].attribute);hl.exports=ZI;async function ZI(e,t){let r=kI.join(KI(),t.schema.toString()),s=new Ka(t.schema,t.table,$a.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ka(t.schema,t.table,$a.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ka(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Sl.createEnvironment(r,t.table),e!==void 0){let o=await Sl.openEnvironment($I(),$a.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YI.insertRecords(o,Qa.hash_attribute,Tl,[e]),await Wa(s),await Wa(n),await Wa(i)}await XI(t)}catch(o){throw o}}a(ZI,"lmdbCreateTable");async function Wa(e){try{await QI(e)}catch(t){JI.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Wa,"createAttribute")});var ml=d((hP,Rl)=>{"use strict";var zI=dn(),jI=fn(),eC=Nn(),Sr=m(),tC=ir().updateRecords,rC=F(),sC=require("path"),{getBaseSchemaPath:nC}=V(),iC=Jr(),aC=y();Rl.exports=oC;async function oC(e){try{let{schema_table:t,attributes:r}=zI(e);jI(e,r,t.hash_attribute),e.schema!==Sr.SYSTEM_SCHEMA_NAME&&(r.includes(Sr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Sr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Sr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await eC(e.hdb_auth_header,t,r),n=sC.join(nC(),e.schema.toString()),i=await rC.openEnvironment(n,e.table),o=await tC(i,t.hash_attribute,r,e.records,e[Sr.CLUSTERING_FLAG]!==!0);try{await iC(e,o)}catch(_){aC.error(`unable to write transaction due to ${_.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(oC,"lmdbUpdateRecords")});var Nl=d((fP,Al)=>{"use strict";var _C=m().OPERATIONS_ENUM,Vn=class{constructor(t,r,s,n=void 0){this.operation=_C.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Vn,"UpsertObject");Al.exports=Vn});var gl=d((mP,Ol)=>{"use strict";var RP=Nl(),cC=dn(),uC=fn(),EC=Nn(),Tr=m(),lC=ir().upsertRecords,dC=F(),SC=require("path"),{getBaseSchemaPath:TC}=V(),hC=Jr(),fC=y(),{handleHDBError:RC,hdb_errors:mC}=J();Ol.exports=AC;async function AC(e){let t;try{t=cC(e)}catch(c){throw RC(c,c.message,mC.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;uC(e,s,r.hash_attribute),e.schema!==Tr.SYSTEM_SCHEMA_NAME&&(s.includes(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Tr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Tr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await EC(e.hdb_auth_header,r,s),i=SC.join(TC(),e.schema.toString()),o=await dC.openEnvironment(i,e.table),_=await lC(o,r.hash_attribute,s,e.records,e[Tr.CLUSTERING_FLAG]!==!0);try{await hC(e,_)}catch(c){fC.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(AC,"lmdbUpsertRecords")});var yl=d((AP,Ll)=>{"use strict";var NC=lt(),pl=I(),Il=y(),OC=dr(),Cl=m(),gC=Ma().deleteRecords,pC=F(),IC=require("path"),{getBaseSchemaPath:CC}=V(),{promisify:bC}=require("util"),LC=bC(setTimeout),bl=1e4,yC=10;Ll.exports=wC;async function wC(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(pl.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 NC(e.schema,e.table,Cl.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await OC(n,Cl.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw Il.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return pl.isEmptyOrZeroLength(s)?(Il.trace("No records found to delete"),{message:"No records found to delete"}):await UC(e,s,t)}a(wC,"lmdbDeleteRecordsBefore");async function UC(e,t,r){let s=IC.join(CC(),e.schema.toString()),n=await pC.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=bl){let c=t.slice(o,o+bl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await gC(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await LC(yC)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(UC,"chunkDeletes")});var Ul=d((NP,wl)=>{"use strict";var Yn=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Yn,"DeleteBeforeObject");wl.exports=Yn});var Ml=d((OP,Dl)=>{"use strict";var kn=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(kn,"DeleteAuditLogsBeforeResults");Dl.exports=kn});var Bl=d((pP,Hl)=>{"use strict";var Ja=F(),{getTransactionAuditStorePath:DC}=V(),gP=Ul(),MC=require("path"),rs=Ee(),PC=I(),Pl=Ml(),HC=require("util").promisify,BC=HC(setTimeout),vC=1e4,GC=100;Hl.exports=FC;async function FC(e){let t=MC.join(DC(),e.schema),r=await Ja.openEnvironment(t,e.table,!0),s=Ja.listDBIs(r);Ja.initializeDBIs(r,rs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Pl;do n=await qC(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 BC(GC);while(n.transactions_deleted>0);return i}a(FC,"deleteAuditLogsBefore");async function qC(e,t){let r=new Pl;try{let s=e.dbis[rs.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 _=o[rs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];PC.isEmpty(_)||(n=e.dbis[rs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[rs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>vC)break}return await n,r}catch(s){throw s}}a(qC,"deleteTransactions")});var Yl=d((IP,Vl)=>{"use strict";var Xa=F(),hr=Ee(),vl=Ft(),Za=m(),Gl=I(),{getTransactionAuditStorePath:xC}=V(),VC=require("path"),YC=Er(),$n=or(),kC=y();Vl.exports=$C;async function $C(e){let t=VC.join(xC(),e.schema),r=await Xa.openEnvironment(t,e.table,!0),s=Xa.listDBIs(r);Xa.initializeDBIs(r,hr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Za.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Fl(r,e.search_values);case Za.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,WC(r,e.search_values,n);case Za.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return KC(r,e.search_values);default:return Fl(r)}}a($C,"readAuditLog");function Fl(e,t=[0,vl.getMicroTime()]){Gl.isEmpty(t[0])&&(t[0]=0),Gl.isEmpty(t[1])&&(t[1]=vl.getMicroTime());let r=[];try{let s=e.dbis[hr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new $n,i);r.push(o)}return r}catch(s){throw s}}a(Fl,"searchTransactionsByTimestamp");function KC(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[hr.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,xl(e,i))}return Object.fromEntries(r)}a(KC,"searchTransactionsByUsername");function WC(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=YC.equals(e,hr.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,hr.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],A=Number(S);s.has(A)?s.get(A).push(u.toString()):s.set(A,[u.toString()])}}let n=Array.from(s.keys()),i=xl(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);ql(c,"records",r,E,o),ql(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(WC,"searchTransactionsByHashValues");function ql(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new $n(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new $n(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(ql,"loopRecords");function xl(e,t){let r=[];try{let s=e.dbis[hr.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 $n,i);r.push(o)}}catch(i){kC.warn(i)}return r}catch(s){throw s}}a(xl,"batchSearchTransactions")});var $l=d((CP,kl)=>{"use strict";var QC=require("path"),{getBaseSchemaPath:JC}=V(),XC=F();kl.exports={writeTransaction:ZC};async function ZC(e,t,r){let s=QC.join(JC(),e);return(await XC.openEnvironment(s,t)).transaction(r)}a(ZC,"writeTransaction")});var Wl=d((bP,Kl)=>{"use strict";var zC=require("path"),{getBaseSchemaPath:jC}=V(),eb=F();Kl.exports={flush:tb};async function tb(e,t){let r=zC.join(jC(),e.toString());return(await eb.openEnvironment(r,t.toString())).flushed}a(tb,"flush")});var Jl=d((LP,Ql)=>{"use strict";var z=y(),{handleHDBError:rb}=J(),sb=ia(),nb=ln(),ib=wa(),ab=iE(),ob=Xr(),_b=Ga(),cb=LE(),ub=BE(),Eb=dr(),lb=$E(),db=cl(),Sb=fl(),Tb=ml(),hb=gl(),fb=yl(),Rb=Bl(),mb=Ya(),Ab=Va(),Nb=Yl(),Ob=$l(),gb=Wl(),Kn=class extends sb{async searchByConditions(t){try{return lb(t)}catch(r){throw z.error(r),r}}async getDataByHash(t){try{return await _b(t)}catch(r){throw z.error(r),r}}async searchByHash(t){try{return await cb(t)}catch(r){throw z.error(r),r}}async getDataByValue(t,r){try{return await ub(t,r)}catch(s){throw z.error(s),s}}async searchByValue(t){try{return await Eb(t)}catch(r){throw z.error(r),r}}async createSchema(t){try{return await ab(t)}catch(r){throw z.error(r),r}}async dropSchema(t){try{return await db(t)}catch(r){throw z.error(r),r}}async createTable(t,r){try{return await Sb(t,r)}catch(s){throw z.error(s),s}}async dropTable(t){try{return await mb(t)}catch(r){throw z.error(r),r}}async createAttribute(t){try{return await nb(t)}catch(r){throw z.error(r),r}}async createRecords(t){try{return await ib(t)}catch(r){throw z.error(r),r}}async updateRecords(t){try{return await Tb(t)}catch(r){throw z.error(r),r}}async upsertRecords(t){try{return await hb(t)}catch(r){throw rb(r,null,null,z.ERR,r)}}async deleteRecords(t){try{return await ob(t)}catch(r){throw z.error(r),r}}async deleteRecordsBefore(t){try{return await fb(t)}catch(r){throw z.error(r),r}}async dropAttribute(t){try{return await Ab(t)}catch(r){throw z.error(r),r}}async deleteAuditLogsBefore(t){try{return await Rb(t)}catch(r){throw z.error(r),r}}async readAuditLog(t){try{return await Nb(t)}catch(r){throw z.error(r),r}}writeTransaction(t,r,s){return Ob.writeTransaction(t,r,s)}flush(t,r){return gb.flush(t,r)}};a(Kn,"LMDBBridge");Ql.exports=Kn});var fr=d((yP,Zl)=>{"use strict";var pb=Jl(),Ib=ia(),Cb=de();Cb.initSync();var Xl;function bb(){return Xl instanceof Ib?Xl:new pb}a(bb,"getBridge");Zl.exports=bb()});var ud=d((UP,cd)=>{"use strict";var za=require("recursive-iterator"),Lb=require("alasql"),ja=require("clone"),zl=I(),{handleHDBError:jl,hdb_errors:yb}=J(),{HDB_ERROR_MSGS:ed,HTTP_STATUS_CODES:td}=yb,wb=["DISTINCT_ARRAY"],rd=Symbol("validateTables"),eo=Symbol("validateTable"),wP=Symbol("getAllColumns"),sd=Symbol("validateAllColumns"),Wn=Symbol("findColumn"),nd=Symbol("validateOrderBy"),ss=Symbol("validateSegment"),to=Symbol("validateColumn"),id=Symbol("setColumnsForTable"),ad=Symbol("checkColumnsForAsterisk"),od=Symbol("validateGroupBy"),_d=Symbol("hasColumns"),Qn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[rd](),this[ad](),this[sd]()}[rd](){if(this[_d]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[eo](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[eo](t.table)})}}[_d](){let t=!1,r=new za(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[eo](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw jl(new Error,ed.SCHEMA_NOT_FOUND(t.databaseid),td.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw jl(new Error,ed.TABLE_NOT_FOUND(t.databaseid,t.tableid),td.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ja(s);n.table=ja(t),this.attributes.push(n)})}[Wn](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)}[ad](){let t=new za(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[id](r.tableid)}[id](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Lb.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[sd](){this[ss](this.statement.columns,!1),this[ss](this.statement.joins,!1),this[ss](this.statement.where,!1),this[od](this.statement.group,!1),this[ss](this.statement.order,!0)}[ss](t,r){if(!t)return;let s=new za(t),n=[];for(let{node:i,path:o}of s)!zl.isEmpty(i)&&!zl.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[nd](i):n.push(this[to](i)));return n}[od](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&wb.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ja(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Wn](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[Wn](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,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[nd](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[to](t)}[to](t){let r=this[Wn](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(Qn,"SelectValidator");cd.exports=Qn});var Sd=d((DP,dd)=>{"use strict";var Ed=require("lodash"),ns=require("mathjs"),Ub=require("jsonata"),ld=I();dd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Ed.uniqWith(e,Ed.isEqual):e,searchJSON:Db,mad:is.bind(null,ns.mad),mean:is.bind(null,ns.mean),mode:is.bind(null,ns.mode),prod:is.bind(null,ns.prod),median:is.bind(null,ns.median)};function is(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(is,"aggregateFunction");function Db(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(ld.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ld.isEmpty(this.__ala__.res[r])){let s=Ub(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Db,"searchJSON")});var hd=d((MP,Td)=>{"use strict";var X=require("moment"),ro="YYYY-MM-DDTHH:mm:ss.SSSZZ";X.suppressDeprecationWarnings=!0;Td.exports={current_date:()=>X().utc().format("YYYY-MM-DD"),current_time:()=>X().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return X(e).utc().format("YYYY");case"month":return X(e).utc().format("MM");case"day":return X(e).utc().format("DD");case"hour":return X(e).utc().format("HH");case"minute":return X(e).utc().format("mm");case"second":return X(e).utc().format("ss");case"millisecond":return X(e).utc().format("SSS");default:break}},date:e=>X(e).utc().format(ro),date_format:(e,t)=>X(e).utc().format(t),date_add:(e,t,r)=>X(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>X(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=X(e).utc(),n=X(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>X().utc().valueOf(),get_server_time:()=>X().format(ro),offset_utc:(e,t)=>X(e).utc().utcOffset(t).format(ro)}});var Ad=d((PP,md)=>{"use strict";var Mb=require("@turf/area"),Pb=require("@turf/length"),Hb=require("@turf/circle"),Bb=require("@turf/difference"),vb=require("@turf/distance"),Gb=require("@turf/boolean-contains"),Fb=require("@turf/boolean-equal"),qb=require("@turf/boolean-disjoint"),xb=require("@turf/helpers"),fd=m(),D=I();md.exports={geoArea:Vb,geoLength:Yb,geoCircle:kb,geoDifference:$b,geoDistance:Rd,geoNear:Kb,geoContains:Wb,geoEqual:Qb,geoCrosses:Jb,geoConvert:Xb};var so="geo1 is required",no="geo2 is required";function Vb(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Mb.default(e)}a(Vb,"geoArea");function Yb(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Pb.default(e,{units:t||"kilometers"})}a(Yb,"geoLength");function kb(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),Hb.default(e,t,{units:r||"kilometers"})}a(kb,"geoCircle");function $b(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Bb(e,t)}a($b,"geoDifference");function Rd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),vb.default(e,t,{units:r||"kilometers"})}a(Rd,"geoDistance");function Kb(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Rd(e,t,s)<=r}a(Kb,"geoNear");function Wb(e,t){if(D.isEmpty(e))throw new Error(so);if(D.isEmpty(e))throw new Error(no);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Gb.default(e,t)}a(Wb,"geoContains");function Qb(e,t){if(D.isEmpty(e))throw new Error(so);if(D.isEmpty(e))throw new Error(no);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),Fb.default(e,t)}a(Qb,"geoEqual");function Jb(e,t){if(D.isEmpty(e))throw new Error(so);if(D.isEmpty(e))throw new Error(no);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!qb.default(e,t)}a(Jb,"geoCrosses");function Xb(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(fd.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(fd.GEO_CONVERSION_ENUM).join(",")}`);return xb[t](e,r)}a(Xb,"geoConvert")});var Od=d((HP,Nd)=>{var $t=Sd(),we=hd(),tt=Ad();Nd.exports=e=>{e.aggr.mad=e.aggr.MAD=$t.mad,e.aggr.mean=e.aggr.MEAN=$t.mean,e.aggr.mode=e.aggr.MODE=$t.mode,e.aggr.prod=e.aggr.PROD=$t.prod,e.aggr.median=e.aggr.MEDIAN=$t.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=$t.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=$t.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=we.current_date,e.fn.current_time=e.fn.CURRENT_TIME=we.current_time,e.fn.extract=e.fn.EXTRACT=we.extract,e.fn.date=e.fn.DATE=we.date,e.fn.date_format=e.fn.DATE_FORMAT=we.date_format,e.fn.date_add=e.fn.DATE_ADD=we.date_add,e.fn.date_sub=e.fn.DATE_SUB=we.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=we.date_diff,e.fn.now=e.fn.NOW=we.now,e.fn.offset_utc=e.fn.OFFSET_UTC=we.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=we.get_server_time,e.fn.getdate=e.fn.GETDATE=we.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=we.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tt.geoNear}});var Id=d((BP,pd)=>{"use strict";var as=require("lodash"),ae=require("alasql");ae.options.cache=!1;var Zb=Od(),gd=require("clone"),Jn=require("recursive-iterator"),b=y(),w=I(),Rr=fr(),zb=m(),{hdb_errors:jb}=J(),eL="IS NULL",os="There was a problem performing this search. Please check the logs and try again.";Zb(ae);var Xn=class{constructor(t,r){if(w.isEmpty(t))throw b.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(),w.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!w.isEmptyOrZeroLength(s))return b.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw b.error("Error thrown from checkEmptySQL in SQLSearch class method search."),b.error(s),new Error(os)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw b.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),b.error(s),new Error(os)}if(Object.keys(this.data).length===0)return b.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw b.error("Error thrown from processJoins in SQLSearch class method search."),b.error(s),new Error(os)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw b.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),b.error(s),new Error(os)}try{return t=await this._finalSQL(),t}catch(s){throw b.error("Error thrown from finalSQL in SQLSearch class method search."),b.error(s),new Error(os)}}_getColumns(){let t=new Jn(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(gd(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=as.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(w.isEmpty(this.statement.where)){b.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Jn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!w.isEmpty(r)&&r.right)if(w.isNotEmptyAndHasValue(r.right.value)){let s=w.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ae.yy.LogicValue({value:s}):r.right instanceof ae.yy.StringValue&&!w.isEmpty(s)&&w.autoCasterIsNumberCheck(s.toString())&&(r.right=new ae.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=w.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ae.yy.LogicValue({value:i}):s instanceof ae.yy.StringValue&&w.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ae.yy.NumValue({value:i}))});if(t){b.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Jn(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(!w.isEmpty(zb.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(w.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(w.isEmptyOrZeroLength(r.left.columnid)||w.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(w.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!w.isEmpty(r.right.value)||!w.isEmpty(r.left.value)?s.add(w.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?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(w.isEmptyOrZeroLength(this.all_table_attributes)&&w.isEmptyOrZeroLength(this.statement.from)&&w.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&&as.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(w.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);w.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(w.isEmptyOrZeroLength(this.all_table_attributes)&&!w.isEmptyOrZeroLength(this.columns.columns))return t;if(w.isEmptyOrZeroLength(this.all_table_attributes)&&w.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ae.promise(r)}catch(r){throw b.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),b.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(gd(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(w.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(eL)>-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=as.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}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(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,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!w.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!w.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await Rr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){b.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await Rr.getDataByValue(l);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,w.autoCast(S)))}))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else if(!w.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!w.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let A=await Rr.getDataByValue(_,S.operation);if(c)for(let N in A)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,w.autoCast(N)));else for(let N in A)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,A[N][n.attribute]),this._setMergedHashAttribute(i,w.autoCast(N)))}}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),b.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await Rr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,w.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,w.autoCast(l)))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),b.error(E)}}}_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 ae.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 ae.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ae.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 ae.yy.FuncValue:new ae.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let A=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(A+=" ON "+S.on.toString()),i.push(A),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(S=>{let A=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${A}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${A}\` AS "${N}.${A}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,A=this._convertColumnsToIndexes(S,n);h=await ae.promise(A,t),t=null}catch(S){throw b.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),b.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,A=h.length;S<A;S++){let N=h[S];o.forEach(C=>{N[C.key]!==null&&N[C.key]!==void 0&&C.keys.add(N[C.key])})}o.forEach(S=>{let A=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=as.difference(A,[...S.keys].map(C=>C.toString()));for(let C=0,fe=N.length;C<fe;C++){let v=N[C];delete this.data[`${S.schema}_${S.table}`].__merged_data[v]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Jn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=as.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){b.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),b.error(i)}}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 E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await Rr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let A=0;A<u;A++){let N=n.columns[A],C=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(C)}}}}catch(r){throw b.error("Error thrown from getDataByHash function in SQLSearch class method getData."),b.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 _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();b.trace(`Final SQL: ${n}`),s=await ae.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),b.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw b.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),b.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 b.error(jb.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),b.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,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Rr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){b.error("There was an error when processing this SQL operation. Check your logs"),b.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Xn,"SQLSearch");pd.exports=Xn});var _s=d((vP,bd)=>{"use strict";var tL=ud();bd.exports={searchByConditions:iL,searchByHash:aL,searchByValue:oL,search:_L};var io=fr(),Cd=require("util"),rL=Cd.callbackify(io.searchByHash),sL=Cd.callbackify(io.searchByValue),nL=Id();async function iL(e){return io.searchByConditions(e)}a(iL,"searchByConditions");function aL(e,t){try{rL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(aL,"searchByHash");function oL(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),sL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(oL,"searchByValue");function _L(e,t){try{let r=new tL(e);r.validate(),new nL(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(_L,"search")});var us=d((GP,Ud)=>{"use strict";var cs=require("crypto"),yd="aes-256-cbc",cL=32,uL=16,ao=64,wd=32,EL=ao+wd,Ld=new Map;Ud.exports={encrypt:lL,decrypt:dL,createNatsTableStreamName:SL};function lL(e){let t=cs.randomBytes(cL),r=cs.randomBytes(uL),s=cs.createCipheriv(yd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(lL,"encrypt");function dL(e){let t=e.substr(0,ao),r=e.substr(ao,wd),s=e.substr(EL,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=cs.createDecipheriv(yd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(dL,"decrypt");function SL(e,t){let r=`${e}.${t}`,s=Ld.get(r);return s||(s=cs.createHash("md5").update(`${e}.${t}`).digest("hex"),Ld.set(r,s)),s}a(SL,"createNatsTableStreamName")});var co=d((FP,Gd)=>{"use strict";var Md=_s(),Lt=y(),Pd=pa(),TL=require("lodash"),hL=require("path"),fL=us(),oo=I(),{promisify:Hd}=require("util"),q=m(),{handleHDBError:Zn,hdb_errors:RL}=J(),{HDB_ERROR_MSGS:zn,HTTP_STATUS_CODES:Bd}=RL,mL=de();mL.initSync();var Dd=F(),AL=V(),Es=Hd(Md.searchByValue),NL=Hd(Md.searchByHash),mr="name",vd="hash_attribute",_o="schema",OL="schema_table",gL="attribute";Gd.exports={describeAll:pL,describeTable:jn,describeSchema:CL};async function pL(e){try{let t=oo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:mr,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[mr]},i=await Es(n);if(oo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:q.ID_ATTRIBUTE_STRING,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[vd,q.ID_ATTRIBUTE_STRING,mr,_o]},u=await Es(c),E=[];for(let h of u)try{let S;if(t||s)S=await jn({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let A=r[h.schema].tables[h.name].attribute_permissions;S=await jn({schema:h.schema,table:h.name},A)}S&&E.push(S)}catch(S){Lt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Lt.error("Got an error in describeAll"),Lt.error(t),Zn(new Error,zn.DESCRIBE_ALL_ERR)}}a(pL,"describeAll");async function jn(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=Pd.describe_table(e);if(o)throw o;if(r===q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[q.SYSTEM_SCHEMA_NAME][s];let _={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:mr,search_value:s,hash_values:[],get_attributes:[q.WILDCARD_SEARCH_VALUE]},c=await Es(_);if(!c||c.length===0)throw Zn(new Error,zn.TABLE_NOT_FOUND(e.schema,e.table),Bd.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Zn(new Error,zn.INVALID_TABLE_ERR(i));let E={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:OL,search_value:r+"."+s,get_attributes:[gL]},l=await Es(E);l=TL.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=IL(n)),i.attributes=l,i.clustering_stream_name=fL.createNatsTableStreamName(u.schema,u.name);try{let h=hL.join(AL.getBaseSchemaPath(),i.schema.toString()),S=await Dd.openEnvironment(h,i.name),A=Dd.statDBI(S,i.hash_attribute);i.record_count=A.entryCount}catch(h){Lt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Lt.error(`There was an error getting attributes for table '${u.name}'`),Lt.error(E)}return i}a(jn,"descTable");function IL(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(IL,"getAttrsByPerms");async function CL(e){let t=Pd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_o,search_value:s,hash_values:[],get_attributes:[vd,q.ID_ATTRIBUTE_STRING,mr,_o]},i=await Es(n);if(i&&i.length<1){let o={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[mr]},_=await NL(o);if(_&&_.length<1)throw Zn(new Error,zn.SCHEMA_NOT_FOUND(e.schema),Bd.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),oo.isEmpty(c)||c.describe){let u=await jn({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Lt.error(`Error describing schema table '${e.schema}.${_}'`),Lt.error(c)}})),o}}a(CL,"describeSchema")});var uo=d((VP,Yd)=>{var qP=require("async"),Ar=Vt(),xP=y(),{callbackify:xd,promisify:bL}=require("util");Yd.exports={setSchemaDataToGlobal:Fd,getTableSchema:wL,getSystemSchema:DL,setSchemaDataToGlobalAsync:bL(Fd)};var Vd=co(),LL=xd(Vd.describeAll),yL=xd(Vd.describeTable);function Fd(e){LL(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Ar),global.hdb_schema=r,e(null,null)})}a(Fd,"setSchemaDataToGlobal");function qd(e,t){return e==="system"?Ar[t]:global.hdb_schema[e][t]}a(qd,"returnSchema");function wL(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?UL(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,qd(e,t))}):r(null,qd(e,t))}a(wL,"getTableSchema");function UL(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Ar:global.hdb_schema={system:Ar},r();return}yL(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Ar}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(UL,"setTableDataToGlobal");function DL(){return Ar}a(DL,"getSystemSchema")});var si=d((YP,Kd)=>{"use strict";var ti=na(),ve=I(),ML=require("util"),ri=fr(),PL=uo(),Eo=y(),{handleHDBError:yt,hdb_errors:HL}=J(),{HTTP_STATUS_CODES:Kt}=HL,BL=ML.promisify(PL.getTableSchema),vL="updated",kd="inserted",$d="upserted";Kd.exports={insert:FL,update:qL,upsert:xL,validation:GL,flush:VL};async function GL(e){if(ve.isEmpty(e))throw new Error("invalid update parameters defined.");if(ve.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ve.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await BL(e.schema,e.table),r=ti(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(_=>{if(o&&ve.isEmptyOrZeroLength(_[s]))throw Eo.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ve.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw Eo.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ve.isEmpty(_[s])&&_[s]!==""&&n.has(ve.autoCast(_[s]))&&(_.skip=!0),n.add(ve.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(GL,"validation");async function FL(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ti(e);if(t)throw yt(new Error,t.message,Kt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw yt(new Error,r,Kt.BAD_REQUEST);try{let s=await ri.createRecords(e);return ei(kd,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(FL,"insertData");async function qL(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ti(e);if(t)throw yt(new Error,t.message,Kt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw yt(new Error,r,Kt.BAD_REQUEST);try{let s=await ri.updateRecords(e);return ve.isEmpty(s.existing_rows)?ei(vL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):ei(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(qL,"updateData");async function xL(e){if(e.operation!=="upsert")throw yt(new Error,"invalid operation, must be upsert",Kt.INTERNAL_SERVER_ERROR);let t=ti(e);if(t)throw yt(new Error,t.message,Kt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw yt(new Error,r,Kt.BAD_REQUEST);try{let s=await ri.upsertRecords(e);return ei($d,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw yt(s,null,null,Eo.ERR,n)}}a(xL,"upsertData");function ei(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===kd?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===$d?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(ei,"returnObject");function VL(e){return ri.flush(e.schema,e.table)}a(VL,"flush")});var Xd=d((kP,Jd)=>{var YL=_t(),lo=require("joi"),{hdb_schema_table:Wd}=tr(),Qd={schema:Wd,table:Wd},kL={date:lo.date().iso().required()},$L={timestamp:lo.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Jd.exports=function(e,t){let r=t==="timestamp"?{...Qd,...$L}:{...Qd,...kL},s=lo.object(r);return YL.validateBySchema(e,s)}});var eS=d(($P,jd)=>{var KL=_t(),Zd=require("joi"),{hdb_schema_table:zd}=tr(),WL=Zd.object({schema:zd,table:zd,hash_values:Zd.array().required()});jd.exports=function(e){return KL.validateBySchema(e,WL)}});var rS=d((KP,tS)=>{"use strict";var ni=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ni,"InsertObject");var ii=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(ii,"NoSQLSeachObject");var ai=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ai,"DeleteResponseObject");tS.exports={InsertObject:ni,NoSQLSeachObject:ii,DeleteResponseObject:ai}});var _S=d((WP,oS)=>{"use strict";var nS=Xd(),QL=eS(),oi=I(),sS=require("moment"),iS=y(),{promisify:JL,callbackify:XL}=require("util"),Wt=m(),ZL=uo(),So=JL(ZL.getTableSchema),To=fr(),{DeleteResponseObject:zL}=rS(),{handleHDBError:wt,hdb_errors:jL}=J(),{HDB_ERROR_MSGS:_i,HTTP_STATUS_CODES:Ut}=jL,ey="records successfully deleted",ty=XL(aS);oS.exports={delete:ty,deleteRecord:aS,deleteFilesBefore:ry,deleteAuditLogsBefore:sy};async function ry(e){let t=nS(e,"date");if(t)throw wt(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);if(!sS(e.date,sS.ISO_8601).isValid())throw wt(new Error,_i.INVALID_DATE,Ut.BAD_REQUEST,Wt.LOG_LEVELS.ERROR,_i.INVALID_DATE,!0);let s=oi.checkSchemaTableExist(e.schema,e.table);if(s)throw wt(new Error,s,Ut.NOT_FOUND,Wt.LOG_LEVELS.ERROR,s,!0);try{let n=await To.deleteRecordsBefore(e);if(await So(e.schema,e.table),iS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(ry,"deleteFilesBefore");async function sy(e){let t=nS(e,"timestamp");if(t)throw wt(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw wt(new Error,_i.INVALID_VALUE("Timestamp"),Ut.BAD_REQUEST,Wt.LOG_LEVELS.ERROR,_i.INVALID_VALUE("Timestamp"),!0);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,Ut.NOT_FOUND,Wt.LOG_LEVELS.ERROR,r,!0);try{let s=await To.deleteAuditLogsBefore(e);return await So(e.schema,e.table),iS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(sy,"deleteAuditLogsBefore");async function aS(e){let t=QL(e);if(t)throw wt(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw wt(new Error,r,Ut.NOT_FOUND,Wt.LOG_LEVELS.ERROR,r,!0);try{await So(e.schema,e.table);let s=await To.deleteRecords(e);return oi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${ey}`),s}catch(s){if(s.message===Wt.SEARCH_NOT_FOUND_MESSAGE){let n=new zL;return n.message=Wt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(aS,"deleteRecord")});var ci=d((QP,ES)=>{var ny=require("crypto"),cS=9;function iy(e){let t=oy(cS),r=uS(e+t);return t+r}a(iy,"createHash");function ay(e,t){let r=e.substr(0,cS),s=r+uS(t+r);return e===s}a(ay,"validateHash");function oy(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(oy,"generateSalt");function uS(e){return ny.createHash("md5").update(e).digest("hex")}a(uS,"md5");ES.exports={hash:iy,validate:ay}});var dS=d((JP,lS)=>{var ho=_t(),Te={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 _y(e){return Te.password.presence=!0,Te.username.presence=!0,Te.role.presence=!0,Te.active.presence=!0,ho.validateObject(e,Te)}a(_y,"addUserValidation");function cy(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,ho.validateObject(e,Te)}a(cy,"alterUserValidation");function uy(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,ho.validateObject(e,Te)}a(uy,"dropUserValidation");lS.exports={addUserValidation:_y,alterUserValidation:cy,dropUserValidation:uy}});var TS=d((XP,SS)=>{"use strict";var Dt=m(),ls=class{constructor(t=0,r=Dt.STORAGE_TYPES_ENUM.LMDB,s=Dt.LICENSE_VALUES.API_CALL_DEFAULT,n=Dt.RAM_ALLOCATION_ENUM.DEFAULT,i=Dt.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(ls,"BaseLicense");var ui=class extends ls{constructor(t=0,r=Dt.STORAGE_TYPES_ENUM.LMDB,s=Dt.LICENSE_VALUES.API_CALL_DEFAULT,n=Dt.RAM_ALLOCATION_ENUM.DEFAULT,i=Dt.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(ui,"ExtendedLicense");SS.exports={BaseLicense:ls,ExtendedLicense:ui}});var No=d((ZP,NS)=>{"use strict";var Or=require("fs-extra"),hS=ci(),fS=require("crypto"),Ey=require("moment"),ly=require("uuid").v4,he=y(),Ro=require("path"),dy=I(),Ue=m(),Sy=TS().ExtendedLicense,Nr="invalid license key format",Ty="061183",hy="mofi25",fy="aes-256-cbc",Ry=16,my=32,RS=de();RS.initSync();var fo;NS.exports={validateLicense:mS,generateFingerPrint:Ny,licenseSearch:AS,getLicense:py};function mo(){return Ro.join(RS.getHdbBasePath(),Ue.LICENSE_KEY_DIR_NAME,Ue.LICENSE_FILE_NAME)}a(mo,"getLicenseDirPath");function Ay(){let e=mo();return Ro.join(e,Ue.LICENSE_FILE_NAME)}a(Ay,"getLicenseFilePath");function Ao(){let e=mo();return Ro.join(e,Ue.REG_KEY_FILE_NAME)}a(Ao,"getFingerPrintFilePath");async function Ny(){let e=Ao();try{return await Or.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Oy();throw he.error(`Error writing fingerprint file to ${e}`),he.error(t),new Error("There was an error generating the fingerprint")}}a(Ny,"generateFingerPrint");async function Oy(){let e=ly(),t=hS.hash(e),r=Ao();try{await Or.mkdirp(mo()),await Or.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw he.error(`Error writing fingerprint file to ${r}`),he.error(s),new Error("There was an error generating the fingerprint")}return t}a(Oy,"writeFingerprint");function mS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ue.STORAGE_TYPES_ENUM.LMDB,api_call:Ue.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ue.RAM_ALLOCATION_ENUM.DEFAULT,version:Ue.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return he.error("empty license key passed to validate."),r;let s=Ao(),n=!1;try{n=Or.statSync(s)}catch(i){he.error(i)}if(n){let i;try{i=Or.readFileSync(s,"utf8")}catch{he.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(hy),_=o[1];_=Buffer.concat([Buffer.from(_)],Ry);let c=Buffer.concat([Buffer.from(i)],my),u=fS.createDecipheriv(fy,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=gy(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Nr),he.error(Nr),new Error(Nr)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Nr),he.error(Nr),new Error(Nr)}else r.exp_date=E;r.exp_date<Ey().valueOf()&&(r.valid_date=!1),hS.validate(o[1],`${Ty}${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||he.error("Invalid licence"),r}a(mS,"validateLicense");function gy(e,t){try{let r=fS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{he.warn("Check old license failed")}}a(gy,"checkOldLicense");function AS(){let e=new Sy;e.api_call=0;let t=[];try{t=Or.readFileSync(Ay(),"utf-8").split(Ue.NEW_LINE)}catch(r){r.code==="ENOENT"?he.info("no license file found"):he.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(dy.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mS(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){he.error("There was an error parsing the license string."),he.error(n),e.api_call=Ue.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ue.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ue.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ue.LICENSE_VALUES.API_CALL_DEFAULT),fo=e,e}a(AS,"licenseSearch");async function py(){return fo||await AS(),fo}a(py,"getLicense")});var Ss=d((zP,HS)=>{"use strict";var IS="username is required",CS="nothing to update, must supply active, role or password to update",bS="password cannot be an empty string",LS="If role is specified, it cannot be empty.",yS="active must be true or false";HS.exports={addUser:Dy,alterUser:My,dropUser:Hy,userInfo:By,listUsers:li,listUsersExternal:vy,setUsersToGlobal:ds,findAndValidateUser:qy,getClusterUser:xy,USERNAME_REQUIRED:IS,ALTERUSER_NOTHING_TO_UPDATE:CS,EMPTY_PASSWORD:bS,EMPTY_ROLE:LS,ACTIVE_BOOLEAN:yS};var wS=si(),Iy=_S(),go=ci(),US=dS(),DS=_s(),po=An(),te=I(),MS=require("validate.js"),L=y(),{promisify:Io}=require("util"),Co=us(),Qt=m(),OS=ot(),Cy=Br(),bo=de(),by=No(),Ly=Vt(),{handleHDBError:rt,hdb_errors:yy}=J(),{HTTP_STATUS_CODES:st,AUTHENTICATION_ERROR_MSGS:Oo,HDB_ERROR_MSGS:gr}=yy,{UserEventMsg:Lo}=Qr(),gS=require("lodash"),PS={username:!0,active:!0,role:!0,password:!0},pS=new Map,Ei=Io(DS.searchByValue),wy=Io(DS.searchByHash),Uy=Io(Iy.delete);async function Dy(e){let t=MS.cleanAttributes(e,PS),r=US.addUserValidation(t);if(r)throw rt(new Error,r.message,st.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 Ei(s)}catch(u){throw L.error("There was an error searching for a role in add user"),L.error(u),u}if(!n||n.length<1)throw rt(new Error,gr.ROLE_NAME_NOT_FOUND(t.role),st.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rt(new Error,gr.DUP_ROLES_FOUND(t.role),st.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Co.encrypt(t.password)),t.password=go.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wS.insert(i)}catch(u){throw L.error("There was an error searching for a user."),L.error(u),u}L.debug(o);try{await ds()}catch(u){throw L.error("Got an error setting users to global"),L.error(u),u}if(o.skipped_hashes.length===1)throw rt(new Error,gr.USER_ALREADY_EXISTS(t.username),st.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,te.sendTransactionToSocketCluster(Qt.INTERNAL_SC_CHANNELS.ADD_USER,c,bo.get(Qt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),po.signalUserChange(new Lo(process.pid)),`${_.username} successfully added`}a(Dy,"addUser");async function My(e){let t=MS.cleanAttributes(e,PS);if(te.isEmptyOrZeroLength(t.username))throw new Error(IS);if(te.isEmptyOrZeroLength(t.password)&&te.isEmptyOrZeroLength(t.role)&&te.isEmptyOrZeroLength(t.active))throw new Error(CS);if(!te.isEmpty(t.password)&&te.isEmptyOrZeroLength(t.password.trim()))throw new Error(bS);if(!te.isEmpty(t.active)&&!te.isBoolean(t.active))throw new Error(yS);let r=Py(t.username);if(!te.isEmpty(t.password)&&!te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Co.encrypt(t.password)),t.password=go.hash(t.password)),t.role==="")throw new Error(LS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await Ei(o)}catch(c){throw L.error("Got an error searching for a role."),L.error(c),c}if(!_||_.length===0){let c=gr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw L.error(c),rt(new Error,c,st.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=gr.ALTER_USER_DUP_ROLES(t.role);throw L.error(c),rt(new Error,c,st.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await wS.update(s)}catch(o){throw L.error("Error during update."),L.error(o),o}try{await ds()}catch(o){throw L.error("Got an error setting users to global"),L.error(o),o}let i={user:null};return i.user=t,te.sendTransactionToSocketCluster(Qt.INTERNAL_SC_CHANNELS.ALTER_USER,i,bo.get(Qt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),po.signalUserChange(new Lo(process.pid)),n}a(My,"alterUser");function Py(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Py,"isClusterUser");async function Hy(e){try{let t=US.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(te.isEmpty(global.hdb_users.get(e.username)))throw rt(new Error,gr.USER_NOT_EXIST(e.username),st.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Uy(r)}catch(i){throw L.error("Got an error deleting a user."),L.error(i),i}L.debug(s);try{await ds()}catch(i){throw L.error("Got an error setting users to global."),L.error(i),i}let n={user:null};return n.user=e,te.sendTransactionToSocketCluster(Qt.INTERNAL_SC_CHANNELS.DROP_USER,n,bo.get(Qt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),po.signalUserChange(new Lo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Hy,"dropUser");async function By(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 wy(r)}catch(n){throw L.error("Got an error searching for a role."),L.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw L.error(r),r}return t}a(By,"userInfo");async function vy(){let e;try{e=await li()}catch(t){throw L.error("Got an error listing users."),L.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(vy,"listUsersExternal");async function li(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=gS.cloneDeep(await Ei(e))}catch(r){throw L.error("Got an error searching for roles."),L.error(r),r}if(!te.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=gS.cloneDeep(await Ei(s))}catch(o){throw L.error("Got an error searching for users."),L.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],Gy(_.role),i.set(_.username,_)}return(await by.getLicense()).enterprise?i:Fy(i)}}catch(e){throw L.error("got an error listing users"),L.error(e),te.errorizeMessage(e)}return null}a(li,"listUsers");function Gy(e){try{if(!e){L.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(Ly)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){L.error("Got an error trying to set system permissions."),L.error(t)}}a(Gy,"appendSystemTablesToRole");function Fy(e){try{if(L.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.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(i,n)):r.set(i,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?(L.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return L.error("error filtering users."),L.error(t),new Map}}a(Fy,"nonEnterpriseFilter");async function ds(){try{let e=await li();global.hdb_users=e}catch(e){throw L.error(e),e}}a(ds,"setUsersToGlobal");async function qy(e,t,r=!0){global.hdb_users||await ds();let s=global.hdb_users.get(e);if(!s)throw rt(new Error,Oo.GENERIC_AUTH_FAIL,st.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rt(new Error,Oo.USER_INACTIVE,st.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(pS.get(t)===s.password)return n;if(go.validate(s.password,t))pS.set(t,s.password);else throw rt(new Error,Oo.GENERIC_AUTH_FAIL,st.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qy,"findAndValidateUser");async function xy(){let e=await li(),t=Cy.getConfigFromFile(Qt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!te.isEmpty(r))return r.decrypt_hash=Co.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+OS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+OS.SERVER_SUFFIX.ADMIN,r}a(xy,"getClusterUser")});var vS=d((jP,BS)=>{"use strict";var Vy=fr();BS.exports={writeTransaction:Yy};function Yy(e,t,r){return Vy.writeTransaction(e,t,r)}a(Yy,"writeTransaction")});var yo=d((eH,ky)=>{ky.exports={name:"harperdb",version:"4.0.5",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.13.0","go-lang":"1.19.3","nats-server":"2.9.8"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"See License in ./license/Community+Edition+and+Evaluation+End+User+License+Agreement.pdf",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ data_layer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && 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/data_layer/harperBridge/lmdbBridge/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --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'","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/data_layer/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:{"@fastify/accepts-serializer":"5.1.0","@fastify/autoload":"5.4.0","@fastify/compress":"6.1.1","@fastify/cors":"8.1.0","@fastify/static":"6.5.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",async:"3.2.3","aws-sdk":"2.1096.0",chalk:"4.1.2","cli-progress":"3.10.0",clone:"2.1.2",esbuild:"^0.14.49","fast-glob":"3.2.11",fastify:"4.8.1","fastify-plugin":"4.2.1","fill-range":"7.0.1","fs-extra":"10.0.1","human-readable-ids":"1.0.4",inquirer:"8.2.2","is-number":"7.0.0",joi:"17.6.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"8.5.1",lmdb:"2.7.6",lodash:"4.17.21",mathjs:"10.4.0",microtime:"3.1.1",minimist:"1.2.6",mkcert:"1.5.0",moment:"2.29.4",msgpackr:"1.8.2",nats:"2.9.2",needle:"3.1.0","node-ipc":"9.1.4","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.3.0",papaparse:"5.3.2",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.3.1",pm2:"5.2.0",prompt:"1.2.2","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.3.5","stream-chain":"2.2.5","stream-json":"1.7.4",systeminformation:"5.12.4","tar-fs":"2.1.1","truncate-utf8-bytes":"1.0.2",ulidx:"0.3.0",uuid:"9.0.0","validate.js":"0.11.1",yaml:"1.10.2"},devDependencies:{axios:"0.27.2",chai:"4.3.4","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":"2.0.0","intercept-stdout":"0.1.2",mocha:"8.3.2","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.2.3","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.21.0","newman-reporter-teamcity":"0.1.11","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.3.2",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"},"newman-reporter-html":{newman:"5.2.3"}}}});var qo=d((EH,sT)=>{"use strict";var Tt=de();Tt.initSync();var $y=require("fs-extra"),Ky=require("semver"),ms=require("path"),{monotonicFactory:Wy}=require("ulidx"),Qy=Wy(),FS=require("util"),qS=require("child_process"),Jy=FS.promisify(qS.exec),Xy=qS.spawn,x=ot(),$=m(),Ho=I(),ht=y(),di=us(),Zy=vS(),Ts=Br(),{encode:Do,decode:xS}=require("msgpackr"),{isEmpty:Jt}=Ho,VS=Ss(),tH=ts(),zy=_s(),rH=FS.promisify(zy.searchByHash),{connect:jy,StorageType:YS,RetentionPolicy:kS,AckPolicy:$S,DeliverPolicy:Mo,NatsConnection:sH,JetStreamManager:nH,JetStreamClient:iH,StringCodec:aH,JSONCodec:ew,createInbox:Bo,StreamSource:oH,headers:tw,toJsMsg:rw,nuid:_H,JetStreamOptions:cH,ErrorCode:GS,nanos:uH}=require("nats"),{PACKAGE_ROOT:sw}=m(),nw=yo(),KS=ew(),iw="clustering",aw=nw.engines[x.NATS_SERVER_NAME],ow=ms.join(sw,"dependencies"),Po=ms.join(ow,`${process.platform}-${process.arch}`,x.NATS_BINARY_NAME),wo,Uo,hs,fs,Rs,Je;sT.exports={runCommand:WS,checkNATSServerInstalled:_w,createConnection:vo,getConnection:Si,getJetStreamManager:pr,getJetStream:QS,getNATSReferences:Ge,getServerList:uw,createLocalStream:Go,listStreams:JS,deleteLocalStream:Ew,getServerConfig:As,listRemoteStreams:lw,viewStream:dw,publishToStream:Sw,createWorkQueueStream:Tw,addSourceToWorkStream:XS,request:hw,removeSourceFromWorkStream:zS,reloadNATS:Fo,reloadNATSHub:fw,reloadNATSLeaf:Rw,extractServerName:ZS,requestErrorHandler:mw,updateWorkStream:Aw,createLocalTableStream:eT,createTableStreams:Nw,purgeTableStream:tT,purgeSchemaTableStreams:Ow,getStreamInfo:gw,updateNodeNameLocalStreams:pw,closeConnection:cw};async function WS(e,t=void 0){let{stdout:r,stderr:s}=await Jy(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(zS,"runCommand");async function Iy(){try{await oy.access(Go)}catch{return!1}let e=await zS(`${Go} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _y.eq(t,Oy)}a(Iy,"checkNATSServerInstalled");async function qo(e,t,r,s=!0,n="127.0.0.1"){return Ty({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(qo,"createConnection");async function py(){Xe&&(await Xe.close(),Xe=void 0)}a(py,"closeConnection");async function hi(){if(!Xe){let e=await WS.getClusterUser();if(zt(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=at.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Xe=await qo(t,e.username,e.decrypt_hash)}return Xe}a(hi,"getConnection");async function br(){if(As)return As;zt(Xe)&&await hi();let{domain:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(zt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return As=await Xe.jetstreamManager({domain:e}),As}a(br,"getJetStreamManager");async function jS(){if(ms)return ms;zt(Xe)&&await hi();let{domain:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(zt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ms=Xe.jetstream({domain:e}),ms}a(jS,"getJetStream");async function Fe(){let e=Xe||await hi(),t=As||await br(),r=ms||await jS();return{connection:e,jsm:t,js:r}}a(Fe,"getNATSReferences");async function Cy(){let e=at.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await WS.getClusterUser(),s=await qo(e,t,r),n=Fo(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(XS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await vo.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(Cy,"getServerList");async function Vo(e,t){let{jsm:r}=await Fe();await r.streams.add({name:e,storage:QS.File,retention:JS.Limits,subjects:t})}a(Vo,"createLocalStream");async function eT(){let{jsm:e}=await Fe(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eT,"listStreams");async function by(e){let{jsm:t}=await Fe();await t.streams.delete(e)}a(by,"deleteLocalStream");async function Ly(e){let{connection:t}=await Fe(),r=[],s=Fo(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(XS.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(Ly,"listRemoteStreams");async function wy(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Fe(),i=uy(),o=[],_={ack_policy:ZS.None,durable_name:i,deliver_subject:i,deliver_policy:Ho.All};t&&(_.deliver_policy=Ho.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=Ry(E),h=$S(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},m=[];if(l.headers){let N=l.headers.get("originators");N&&(m=N.split(","),S.originators=m)}o.push(S),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(wy,"viewStream");async function yy(e,t,r=[],s=[]){mt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Fe(),o=await fi(),_=`${e}.${o}`,c=fy();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{mt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Bo(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")mt.trace(`publishToStream creating stream: ${t}`),await Vo(t,[_]),await i.publish(_,Bo(r[u]),{headers:c});else throw l}}a(yy,"publishToStream");function Os(e){e=e.toLowerCase();let t=Ns.join(at.get(k.CONFIG_PARAMS.ROOTPATH),Ny);if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return zt(Po)&&(Po={port:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ns.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),Po;if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return zt(Mo)&&(Mo={port:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Ns.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),Mo;mt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Os,"getServerConfig");async function Uy(e){let{jsm:t}=await Fe(),r=await fi();try{await t.streams.add({name:e.stream_name,storage:QS.File,retention:JS.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${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:ZS.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ho.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(Uy,"createWorkQueueStream");async function tT(e,t,r){let{jsm:s}=await Fe(),n=await s.streams.info(t),i=rT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Ti.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,C=n.config.sources.length;N<C;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await nT(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(tT,"addSourceToWorkStream");function rT(e){return e.split(".")[1]}a(rT,"extractServerName");async function sT(e,t,r){let{schema:s,table:n}=r,i=Ti.createNatsTableStreamName(s,n),{jsm:o}=await Fe(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await nT(s,n,u,t)}a(sT,"removeSourceFromWorkStream");async function nT(e,t,r,s){let n=await br(),i;try{i=oT(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mt.error("Error purging source subject",i,"from work stream",s)}}a(nT,"purgeSourceFromWorkStream");async function Dy(e,t,r=2e3,s=Fo()){if(!vo.isObject(t))throw new Error("data param must be an object");let n=Bo(t),{connection:i}=await Fe(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return $S(_.data)}a(Dy,"request");function xo(e){return new Promise(async(t,r)=>{let s=ly(Go,["--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(xo,"reloadNATS");async function My(){let{pid_file_path:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await xo(e)}a(My,"reloadNATSHub");async function Py(){let{pid_file_path:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await xo(e)}a(Py,"reloadNATSLeaf");function By(e,t,r){let s;switch(e.code){case YS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case YS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(By,"requestErrorHandler");async function Hy(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await dy.writeTransaction(k.SYSTEM_SCHEMA_NAME,k.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await tT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await sT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Hy,"updateWorkStream");async function iT(e,t){let r=Ti.createNatsTableStreamName(e,t),s=await fi(),n=oT(e,t,s);await Vo(r,[n])}a(iT,"createLocalTableStream");async function Gy(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await iT(s,n)}}a(Gy,"createTableStreams");async function aT(e,t){if(at.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ti.createNatsTableStreamName(e,t),{jsm:s}=await Fe();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mt.warn(r);else throw r}}a(aT,"purgeTableStream");async function vy(e,t){if(at.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await aT(e,t[r])}a(vy,"purgeSchemaTableStreams");async function Fy(e){return(await br()).streams.info(e)}a(Fy,"getStreamInfo");function oT(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(oT,"createSubjectName");async function fi(){if(Rs)return Rs;if(Rs=(await br())?.nc?.info?.server_name,Rs===void 0)throw new Error("Unable to get jetstream manager server name");return Rs}a(fi,"getJsmServerName");async function qy(){let e=await br(),t=await fi(),r=await eT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,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 c=i.split(".");c[c.length-1]=t;let u=c.join(".");mt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(qy,"updateNodeNameLocalStreams")});var lT=d((wB,ET)=>{"use strict";var Lr=require("path"),Ni=require("fs-extra"),Vy=mc(),xy=gc(),Yy=pc(),ky=bc(),ko=hs(),yr=p(),qe=vr(),mi=A(),Ri=ut(),{CONFIG_PARAMS:re}=mi,Oi=w(),gi=de(),cT=ls(),Ko=Yo(),wr="clustering",Ky=1e4,uT=5;ET.exports={generateNatsConfig:$y,removeNatsConfig:Wy};async function $y(e=!1,t=void 0){gi.initSync();let r=gi.get(re.ROOTPATH),s=Lr.join(r,wr,Ri.PID_FILES.HUB),n=Lr.join(r,wr,Ri.PID_FILES.LEAF),i=Lr.join(r,wr,"leaf"),o=Lr.join(r,wr,Ri.NATS_CONFIG_FILES.HUB_SERVER),_=Lr.join(r,wr,Ri.NATS_CONFIG_FILES.LEAF_SERVER),c=qe.getConfigFromFile(re.CLUSTERING_TLS_CERTIFICATE),u=qe.getConfigFromFile(re.CLUSTERING_TLS_PRIVATEKEY),E=qe.getConfigFromFile(re.CLUSTERING_TLS_CERT_AUTH),l=qe.getConfigFromFile(re.CLUSTERING_TLS_INSECURE),h=qe.getConfigFromFile(re.CLUSTERING_NODENAME),S=qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Ko.checkNATSServerInstalled()||Ii("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await ko.listUsers(),N=qe.getConfigFromFile(re.CLUSTERING_USER),C=await ko.getClusterUser();(yr.isEmpty(C)||C.active!==!0)&&Ii(`invalid cluster user '${N}'`),e||(await Ai(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ai(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ai(re.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ai(re.CLUSTERING_LEAFSERVER_NETWORK_PORT));let fe=[],G=[];for(let[bs,gt]of m.entries())gt.role.role===mi.ROLE_TYPES_ENUM.CLUSTER_USER&>.active&&(fe.push(new ky(gt.username,cT.decrypt(gt.hash))),G.push(new Yy(gt.username,cT.decrypt(gt.hash))));let $=[],{hub_routes:xe}=qe.getClusteringRoutes();if(!yr.isEmptyOrZeroLength(xe))for(let bs of xe)$.push(`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@${bs.host}:${bs.port}`);let Cs=new Vy(qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NAME),qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,fe,G);t=yr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mi.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ni.writeJson(o,Cs),Oi.trace(`Hub server config written to ${o}`));let d_=`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,S_=`tls://${C.uri_encoded_name}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,T_=new xy(qe.getConfigFromFile(re.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[d_],[S_],fe,G,c,u,E,l);(t===void 0||t===mi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ni.writeJson(_,T_),Oi.trace(`Leaf server config written to ${_}`))}a($y,"generateNatsConfig");async function Ai(e){let t=gi.get(e);yr.isEmpty(t)&&Ii(`port undefined for '${e}'`),await yr.isPortTaken(t)&&Ii(`'${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.`)}a(Ai,"isPortAvailable");function Ii(e){let t=`Error generating clustering config: ${e}`;Oi.error(t),console.error(t),process.exit(1)}a(Ii,"generateNatsConfigError");async function Wy(e){let{port:t,config_file:r}=Ko.getServerConfig(e),{username:s,decrypt_hash:n}=await ko.getClusterUser(),i=0,o=500;for(;i<uT;){try{let u=await Ko.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Oi.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=uT)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await yr.async_set_timeout(o*i)}let _="0".repeat(Ky),c=Lr.join(gi.get(re.ROOTPATH),wr,r);await Ni.writeFile(c,_),await Ni.remove(c)}a(Wy,"removeNatsConfig")});var Wo=d((yB,AT)=>{"use strict";var K=de(),dT=Io(),R=A(),$o=ut(),j=require("path"),{PACKAGE_ROOT:pi}=A(),Q="/dev/null",Ur=j.join(pi,"launchServiceScripts"),ST=j.join(pi,"utility/scripts"),Qy=j.join(ST,R.HDB_RESTART_SCRIPT),TT=j.resolve(pi,"dependencies",`${process.platform}-${process.arch}`,$o.NATS_BINARY_NAME),oe,_e;function ot(){(oe===void 0||_e===void 0)&&(K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ot,"initLogConfig");function hT(){ot();let e=j.join(_e,R.PROCESS_LOG_NAMES.IPC),t={name:R.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:R.SERVICE_SERVERS_CWD.IPC};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:R.SERVICE_SERVERS.IPC}}a(hT,"generateIPCServerConfig");function fT(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.HDB),t=dT.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.HDB,script:R.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:K.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Ur};return oe||(s.out_file=Q,s.error_file=Q),s}a(fT,"generateHDBServerConfig");function RT(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=dT.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:R.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:K.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Ur};return oe||(s.out_file=Q,s.error_file=Q),s}a(RT,"generateCFServerConfig");function Jy(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",$o.NATS_CONFIG_FILES.HUB_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:TT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Jy,"generateNatsHubServerConfig");function Zy(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",$o.NATS_CONFIG_FILES.LEAF_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:TT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Zy,"generateNatsLeafServerConfig");function Xy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur};return oe||(t.out_file=Q,t.error_file=Q),t}a(Xy,"generateNatsIngestServiceConfig");function zy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur};return oe||(t.out_file=Q,t.error_file=Q),t}a(zy,"generateNatsReplyServiceConfig");function jy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:R.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur,autorestart:!1};return oe||(t.out_file=Q,t.error_file=Q),t}a(jy,"generateClusteringUpgradeV4ServiceConfig");function eU(){ot();let e=j.join(_e,R.PROCESS_LOG_NAMES.PM2),t={name:R.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:ST};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:Qy}}a(eU,"generateRestart");function tU(e){ot();let t=j.join(_e,R.PROCESS_LOG_NAMES.JOBS),r=j.join(pi,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Ur,autorestart:!1};return oe||(s.out_file=Q,s.error_file=Q),{...s,script:j.join(r,"jobProcess.js")}}a(tU,"generateJobConfig");function rU(){return{apps:[hT(),fT(),RT()]}}a(rU,"generateAllServiceConfigs");AT.exports={generateAllServiceConfigs:rU,generateIPCServerConfig:hT,generateHDBServerConfig:fT,generateCFServerConfig:RT,generateRestart:eU,generateNatsHubServerConfig:Jy,generateNatsLeafServerConfig:Zy,generateNatsIngestServiceConfig:Xy,generateNatsReplyServiceConfig:zy,generateClusteringUpgradeV4ServiceConfig:jy,generateJobConfig:tU}});var NT=d((UB,mT)=>{var sU=Et(),nU={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};mT.exports=function(e){return sU.validateObject(e,nU)}});var gT=d((DB,OT)=>{"use strict";var iU=A().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=iU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ci,"UpdateObject");OT.exports=Ci});var pT=d((MB,IT)=>{"use strict";var aU={OPERATION:"operation",REFRESH:"refresh"},bi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(bi,"JWTTokens");var Li=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Li,"JWTRSAKeys");IT.exports={JWTTokens:bi,TOKEN_TYPE_ENUM:aU,JWTRSAKeys:Li}});var yT=d((PB,wT)=>{"use strict";var Is=require("jsonwebtoken"),Qo=require("fs-extra"),Jo=p(),Ve=A(),{handleHDBError:Ie,hdb_errors:oU}=J(),{HTTP_STATUS_CODES:pe,AUTHENTICATION_ERROR_MSGS:Ce}=oU,gs=w(),CT=Ei(),zo=hs(),_U=ii().update,cU=gT(),uU=On(),{UserEventMsg:EU}=Zr(),Gt=de();Gt.initSync();var Zo=require("path"),{JWTTokens:lU,JWTRSAKeys:dU,TOKEN_TYPE_ENUM:wi}=pT(),SU=Gt.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gt.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",TU=Gt.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gt.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",yi="RS256",Xo;wT.exports={createTokens:hU,validateOperationToken:RU,refreshOperationToken:fU,validateRefreshToken:LT};async function hU(e){if(Jo.isEmpty(e)||typeof e!="object")throw Ie(new Error,Ce.INVALID_AUTH_OBJECT,pe.BAD_REQUEST,void 0,void 0,!0);if(Jo.isEmpty(e.username))throw Ie(new Error,Ce.USERNAME_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);if(Jo.isEmpty(e.password))throw Ie(new Error,Ce.PASSWORD_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await zo.findAndValidateUser(e.username,e.password),!t)throw Ie(new Error,Ce.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw gs.error(h),Ie(new Error,Ce.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ui(),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 bT(i,r.private_key,r.passphrase),_=await Is.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:TU,algorithm:yi,subject:wi.REFRESH}),c=CT.hash(_),u=new cU(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await _U(u)}catch(h){gs.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw Ie(new Error,Ce.REFRESH_TOKEN_SAVE_FAILED,pe.INTERNAL_SERVER_ERROR);return uU.signalUserChange(new EU(process.pid)),new lU(o,_)}a(hU,"createTokens");async function bT(e,t,r){return await Is.sign(e,{key:t,passphrase:r},{expiresIn:SU,algorithm:yi,subject:wi.OPERATION})}a(bT,"signOperationToken");async function Ui(){if(Xo===void 0)try{let e=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Qo.readFile(e)).toString(),n=(await Qo.readFile(t)).toString(),i=(await Qo.readFile(r)).toString();Xo=new dU(i,n,s)}catch(e){throw gs.error(e),Ie(new Error,Ce.NO_ENCRYPTION_KEYS,pe.INTERNAL_SERVER_ERROR)}return Xo}a(Ui,"getJWTRSAKeys");async function fU(e){if(!e)throw Ie(new Error,Ce.INVALID_BODY,pe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ie(new Error,Ce.REFRESH_TOKEN_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);await LT(e.refresh_token);let t=await Ui(),r=await Is.decode(e.refresh_token);return{operation_token:await bT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fU,"refreshOperationToken");async function RU(e){try{let t=await Ui(),r=await Is.verify(e,t.public_key,{algorithms:yi,subject:wi.OPERATION});return await zo.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gs.warn(t),t.name&&t.name==="TokenExpiredError"?Ie(new Error,Ce.TOKEN_EXPIRED,pe.FORBIDDEN):Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED)}}a(RU,"validateOperationToken");async function LT(e){let t;try{let r=await Ui(),s=await Is.verify(e,r.public_key,{algorithms:yi,subject:wi.REFRESH});t=await zo.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gs.warn(r),r.name&&r.name==="TokenExpiredError"?Ie(new Error,Ce.TOKEN_EXPIRED,pe.FORBIDDEN):Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED)}if(!CT.validate(t.refresh_token,e))throw Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED);return t}a(LT,"validateRefreshToken")});var PT=d((HB,MT)=>{"use strict";var AU=NT(),Dr=require("passport"),mU=require("passport-local").Strategy,NU=require("passport-http").BasicStrategy,OU=require("util"),gU=hs(),DT=OU.callbackify(gU.findAndValidateUser),BB=Me(),IU=A(),UT=yT();Dr.use(new mU(function(e,t,r){DT(e,t,r)}));Dr.use(new NU(function(e,t,r){DT(e,t,r)}));Dr.serializeUser(function(e,t){t(null,e)});Dr.deserializeUser(function(e,t){t(null,e)});function pU(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,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Dr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===IU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?UT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):UT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Dr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(pU,"authorize");function CU(e,t){let r=AU(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 _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(CU,"checkPermissions");MT.exports={authorize:pU,checkPermissions:CU}});var HT=d((GB,BT)=>{"use strict";var Di=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Di,"Node");var Mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Mi,"NodeSubscription");BT.exports={Node:Di,NodeSubscription:Mi}});var vT=d((vB,GT)=>{"use strict";var bU=A().OPERATIONS_ENUM,Pi=class{constructor(t,r,s,n=void 0){this.operation=bU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Pi,"UpsertObject");GT.exports=Pi});var qT=d((FB,FT)=>{"use strict";var Bi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Bi,"RemotePayloadObject");var Hi=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(Hi,"RemotePayloadSubscription");FT.exports={RemotePayloadObject:Bi,RemotePayloadSubscription:Hi}});var xT=d((qB,VT)=>{"use strict";var Gi=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(Gi,"TableSizeObject");VT.exports=Gi});var $T=d((VB,KT)=>{"use strict";var LU=xT(),YT=require("path"),kT=x(),wU=Ee(),Mr=F(),yU=w();KT.exports=UU;async function UU(e){let t=new LU;try{let r=YT.join(kT.getBaseSchemaPath(),e.schema.toString()),s=await Mr.openEnvironment(r,e.name),n=Mr.statDBI(s,e.hash_attribute),i=YT.join(kT.getTransactionAuditStorePath(),e.schema.toString()),o=await Mr.openEnvironment(i,e.name,!0),_=Mr.statDBI(o,wU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Mr.environmentDataSize(r,e.name),u=await Mr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(UU,"lmdbGetTableSize")});var QT=d((xB,WT)=>{"use strict";var DU=A(),vi=class{constructor(t){this.operator=DU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(vi,"SystemInformationOperation");WT.exports=vi});var ZT=d((YB,JT)=>{"use strict";var Fi=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Fi,"SystemInformationObject");JT.exports=Fi});var zT=d((KB,XT)=>{"use strict";var ce=require("systeminformation"),Pr=w(),MU=A(),PU=$T(),BU=lo(),HU=de();HU.initSync();var kB=QT(),GU=ZT(),qi;XT.exports={getHDBProcessInfo:r_,getNetworkInfo:n_,getDiskInfo:s_,getMemoryInfo:t_,getCPUInfo:e_,getTimeInfo:jo,getSystemInformation:i_,systemInformation:vU,getTableSize:a_};function jo(){return ce.time()}a(jo,"getTimeInfo");async function e_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:N,raw_currentload_user:C,cpus:fe,...G}=await ce.currentLoad();return G.cpus=[],fe.forEach($=>{let{raw_load:xe,raw_load_idle:Cs,raw_load_irq:d_,raw_load_nice:S_,raw_load_system:T_,raw_load_user:bs,...gt}=$;G.cpus.push(gt)}),E.current_load=G,E}catch(e){return Pr.error(`error in getCPUInfo: ${e}`),{}}}a(e_,"getCPUInfo");async function t_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return Pr.error(`error in getMemoryInfo: ${e}`),{}}}a(t_,"getMemoryInfo");async function r_(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(MU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Pr.error(`error in getHDBProcessInfo: ${t}`),e}}a(r_,"getHDBProcessInfo");async function s_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return Pr.error(`error in getDiskInfo: ${t}`),e}}a(s_,"getDiskInfo");async function n_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return Pr.error(`error in getNetworkInfo: ${t}`),e}}a(n_,"getNetworkInfo");async function i_(){if(qi!==void 0)return qi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,qi=e,qi}catch(t){return Pr.error(`error in getSystemInformation: ${t}`),e}}a(i_,"getSystemInformation");async function a_(){let e=[],t=await BU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(a_,"getTableSize");async function vU(e){let t=new GU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await i_(),t.time=jo(),t.cpu=await e_(),t.memory=await t_(),t.disk=await s_(),t.network=await n_(),t.harperdb_processes=await r_(),t.table_size=await a_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await i_();break;case"time":t.time=jo();break;case"cpu":t.cpu=await e_();break;case"memory":t.memory=await t_();break;case"disk":t.disk=await s_();break;case"network":t.network=await n_();break;case"harperdb_processes":t.harperdb_processes=await r_();break;case"table_size":t.table_size=await a_();break;default:break}return t}a(vU,"systemInformation")});var eh=d((QB,jT)=>{"use strict";var $B=require("fs-extra"),WB=w();jT.exports={version:FU,printVersion:VU,nodeVersion:qU};var vt=Do();function FU(){if(vt)return vt.version}a(FU,"version");function qU(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(qU,"nodeVersion");function VU(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(VU,"printVersion")});var ih=d((XB,nh)=>{"use strict";var xU=ii(),o_=p(),__=require("util"),jt=A(),th=de();th.initSync();var YU=PT(),rh=us(),{Node:JB,NodeSubscription:ZB}=HT(),kU=ss(),KU=vT(),{RemotePayloadObject:$U,RemotePayloadSubscription:WU}=qT(),{handleHDBError:QU,hdb_errors:JU}=J(),{HTTP_STATUS_CODES:ZU,HDB_ERROR_MSGS:XU}=JU,zU=ft(),jU=zT(),eD=eh(),tD=__.promisify(YU.authorize),rD=__.promisify(rh.searchByHash),sD=__.promisify(rh.searchByValue);nh.exports={authHeaderToUser:nD,isEmpty:iD,getNodeRecord:aD,upsertNodeRecord:oD,buildNodePayloads:_D,checkClusteringEnabled:cD,getAllNodeRecords:uD,getSystemInfo:ED,reverseSubscription:sh};async function nD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await tD(t,null),e}a(nD,"authHeaderToUser");function iD(e){return e==null}a(iD,"isEmpty");async function aD(e){let t=new kU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return rD(t)}a(aD,"getNodeRecord");async function oD(e){let t=new KU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return xU.upsert(t)}a(oD,"upsertNodeRecord");function sh(e){if(o_.isEmpty(e.subscribe)||o_.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(sh,"reverseSubscription");function _D(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=o_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=sh(_),S=new WU(c,u,E,h,l,_.start_time);n.push(S)}return new $U(r,t,n,s)}a(_D,"buildNodePayloads");function cD(){if(!th.get(jt.CONFIG_PARAMS.CLUSTERING_ENABLED))throw QU(new Error,XU.CLUSTERING_NOT_ENABLED,ZU.BAD_REQUEST,void 0,void 0,!0)}a(cD,"checkClusteringEnabled");async function uD(){let e=new zU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return sD(e)}a(uD,"getAllNodeRecords");async function ED(){let e=await jU.getSystemInformation();return{hdb_version:eD.version(),node_version:e.node_version,platform:e.platform}}a(ED,"getSystemInfo")});var fh=d((zB,hh)=>{"use strict";var I=A(),Vi=p(),ps=lT(),xi=Yo(),lD=ut(),M=require("pm2"),dD=require("fs-extra"),Nt=Wo(),be=de(),Ot=w(),SD=Wo(),TD=ih(),hD=require("util"),oh=hD.promisify(require("child_process").exec),_h=require("path");hh.exports={start:er,stop:ki,reload:uh,restart:Eh,list:u_,describe:Ki,connect:_t,kill:dh,startAllServices:CD,startService:Yi,getUniqueServicesList:E_,restartAllServices:bD,stopAllServices:LD,isServiceRegistered:Sh,reloadStopStart:c_,restartHdb:lh,deleteProcess:ID,configureLogRotate:UD,startClustering:Th,isHdbRestartRunning:pD,isClusteringRunning:MD,stopClustering:DD,reloadClustering:PD};var{PACKAGE_ROOT:fD}=A(),RD="2.7.0",ch=_h.join(fD,"node_modules/pm2/bin/pm2"),AD="Log rotate installed.",mD="Error installing log rotate.",ND="Log rotate updated.",OD="Error updating log rotate.",gD="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function _t(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(_t,"connect");function er(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(er,"start");function ki(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(ki,"stop");function uh(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(uh,"reload");function Eh(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Eh,"restart");function ID(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ID,"deleteProcess");async function lh(){await er(SD.generateRestart())}a(lh,"restartHdb");async function pD(){let e=await u_();for(let t in e)if(e[t].name===I.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(pD,"isHdbRestartRunning");function u_(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(u_,"list");function Ki(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Ki,"describe");function dh(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(dh,"kill");async function CD(){try{await Th(),await er(Nt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(CD,"startAllServices");async function Yi(e){try{let t;switch(e=e.toLowerCase(),e){case I.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Nt.generateIPCServerConfig();break;case I.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Nt.generateHDBServerConfig();break;case I.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Nt.generateCFServerConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Nt.generateNatsIngestServiceConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Nt.generateNatsReplyServiceConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Nt.generateNatsHubServerConfig(),await er(t),await ps.removeNatsConfig(e);return;case I.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Nt.generateNatsLeafServerConfig(),await er(t),await ps.removeNatsConfig(e);return;case I.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Nt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await er(t)}catch(t){throw M.disconnect(),t}}a(Yi,"startService");async function E_(){try{let e=await u_(),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 M.disconnect(),e}}a(E_,"getUniqueServicesList");async function bD(e=[]){try{let t=!1,r=await E_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===I.PROCESS_DESCRIPTORS.HDB?t=!0:await c_(o):await Eh(o))}t&&await c_(I.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(bD,"restartAllServices");async function LD(){try{let e=await E_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await ki(s.name)}if(await dh(),be.get(I.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dD.readFile(_h.join(be.get(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),I.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ot.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(LD,"stopAllServices");async function Sh(e){return!Vi.isEmptyOrZeroLength(await Ki(e))}a(Sh,"isServiceRegistered");async function c_(e){let t=e===I.PROCESS_DESCRIPTORS.HDB?be.get(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):be.get(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ki(e),s=Vi.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===I.PROCESS_DESCRIPTORS.HDB?Ot.error(gD):(await ki(e),await Yi(e)):e===I.PROCESS_DESCRIPTORS.HDB?await lh():await uh(e)}a(c_,"reloadStopStart");function wD(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.stop(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(wD,"stopLogrotate");async function yD(){let{stdout:e,stderr:t}=await oh(`${process.platform==="win32"?"node":""} ${ch} install pm2-logrotate@${RD}`);if(Ot.debug(`loadLogRotate stdout: ${e}`),t)throw Ot.error(mD),t;Ot.info(AD)}a(yD,"installLogRotate");async function ah(){let e={max_size:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${ch} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await oh(t);if(Ot.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ot.error(OD),s;Ot.info(ND)}a(ah,"updateLogRotateConfig");async function UD(){be.initSync();let e=Vi.autoCastBoolean(be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Ki(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Vi.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await yD(),await ah();return}if(e&&s){await er(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await ah();return}!e&&r===I.PM2_PROCESS_STATUSES.ONLINE&&await wD()}a(UD,"configureLogRotate");async function Th(){for(let t in I.CLUSTERING_PROCESSES){let r=I.CLUSTERING_PROCESSES[t];await Yi(r)}await xi.createWorkQueueStream(lD.WORK_QUEUE_CONSUMER_NAMES),await xi.updateNodeNameLocalStreams();let e=await TD.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===I.PRE_4_0_0_VERSION){Ot.info("Starting clustering upgrade 4.0.0 process"),await Yi(I.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Th,"startClustering");async function DD(){for(let e in I.CLUSTERING_PROCESSES){let t=I.CLUSTERING_PROCESSES[e];await ki(t)}}a(DD,"stopClustering");async function MD(){for(let e in I.CLUSTERING_PROCESSES){let t=I.CLUSTERING_PROCESSES[e];if(await Sh(t)===!1)return!1}return!0}a(MD,"isClusteringRunning");async function PD(){await ps.generateNatsConfig(!0),await xi.reloadNATSHub(),await xi.reloadNATSLeaf(),await ps.removeNatsConfig(I.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ps.removeNatsConfig(I.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PD,"reloadClustering")});var l_=fh(),Rh=A();a(async function(){try{let t=await l_.describe(Rh.PROCESS_DESCRIPTORS.HDB);for(let r of t)await l_.reload(r.pm_id);await l_.deleteProcess(Rh.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
7
|
+
`,"")}a(WS,"runCommand");async function _w(){try{await $y.access(Po)}catch{return!1}let e=await WS(`${Po} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Ky.eq(t,aw)}a(_w,"checkNATSServerInstalled");async function vo(e,t,r,s=!0,n="127.0.0.1"){return jy({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Tt.get($.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get($.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(vo,"createConnection");async function cw(){Je&&(await Je.close(),Je=void 0)}a(cw,"closeConnection");async function Si(){if(!Je){let e=await VS.getClusterUser();if(Jt(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Tt.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Je=await vo(t,e.username,e.decrypt_hash)}return Je}a(Si,"getConnection");async function pr(){if(fs)return fs;Jt(Je)&&await Si();let{domain:e}=As($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fs=await Je.jetstreamManager({domain:e}),fs}a(pr,"getJetStreamManager");async function QS(){if(Rs)return Rs;Jt(Je)&&await Si();let{domain:e}=As($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Jt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rs=Je.jetstream({domain:e}),Rs}a(QS,"getJetStream");async function Ge(){let e=Je||await Si(),t=fs||await pr(),r=Rs||await QS();return{connection:e,jsm:t,js:r}}a(Ge,"getNATSReferences");async function uw(){let e=Tt.get($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await VS.getClusterUser(),s=await vo(e,t,r),n=Bo(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(KS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Ho.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(uw,"getServerList");async function Go(e,t){let{jsm:r}=await Ge();await r.streams.add({name:e,storage:YS.File,retention:kS.Limits,subjects:t})}a(Go,"createLocalStream");async function JS(){let{jsm:e}=await Ge(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(JS,"listStreams");async function Ew(e){let{jsm:t}=await Ge();await t.streams.delete(e)}a(Ew,"deleteLocalStream");async function lw(e){let{connection:t}=await Ge(),r=[],s=Bo(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(KS.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(lw,"listRemoteStreams");async function dw(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ge(),i=Qy(),o=[],_={ack_policy:$S.None,durable_name:i,deliver_subject:i,deliver_policy:Mo.All};t&&(_.deliver_policy=Mo.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=rw(E),h=xS(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},A=[];if(l.headers){let N=l.headers.get("originators");N&&(A=N.split(","),S.originators=A)}o.push(S),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(dw,"viewStream");async function Sw(e,t,r=[],s=[]){ht.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ge(),o=await Ti(),_=`${e}.${o}`,c=tw();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{ht.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Do(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")ht.trace(`publishToStream creating stream: ${t}`),await Go(t,[_]),await i.publish(_,Do(r[u]),{headers:c});else throw l}}a(Sw,"publishToStream");function As(e){e=e.toLowerCase();let t=ms.join(Tt.get($.CONFIG_PARAMS.ROOTPATH),iw);if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Jt(Uo)&&(Uo={port:Ts.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ts.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.HUB,config_file:x.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ms.join(t,x.PID_FILES.HUB),hdb_nats_path:t}),Uo;if(e===$.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Jt(wo)&&(wo={port:Ts.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ts.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,config_file:x.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ts.getConfigFromFile($.CONFIG_PARAMS.CLUSTERING_NODENAME)+x.SERVER_SUFFIX.LEAF,pid_file_path:ms.join(t,x.PID_FILES.LEAF),hdb_nats_path:t}),wo;ht.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(As,"getServerConfig");async function Tw(e){let{jsm:t}=await Ge(),r=await Ti();try{await t.streams.add({name:e.stream_name,storage:YS.File,retention:kS.Workqueue,subjects:[`${x.SUBJECT_PREFIXES.MSGID}.${r}`,`${x.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:$S.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Mo.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(Tw,"createWorkQueueStream");async function XS(e,t,r){let{jsm:s}=await Ge(),n=await s.streams.info(t),i=ZS(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=di.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,C=n.config.sources.length;N<C;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await jS(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let A={name:u,opt_start_time:o,filter_subject:`${x.SUBJECT_PREFIXES.TXN}.>`};E||(A.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(A),await s.streams.update(t,n.config)}a(XS,"addSourceToWorkStream");function ZS(e){return e.split(".")[1]}a(ZS,"extractServerName");async function zS(e,t,r){let{schema:s,table:n}=r,i=di.createNatsTableStreamName(s,n),{jsm:o}=await Ge(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await jS(s,n,u,t)}a(zS,"removeSourceFromWorkStream");async function jS(e,t,r,s){let n=await pr(),i;try{i=rT(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{ht.error("Error purging source subject",i,"from work stream",s)}}a(jS,"purgeSourceFromWorkStream");async function hw(e,t,r=2e3,s=Bo()){if(!Ho.isObject(t))throw new Error("data param must be an object");let n=Do(t),{connection:i}=await Ge(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return xS(_.data)}a(hw,"request");function Fo(e){return new Promise(async(t,r)=>{let s=Xy(Po,["--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(Fo,"reloadNATS");async function fw(){let{pid_file_path:e}=As($.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Fo(e)}a(fw,"reloadNATSHub");async function Rw(){let{pid_file_path:e}=As($.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Fo(e)}a(Rw,"reloadNATSLeaf");function mw(e,t,r){let s;switch(e.code){case GS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case GS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(mw,"requestErrorHandler");async function Aw(e,t){let r=t+x.SERVER_SUFFIX.LEAF;await Zy.writeTransaction($.SYSTEM_SCHEMA_NAME,$.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await XS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await zS(r,x.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Aw,"updateWorkStream");async function eT(e,t){let r=di.createNatsTableStreamName(e,t),s=await Ti(),n=rT(e,t,s);await Go(r,[n])}a(eT,"createLocalTableStream");async function Nw(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await eT(s,n)}}a(Nw,"createTableStreams");async function tT(e,t){if(Tt.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=di.createNatsTableStreamName(e,t),{jsm:s}=await Ge();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")ht.warn(r);else throw r}}a(tT,"purgeTableStream");async function Ow(e,t){if(Tt.get($.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await tT(e,t[r])}a(Ow,"purgeSchemaTableStreams");async function gw(e){return(await pr()).streams.info(e)}a(gw,"getStreamInfo");function rT(e,t,r){return`${x.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(rT,"createSubjectName");async function Ti(){if(hs)return hs;if(hs=(await pr())?.nc?.info?.server_name,hs===void 0)throw new Error("Unable to get jetstream manager server name");return hs}a(Ti,"getJsmServerName");async function pw(){let e=await pr(),t=await Ti(),r=await JS();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===x.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;ht.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===x.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${x.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;ht.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(x.WORK_QUEUE_CONSUMER_NAMES.stream_name,x.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${x.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");ht.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(pw,"updateNodeNameLocalStreams")});var oT=d((lH,aT)=>{"use strict";var Ir=require("path"),mi=require("fs-extra"),Iw=fc(),Cw=Ac(),bw=Oc(),Lw=pc(),xo=Ss(),br=I(),Fe=Br(),Ri=m(),hi=ot(),{CONFIG_PARAMS:re}=Ri,Ai=y(),Ni=de(),nT=us(),Vo=qo(),Cr="clustering",yw=1e4,iT=5;aT.exports={generateNatsConfig:ww,removeNatsConfig:Uw};async function ww(e=!1,t=void 0){Ni.initSync();let r=Ni.get(re.ROOTPATH),s=Ir.join(r,Cr,hi.PID_FILES.HUB),n=Ir.join(r,Cr,hi.PID_FILES.LEAF),i=Ir.join(r,Cr,"leaf"),o=Ir.join(r,Cr,hi.NATS_CONFIG_FILES.HUB_SERVER),_=Ir.join(r,Cr,hi.NATS_CONFIG_FILES.LEAF_SERVER),c=Fe.getConfigFromFile(re.CLUSTERING_TLS_CERTIFICATE),u=Fe.getConfigFromFile(re.CLUSTERING_TLS_PRIVATEKEY),E=Fe.getConfigFromFile(re.CLUSTERING_TLS_CERT_AUTH),l=Fe.getConfigFromFile(re.CLUSTERING_TLS_INSECURE),h=Fe.getConfigFromFile(re.CLUSTERING_NODENAME),S=Fe.getConfigFromFile(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Vo.checkNATSServerInstalled()||Oi("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let A=await xo.listUsers(),N=Fe.getConfigFromFile(re.CLUSTERING_USER),C=await xo.getClusterUser();(br.isEmpty(C)||C.active!==!0)&&Oi(`invalid cluster user '${N}'`),e||(await fi(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await fi(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await fi(re.CLUSTERING_HUBSERVER_NETWORK_PORT),await fi(re.CLUSTERING_LEAFSERVER_NETWORK_PORT));let fe=[],v=[];for(let[Is,mt]of A.entries())mt.role.role===Ri.ROLE_TYPES_ENUM.CLUSTER_USER&&mt.active&&(fe.push(new Lw(mt.username,nT.decrypt(mt.hash))),v.push(new bw(mt.username,nT.decrypt(mt.hash))));let K=[],{hub_routes:xe}=Fe.getClusteringRoutes();if(!br.isEmptyOrZeroLength(xe))for(let Is of xe)K.push(`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@${Is.host}:${Is.port}`);let ps=new Iw(Fe.getConfigFromFile(re.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,Fe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NAME),Fe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),K,fe,v);t=br.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ri.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await mi.writeJson(o,ps),Ai.trace(`Hub server config written to ${o}`));let u_=`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,E_=`tls://${C.uri_encoded_name}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,l_=new Cw(Fe.getConfigFromFile(re.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[u_],[E_],fe,v,c,u,E,l);(t===void 0||t===Ri.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await mi.writeJson(_,l_),Ai.trace(`Leaf server config written to ${_}`))}a(ww,"generateNatsConfig");async function fi(e){let t=Ni.get(e);br.isEmpty(t)&&Oi(`port undefined for '${e}'`),await br.isPortTaken(t)&&Oi(`'${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.`)}a(fi,"isPortAvailable");function Oi(e){let t=`Error generating clustering config: ${e}`;Ai.error(t),console.error(t),process.exit(1)}a(Oi,"generateNatsConfigError");async function Uw(e){let{port:t,config_file:r}=Vo.getServerConfig(e),{username:s,decrypt_hash:n}=await xo.getClusterUser(),i=0,o=500;for(;i<iT;){try{let u=await Vo.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ai.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=iT)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 br.async_set_timeout(o*i)}let _="0".repeat(yw),c=Ir.join(Ni.get(re.ROOTPATH),Cr,r);await mi.writeFile(c,_),await mi.remove(c)}a(Uw,"removeNatsConfig")});var ko=d((dH,ST)=>{"use strict";var k=de(),_T=No(),R=m(),Yo=ot(),j=require("path"),{PACKAGE_ROOT:gi}=m(),Q="/dev/null",Lr=j.join(gi,"launchServiceScripts"),cT=j.join(gi,"utility/scripts"),Dw=j.join(cT,R.HDB_RESTART_SCRIPT),uT=j.resolve(gi,"dependencies",`${process.platform}-${process.arch}`,Yo.NATS_BINARY_NAME),oe,_e;function nt(){(oe===void 0||_e===void 0)&&(k.initSync(),oe=k.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=k.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(nt,"initLogConfig");function ET(){nt();let e=j.join(_e,R.PROCESS_LOG_NAMES.IPC),t={name:R.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:R.SERVICE_SERVERS_CWD.IPC};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:R.SERVICE_SERVERS.IPC}}a(ET,"generateIPCServerConfig");function lT(){nt(),k.initSync(),oe=k.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=k.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.HDB),t=_T.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.HDB,script:R.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:k.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Lr};return oe||(s.out_file=Q,s.error_file=Q),s}a(lT,"generateHDBServerConfig");function dT(){nt(),k.initSync(),oe=k.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=k.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=_T.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:R.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:k.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Lr};return oe||(s.out_file=Q,s.error_file=Q),s}a(dT,"generateCFServerConfig");function Mw(){nt(),k.initSync(),oe=k.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=k.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=k.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",Yo.NATS_CONFIG_FILES.HUB_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:uT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Mw,"generateNatsHubServerConfig");function Pw(){nt(),k.initSync(),oe=k.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=k.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=k.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",Yo.NATS_CONFIG_FILES.LEAF_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:uT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Pw,"generateNatsLeafServerConfig");function Hw(){nt(),k.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Lr};return oe||(t.out_file=Q,t.error_file=Q),t}a(Hw,"generateNatsIngestServiceConfig");function Bw(){nt(),k.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Lr};return oe||(t.out_file=Q,t.error_file=Q),t}a(Bw,"generateNatsReplyServiceConfig");function vw(){nt(),k.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:R.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Lr,autorestart:!1};return oe||(t.out_file=Q,t.error_file=Q),t}a(vw,"generateClusteringUpgradeV4ServiceConfig");function Gw(){nt();let e=j.join(_e,R.PROCESS_LOG_NAMES.PM2),t={name:R.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:cT};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:Dw}}a(Gw,"generateRestart");function Fw(e){nt();let t=j.join(_e,R.PROCESS_LOG_NAMES.JOBS),r=j.join(gi,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Lr,autorestart:!1};return oe||(s.out_file=Q,s.error_file=Q),{...s,script:j.join(r,"jobProcess.js")}}a(Fw,"generateJobConfig");function qw(){return{apps:[ET(),lT(),dT()]}}a(qw,"generateAllServiceConfigs");ST.exports={generateAllServiceConfigs:qw,generateIPCServerConfig:ET,generateHDBServerConfig:lT,generateCFServerConfig:dT,generateRestart:Gw,generateNatsHubServerConfig:Mw,generateNatsLeafServerConfig:Pw,generateNatsIngestServiceConfig:Hw,generateNatsReplyServiceConfig:Bw,generateClusteringUpgradeV4ServiceConfig:vw,generateJobConfig:Fw}});var hT=d((SH,TT)=>{var xw=_t(),Vw={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};TT.exports=function(e){return xw.validateObject(e,Vw)}});var RT=d((TH,fT)=>{"use strict";var Yw=m().OPERATIONS_ENUM,pi=class{constructor(t,r,s,n=void 0){this.operation=Yw.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(pi,"UpdateObject");fT.exports=pi});var AT=d((hH,mT)=>{"use strict";var kw={OPERATION:"operation",REFRESH:"refresh"},Ii=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(Ii,"JWTTokens");var Ci=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Ci,"JWTRSAKeys");mT.exports={JWTTokens:Ii,TOKEN_TYPE_ENUM:kw,JWTRSAKeys:Ci}});var IT=d((fH,pT)=>{"use strict";var Os=require("jsonwebtoken"),$o=require("fs-extra"),Ko=I(),qe=m(),{handleHDBError:ge,hdb_errors:$w}=J(),{HTTP_STATUS_CODES:pe,AUTHENTICATION_ERROR_MSGS:Ie}=$w,Ns=y(),NT=ci(),Jo=Ss(),Kw=si().update,Ww=RT(),Qw=An(),{UserEventMsg:Jw}=Qr(),Mt=de();Mt.initSync();var Wo=require("path"),{JWTTokens:Xw,JWTRSAKeys:Zw,TOKEN_TYPE_ENUM:bi}=AT(),zw=Mt.get(qe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Mt.get(qe.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",jw=Mt.get(qe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Mt.get(qe.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Li="RS256",Qo;pT.exports={createTokens:eU,validateOperationToken:rU,refreshOperationToken:tU,validateRefreshToken:gT};async function eU(e){if(Ko.isEmpty(e)||typeof e!="object")throw ge(new Error,Ie.INVALID_AUTH_OBJECT,pe.BAD_REQUEST,void 0,void 0,!0);if(Ko.isEmpty(e.username))throw ge(new Error,Ie.USERNAME_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);if(Ko.isEmpty(e.password))throw ge(new Error,Ie.PASSWORD_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Jo.findAndValidateUser(e.username,e.password),!t)throw ge(new Error,Ie.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw Ns.error(h),ge(new Error,Ie.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}let r=await yi(),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 OT(i,r.private_key,r.passphrase),_=await Os.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:jw,algorithm:Li,subject:bi.REFRESH}),c=NT.hash(_),u=new Ww(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await Kw(u)}catch(h){Ns.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw ge(new Error,Ie.REFRESH_TOKEN_SAVE_FAILED,pe.INTERNAL_SERVER_ERROR);return Qw.signalUserChange(new Jw(process.pid)),new Xw(o,_)}a(eU,"createTokens");async function OT(e,t,r){return await Os.sign(e,{key:t,passphrase:r},{expiresIn:zw,algorithm:Li,subject:bi.OPERATION})}a(OT,"signOperationToken");async function yi(){if(Qo===void 0)try{let e=Wo.join(Mt.getHdbBasePath(),qe.LICENSE_KEY_DIR_NAME,qe.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Wo.join(Mt.getHdbBasePath(),qe.LICENSE_KEY_DIR_NAME,qe.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Wo.join(Mt.getHdbBasePath(),qe.LICENSE_KEY_DIR_NAME,qe.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await $o.readFile(e)).toString(),n=(await $o.readFile(t)).toString(),i=(await $o.readFile(r)).toString();Qo=new Zw(i,n,s)}catch(e){throw Ns.error(e),ge(new Error,Ie.NO_ENCRYPTION_KEYS,pe.INTERNAL_SERVER_ERROR)}return Qo}a(yi,"getJWTRSAKeys");async function tU(e){if(!e)throw ge(new Error,Ie.INVALID_BODY,pe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ge(new Error,Ie.REFRESH_TOKEN_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);await gT(e.refresh_token);let t=await yi(),r=await Os.decode(e.refresh_token);return{operation_token:await OT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(tU,"refreshOperationToken");async function rU(e){try{let t=await yi(),r=await Os.verify(e,t.public_key,{algorithms:Li,subject:bi.OPERATION});return await Jo.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ns.warn(t),t.name&&t.name==="TokenExpiredError"?ge(new Error,Ie.TOKEN_EXPIRED,pe.FORBIDDEN):ge(new Error,Ie.INVALID_TOKEN,pe.UNAUTHORIZED)}}a(rU,"validateOperationToken");async function gT(e){let t;try{let r=await yi(),s=await Os.verify(e,r.public_key,{algorithms:Li,subject:bi.REFRESH});t=await Jo.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ns.warn(r),r.name&&r.name==="TokenExpiredError"?ge(new Error,Ie.TOKEN_EXPIRED,pe.FORBIDDEN):ge(new Error,Ie.INVALID_TOKEN,pe.UNAUTHORIZED)}if(!NT.validate(t.refresh_token,e))throw ge(new Error,Ie.INVALID_TOKEN,pe.UNAUTHORIZED);return t}a(gT,"validateRefreshToken")});var yT=d((mH,LT)=>{"use strict";var sU=hT(),yr=require("passport"),nU=require("passport-local").Strategy,iU=require("passport-http").BasicStrategy,aU=require("util"),oU=Ss(),bT=aU.callbackify(oU.findAndValidateUser),RH=De(),_U=m(),CT=IT();yr.use(new nU(function(e,t,r){bT(e,t,r)}));yr.use(new iU(function(e,t,r){bT(e,t,r)}));yr.serializeUser(function(e,t){t(null,e)});yr.deserializeUser(function(e,t){t(null,e)});function cU(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,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":yr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===_U.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?CT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):CT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:yr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(cU,"authorize");function uU(e,t){let r=sU(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 _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(uU,"checkPermissions");LT.exports={authorize:cU,checkPermissions:uU}});var UT=d((AH,wT)=>{"use strict";var wi=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(wi,"Node");var Ui=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Ui,"NodeSubscription");wT.exports={Node:wi,NodeSubscription:Ui}});var MT=d((NH,DT)=>{"use strict";var EU=m().OPERATIONS_ENUM,Di=class{constructor(t,r,s,n=void 0){this.operation=EU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Di,"UpsertObject");DT.exports=Di});var HT=d((OH,PT)=>{"use strict";var Mi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Mi,"RemotePayloadObject");var Pi=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(Pi,"RemotePayloadSubscription");PT.exports={RemotePayloadObject:Mi,RemotePayloadSubscription:Pi}});var vT=d((gH,BT)=>{"use strict";var Hi=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(Hi,"TableSizeObject");BT.exports=Hi});var xT=d((pH,qT)=>{"use strict";var lU=vT(),GT=require("path"),FT=V(),dU=Ee(),wr=F(),SU=y();qT.exports=TU;async function TU(e){let t=new lU;try{let r=GT.join(FT.getBaseSchemaPath(),e.schema.toString()),s=await wr.openEnvironment(r,e.name),n=wr.statDBI(s,e.hash_attribute),i=GT.join(FT.getTransactionAuditStorePath(),e.schema.toString()),o=await wr.openEnvironment(i,e.name,!0),_=wr.statDBI(o,dU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await wr.environmentDataSize(r,e.name),u=await wr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){SU.warn(`unable to stat table dbi due to ${r}`)}return t}a(TU,"lmdbGetTableSize")});var YT=d((IH,VT)=>{"use strict";var hU=m(),Bi=class{constructor(t){this.operator=hU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Bi,"SystemInformationOperation");VT.exports=Bi});var $T=d((CH,kT)=>{"use strict";var vi=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(vi,"SystemInformationObject");kT.exports=vi});var WT=d((LH,KT)=>{"use strict";var ce=require("systeminformation"),Ur=y(),fU=m(),RU=xT(),mU=co(),AU=de();AU.initSync();var bH=YT(),NU=$T(),Gi;KT.exports={getHDBProcessInfo:jo,getNetworkInfo:t_,getDiskInfo:e_,getMemoryInfo:zo,getCPUInfo:Zo,getTimeInfo:Xo,getSystemInformation:r_,systemInformation:OU,getTableSize:s_};function Xo(){return ce.time()}a(Xo,"getTimeInfo");async function Zo(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:A,raw_currentload_system:N,raw_currentload_user:C,cpus:fe,...v}=await ce.currentLoad();return v.cpus=[],fe.forEach(K=>{let{raw_load:xe,raw_load_idle:ps,raw_load_irq:u_,raw_load_nice:E_,raw_load_system:l_,raw_load_user:Is,...mt}=K;v.cpus.push(mt)}),E.current_load=v,E}catch(e){return Ur.error(`error in getCPUInfo: ${e}`),{}}}a(Zo,"getCPUInfo");async function zo(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return Ur.error(`error in getMemoryInfo: ${e}`),{}}}a(zo,"getMemoryInfo");async function jo(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(fU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Ur.error(`error in getHDBProcessInfo: ${t}`),e}}a(jo,"getHDBProcessInfo");async function e_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return Ur.error(`error in getDiskInfo: ${t}`),e}}a(e_,"getDiskInfo");async function t_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return Ur.error(`error in getNetworkInfo: ${t}`),e}}a(t_,"getNetworkInfo");async function r_(){if(Gi!==void 0)return Gi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,Gi=e,Gi}catch(t){return Ur.error(`error in getSystemInformation: ${t}`),e}}a(r_,"getSystemInformation");async function s_(){let e=[],t=await mU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await RU(s));return e}a(s_,"getTableSize");async function OU(e){let t=new NU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await r_(),t.time=Xo(),t.cpu=await Zo(),t.memory=await zo(),t.disk=await e_(),t.network=await t_(),t.harperdb_processes=await jo(),t.table_size=await s_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await r_();break;case"time":t.time=Xo();break;case"cpu":t.cpu=await Zo();break;case"memory":t.memory=await zo();break;case"disk":t.disk=await e_();break;case"network":t.network=await t_();break;case"harperdb_processes":t.harperdb_processes=await jo();break;case"table_size":t.table_size=await s_();break;default:break}return t}a(OU,"systemInformation")});var JT=d((UH,QT)=>{"use strict";var yH=require("fs-extra"),wH=y();QT.exports={version:gU,printVersion:IU,nodeVersion:pU};var Pt=yo();function gU(){if(Pt)return Pt.version}a(gU,"version");function pU(){if(Pt&&Pt.engines&&Pt.engines["preferred-node"])return Pt.engines["preferred-node"]}a(pU,"nodeVersion");function IU(){Pt&&console.log(`HarperDB Version ${Pt.version}`)}a(IU,"printVersion")});var eh=d((PH,jT)=>{"use strict";var CU=si(),n_=I(),i_=require("util"),Xt=m(),XT=de();XT.initSync();var bU=yT(),ZT=_s(),{Node:DH,NodeSubscription:MH}=UT(),LU=ts(),yU=MT(),{RemotePayloadObject:wU,RemotePayloadSubscription:UU}=HT(),{handleHDBError:DU,hdb_errors:MU}=J(),{HTTP_STATUS_CODES:PU,HDB_ERROR_MSGS:HU}=MU,BU=lt(),vU=WT(),GU=JT(),FU=i_.promisify(bU.authorize),qU=i_.promisify(ZT.searchByHash),xU=i_.promisify(ZT.searchByValue);jT.exports={authHeaderToUser:VU,isEmpty:YU,getNodeRecord:kU,upsertNodeRecord:$U,buildNodePayloads:KU,checkClusteringEnabled:WU,getAllNodeRecords:QU,getSystemInfo:JU,reverseSubscription:zT};async function VU(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await FU(t,null),e}a(VU,"authHeaderToUser");function YU(e){return e==null}a(YU,"isEmpty");async function kU(e){let t=new LU(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qU(t)}a(kU,"getNodeRecord");async function $U(e){let t=new yU(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return CU.upsert(t)}a($U,"upsertNodeRecord");function zT(e){if(n_.isEmpty(e.subscribe)||n_.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(zT,"reverseSubscription");function KU(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=n_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=zT(_),S=new UU(c,u,E,h,l,_.start_time);n.push(S)}return new wU(r,t,n,s)}a(KU,"buildNodePayloads");function WU(){if(!XT.get(Xt.CONFIG_PARAMS.CLUSTERING_ENABLED))throw DU(new Error,HU.CLUSTERING_NOT_ENABLED,PU.BAD_REQUEST,void 0,void 0,!0)}a(WU,"checkClusteringEnabled");async function QU(){let e=new BU(Xt.SYSTEM_SCHEMA_NAME,Xt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return xU(e)}a(QU,"getAllNodeRecords");async function JU(){let e=await vU.getSystemInformation();return{hdb_version:GU.version(),node_version:e.node_version,platform:e.platform}}a(JU,"getSystemInfo")});var lh=d((HH,Eh)=>{"use strict";var p=m(),Fi=I(),gs=oT(),qi=qo(),XU=ot(),M=require("pm2"),ZU=require("fs-extra"),ft=ko(),Ce=de(),Rt=y(),zU=ko(),jU=eh(),eD=require("util"),rh=eD.promisify(require("child_process").exec),sh=require("path");Eh.exports={start:Zt,stop:Vi,reload:ih,restart:ah,list:o_,describe:Yi,connect:it,kill:_h,startAllServices:uD,startService:xi,getUniqueServicesList:__,restartAllServices:ED,stopAllServices:lD,isServiceRegistered:ch,reloadStopStart:a_,restartHdb:oh,deleteProcess:_D,configureLogRotate:TD,startClustering:uh,isHdbRestartRunning:cD,isClusteringRunning:fD,stopClustering:hD,reloadClustering:RD};var{PACKAGE_ROOT:tD}=m(),rD="2.7.0",nh=sh.join(tD,"node_modules/pm2/bin/pm2"),sD="Log rotate installed.",nD="Error installing log rotate.",iD="Log rotate updated.",aD="Error updating log rotate.",oD="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function it(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(it,"connect");function Zt(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Zt,"start");function Vi(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(Vi,"stop");function ih(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ih,"reload");function ah(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ah,"restart");function _D(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(_D,"deleteProcess");async function oh(){await Zt(zU.generateRestart())}a(oh,"restartHdb");async function cD(){let e=await o_();for(let t in e)if(e[t].name===p.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cD,"isHdbRestartRunning");function o_(){return new Promise(async(e,t)=>{try{await it()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(o_,"list");function Yi(e){return new Promise(async(t,r)=>{try{await it()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Yi,"describe");function _h(){return new Promise(async(e,t)=>{try{await it()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(_h,"kill");async function uD(){try{await uh(),await Zt(ft.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(uD,"startAllServices");async function xi(e){try{let t;switch(e=e.toLowerCase(),e){case p.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=ft.generateIPCServerConfig();break;case p.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=ft.generateHDBServerConfig();break;case p.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=ft.generateCFServerConfig();break;case p.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=ft.generateNatsIngestServiceConfig();break;case p.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=ft.generateNatsReplyServiceConfig();break;case p.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=ft.generateNatsHubServerConfig(),await Zt(t),await gs.removeNatsConfig(e);return;case p.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=ft.generateNatsLeafServerConfig(),await Zt(t),await gs.removeNatsConfig(e);return;case p.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=ft.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Zt(t)}catch(t){throw M.disconnect(),t}}a(xi,"startService");async function __(){try{let e=await o_(),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 M.disconnect(),e}}a(__,"getUniqueServicesList");async function ED(e=[]){try{let t=!1,r=await __();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===p.PROCESS_DESCRIPTORS.HDB?t=!0:await a_(o):await ah(o))}t&&await a_(p.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(ED,"restartAllServices");async function lD(){try{let e=await __();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Vi(s.name)}if(await _h(),Ce.get(p.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await ZU.readFile(sh.join(Ce.get(p.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),p.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Rt.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(lD,"stopAllServices");async function ch(e){return!Fi.isEmptyOrZeroLength(await Yi(e))}a(ch,"isServiceRegistered");async function a_(e){let t=e===p.PROCESS_DESCRIPTORS.HDB?Ce.get(p.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ce.get(p.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Yi(e),s=Fi.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===p.PROCESS_DESCRIPTORS.HDB?Rt.error(oD):(await Vi(e),await xi(e)):e===p.PROCESS_DESCRIPTORS.HDB?await oh():await ih(e)}a(a_,"reloadStopStart");function dD(){return new Promise(async(e,t)=>{try{await it()}catch(r){t(r)}M.stop(p.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(dD,"stopLogrotate");async function SD(){let{stdout:e,stderr:t}=await rh(`${process.platform==="win32"?"node":""} ${nh} install pm2-logrotate@${rD}`);if(Rt.debug(`loadLogRotate stdout: ${e}`),t)throw Rt.error(nD),t;Rt.info(sD)}a(SD,"installLogRotate");async function th(){let e={max_size:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${nh} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await rh(t);if(Rt.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Rt.error(aD),s;Rt.info(iD)}a(th,"updateLogRotateConfig");async function TD(){Ce.initSync();let e=Fi.autoCastBoolean(Ce.get(p.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Yi(p.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Fi.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await SD(),await th();return}if(e&&s){await Zt(p.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await th();return}!e&&r===p.PM2_PROCESS_STATUSES.ONLINE&&await dD()}a(TD,"configureLogRotate");async function uh(){for(let t in p.CLUSTERING_PROCESSES){let r=p.CLUSTERING_PROCESSES[t];await xi(r)}await qi.createWorkQueueStream(XU.WORK_QUEUE_CONSUMER_NAMES),await qi.updateNodeNameLocalStreams();let e=await jU.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===p.PRE_4_0_0_VERSION){Rt.info("Starting clustering upgrade 4.0.0 process"),await xi(p.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(uh,"startClustering");async function hD(){for(let e in p.CLUSTERING_PROCESSES){let t=p.CLUSTERING_PROCESSES[e];await Vi(t)}}a(hD,"stopClustering");async function fD(){for(let e in p.CLUSTERING_PROCESSES){let t=p.CLUSTERING_PROCESSES[e];if(await ch(t)===!1)return!1}return!0}a(fD,"isClusteringRunning");async function RD(){await gs.generateNatsConfig(!0),await qi.reloadNATSHub(),await qi.reloadNATSLeaf(),await gs.removeNatsConfig(p.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await gs.removeNatsConfig(p.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(RD,"reloadClustering")});var c_=lh(),dh=m();a(async function(){try{let t=await c_.describe(dh.PROCESS_DESCRIPTORS.HDB);for(let r of t)await c_.reload(r.pm_id);await c_.deleteProcess(dh.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|