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,14 +1,14 @@
|
|
|
1
|
-
"use strict";var sC=Object.defineProperty;var a=(e,t)=>sC(e,"name",{value:t,configurable:!0});var S=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=S((e1,zd)=>{"use strict";var $e=require("path"),nC=require("fs");function iC(){let e=__dirname;for(;!nC.existsSync($e.join(e,"package.json"));){let t=$e.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(iC,"getHDBPackageRoot");var Gt=iC(),Fd="js",xn=Fd,aC="harperdb-config.yaml",oC="defaultConfig.yaml",cC="hdb",Vd=`hdbServer.${xn}`,kd=`customFunctionsServer.${xn}`,xd=`hdbIpcServer.${xn}`,_C=`restartHdb.${xn}`,W_="HarperDB",da="Custom Functions",ha="Clustering Hub",Sa="Clustering Leaf",J_="Clustering Ingest Service",Z_="Clustering Reply Service",uC="foreground.pid",Q_={HDB:W_,IPC:"IPC",CLUSTERING_HUB:ha,CLUSTERING_LEAF:Sa,CLUSTERING_INGEST_SERVICE:J_,CLUSTERING_REPLY_SERVICE:Z_,CUSTOM_FUNCTIONS:da,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"},lC={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"},EC={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},dC={harperdb:W_,ipc:"IPC","clustering hub":ha,"clustering leaf":Sa,"clustering ingest service":J_,"clustering reply service":Z_,"custom functions":da,custom_functions:da,"pm2-logrotate":Q_.PM2_LOGROTATE,logrotate:Q_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},hC={CLUSTERING_HUB_PROC_DESCRIPTOR:ha,CLUSTERING_LEAF_PROC_DESCRIPTOR:Sa,CLUSTERING_INGEST_PROC_DESCRIPTOR:J_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Z_},Ea={HDB:$e.join(Gt,"server/harperdb"),IPC:$e.join(Gt,"server/ipc"),CUSTOM_FUNCTIONS:$e.join(Gt,"server/customFunctions"),CLUSTERING_HUB:$e.join(Gt,"server/nats"),CLUSTERING_LEAF:$e.join(Gt,"server/nats")},SC={HDB:$e.join(Ea.HDB,Vd),IPC:$e.join(Ea.IPC,xd),CUSTOM_FUNCTIONS:$e.join(Ea.CUSTOM_FUNCTIONS,kd)},fC={HDB:$e.join(Gt,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:$e.join(Gt,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:$e.resolve(Gt,"launchServiceScripts/launchUpdateNodes4-0-0.js")},TC={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},$d="support@harperdb.io",mC="customer-success@harperdb.io",Yd=1,RC=4141,Kd="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",AC="https://www.harperdb.io/product",OC=`For support, please submit a request at ${Kd} or contact ${$d}`,Qd=`For license support, please contact ${mC}`,pC="None of the specified records were found.",NC="hash attribute not found",gC=`Your current license only supports ${Yd} role. ${Qd}`,IC="Your current license only supports 3 connections to a node.",CC="127.0.0.1",bC=1,wC=/^\.$/,LC=/^\.\.$/,UC="U+002E",yC=/\//g,DC="U+002F",MC=/U\+002F/g,PC=/^U\+002E$/,BC=/^U\+002EU\+002E$/,vC="d",HC=999999,GC="*",qC="--max-old-space-size=",FC="system",VC="__hdb_hash",kC=".harperdb",xC=".hdb",$C="keys",YC="hdb_boot_properties.file",KC=".updateConfig.json",QC="SIGTSTP",WC=24,JC=6e4,ZC=448,XC="blob",zC="trash",jC="schema",eb="transactions",tb=".count",rb="id",sb="install_log.log",nb="run_log.log",ib="PROCESS_NAME",ab={SETTINGS_PATH_KEY:"settings_path"},Wd=require("lodash"),ob={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"},cb={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},_b={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ub={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"},lb={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"},dt="hdb_internal:",Eb={CREATE_SCHEMA:dt+"create_schema",CREATE_TABLE:dt+"create_table",CREATE_ATTRIBUTE:dt+"create_attribute",ADD_USER:dt+"add_user",ALTER_USER:dt+"alter_user",DROP_USER:dt+"drop_user",HDB_NODES:dt+"hdb_nodes",HDB_USERS:dt+"hdb_users",HDB_WORKERS:dt+"hdb_workers",CATCHUP:dt+"catchup",SCHEMA_CATCHUP:dt+"schema_catchup",WORKER_ROOM:dt+"cluster_workers"},db={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"},hb="060493.ks",Sb=".license",fb={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={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"},Tb={CSV:".csv",JSON:".json"},mb={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Rb={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Dr={};Dr[g.CREATE_SCHEMA]=g.CREATE_SCHEMA;Dr[g.CREATE_TABLE]=g.CREATE_TABLE;Dr[g.CREATE_ATTRIBUTE]=g.CREATE_ATTRIBUTE;Dr[g.INSERT]=g.INSERT;Dr[g.UPDATE]=g.UPDATE;Dr[g.UPSERT]=g.UPSERT;Dr[g.DELETE]=g.DELETE;var J=Object.create(null);J[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;J[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;J[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;J[g.READ_LOG]=g.READ_LOG;J[g.ADD_NODE]=g.ADD_NODE;J[g.LIST_USERS]=g.LIST_USERS;J[g.LIST_ROLES]=g.LIST_ROLES;J[g.USER_INFO]=g.USER_INFO;J[g.SQL]=g.SQL;J[g.GET_JOB]=g.GET_JOB;J[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;J[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;J[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;J[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;J[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;J[g.REMOVE_NODE]=g.REMOVE_NODE;J[g.RESTART]=g.RESTART;J[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;J[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;J[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;J[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;J[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;J[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;J[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;J[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Ab={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},Ob={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Jd={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"},pb=Wd.invert(Jd),f={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"},Nb={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},gb={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.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"},Ib={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"},Cb={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bb={FILE_SYSTEM:"fs",LMDB:"lmdb"},wb={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Lb={DEVELOPMENT:8192,DEFAULT:512},Ub={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"},yb={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"},Db={ENOENT:"ENOENT",EACCES:"EACCES"},Zd={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Mb="__clustering__",Pb=Object.values(Zd),Bb=15984864e5,Xd={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},vb=Wd.invert(Xd),Hb={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"},Gb=111,qb=`\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:dw.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(Tw,"findPs")});var Ye=S((n1,Eh)=>{"use strict";var mw="__dbis__",Rw="__environment_name__",Aw="__dbi_defintion__",Ow={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"},pw=["__createdtime__","__updatedtime__"],Nw="\uFFFF",lh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},gw=Object.values(lh);Eh.exports={INTERNAL_DBIS_NAME:mw,DBI_DEFINITION_NAME:Aw,SEARCH_TYPES:Ow,TIMESTAMP_NAMES:pw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Rw,TRANSACTIONS_DBI_NAMES_ENUM:lh,TRANSACTIONS_DBIS:gw,OVERFLOW_MARKER:Nw}});var rt=S((i1,Oh)=>{"use strict";var dh=T(),hh=Ye(),Sh={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},fh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Th={500:fh("There was an error processing your request."),400:"Invalid request"},Iw=Th[Sh.INTERNAL_SERVER_ERROR],Cw={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.`},bw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ww={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"},Lw={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 ${hh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${hh.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"},Uw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dh.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 ${dh.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"},mh={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"},yw={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."},Dw={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`},Mw={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"},Pw={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Bw={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`},Rh={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.`},Ah={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}`},vw={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."},Hw={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Gw={...mh,...ww,...Cw,...yw,...Dw,...Mw,...Pw,...Bw,...Uw,...Rh,...Ah,...vw,...Hw,...bw};Oh.exports={CHECK_LOGS_WRAPPER:fh,HDB_ERROR_MSGS:Gw,DEFAULT_ERROR_MSGS:Th,DEFAULT_ERROR_RESP:Iw,HTTP_STATUS_CODES:Sh,LMDB_ERRORS_ENUM:Lw,AUTHENTICATION_ERROR_MSGS:mh,VALIDATION_ERROR_MSGS:Rh,IPC_ERRORS:Ah}});var D=S((a1,gh)=>{"use strict";var $s=rt(),qw=I(),Fw=T(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,ph),this.http_resp_code=s||$s.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($s.DEFAULT_ERROR_MSGS[s]?$s.DEFAULT_ERROR_MSGS[s]:$s.DEFAULT_ERROR_MSGS[$s.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&&qw[n](i)}};a($n,"HdbError");function ph(e,t,r,s=Fw.LOG_LEVELS.ERROR,n=null,i=!1){if(Nh(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(ph,"handleHDBError");function Nh(e){return e.__proto__.constructor.name===$n.name}a(Nh,"isHDBError");gh.exports={isHDBError:Nh,handleHDBError:ph,hdb_errors:$s}});var C=S((c1,qh)=>{"use strict";var su=require("path"),Vw=require("fs-extra"),Ie=I(),Ih=require("fs-extra"),kw=require("truncate-utf8-bytes"),Yn=require("os"),xw=require("net"),$w=require("recursive-iterator"),Ue=T(),Uh=uh(),Ch=require("papaparse"),ma=require("moment"),{inspect:Yw}=require("util"),bh=require("is-number"),o1=require("lodash"),{hdb_errors:Ra}=D(),yh=require("util").promisify(setTimeout),Kw=100,Qw=5,Ww="",Jw=4,wh=255,Lh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};qh.exports={isEmpty:ht,isEmptyOrZeroLength:Xt,arrayHasEmptyValues:zw,arrayHasEmptyOrZeroLengthValues:jw,buildFolderPath:eL,isBoolean:Dh,errorizeMessage:Zw,stripFileExtension:rL,autoCast:sL,autoCastJSONDeep:nu,removeDir:iL,compareVersions:aL,isCompatibleDataVersion:oL,escapeRawValue:Ph,unescapeValue:cL,stringifyProps:_L,valueConverter:uL,timeoutPromise:EL,isClusterOperation:hL,getClusterUser:TL,sendTransactionToSocketCluster:SL,checkGlobalSchemaTable:fL,getHomeDir:Bh,getPropsFilePath:lL,promisifyPapaParse:mL,removeBOM:vh,createEventPromise:RL,checkProcessRunning:AL,checkSchemaTableExist:OL,checkSchemaExists:Hh,checkTableExists:Gh,getStartOfTomorrowInSeconds:pL,getLimitKey:NL,isObject:tL,isNotEmptyAndHasValue:Xw,autoCasterIsNumberCheck:Mh,backtickASTSchemaItems:gL,isPortTaken:dL,stopProcess:IL,createForkArgs:CL,autoCastBoolean:bL,async_set_timeout:yh,getTableHashAttribute:wL,doesSchemaExist:LL,doesTableExist:UL,stringifyObj:yL,ms_to_time:DL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function Zw(e){return e instanceof Error?e:new Error(e)}a(Zw,"errorizeMessage");function ht(e){return e==null}a(ht,"isEmpty");function Xw(e){return!ht(e)&&(e||e===0||e===""||Dh(e))}a(Xw,"isNotEmptyAndHasValue");function Xt(e){return ht(e)||e.length===0||e.size===0}a(Xt,"isEmptyOrZeroLength");function zw(e){if(ht(e))return!0;for(let t=0;t<e.length;t++)if(ht(e[t]))return!0;return!1}a(zw,"arrayHasEmptyValues");function jw(e){if(Xt(e))return!0;for(let t=0;t<e.length;t++)if(Xt(e[t]))return!0;return!1}a(jw,"arrayHasEmptyOrZeroLengthValues");function eL(...e){try{return e.join(su.sep)}catch{console.error(e)}}a(eL,"buildFolderPath");function Dh(e){return ht(e)?!1:e===!0||e===!1}a(Dh,"isBoolean");function tL(e){return ht(e)?!1:typeof e=="object"}a(tL,"isObject");function rL(e){return Xt(e)?Ww:e.slice(0,-Jw)}a(rL,"stripFileExtension");function sL(e){return ht(e)||e===""||typeof e!="string"?e:Lh[e]!==void 0?Lh[e]:Mh(e)===!0?Number(e):e}a(sL,"autoCast");function nL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(nL,"autoCastJSON");function nu(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=nu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=nu(r);s!==r&&(e[t]=s)}return e}else return nL(e)}a(nu,"autoCastJSONDeep");function Mh(e){if(e.startsWith("0.")&&bh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&bh(e))}a(Mh,"autoCasterIsNumberCheck");async function iL(e){if(Xt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Ih.emptyDir(e),await Ih.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(iL,"removeDir");function aL(e,t){if(Xt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Xt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(aL,"compareVersions");function oL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(oL,"isCompatibleDataVersion");function Ph(e){if(ht(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(Ph,"escapeRawValue");function cL(e){if(ht(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(cL,"unescapeValue");function _L(e,t){if(ht(e))return Ie.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+Yn.EOL}!Xt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:Xt(s)||(r+=s+"="+n+Yn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(_L,"stringifyProps");function uL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(Ph(t)),s=Buffer.byteLength(r)>wh?kw(r,wh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(uL,"valueConverter");function Bh(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Bh,"getHomeDir");function lL(){let e=su.join(Bh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return Vw.existsSync(e)||(e=su.join(__dirname,"../","hdb_boot_properties.file")),e}a(lL,"getPropsFilePath");function EL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(EL,"timeoutPromise");async function dL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=xw.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(dL,"isPortTaken");function hL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(hL,"isClusterOperation");function SL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.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]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(SL,"sendTransactionToSocketCluster");function fL(e,t){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(fL,"checkGlobalSchemaTable");function TL(e,t){if(ht(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ht(e)||Xt(e)){Ie.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){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(TL,"getClusterUser");function mL(){Ch.parsePromise=function(e,t){return new Promise(function(r,s){Ch.parse(e,{header:!0,transformHeader:vh,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(mL,"promisifyPapaParse");function vh(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vh,"removeBOM");function RL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${Yw(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(RL,"createEventPromise");async function AL(e){let t=!0,r=0;do await yh(Kw*r++),(await Uh.findPs(e)).length>0&&(t=!1);while(t&&r<Qw);if(t)throw new Error(`process ${e} was not started`)}a(AL,"checkProcessRunning");function OL(e,t){let r=Hh(e);if(r)return r;let s=Gh(e,t);if(s)return s}a(OL,"checkSchemaTableExist");function Hh(e){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Hh,"checkSchemaExists");function Gh(e,t){if(!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Gh,"checkTableExists");function pL(){let e=ma().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=ma().utc().unix();return e-t}a(pL,"getStartOfTomorrowInSeconds");function NL(){return ma().utc().format("DD-MM-YYYY")}a(NL,"getLimitKey");function gL(e){try{let t=new $w(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){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(gL,"backtickASTSchemaItems");async function IL(e){let t=Yn.userInfo();(await Uh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(IL,"stopProcess");function CL(e){return[e]}a(CL,"createForkArgs");function bL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(bL,"autoCastBoolean");function wL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(wL,"getTableHashAttribute");function LL(e){return global?.hdb_schema?.[e]!==void 0}a(LL,"doesSchemaExist");function UL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(UL,"doesTableExist");function yL(e){try{return JSON.stringify(e)}catch{return e}}a(yL,"stringifyObj");function DL(e){let t=ma.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(DL,"ms_to_time")});var as=S((_1,ML)=>{ML.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 zh=S((l1,Xh)=>{"use strict";var iu=require("recursive-iterator"),PL=require("alasql"),au=require("clone"),Fh=C(),{handleHDBError:Vh,hdb_errors:BL}=D(),{HDB_ERROR_MSGS:kh,HTTP_STATUS_CODES:xh}=BL,vL=["DISTINCT_ARRAY"],$h=Symbol("validateTables"),ou=Symbol("validateTable"),u1=Symbol("getAllColumns"),Yh=Symbol("validateAllColumns"),Aa=Symbol("findColumn"),Kh=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),cu=Symbol("validateColumn"),Qh=Symbol("setColumnsForTable"),Wh=Symbol("checkColumnsForAsterisk"),Jh=Symbol("validateGroupBy"),Zh=Symbol("hasColumns"),Oa=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$h](),this[Wh](),this[Yh]()}[$h](){if(this[Zh]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ou](t.table)})}}[Zh](){let t=!1,r=new iu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Vh(new Error,kh.SCHEMA_NOT_FOUND(t.databaseid),xh.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Vh(new Error,kh.TABLE_NOT_FOUND(t.databaseid,t.tableid),xh.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=au(s);n.table=au(t),this.attributes.push(n)})}[Aa](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)}[Wh](){let t=new iu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Qh](r.tableid)}[Qh](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new PL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yh](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Jh](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new iu(t),n=[];for(let{node:i,path:o}of s)!Fh.isEmpty(i)&&!Fh.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kh](i):n.push(this[cu](i)));return n}[Jh](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&vL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=au(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Aa](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[Aa](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Kh](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[cu](t)}[cu](t){let r=this[Aa](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(Oa,"SelectValidator");Xh.exports=Oa});var _u=S((E1,jh)=>{"use strict";var pa=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(pa,"BridgeMethods");jh.exports=pa});var os=S((S1,sS)=>{"use strict";var eS=rt().LMDB_ERRORS_ENUM,d1=require("lmdb"),HL=Ye(),h1=require("buffer").Buffer,GL=require("microtime"),{OVERFLOW_MARKER:tS,MAX_SEARCH_KEY_LENGTH:Na}=HL,rS=["number","string","symbol","boolean","bigint"];function qL(e){if(!e)throw new Error(eS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(eS.INVALID_ENVIRONMENT)}a(qL,"validateEnv");function FL(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(FL,"stringifyData");function VL(e){return e instanceof Date?e.valueOf():e}a(VL,"convertKeyValueToWrite");function kL(e){if(e==null)return;if(rS.includes(typeof e))return e.length>Na?[e.slice(0,Na)+tS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];rS.includes(typeof n)&&(n.length>Na?t.push(n.slice(0,Na)+tS):t.push(n))}}return t}a(kL,"getIndexedValues");function xL(){let e=GL.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(xL,"getMicroTime");sS.exports={validateEnv:qL,stringifyData:FL,convertKeyValueToWrite:VL,getMicroTime:xL,getIndexedValues:kL}});var iS=S((f1,nS)=>{"use strict";var ga=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ga,"DBIDefinition");nS.exports=ga});var oS=S((T1,aS)=>{"use strict";var Ia=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(Ia,"OpenDBIObject");aS.exports=Ia});var _S=S((m1,cS)=>{"use strict";var Ca=class{constructor(t,r,s,n,i=!1,o=!1,c=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,c!==void 0&&(this.overlappingSync=c)}};a(Ca,"OpenEnvironmentObject");cS.exports=Ca});var lS=S((R1,uS)=>{"use strict";var $L={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))},YL="certificate.pem",KL="privateKey.pem",QL="ca.pem";uS.exports={CERTIFICATE_VALUES:$L,CERTIFICATE_PEM_NAME:YL,PRIVATEKEY_PEM_NAME:KL,CA_PEM_NAME:QL}});var Ee=S((A1,ES)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};ES.exports={validateObject:WL,validateObjectAsync:JL,validateBySchema:ZL};function WL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(WL,"validateObject");async function JL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(JL,"validateObjectAsync");function ZL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ZL,"validateBySchema")});var lu=S((O1,hS)=>{"use strict";var XL=require("fs-extra"),F=require("joi"),zL=require("os"),{boolean:ye,string:dr,number:zt,array:uu}=F.types(),qt=require("path"),jL=I(),ba=C(),hr=lS(),eU=Ee(),Er="keys",tU=hr.CERTIFICATE_PEM_NAME,rU=hr.PRIVATEKEY_PEM_NAME,sU=hr.CA_PEM_NAME,nU=hr.CERTIFICATE_PEM_NAME,iU=hr.PRIVATEKEY_PEM_NAME,aU=hr.CA_PEM_NAME,oU=hr.CERTIFICATE_PEM_NAME,cU=hr.PRIVATEKEY_PEM_NAME,_U=hr.CA_PEM_NAME,uU="log",lU="custom_functions",EU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",hU="rootPath config parameter is undefined",SU="clustering.enabled config parameter is undefined",Pr=zt.min(0).required(),wa=uu.items({host:dr.required(),port:Pr}).empty(null),nt;hS.exports={configValidator:fU,routesValidator:OU,route_constraints:wa};function fU(e){if(nt=e.rootPath,ba.isEmpty(nt))throw hU;let t=ye.required(),r=F.valid("production","development").required(),s=zt.min(1).max(1e3).empty(null).default(AU),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dS),i=F.custom(mU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(dS),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(ba.isEmpty(c))throw SU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Pr,routes:wa}).required()}).required(),leafNodes:F.object({network:F.object({port:Pr}).required()}).required(),network:F.object({port:Pr}).required()}).required(),leafServer:F.object({network:F.object({port:Pr,routes:wa}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Pr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:dr.required(),maxSize:dr.custom(RU).required(),retain:zt.min(0).required(),rotate:ye.required(),rotateInterval:dr.required(),rotateModule:ye.required(),timezone:dr.required(),workerInterval:zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fU,"configValidator");function TU(e){return XL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(TU,"doesPathExist");function mU(e,t){F.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=TU(e);if(r)return t.message(r)}a(mU,"validatePemFile");function RU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(dU)}a(RU,"validateRotationMaxSize");function AU(e,t){let r=t.state.path.join("."),s=zL.cpus().length,n=s-1;return n<=2&&(n=2),jL.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(AU,"setDefaultThreads");function dS(e,t){if(!ba.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ba.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return qt.join(nt,lU);case"logging.root":return qt.join(nt,uU);case"operationsApi.tls.certificate":return qt.join(nt,Er,tU);case"operationsApi.tls.privateKey":return qt.join(nt,Er,rU);case"operationsApi.tls.certificateAuthority":return qt.join(nt,Er,sU);case"customFunctions.tls.certificate":return qt.join(nt,Er,nU);case"customFunctions.tls.privateKey":return qt.join(nt,Er,iU);case"customFunctions.tls.certificateAuthority":return qt.join(nt,Er,aU);case"clustering.tls.certificate":return qt.join(nt,Er,oU);case"clustering.tls.privateKey":return qt.join(nt,Er,cU);case"clustering.tls.certificateAuthority":return qt.join(nt,Er,_U);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(dS,"setDefaultRoot");function OU(e){let t=F.object({routes:wa});return eU.validateBySchema({routes:e},t)}a(OU,"routesValidator")});var Sr=S((p1,OS)=>{"use strict";var re=T(),It=C(),Ke=I(),{configValidator:pU,routesValidator:SS}=lu(),Ft=require("fs-extra"),NU=require("yaml"),Ys=require("path"),gU=require("is-number"),ya=require("properties-reader"),IU=require("lodash"),{handleHDBError:CU}=D(),{HTTP_STATUS_CODES:bU,HDB_ERROR_MSGS:La}=rt(),{PACKAGE_ROOT:wU}=T(),LU="Unable to get config value because config is uninitialized",UU="Config successfully initialized",yU="Error backing up config file",DU="Empty parameter sent to getConfigValue",fS=Ys.join(wU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),MU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ua,it;OS.exports={createConfigFile:PU,getDefaultConfig:BU,getConfigValue:TS,initConfig:mS,flattenConfig:cs,updateConfigValue:RS,updateConfigObject:vU,getConfiguration:HU,setConfiguration:GU,readConfigFile:hu,getClusteringRoutes:qU,initOldConfig:AS,getConfigFromFile:FU};function PU(e){let t=Ks(fS);Ua=cs(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=Eu(o,e[i]);try{t.setIn([...c],_)}catch(u){Ke.error(u)}}}du(t);let r=t.toJSON();it=cs(r);let s=t.getIn(["rootPath"]),n=Ys.join(s,re.HDB_CONFIG_FILE);Ft.createFileSync(n),Ft.writeFileSync(n,String(t)),Ke.trace(`Config file written to ${n}`)}a(PU,"createConfigFile");function BU(e){if(Ua===void 0){let r=Ks(fS);Ua=cs(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ua[t.toLowerCase()]}a(BU,"getDefaultConfig");function TS(e){if(It.isEmpty(e)){Ke.error(DU);return}if(it===void 0){Ke.trace(LU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(TS,"getConfigValue");function mS(e=!1){if(it===void 0||e){let t=It.getPropsFilePath();try{Ft.accessSync(t,Ft.constants.F_OK|Ft.constants.R_OK)}catch(o){throw Ke.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ya(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{AS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Ks(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Ke.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 Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}du(n);let i=n.toJSON();it=cs(i),Ke.trace(UU)}}a(mS,"initConfig");function du(e){let t=e.toJSON(),r=pU(t);if(r.error)throw La.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(du,"validateConfig");function vU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(vU,"updateConfigObject");function RS(e,t,r=void 0,s=!1,n=!1){it===void 0&&mS();let i=TS(re.CONFIG_PARAM_MAP.hdb_root),o=Ys.join(i,re.HDB_CONFIG_FILE),c=Ks(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=Eu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),h=Eu(E,r[l]);try{c.setIn([...d],h)}catch(m){Ke.error(m)}}}du(c);let _=c.getIn(["rootPath"]),u=Ys.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ys.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Ft.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(yU),Ke.error(l)}Ft.writeFileSync(u,String(c)),n&&(it=cs(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(RS,"updateConfigValue");function cs(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=cs(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(cs,"flattenConfig");function Eu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.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(gU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.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 It.autoCast(t)}a(Eu,"castConfigValue");function HU(){let e=It.getPropsFilePath(),r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(HU,"getConfiguration");async function GU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return RS(void 0,void 0,n,!0),MU}catch(i){throw typeof i=="string"||i instanceof String?CU(i,i,bU.BAD_REQUEST,void 0,void 0,!0):i}}a(GU,"setConfiguration");function hu(){let e=It.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(hu,"readConfigFile");function Ks(e){return NU.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ks,"parseYamlDoc");function qU(){let e=hu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=SS(t);if(r)throw La.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=SS(s);if(n)throw La.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw La.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(qU,"getClusteringRoutes");function AS(e){let t=ya(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?it[n]=Ys.dirname(s):it[n]=s}return it}a(AS,"initOldConfig");function FU(e){let t=hu();return IU.get(t,e.replaceAll("_","."))}a(FU,"getConfigFromFile")});var Y=S((N1,NS)=>{"use strict";var Su=require("fs-extra"),jt=require("path"),VU=require("os"),kU=require("properties-reader"),Qn=I(),Qs=C(),M=T(),Da=Sr(),xU="Error initializing environment manager",Ma="BOOT_PROPS_FILE_PATH",pS=!1,$U={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},fr={};NS.exports={BOOT_PROPS_FILE_PATH:Ma,getHdbBasePath:YU,setHdbBasePath:KU,get:QU,initSync:JU,setProperty:$,initTestEnvironment:ZU};function YU(){return fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(YU,"getHdbBasePath");function KU(e){fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(KU,"setHdbBasePath");function QU(e){let t=Da.getConfigValue(e);return t===void 0?fr[e]:t}a(QU,"get");function $(e,t){$U[e]&&(fr[e]=t),Da.updateConfigObject(e,t)}a($,"setProperty");function WU(){let e;try{e=Qs.getPropsFilePath(),Su.accessSync(e,Su.constants.F_OK|Su.constants.R_OK),pS=!0;let t=kU(e);return fr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),fr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),fr[Ma]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(WU,"doesPropFileExist");function JU(e=!1){try{(pS||WU())&&(Da.initConfig(e),fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Da.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(xU),Qn.error(t),console.error(t),process.exit(1)}}a(JU,"initSync");function ZU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");fr[Ma]=jt.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,VU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),$(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),$(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),$(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Qs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Qs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Qs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Qs.isEmpty(i)?!1:i),$(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),$(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),$(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Qs.isEmpty(c)?!1:c),o&&($("CORS_ACCESSLIST",o),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&($(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&($(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&($(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ma}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(ZU,"initTestEnvironment")});var z=S((I1,BS)=>{"use strict";var fu=require("lmdb"),Ct=require("fs-extra"),Vt=require("path"),Ba=os(),gS=I(),De=rt().LMDB_ERRORS_ENUM,va=iS(),Tu=oS(),IS=_S(),Br=Ye(),g1=T(),Wn=Y();Wn.initSync();var CS=Wn.get("STORAGE_WRITEASYNC")===!0||Wn.get("STORAGE_WRITEASYNC")==="true"||Wn.get("STORAGE_WRITEASYNC")==="TRUE",bS=Wn.get("STORAGE_OVERLAPPINGSYNC"),wS=1024*1024*1024,LS=1e4,US=1e3,kt=Br.INTERNAL_DBIS_NAME,yS=Br.DBI_DEFINITION_NAME,XU="data.mdb",zU="lock.mdb",Jn=".mdb",jU="-lock",Pa=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new fu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Pa,"TransactionCursor");function mu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(mu,"pathEnvNameValidation");async function Ru(e,t,r=!0){try{await Ct.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Vt.join(e,t+Jn);return await Ct.access(s,Ct.constants.R_OK|Ct.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ct.access(Vt.join(e,t,XU),Ct.constants.R_OK|Ct.constants.F_OK),Vt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ru,"validateEnvironmentPath");function Ha(e,t){if(Ba.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ha,"validateEnvDBIName");async function ey(e,t,r=!1,s=!1){mu(e,t),t=t.toString();try{return await Ru(e,t,s),Au(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Vt.join(e,t);await Ct.mkdirp(s?i:e);let o=new IS(s?i:i+Jn,wS,LS,US,!1,CS,bS),c=fu.open(o);c.dbis=Object.create(null);let _=new Tu(!1);c.openDB(kt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ou(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ey,"createEnvironment");async function ty(e,t,r,s=!0){let n=await Au(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(Vt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(ty,"copyEnvironment");async function Au(e,t,r=!1){mu(e,t),t=t.toString();let s=Ou(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 Ru(e,t),i=Vt.join(e,t+Jn),o=n!=i,c=new IS(n,wS,LS,US,o,CS,bS),_=fu.open(c);_.dbis=Object.create(null);let u=MS(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Au,"openEnvironment");async function ry(e,t,r=!1){mu(e,t),t=t.toString();let s=Vt.join(e,t+Jn),n=await Ru(e,t);if(global.lmdb_map!==void 0){let i=Ou(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await DS(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+jU:Vt.join(Vt.dirname(n),zU))}a(ry,"deleteEnvironment");async function DS(e){Ba.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(DS,"closeEnvironment");function Ou(e,t,r=!1){let n=`${Vt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ou,"getCachedEnvironmentName");function sy(e){Ba.validateEnv(e);let t=Object.create(null),r=bt(e,kt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==kt)try{t[s]=Object.assign(new va,n)}catch{gS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(sy,"listDBIDefinitions");function MS(e){Ba.validateEnv(e);let t=[],r=bt(e,kt);for(let{key:s}of r.getRange({start:!1}))s!==kt&&t.push(s);return t}a(MS,"listDBIs");function ny(e,t){let s=bt(e,kt).getEntry(t),n=new va;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{gS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ny,"getDBIDefinition");function PS(e,t,r,s=!1){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Tu(r,s===!0),o=e.openDB(t,i),c=new va(r===!0,s);return o[yS]=c,bt(e,kt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(PS,"createDBI");function bt(e,t){if(Ha(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==kt?r=ny(e,t):r=new va,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Tu(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(De.DBI_DOES_NOT_EXIST):n}return s[yS]=r,e.dbis[t]=s,s}a(bt,"openDBI");function iy(e,t){Ha(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(iy,"statDBI");async function ay(e,t){try{let r=Vt.join(e,t+Jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(ay,"environmentDataSize");function oy(e,t){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,kt).removeSync(t)}a(oy,"dropDBI");function cy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)PS(e,n,n!==t,n===t);else throw i}}}a(cy,"initializeDBIs");BS.exports={openDBI:bt,openEnvironment:Au,createEnvironment:ey,listDBIs:MS,listDBIDefinitions:sy,createDBI:PS,dropDBI:oy,statDBI:iy,deleteEnvironment:ry,initializeDBIs:cy,TransactionCursor:Pa,environmentDataSize:ay,copyEnvironment:ty,closeEnvironment:DS}});var HS=S((C1,vS)=>{"use strict";var Ga=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Ga,"InsertRecordsResponseObject");vS.exports=Ga});var qS=S((b1,GS)=>{"use strict";var qa=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(qa,"UpdateRecordsResponseObject");GS.exports=qa});var VS=S((w1,FS)=>{"use strict";var Fa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Fa,"UpsertRecordsResponseObject");FS.exports=Fa});var Ws=S((D1,xS)=>{"use strict";var _y=z(),uy=HS(),ly=qS(),Ey=VS(),Xn=os(),Zn=rt().LMDB_ERRORS_ENUM,dy=Ye(),vr=T(),hy=C(),Sy=require("uuid"),L1=require("lmdb"),{handleHDBError:fy,hdb_errors:Ty}=D(),{OVERFLOW_MARKER:U1,MAX_SEARCH_KEY_LENGTH:y1}=dy,pu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,_s=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function my(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new uy,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];kS(u,!0,n);let l=Ry(e,t,r,u),E=u[t];o.push(l),c.push(E)}return gu(o,c,s,i)}a(my,"insertRecords");function Ry(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=Xn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[_s])})}a(Ry,"insertRecord");function Ay(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ay,"removeSkippedRecords");function kS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[_s]))&&(e[_s]=s),t===!0?(r===!0||!Number.isInteger(e[pu]))&&(e[pu]=s):delete e[pu]}a(kS,"setTimestamps");function Nu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),_y.initializeDBIs(e,t,r)}a(Nu,"initializeTransaction");async function Oy(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new ly,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Iu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return gu(c,_,s,i,o)}a(Oy,"updateRecords");async function py(e,t,r,s,n=!0){try{Cu(e,t,r,s)}catch(_){throw fy(_,_.message,Ty.HTTP_STATUS_CODES.BAD_REQUEST)}Nu(e,t,r);let i=new Ey,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;hy.isEmpty(u[t])?(l=Sy.v4(),u[t]=l):l=u[t];let E=Iu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return gu(o,c,s,i)}a(py,"upsertRecords");async function gu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Xn.getMicroTime(),Ay(r,n),s}a(gu,"finalizeWrite");function Iu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(kS(r,!l,o),Number.isInteger(r[_s])&&u[_s]>r[_s])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Xn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)w.remove(B[X],s);if(B=Xn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)w.put(B[X],s)}let h=Object.assign({},u,r);c.put(s,h,h[_s])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:Iu(e,t,r,s,n,i,o))}a(Iu,"updateUpsertRecord");function Ny(e,t,r){if(Xn.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ny,"validateBasic");function Cu(e,t,r,s){if(Ny(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Cu,"validateWrite");xS.exports={insertRecords:my,updateRecords:Oy,upsertRecords:py}});var te=S((M1,YS)=>{"use strict";var bu=T(),Js=Y(),wu=require("path");Js.initSync();var Va,ka,xa;function $S(){if(Va!==void 0)return Va;if(Js.getHdbBasePath()!==void 0)return Va=wu.join(Js.getHdbBasePath(),bu.SCHEMA_DIR_NAME),Va}a($S,"getBaseSchemaPath");function gy(){if(ka!==void 0)return ka;if(Js.getHdbBasePath()!==void 0)return ka=wu.join($S(),bu.SYSTEM_SCHEMA_NAME),ka}a(gy,"getSystemSchemaPath");function Iy(){if(xa!==void 0)return xa;if(Js.getHdbBasePath()!==void 0)return xa=wu.join(Js.getHdbBasePath(),bu.TRANSACTIONS_DIR_NAME),xa}a(Iy,"getTransactionAuditStorePath");YS.exports={getBaseSchemaPath:$S,getSystemSchemaPath:gy,getTransactionAuditStorePath:Iy}});var Tr=S((P1,WS)=>{"use strict";var QS=C(),KS=T(),Ya=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Lu=require("joi"),$a={schema_format:{pattern:Ya,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Cy=Lu.alternatives(Lu.string().min(1).max($a.schema_length.maximum).pattern(Ya).messages({"string.pattern.base":"{:#label} "+$a.schema_format.message}),Lu.number()).required();function by(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>$a.schema_length.maximum?`'${e}' maximum of 250 characters`:Ya.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(by,"checkValidTable");function wy(e,t){return QS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(wy,"validateSchemaExists");function Ly(e,t){let r=t.state.ancestors[0].schema;return QS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Ly,"validateTableExists");function Uy(e,t){return e.toLowerCase()===KS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${KS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Uy,"validateSchemaName");WS.exports={common_validators:$a,schema_regex:Ya,hdb_schema_table:Cy,validateSchemaExists:wy,validateTableExists:Ly,validateSchemaName:Uy,checkValidTable:by}});var Ka=S((B1,JS)=>{var{common_validators:Hr}=Tr(),zn=Ee(),xt="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function jn(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(jn,"makeAttributesStrings");function yy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(yy,"schema_object");function Dy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Dy,"table_object");function My(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:xt},zn.validateObject(e,Z)}a(My,"create_table_object");function Py(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence={message:xt},Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Py,"attribute_object");function By(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(By,"describe_table");function vy(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(vy,"validateTableResidence");JS.exports={schema_object:yy,create_table_object:My,table_object:Dy,attribute_object:Py,describe_table:By,validateTableResidence:vy}});var XS=S((v1,ZS)=>{"use strict";var Hy=require("uuid"),Qa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Qa,"CreateAttributeObject");ZS.exports=Qa});var Ja=S((H1,zS)=>{"use strict";var Gy=XS(),Wa=class extends Gy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Wa,"LMDBCreateAttributeObject");zS.exports=Wa});var ef=S((G1,jS)=>{"use strict";jS.exports=Fy;var qy="inserted";function Fy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fy,"returnObject")});var Za=S((q1,rf)=>{"use strict";var Vy=T(),Uu=z(),ky=Ws(),{getSystemSchemaPath:xy,getBaseSchemaPath:$y}=te(),Yy=require("path"),Ky=as(),Qy=Ka(),Wy=Ja(),Jy=ef(),{handleHDBError:Zy,hdb_errors:Xy}=D(),zy=C(),yu=Ky.hdb_attribute,tf=[];for(let e=0;e<yu.attributes.length;e++)tf.push(yu.attributes[e].attribute);var jy="inserted";rf.exports=eD;async function eD(e){let t=Qy.attribute_object(e);if(t)throw Zy(new Error,t.message,Xy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=zy.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 Wy(e.schema,e.table,e.attribute,e.id);try{let n=await Uu.openEnvironment(Yy.join($y(),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}`);Uu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Uu.openEnvironment(xy(),Vy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await ky.insertRecords(i,yu.hash_attribute,tf,[s]);return Jy(jy,o,{records:[s]},c)}catch(n){throw n}}a(eD,"lmdbCreateAttribute")});var Mu=S((F1,nf)=>{var{hdb_schema_table:sf}=Tr(),tD=Ee(),Du=require("joi"),rD={undefined:"undefined",null:"null"},sD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||rD[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),nD=Du.object({schema:sf,table:sf,records:Du.array().items(Du.object().custom(sD)).required()});nf.exports=function(e){return tD.validateBySchema(e,nD)}});var Xa=S((k1,of)=>{"use strict";var mr=C(),af=I(),V1=Mu();of.exports=iD;function iD(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(mr.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&mr.isEmptyOrZeroLength(o[r]))throw af.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw af.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(iD,"insertUpdateValidate")});var ei=S((x1,cf)=>{"use strict";var aD=T().OPERATIONS_ENUM,za=class{constructor(t,r,s,n,i=void 0){this.operation=aD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(za,"InsertObject");cf.exports=za});var eo=S((Y1,_f)=>{"use strict";var $1=ei(),ja=T(),Bu=C(),Pu=I(),oD=require("uuid"),{handleHDBError:ti,hdb_errors:cD}=D(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:si}=cD;_f.exports=_D;function _D(e,t,r){for(let n=0;n<t.length;n++)uD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];lD(i,r,e.operation)}}a(_D,"processRows");function uD(e){if(Buffer.byteLength(String(e))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ti(new Error,ri.ATTR_NAME_LENGTH_ERR(e),si.BAD_REQUEST,void 0,void 0,!0);if(Bu.isEmptyOrZeroLength(e)||Bu.isEmpty(e.trim()))throw ti(new Error,ri.ATTR_NAME_NULLISH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(uD,"validateAttribute");function lD(e,t,r){if(!e.hasOwnProperty(t)||Bu.isEmptyOrZeroLength(e[t])){if(r===ja.OPERATIONS_ENUM.INSERT||r===ja.OPERATIONS_ENUM.UPSERT){e[t]=oD.v4();return}throw Pu.error("Update transaction aborted due to record with no hash value:",e),ti(new Error,ri.RECORD_MISSING_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Pu.error(e),ti(new Error,ri.HASH_VAL_LENGTH_ERR,si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Pu.error(e),ti(new Error,ri.INVALID_FORWARD_SLASH_IN_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(lD,"validateHash")});var lf=S((K1,uf)=>{"use strict";var to=class{constructor(t,r){this.type=t,this.message=r}};a(to,"IPCEventObject");uf.exports=to});var us=S((Q1,Ef)=>{"use strict";var ED=I(),vu=C(),dD=T(),{IPC_ERRORS:ni}=rt();Ef.exports={sendIpcEvent:hD,validateEvent:SD,SchemaEventMsg:fD,UserEventMsg:TD};function hD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ED.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(hD,"sendIpcEvent");function SD(e){if(typeof e!="object")return ni.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||vu.isEmpty(e.type))return ni.MISSING_TYPE;if(!e.hasOwnProperty("message")||vu.isEmpty(e.message))return ni.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||vu.isEmpty(e.message.originator))return ni.MISSING_ORIGIN;if(dD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ni.INVALID_EVENT(e.type)}a(SD,"validateEvent");function fD(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(fD,"SchemaEventMsg");function TD(e){this.originator=e}a(TD,"UserEventMsg")});var Zs=S((J1,ff)=>{"use strict";var df=T(),W1=C(),ro=I(),hf=lf(),{sendIpcEvent:Sf}=us();function mD(e){try{ro.trace("signalSchemaChange called with message:",e);let t=new hf(df.IPC_EVENT_TYPES.SCHEMA,e);Sf(t)}catch(t){ro.error(t)}}a(mD,"signalSchemaChange");function RD(e){try{ro.trace("signalUserChange called with message:",e);let t=new hf(df.IPC_EVENT_TYPES.USER,e);Sf(t)}catch(t){ro.error(t)}}a(RD,"signalUserChange");ff.exports={signalSchemaChange:mD,signalUserChange:RD}});var so=S((Z1,mf)=>{"use strict";var Tf=C(),AD=T(),OD=I(),pD=Za(),ND=Ja(),gD=Zs(),{SchemaEventMsg:ID}=us(),CD="already exists in";mf.exports=bD;async function bD(e,t,r){try{if(Tf.isEmptyOrZeroLength(r))return r;let s=[];Tf.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 wD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(bD,"lmdbCheckForNewAttributes");async function wD(e,t,r,s){let n=new ND(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await LD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(CD))OD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(wD,"createNewAttribute");async function LD(e){let t;try{return t=await pD(e),gD.signalSchemaChange(new ID(process.pid,AD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(LD,"createAttribute")});var Xs=S((X1,Rf)=>{"use strict";var no=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(no,"LMDBTransactionObject");Rf.exports=no});var Of=S((z1,Af)=>{"use strict";var UD=Xs(),yD=T().OPERATIONS_ENUM,io=class extends UD{constructor(t,r,s,n,i=void 0){super(yD.INSERT,r,s,n,i),this.records=t}};a(io,"LMDBInsertTransactionObject");Af.exports=io});var Nf=S((j1,pf)=>{"use strict";var DD=Xs(),MD=T().OPERATIONS_ENUM,ao=class extends DD{constructor(t,r,s,n,i,o=void 0){super(MD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(ao,"LMDBUpdateTransactionObject");pf.exports=ao});var If=S((eJ,gf)=>{"use strict";var PD=Xs(),BD=T().OPERATIONS_ENUM,oo=class extends PD{constructor(t,r,s,n,i,o=void 0){super(BD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(oo,"LMDBUpsertTransactionObject");gf.exports=oo});var bf=S((tJ,Cf)=>{"use strict";var vD=Xs(),HD=T().OPERATIONS_ENUM,co=class extends vD{constructor(t,r,s,n,i=void 0){super(HD.DELETE,s,n,t,i),this.original_records=r}};a(co,"LMDBDeleteTransactionObject");Cf.exports=co});var ii=S((rJ,yf)=>{"use strict";var GD=require("path"),wf=z(),qD=Of(),FD=Nf(),VD=If(),kD=bf(),zs=Ye(),Lf=C(),{CONFIG_PARAMS:xD}=T(),Uf=Y();Uf.initSync();var _o=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:$D}=te();yf.exports=YD;async function YD(e,t){if(Uf.get(xD.LOGGING_AUDITLOG)===!1)return;let r=GD.join($D(),e.schema.toString()),s=await wf.openEnvironment(r,e.table,!0),n=KD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){wf.initializeDBIs(s,zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zs.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Lf.isEmpty(n.user_name)||s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(YD,"writeTransaction");function KD(e,t){let r=Lf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new qD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new FD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new VD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new kD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KD,"createTransactionObject")});var Hu=S((nJ,Df)=>{"use strict";var QD=Xa(),sJ=ei(),js=T(),WD=eo(),JD=Ws().insertRecords,ZD=z(),XD=require("path"),zD=I(),jD=so(),{getBaseSchemaPath:eM}=te(),tM=ii();Df.exports=rM;async function rM(e){try{let{schema_table:t,attributes:r}=QD(e);WD(e,r,t.hash_attribute),e.schema!==js.SYSTEM_SCHEMA_NAME&&(r.includes(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jD(e.hdb_auth_header,t,r),n=XD.join(eM(),e.schema.toString()),i=await ZD.openEnvironment(n,e.table),o=await JD(i,t.hash_attribute,r,e.records,e[js.CLUSTERING_FLAG]!==!0);try{await tM(e,o)}catch(c){zD.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(rM,"lmdbCreateRecords")});var Bf=S((iJ,Pf)=>{"use strict";var Mf=T(),sM=Hu(),nM=ei(),iM=require("fs-extra"),aM=require("path"),{getBaseSchemaPath:oM}=te();Pf.exports=cM;async function cM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nM(Mf.SYSTEM_SCHEMA_NAME,Mf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sM(r),await iM.mkdirp(aM.join(oM(),e.schema.toString()))}a(cM,"lmdbCreateSchema")});var Hf=S((aJ,vf)=>{"use strict";var uo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(uo,"DeleteRecordsResponseObject");vf.exports=uo});var Fu=S((uJ,Ff)=>{"use strict";var Gf=z(),Gu=os(),qu=rt().LMDB_ERRORS_ENUM,_M=Ye(),qf=I(),oJ=C(),uM=require("lmdb"),lM=Hf(),{OVERFLOW_MARKER:cJ,MAX_SEARCH_KEY_LENGTH:_J}=_M;async function EM(e,t,r){if(Gu.validateEnv(e),t===void 0)throw new Error(qu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qu.IDS_REQUIRED):new Error(qu.IDS_MUST_BE_ARRAY);try{let s=Gf.listDBIs(e);Gf.initializeDBIs(e,t,s);let n=new lM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,uM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!h.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=h[w];if(B!=null)try{let X=Gu.getIndexedValues(B);if(X)for(let V=0,W=X.length;V<W;V++)L.remove(X[V],i)}catch{qf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(h)}catch(h){qf.warn(h),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Gu.getMicroTime(),n}catch(s){throw s}}a(EM,"deleteRecords");Ff.exports={deleteRecords:EM}});var ai=S((lJ,kf)=>{"use strict";var en=C(),dM=Fu(),hM=z(),SM=require("path"),{getBaseSchemaPath:fM}=te(),TM=ii(),mM=I();kf.exports=RM;async function RM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(en.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(en.isEmptyOrZeroLength(e.hash_values)&&!en.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];en.isEmpty(_)||e.hash_values.push(_)}}if(en.isEmptyOrZeroLength(e.hash_values))return Vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(en.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=SM.join(fM(),e.schema.toString()),i=await hM.openEnvironment(n,e.table),o=await dM.deleteRecords(i,s,e.hash_values);try{t===!0&&await TM(e,o)}catch(c){mM.error(`unable to write transaction due to ${c.message}`)}return Vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(RM,"lmdbDeleteRecords");function Vf(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(Vf,"createDeleteResponse")});var ku=S((dJ,xf)=>{"use strict";var AM=T(),EJ=os();function Vu(e,t){let r=Object.create(null);if(t.length===1&&AM.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(Vu,"parseRow");function OM(e,t,r,s){let n=Vu(r,e);s.push(n)}a(OM,"searchAll");function pM(e,t,r,s){let n=Vu(r,e);s[t]=n}a(pM,"searchAllToMap");function NM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(NM,"iterateDBI");function ls(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(ls,"pushResults");function gM(e,t,r,s,n,i){t.toString().endsWith(e)&&ls(t,r,s,n,i)}a(gM,"endsWith");function IM(e,t,r,s,n,i){t.toString().includes(e)&&ls(t,r,s,n,i)}a(IM,"contains");function CM(e,t,r,s,n,i){t>e&&ls(t,r,s,n,i)}a(CM,"greaterThanCompare");function bM(e,t,r,s,n,i){t>=e&&ls(t,r,s,n,i)}a(bM,"greaterThanEqualCompare");function wM(e,t,r,s,n,i){t<e&&ls(t,r,s,n,i)}a(wM,"lessThanCompare");function LM(e,t,r,s,n,i){t<=e&&ls(t,r,s,n,i)}a(LM,"lessThanEqualCompare");xf.exports={parseRow:Vu,searchAll:OM,searchAllToMap:pM,iterateDBI:NM,endsWith:gM,contains:IM,greaterThanCompare:CM,greaterThanEqualCompare:bM,lessThanCompare:wM,lessThanEqualCompare:LM,pushResults:ls}});var tn=S((fJ,Jf)=>{"use strict";var wt=z(),UM=I(),St=os(),Gr=Ye(),ce=rt().LMDB_ERRORS_ENUM,hJ=C(),yM=T(),$t=ku(),SJ=require("lmdb"),{OVERFLOW_MARKER:$f,MAX_SEARCH_KEY_LENGTH:DM}=Gr,oi={lazy:!0};function Yf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=xu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Yf,"iterateFullIndex");function ci(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=xu(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:h,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))$t.pushResults(d(L,B),B,l,t,r);return l}a(ci,"iterateRangeBetween");function xu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith($f)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,oi)[r]}return n}}a(xu,"getOverflowCheck");function MM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);lo(r),r=_i(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))$t.searchAll(r,_,u,o);return o}a(MM,"searchAll");function PM(e,t,r,s=!1,n=void 0,i=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return lo(r),r=_i(e,r),Yf(e,t,t,$t.searchAllToMap.bind(null,r),s,n,i)}a(PM,"searchAllToMap");function BM(e,t,r=!1,s=void 0,n=void 0){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Yf(e,void 0,t,$t.iterateDBI,r,s,n)}a(BM,"iterateDBI");function vM(e,t){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(vM,"countAll");function HM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=wt.openDBI(e,r);s=St.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,oi);u!==void 0&&$t.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))$t.pushResults(s,u,_,t,r);return _}a(HM,"equals");function GM(e,t,r){return qr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(GM,"count");function qM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=St.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))$t.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))$t.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(qM,"startsWith");function FM(e,t,r,s,n=!1,i=void 0,o=void 0){return Kf(e,t,r,s,n,i,o,!0)}a(FM,"endsWith");function Kf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){qr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=xu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=d.toString();if(h.endsWith($f))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?h.endsWith(s):h.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,h){if(o>0){o--;return}i!==0&&($t.pushResults(d,h,_,t,r),i--)}return a(E,"found_match"),_}a(Kf,"contains");function VM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!0,!1)}a(VM,"greaterThan");function kM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!1,!1)}a(kM,"greaterThanEqual");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!0)}a(xM,"lessThan");function $M(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!1)}a($M,"lessThanEqual");function YM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(St.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=St.convertKeyValueToWrite(s),n=St.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ci(e,t,r,s,n,i,o,c)}a(YM,"between");function KM(e,t,r,s){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),r=_i(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?oi:void 0);return i&&(n=$t.parseRow(i,r)),n}a(KM,"searchByHash");function QM(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,oi)===void 0&&(s=!1),s}a(QM,"checkHashExists");function WM(e,t,r,s,n=[]){Wf(e,t,r,s,n);let i=Qf(e,t,r,s,n);return Object.values(i)}a(WM,"batchSearchByHash");function JM(e,t,r,s,n=[]){return Wf(e,t,r,s,n),Qf(e,t,r,s,n)}a(JM,"batchSearchByHashToMap");function Qf(e,t,r,s,n=[]){r=_i(e,r);let i=Object.create(null),o=r.length<3?oi:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=$t.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw UM.warn(u),u}}return i}a(Qf,"batchHashSearch");function Wf(e,t,r,s,n){if(St.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(Wf,"initializeBatchSearchByHash");function lo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(lo,"validateFetchAttributes");function qr(e,t,r){if(St.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>DM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(qr,"validateComparisonFunctions");function _i(e,t){return t.length===1&&yM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(_i,"setGetWholeRowAttributes");Jf.exports={searchAll:MM,searchAllToMap:PM,count:GM,countAll:vM,equals:HM,startsWith:qM,endsWith:FM,contains:Kf,searchByHash:KM,setGetWholeRowAttributes:_i,batchSearchByHash:WM,batchSearchByHashToMap:JM,checkHashExists:QM,iterateDBI:BM,greaterThan:VM,greaterThanEqual:kM,lessThan:xM,lessThanEqual:$M,between:YM}});var ui=S((mJ,jf)=>{var Zf=require("lodash"),Xf=Ee(),Q=require("joi"),ZM=C(),{hdb_schema_table:Yt,checkValidTable:zf}=Tr(),{handleHDBError:XM,hdb_errors:zM}=D(),{HTTP_STATUS_CODES:jM}=zM,TJ=Q.object({schema:Yt,table:Yt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Yt).required()}),eP=Q.object({schema:Yt,table:Yt,search_attribute:Yt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Yt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),tP=Q.object({schema:Yt,table:Yt,operator:Q.string().valid("and","or").default("and").lowercase(),offset:Q.number().integer().min(0),limit:Q.number().integer().min(1),get_attributes:Q.array().min(1).items(Yt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Yt,search_type:Q.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Q.when("search_type",{switch:[{is:"equals",then:Q.any()},{is:"between",then:Q.array().items(Q.alternatives([Q.string(),Q.number()])).length(2)}],otherwise:Q.alternatives(Q.string(),Q.number())}).required()})).required()});jf.exports=function(e,t){let r=null;switch(t){case"value":r=Xf.validateBySchema(e,eP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(zf("schema",e.schema)),i(zf("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=Xf.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ZM.checkGlobalSchemaTable(e.schema,e.table);if(n)return XM(new Error,n,jM.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=Zf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Zf.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var $u=S((RJ,eT)=>{"use strict";var rP=z(),sP=ui(),nP=require("path"),{getBaseSchemaPath:iP}=te();eT.exports=aP;function aP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP.join(iP(),e.schema.toString());return rP.openEnvironment(r,e.table)}a(aP,"initialize")});var Yu=S((AJ,tT)=>{"use strict";var oP=tn(),cP=$u();tT.exports=_P;async function _P(e){try{let t=await cP(e),r=global.hdb_schema[e.schema][e.table];return oP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(_P,"lmdbGetDataByHash")});var Es=S((OJ,rT)=>{"use strict";var Eo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Eo,"SearchByHashObject");rT.exports=Eo});var nT=S((NJ,sT)=>{"use strict";var pJ=Es(),uP=tn(),lP=$u();sT.exports=EP;async function EP(e){try{let t=await lP(e),r=global.hdb_schema[e.schema][e.table];return uP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(EP,"lmdbSearchByHash")});var Kt=S((gJ,iT)=>{"use strict";var ho=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(ho,"SearchObject");iT.exports=ho});var So=S((IJ,uT)=>{"use strict";var Qe=tn(),dP=z(),hP=require("path"),SP=C(),U=Ye(),ds=T(),{getBaseSchemaPath:fP}=te(),TP=as(),aT=rt().LMDB_ERRORS_ENUM,{compareKeys:rn}=require("ordered-binary"),Rr=ds.SEARCH_WILDCARDS;async function mP(e,t,r){let s;e.schema===ds.SYSTEM_SCHEMA_NAME?s=TP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=_T(e,s.hash_attribute,r,t);return oT(e,n,s.hash_attribute,r)}a(mP,"prepSearch");async function oT(e,t,r,s){let n=hP.join(fP(),e.schema.toString()),i=await dP.openEnvironment(n,e.table),o=cT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(OP(e,r)===!1)return s===!0?AP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(oT,"executeSearch");function cT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(cT,"searchByType");function RP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return rn(i,s[0])>=0&&rn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>rn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>rn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>rn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>rn(n[r],s)<=0;default:return Object.create(null)}}a(RP,"filterByType");function AP(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(AP,"createMapFromArrays");function OP(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(OP,"checkToFetchMore");function _T(e,t,r,s){if(SP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Rr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rr[0])<0&&n.indexOf(Rr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Rr.indexOf(i)>=0&&Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Rr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rr[0])||n.includes(Rr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(aT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ds.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ds.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ds.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ds.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ds.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(aT.UNKNOWN_SEARCH_TYPE)}}a(_T,"createSearchTypeFromSearchObject");uT.exports={executeSearch:oT,createSearchTypeFromSearchObject:_T,prepSearch:mP,searchByType:cT,filterByType:RP}});var ET=S((bJ,lT)=>{"use strict";var CJ=Kt(),pP=ui(),NP=C(),gP=T(),IP=So();lT.exports=CP;async function CP(e,t){if(!NP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=pP(e,"value");if(s)throw s;let n=!0;try{return await IP.prepSearch(e,t,n)}catch(i){throw i}}a(CP,"lmdbGetDataByValue")});var sn=S((LJ,dT)=>{"use strict";var wJ=Kt(),bP=ui(),wP=C(),LP=T(),UP=So();dT.exports=yP;async function yP(e,t){if(!wP.isEmpty(t)&&LP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=bP(e,"value");if(s)throw s;let n=!1;try{return await UP.prepSearch(e,t,n)}catch(i){throw i}}a(yP,"lmdbSearchByValue")});var ST=S((yJ,hT)=>{"use strict";var UJ=Ye(),fo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(fo,"SearchByConditionsObject");var To=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(To,"SearchCondition");var mo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(mo,"SortAttribute");hT.exports={SearchByConditionsObject:fo,SearchCondition:To,SortAttribute:mo}});var OT=S((MJ,AT)=>{"use strict";var DJ=ST().SearchByConditionsObject,DP=Kt(),MP=ui(),Ku=tn(),Ro=Ye(),RT=So(),PP=ku(),fT=require("lodash"),{getBaseSchemaPath:BP}=te(),vP=require("path"),HP=z(),{handleHDBError:TT,hdb_errors:GP}=D(),{HTTP_STATUS_CODES:qP}=GP,FP=1e8,VP={lazy:!0};AT.exports=kP;async function kP(e){try{let t=MP(e,"conditions");if(t)throw TT(t,t.message,qP.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=vP.join(BP(),e.schema.toString()),s=await HP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=fT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===Ro.SEARCH_TYPES.EQUALS?o.estimated_count=Ku.count(s,o.search_attribute,o.search_value):c===Ro.SEARCH_TYPES.CONTAINS||c===Ro.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=FP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await mT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(RT.filterByType),u=_.length,l=[],E=Ku.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,VP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(h<=0)break;h--,l.push(PP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await mT(s,e,_,n.hash_attribute);c.push(u)}if(o=fT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ku.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw TT(t)}}a(kP,"lmdbSearchByConditions");async function mT(e,t,r,s){let n=new DP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RT.searchByType(e,n,i,s)}a(mT,"executeConditionSearch")});var li=S((PJ,pT)=>{"use strict";var xP=T().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=xP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ao,"DeleteObject");pT.exports=Ao});var Qu=S((BJ,NT)=>{"use strict";var Oo=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Oo,"DropAttributeObject");NT.exports=Oo});var Ju=S((HJ,gT)=>{"use strict";var $P=Kt(),YP=li(),vJ=Qu(),er=T(),KP=C(),Wu=z(),QP=as(),WP=sn(),JP=ai(),{getBaseSchemaPath:ZP}=te(),XP=require("path");gT.exports=zP;async function zP(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=QP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await eB(e),n=XP.join(ZP(),e.schema.toString()),i=await Wu.openEnvironment(n,e.table);return t===!0&&await jP(e,i,r.hash_attribute),Wu.dropDBI(i,e.attribute),s}a(zP,"lmdbDropAttribute");async function jP(e,t,r){let s=Wu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(jP,"removeAttributeFromAllObjects");async function eB(e){let t=new $P(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await WP(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(KP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new YP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JP(i)}a(eB,"dropAttributeFromSystem")});var wT=S((GJ,bT)=>{"use strict";var tB=Ju(),rB=Qu(),IT=C(),CT=I(),sB=rt().LMDB_ERRORS_ENUM;bT.exports=nB;async function nB(e){if(IT.isEmpty(global.hdb_schema[e.schema])||IT.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 rB(e.schema,e.table,r);try{await tB(n,!1)}catch(i){i.message!==sB.DBI_DOES_NOT_EXIST&&CT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw CT.error(`Error dropping attribute ${r}`),s}}a(nB,"lmdbDropAllAttributes")});var Zu=S((FJ,HT)=>{"use strict";var MT=Kt(),PT=li(),BT=sn(),vT=ai(),qJ=wT(),at=T(),LT=C(),UT=z(),{getBaseSchemaPath:iB,getTransactionAuditStorePath:aB}=te(),yT=require("path"),DT=I();HT.exports=oB;async function oB(e){try{if(LT.isEmpty(global.hdb_schema[e.schema])||LT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await cB(e),await _B(e);let t=yT.join(iB(),e.schema.toString());try{await UT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=yT.join(aB(),e.schema.toString());await UT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(oB,"lmdbDropTable");async function cB(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await BT(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 PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await vT(n)}a(cB,"deleteAttributesFromSystem");async function _B(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await BT(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 PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await vT(n)}catch(i){throw i}}a(_B,"dropTableFromSystem")});var qT=S((kJ,GT)=>{"use strict";var uB=require("fs-extra"),lB=Kt(),EB=Es(),dB=li(),hB=Zu(),SB=ai(),fB=Yu(),TB=sn(),Ar=T(),VJ=C(),mB=require("path"),{getBaseSchemaPath:RB}=te(),{handleHDBError:AB,hdb_errors:OB}=D(),{HDB_ERROR_MSGS:pB,HTTP_STATUS_CODES:NB}=OB;GT.exports=gB;async function gB(e){let t;try{t=await IB(e.schema);let r=new lB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await TB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await hB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new dB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SB(n);let i=mB.join(RB(),t.toString());await uB.remove(i)}catch(r){throw r}}a(gB,"lmdbDropSchema");async function IB(e){let t=new EB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await fB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw AB(new Error,pB.SCHEMA_NOT_FOUND(e),NB.NOT_FOUND,void 0,void 0,!0);return s}a(IB,"validateDropSchema")});var Xu=S((xJ,FT)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(po,"CreateTableObject");FT.exports=po});var kT=S((YJ,VT)=>{"use strict";var CB=require("path"),bB=require("fs-extra"),No=z(),{getTransactionAuditStorePath:wB}=te(),zu=Ye(),$J=Xu();VT.exports=LB;async function LB(e){let t;try{let r=CB.join(wB(),e.schema.toString());await bB.mkdirp(r),t=await No.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{No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),No.createDBI(t,zu.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(LB,"createTransactionsAuditEnvironment")});var KT=S((KJ,YT)=>{"use strict";var ju=T(),xT=z(),UB=Ws(),yB=require("path"),{getSystemSchemaPath:DB,getBaseSchemaPath:MB}=te(),PB=as(),BB=Za(),el=Ja(),vB=I(),HB=kT(),rl=PB.hdb_table,$T=[];for(let e=0;e<rl.attributes.length;e++)$T.push(rl.attributes[e].attribute);YT.exports=GB;async function GB(e,t){let r=yB.join(MB(),t.schema.toString()),s=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new el(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xT.createEnvironment(r,t.table),e!==void 0){let o=await xT.openEnvironment(DB(),ju.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UB.insertRecords(o,rl.hash_attribute,$T,[e]),await tl(s),await tl(n),await tl(i)}await HB(t)}catch(o){throw o}}a(GB,"lmdbCreateTable");async function tl(e){try{await BB(e)}catch(t){vB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tl,"createAttribute")});var WT=S((QJ,QT)=>{"use strict";var qB=Xa(),FB=eo(),VB=so(),nn=T(),kB=Ws().updateRecords,xB=z(),$B=require("path"),{getBaseSchemaPath:YB}=te(),KB=ii(),QB=I();QT.exports=WB;async function WB(e){try{let{schema_table:t,attributes:r}=qB(e);FB(e,r,t.hash_attribute),e.schema!==nn.SYSTEM_SCHEMA_NAME&&(r.includes(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VB(e.hdb_auth_header,t,r),n=$B.join(YB(),e.schema.toString()),i=await xB.openEnvironment(n,e.table),o=await kB(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await KB(e,o)}catch(c){QB.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WB,"lmdbUpdateRecords")});var ZT=S((WJ,JT)=>{"use strict";var JB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=JB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(go,"UpsertObject");JT.exports=go});var zT=S((ZJ,XT)=>{"use strict";var JJ=ZT(),ZB=Xa(),XB=eo(),zB=so(),an=T(),jB=Ws().upsertRecords,ev=z(),tv=require("path"),{getBaseSchemaPath:rv}=te(),sv=ii(),nv=I(),{handleHDBError:iv,hdb_errors:av}=D();XT.exports=ov;async function ov(e){let t;try{t=ZB(e)}catch(_){throw iv(_,_.message,av.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XB(e,s,r.hash_attribute),e.schema!==an.SYSTEM_SCHEMA_NAME&&(s.includes(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zB(e.hdb_auth_header,r,s),i=tv.join(rv(),e.schema.toString()),o=await ev.openEnvironment(i,e.table),c=await jB(o,r.hash_attribute,s,e.records,e[an.CLUSTERING_FLAG]!==!0);try{await sv(e,c)}catch(_){nv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(ov,"lmdbUpsertRecords")});var nm=S((XJ,sm)=>{"use strict";var cv=Kt(),jT=C(),em=I(),_v=sn(),tm=T(),uv=Fu().deleteRecords,lv=z(),Ev=require("path"),{getBaseSchemaPath:dv}=te(),{promisify:hv}=require("util"),Sv=hv(setTimeout),rm=1e4,fv=10;sm.exports=Tv;async function Tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(jT.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 cv(e.schema,e.table,tm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await _v(n,tm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw em.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return jT.isEmptyOrZeroLength(s)?(em.trace("No records found to delete"),{message:"No records found to delete"}):await mv(e,s,t)}a(Tv,"lmdbDeleteRecordsBefore");async function mv(e,t,r){let s=Ev.join(dv(),e.schema.toString()),n=await lv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=rm){let _=t.slice(o,o+rm),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await uv(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await Sv(fv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(mv,"chunkDeletes")});var am=S((zJ,im)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Io,"DeleteBeforeObject");im.exports=Io});var cm=S((jJ,om)=>{"use strict";var Co=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Co,"DeleteAuditLogsBeforeResults");om.exports=Co});var lm=S((tZ,um)=>{"use strict";var sl=z(),{getTransactionAuditStorePath:Rv}=te(),eZ=am(),Av=require("path"),Ei=Ye(),Ov=C(),_m=cm(),pv=require("util").promisify,Nv=pv(setTimeout),gv=1e4,Iv=100;um.exports=Cv;async function Cv(e){let t=Av.join(Rv(),e.schema),r=await sl.openEnvironment(t,e.table,!0),s=sl.listDBIs(r);sl.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new _m;do n=await bv(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 Nv(Iv);while(n.transactions_deleted>0);return i}a(Cv,"deleteAuditLogsBefore");async function bv(e,t){let r=new _m;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ov.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>gv)break}return await n,r}catch(s){throw s}}a(bv,"deleteTransactions")});var mm=S((rZ,Tm)=>{"use strict";var nl=z(),on=Ye(),Em=os(),il=T(),dm=C(),{getTransactionAuditStorePath:wv}=te(),Lv=require("path"),Uv=tn(),bo=Xs(),yv=I();Tm.exports=Dv;async function Dv(e){let t=Lv.join(wv(),e.schema),r=await nl.openEnvironment(t,e.table,!0),s=nl.listDBIs(r);nl.initializeDBIs(r,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return hm(r,e.search_values);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Pv(r,e.search_values,n);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Mv(r,e.search_values);default:return hm(r)}}a(Dv,"readAuditLog");function hm(e,t=[0,Em.getMicroTime()]){dm.isEmpty(t[0])&&(t[0]=0),dm.isEmpty(t[1])&&(t[1]=Em.getMicroTime());let r=[];try{let s=e.dbis[on.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 bo,i);r.push(o)}return r}catch(s){throw s}}a(hm,"searchTransactionsByTimestamp");function Mv(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[on.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,fm(e,i))}return Object.fromEntries(r)}a(Mv,"searchTransactionsByUsername");function Pv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Uv.equals(e,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,on.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let h=l[0][E],m=Number(h);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=fm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Sm(_,"records",r,l,o),Sm(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Pv,"searchTransactionsByHashValues");function Sm(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new bo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new bo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Sm,"loopRecords");function fm(e,t){let r=[];try{let s=e.dbis[on.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 bo,i);r.push(o)}}catch(i){yv.warn(i)}return r}catch(s){throw s}}a(fm,"batchSearchTransactions")});var Am=S((sZ,Rm)=>{"use strict";var Bv=require("path"),{getBaseSchemaPath:vv}=te(),Hv=z();Rm.exports={writeTransaction:Gv};async function Gv(e,t,r){let s=Bv.join(vv(),e);return(await Hv.openEnvironment(s,t)).transaction(r)}a(Gv,"writeTransaction")});var pm=S((nZ,Om)=>{"use strict";var qv=require("path"),{getBaseSchemaPath:Fv}=te(),Vv=z();Om.exports={flush:kv};async function kv(e,t){let r=qv.join(Fv(),e.toString());return(await Vv.openEnvironment(r,t.toString())).flushed}a(kv,"flush")});var gm=S((iZ,Nm)=>{"use strict";var Re=I(),{handleHDBError:xv}=D(),$v=_u(),Yv=Za(),Kv=Hu(),Qv=Bf(),Wv=ai(),Jv=Yu(),Zv=nT(),Xv=ET(),zv=sn(),jv=OT(),eH=qT(),tH=KT(),rH=WT(),sH=zT(),nH=nm(),iH=lm(),aH=Zu(),oH=Ju(),cH=mm(),_H=Am(),uH=pm(),wo=class extends $v{async searchByConditions(t){try{return jv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Jv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Zv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Xv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await Qv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await tH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await aH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await sH(t)}catch(r){throw xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Wv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await nH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await cH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return _H.writeTransaction(t,r,s)}flush(t,r){return uH.flush(t,r)}};a(wo,"LMDBBridge");Nm.exports=wo});var Or=S((aZ,Cm)=>{"use strict";var lH=gm(),EH=_u(),dH=Y();dH.initSync();var Im;function hH(){return Im instanceof EH?Im:new lH}a(hH,"getBridge");Cm.exports=hH()});var Um=S((oZ,Lm)=>{"use strict";var bm=require("lodash"),di=require("mathjs"),SH=require("jsonata"),wm=C();Lm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?bm.uniqWith(e,bm.isEqual):e,searchJSON:fH,mad:hi.bind(null,di.mad),mean:hi.bind(null,di.mean),mode:hi.bind(null,di.mode),prod:hi.bind(null,di.prod),median:hi.bind(null,di.median)};function hi(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(hi,"aggregateFunction");function fH(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(wm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),wm.isEmpty(this.__ala__.res[r])){let s=SH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(fH,"searchJSON")});var Dm=S((cZ,ym)=>{"use strict";var de=require("moment"),al="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;ym.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(al),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(al),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(al)}});var vm=S((_Z,Bm)=>{"use strict";var TH=require("@turf/area"),mH=require("@turf/length"),RH=require("@turf/circle"),AH=require("@turf/difference"),OH=require("@turf/distance"),pH=require("@turf/boolean-contains"),NH=require("@turf/boolean-equal"),gH=require("@turf/boolean-disjoint"),IH=require("@turf/helpers"),Mm=T(),k=C();Bm.exports={geoArea:CH,geoLength:bH,geoCircle:wH,geoDifference:LH,geoDistance:Pm,geoNear:UH,geoContains:yH,geoEqual:DH,geoCrosses:MH,geoConvert:PH};var ol="geo1 is required",cl="geo2 is required";function CH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),TH.default(e)}a(CH,"geoArea");function bH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),mH.default(e,{units:t||"kilometers"})}a(bH,"geoLength");function wH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),RH.default(e,t,{units:r||"kilometers"})}a(wH,"geoCircle");function LH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),AH(e,t)}a(LH,"geoDifference");function Pm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),OH.default(e,t,{units:r||"kilometers"})}a(Pm,"geoDistance");function UH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Pm(e,t,s)<=r}a(UH,"geoNear");function yH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),pH.default(e,t)}a(yH,"geoContains");function DH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),NH.default(e,t)}a(DH,"geoEqual");function MH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!gH.default(e,t)}a(MH,"geoCrosses");function PH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Mm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Mm.GEO_CONVERSION_ENUM).join(",")}`);return IH[t](e,r)}a(PH,"geoConvert")});var Lo=S((uZ,Hm)=>{var hs=Um(),ft=Dm(),tr=vm();Hm.exports=e=>{e.aggr.mad=e.aggr.MAD=hs.mad,e.aggr.mean=e.aggr.MEAN=hs.mean,e.aggr.mode=e.aggr.MODE=hs.mode,e.aggr.prod=e.aggr.PROD=hs.prod,e.aggr.median=e.aggr.MEDIAN=hs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=hs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=hs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Fm=S((lZ,qm)=>{"use strict";var Si=require("lodash"),Me=require("alasql");Me.options.cache=!1;var BH=Lo(),Gm=require("clone"),Uo=require("recursive-iterator"),v=I(),G=C(),cn=Or(),vH=T(),{hdb_errors:HH}=D(),GH="IS NULL",fi="There was a problem performing this search. Please check the logs and try again.";BH(Me);var yo=class{constructor(t,r){if(G.isEmpty(t))throw v.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(),G.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!G.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(fi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(fi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(fi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(fi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(fi)}}_getColumns(){let t=new Uo(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(Gm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Si.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(G.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Uo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!G.isEmpty(r)&&r.right)if(G.isNotEmptyAndHasValue(r.right.value)){let s=G.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!G.isEmpty(s)&&G.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=G.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&G.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Uo(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(!G.isEmpty(vH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(G.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(G.isEmptyOrZeroLength(r.left.columnid)||G.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(G.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!G.isEmpty(r.right.value)||!G.isEmpty(r.left.value)?s.add(G.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from)&&G.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&&Si.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(G.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);G.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(G.isEmptyOrZeroLength(this.all_table_attributes)&&!G.isEmptyOrZeroLength(this.columns.columns))return t;if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(Gm(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(G.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(GH)>-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=Si.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!G.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await cn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await cn.getDataByValue(E);for(let h in d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(h)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!G.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await cn.getDataByValue(c,h.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await cn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_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 Me.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 Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(h,n);d=await Me.promise(m,t),t=null}catch(h){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=Si.difference(m,[...h.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${h.schema}_${h.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Uo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Si.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.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 l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await cn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(HH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await cn.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(yo,"SQLSearch");qm.exports=yo});var Tt=S((EZ,km)=>{"use strict";var qH=zh();km.exports={searchByConditions:xH,searchByHash:$H,searchByValue:YH,search:KH};var _l=Or(),Vm=require("util"),FH=Vm.callbackify(_l.searchByHash),VH=Vm.callbackify(_l.searchByValue),kH=Fm();async function xH(e){return _l.searchByConditions(e)}a(xH,"searchByConditions");function $H(e,t){try{FH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a($H,"searchByHash");function YH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),VH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(YH,"searchByValue");function KH(e,t){try{let r=new qH(e);r.validate(),new kH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(KH,"search")});var Fr=S((dZ,Km)=>{"use strict";var Ti=require("crypto"),$m="aes-256-cbc",QH=32,WH=16,ul=64,Ym=32,JH=ul+Ym,xm=new Map;Km.exports={encrypt:ZH,decrypt:XH,createNatsTableStreamName:zH};function ZH(e){let t=Ti.randomBytes(QH),r=Ti.randomBytes(WH),s=Ti.createCipheriv($m,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(ZH,"encrypt");function XH(e){let t=e.substr(0,ul),r=e.substr(ul,Ym),s=e.substr(JH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ti.createDecipheriv($m,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(XH,"decrypt");function zH(e,t){let r=`${e}.${t}`,s=xm.get(r);return s||(s=Ti.createHash("md5").update(`${e}.${t}`).digest("hex"),xm.set(r,s)),s}a(zH,"createNatsTableStreamName")});var un=S((hZ,jm)=>{"use strict";var Wm=Tt(),Vr=I(),Jm=Ka(),jH=require("lodash"),eG=require("path"),tG=Fr(),ll=C(),{promisify:Zm}=require("util"),j=T(),{handleHDBError:Do,hdb_errors:rG}=D(),{HDB_ERROR_MSGS:Mo,HTTP_STATUS_CODES:Xm}=rG,sG=Y();sG.initSync();var Qm=z(),nG=te(),mi=Zm(Wm.searchByValue),iG=Zm(Wm.searchByHash),_n="name",zm="hash_attribute",El="schema",aG="schema_table",oG="attribute";jm.exports={describeAll:cG,describeTable:Po,describeSchema:uG};async function cG(e){try{let t=ll.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:_n,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[_n]},i=await mi(n);if(ll.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},u=await mi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Po({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Po({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Vr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Vr.error("Got an error in describeAll"),Vr.error(t),Do(new Error,Mo.DESCRIBE_ALL_ERR)}}a(cG,"describeAll");async function Po(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=Jm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_n,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await mi(c);if(!_||_.length===0)throw Do(new Error,Mo.TABLE_NOT_FOUND(e.schema,e.table),Xm.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Do(new Error,Mo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:aG,search_value:r+"."+s,get_attributes:[oG]},E=await mi(l);E=jH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=_G(n)),i.attributes=E,i.clustering_stream_name=tG.createNatsTableStreamName(u.schema,u.name);try{let d=eG.join(nG.getBaseSchemaPath(),i.schema.toString()),h=await Qm.openEnvironment(d,i.name),m=Qm.statDBI(h,i.hash_attribute);i.record_count=m.entryCount}catch(d){Vr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Vr.error(`There was an error getting attributes for table '${u.name}'`),Vr.error(l)}return i}a(Po,"descTable");function _G(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(_G,"getAttrsByPerms");async function uG(e){let t=Jm.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:El,search_value:s,hash_values:[],get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},i=await mi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[_n]},c=await iG(o);if(c&&c.length<1)throw Do(new Error,Mo.SCHEMA_NOT_FOUND(e.schema),Xm.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ll.isEmpty(_)||_.describe){let u=await Po({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Vr.error(`Error describing schema table '${e.schema}.${c}'`),Vr.error(_)}})),o}}a(uG,"describeSchema")});var Ss=S((TZ,nR)=>{var SZ=require("async"),ln=as(),fZ=I(),{callbackify:rR,promisify:lG}=require("util");nR.exports={setSchemaDataToGlobal:eR,getTableSchema:hG,getSystemSchema:fG,setSchemaDataToGlobalAsync:lG(eR)};var sR=un(),EG=rR(sR.describeAll),dG=rR(sR.describeTable);function eR(e){EG(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=ln),global.hdb_schema=r,e(null,null)})}a(eR,"setSchemaDataToGlobal");function tR(e,t){return e==="system"?ln[t]:global.hdb_schema[e][t]}a(tR,"returnSchema");function hG(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?SG(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,tR(e,t))}):r(null,tR(e,t))}a(hG,"getTableSchema");function SG(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=ln:global.hdb_schema={system:ln},r();return}dG(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:ln}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(SG,"setTableDataToGlobal");function fG(){return ln}a(fG,"getSystemSchema")});var he=S((RZ,aR)=>{"use strict";var{platform:mZ}=require("os"),TG="nats-server.zip",dl="nats-server",mG=process.platform==="win32"?`${dl}.exe`:dl,hl="HDB",RG=/^[^\s.,*>]+$/,iR="__request__",AG=a(e=>`${e}.${iR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},pG={HUB:"hub.pid",LEAF:"leaf.pid"},NG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:hl,deliver_subject:"__HDB__.WORKQUEUE"},IG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:hl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:hl,deliver_subject:"HDB.USERQUEUE"},bG={SUCCESS:"success",ERROR:"error"},wG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LG={TXN:"txn",MSGID:"msgid"};aR.exports={NATS_SERVER_ZIP:TG,NATS_SERVER_NAME:dl,NATS_BINARY_NAME:mG,PID_FILES:pG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:NG,WORK_QUEUE_CONSUMER_NAMES:gG,SCHEMA_QUEUE_CONSUMER_NAMES:IG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:RG,REQUEST_SUFFIX:iR,UPDATE_REMOTE_RESPONSE_STATUSES:bG,CLUSTER_STATUS_STATUSES:wG,REQUEST_SUBJECT:AG,SUBJECT_PREFIXES:LG}});var cR=S((AZ,oR)=>{"use strict";var UG=he(),Bo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h){this.port=t,this.server_name=r+UG.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:h}},this.system_account="SYS"}};a(Bo,"HubConfigObject");oR.exports=Bo});var lR=S((OZ,uR)=>{"use strict";var _R=he(),vo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d){this.port=t,this.server_name=r+_R.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+_R.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:d},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:d},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:d},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(vo,"LeafConfigObject");uR.exports=vo});var dR=S((pZ,ER)=>{"use strict";var Ho=class{constructor(t,r){this.user=t,this.password=r}};a(Ho,"HdbUserObject");ER.exports=Ho});var SR=S((NZ,hR)=>{"use strict";var yG=he(),Go=class{constructor(t,r){this.user=t+yG.SERVER_SUFFIX.ADMIN,this.password=r}};a(Go,"SysUserObject");hR.exports=Go});var Ut=S((gZ,mR)=>{"use strict";var Fo=Mu(),Lt=C(),DG=require("util"),Vo=Or(),MG=Ss(),Sl=I(),{handleHDBError:kr,hdb_errors:PG}=D(),{HTTP_STATUS_CODES:fs}=PG,BG=DG.promisify(MG.getTableSchema),vG="updated",fR="inserted",TR="upserted";mR.exports={insert:GG,update:qG,upsert:FG,validation:HG,flush:VG};async function HG(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await BG(e.schema,e.table),r=Fo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw Sl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw Sl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(HG,"validation");async function GG(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.createRecords(e);return qo(fR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(GG,"insertData");async function qG(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Lt.isEmpty(s.existing_rows)?qo(vG,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):qo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(qG,"updateData");async function FG(e){if(e.operation!=="upsert")throw kr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return qo(TR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw kr(s,null,null,Sl.ERR,n)}}a(FG,"upsertData");function qo(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===fR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(qo,"returnObject");function VG(e){return Vo.flush(e.schema,e.table)}a(VG,"flush")});var Tl=S((IZ,OR)=>{var kG=Ee(),fl=require("joi"),{hdb_schema_table:RR}=Tr(),AR={schema:RR,table:RR},xG={date:fl.date().iso().required()},$G={timestamp:fl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OR.exports=function(e,t){let r=t==="timestamp"?{...AR,...$G}:{...AR,...xG},s=fl.object(r);return kG.validateBySchema(e,s)}});var IR=S((CZ,gR)=>{var YG=Ee(),pR=require("joi"),{hdb_schema_table:NR}=Tr(),KG=pR.object({schema:NR,table:NR,hash_values:pR.array().required()});gR.exports=function(e){return YG.validateBySchema(e,KG)}});var bR=S((bZ,CR)=>{"use strict";var ko=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ko,"InsertObject");var xo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(xo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");CR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var ms=S((wZ,DR)=>{"use strict";var LR=Tl(),QG=IR(),Yo=C(),wR=require("moment"),UR=I(),{promisify:WG,callbackify:JG}=require("util"),Ts=T(),ZG=Ss(),ml=WG(ZG.getTableSchema),Rl=Or(),{DeleteResponseObject:XG}=bR(),{handleHDBError:xr,hdb_errors:zG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:$r}=zG,jG="records successfully deleted",eq=JG(yR);DR.exports={delete:eq,deleteRecord:yR,deleteFilesBefore:tq,deleteAuditLogsBefore:rq};async function tq(e){let t=LR(e,"date");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!wR(e.date,wR.ISO_8601).isValid())throw xr(new Error,Ko.INVALID_DATE,$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw xr(new Error,s,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);try{let n=await Rl.deleteRecordsBefore(e);if(await ml(e.schema,e.table),UR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(tq,"deleteFilesBefore");async function rq(e){let t=LR(e,"timestamp");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw xr(new Error,Ko.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{let s=await Rl.deleteAuditLogsBefore(e);return await ml(e.schema,e.table),UR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(rq,"deleteAuditLogsBefore");async function yR(e){let t=QG(e);if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await ml(e.schema,e.table);let s=await Rl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${jG}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new XG;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(yR,"deleteRecord")});var Qo=S((LZ,BR)=>{var sq=require("crypto"),MR=9;function nq(e){let t=aq(MR),r=PR(e+t);return t+r}a(nq,"createHash");function iq(e,t){let r=e.substr(0,MR),s=r+PR(t+r);return e===s}a(iq,"validateHash");function aq(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(aq,"generateSalt");function PR(e){return sq.createHash("md5").update(e).digest("hex")}a(PR,"md5");BR.exports={hash:nq,validate:iq}});var HR=S((UZ,vR)=>{var Al=Ee(),We={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 oq(e){return We.password.presence=!0,We.username.presence=!0,We.role.presence=!0,We.active.presence=!0,Al.validateObject(e,We)}a(oq,"addUserValidation");function cq(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(cq,"alterUserValidation");function _q(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(_q,"dropUserValidation");vR.exports={addUserValidation:oq,alterUserValidation:cq,dropUserValidation:_q}});var qR=S((yZ,GR)=>{"use strict";var Yr=T(),Ri=class{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.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(Ri,"BaseLicense");var Wo=class extends Ri{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ri,ExtendedLicense:Wo}});var Ai=S((DZ,YR)=>{"use strict";var dn=require("fs-extra"),FR=Qo(),VR=require("crypto"),uq=require("moment"),lq=require("uuid").v4,Je=I(),pl=require("path"),Eq=C(),mt=T(),dq=qR().ExtendedLicense,En="invalid license key format",hq="061183",Sq="mofi25",fq="aes-256-cbc",Tq=16,mq=32,kR=Y();kR.initSync();var Ol;YR.exports={validateLicense:xR,generateFingerPrint:Aq,licenseSearch:$R,getLicense:Nq};function Nl(){return pl.join(kR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(Nl,"getLicenseDirPath");function Rq(){let e=Nl();return pl.join(e,mt.LICENSE_FILE_NAME)}a(Rq,"getLicenseFilePath");function gl(){let e=Nl();return pl.join(e,mt.REG_KEY_FILE_NAME)}a(gl,"getFingerPrintFilePath");async function Aq(){let e=gl();try{return await dn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Oq();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(Aq,"generateFingerPrint");async function Oq(){let e=lq(),t=FR.hash(e),r=gl();try{await dn.mkdirp(Nl()),await dn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(Oq,"writeFingerprint");function xR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=gl(),n=!1;try{n=dn.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=dn.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Sq),c=o[1];c=Buffer.concat([Buffer.from(c)],Tq);let _=Buffer.concat([Buffer.from(i)],mq),u=VR.createDecipheriv(fq,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=pq(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(En),Je.error(En),new Error(En)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(En),Je.error(En),new Error(En)}else r.exp_date=l;r.exp_date<uq().valueOf()&&(r.valid_date=!1),FR.validate(o[1],`${hq}${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||Je.error("Invalid licence"),r}a(xR,"validateLicense");function pq(e,t){try{let r=VR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(pq,"checkOldLicense");function $R(){let e=new dq;e.api_call=0;let t=[];try{t=dn.readFileSync(Rq(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Eq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=xR(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){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),Ol=e,e}a($R,"licenseSearch");async function Nq(){return Ol||await $R(),Ol}a(Nq,"getLicense")});var Kr=S((MZ,iA)=>{"use strict";var JR="username is required",ZR="nothing to update, must supply active, role or password to update",XR="password cannot be an empty string",zR="If role is specified, it cannot be empty.",jR="active must be true or false";iA.exports={addUser:yq,alterUser:Dq,dropUser:Pq,userInfo:Bq,listUsers:Zo,listUsersExternal:vq,setUsersToGlobal:Oi,findAndValidateUser:qq,getClusterUser:Fq,USERNAME_REQUIRED:JR,ALTERUSER_NOTHING_TO_UPDATE:ZR,EMPTY_PASSWORD:XR,EMPTY_ROLE:zR,ACTIVE_BOOLEAN:jR};var eA=Ut(),gq=ms(),Cl=Qo(),tA=HR(),rA=Tt(),bl=Zs(),Ce=C(),sA=require("validate.js"),H=I(),{promisify:wl}=require("util"),Ll=Fr(),Rs=T(),KR=he(),Iq=Sr(),Ul=Y(),Cq=Ai(),bq=as(),{handleHDBError:rr,hdb_errors:wq}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:Il,HDB_ERROR_MSGS:hn}=wq,{UserEventMsg:yl}=us(),QR=require("lodash"),nA={username:!0,active:!0,role:!0,password:!0},WR=new Map,Jo=wl(rA.searchByValue),Lq=wl(rA.searchByHash),Uq=wl(gq.delete);async function yq(e){let t=sA.cleanAttributes(e,nA),r=tA.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.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 Jo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,hn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,hn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,hn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ADD_USER,_,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${c.username} successfully added`}a(yq,"addUser");async function Dq(e){let t=sA.cleanAttributes(e,nA);if(Ce.isEmptyOrZeroLength(t.username))throw new Error(JR);if(Ce.isEmptyOrZeroLength(t.password)&&Ce.isEmptyOrZeroLength(t.role)&&Ce.isEmptyOrZeroLength(t.active))throw new Error(ZR);if(!Ce.isEmpty(t.password)&&Ce.isEmptyOrZeroLength(t.password.trim()))throw new Error(XR);if(!Ce.isEmpty(t.active)&&!Ce.isBoolean(t.active))throw new Error(jR);let r=Mq(t.username);if(!Ce.isEmpty(t.password)&&!Ce.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password)),t.role==="")throw new Error(zR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Jo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=hn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=hn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await eA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),n}a(Dq,"alterUser");function Mq(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Mq,"isClusterUser");async function Pq(e){try{let t=tA.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Ce.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,hn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Uq(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.DROP_USER,n,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Pq,"dropUser");async function Bq(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 Lq(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(Bq,"userInfo");async function vq(){let e;try{e=await Zo()}catch(t){throw H.error("Got an error listing users."),H.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(vq,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=QR.cloneDeep(await Jo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!Ce.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=QR.cloneDeep(await Jo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],Hq(c.role),i.set(c.username,c)}return(await Cq.getLicense()).enterprise?i:Gq(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),Ce.errorizeMessage(e)}return null}a(Zo,"listUsers");function Hq(e){try{if(!e){H.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(bq)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(Hq,"appendSystemTablesToRole");function Gq(e){try{if(H.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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(Gq,"nonEnterpriseFilter");async function Oi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function qq(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,Il.USER_INACTIVE,sr.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(WR.get(t)===s.password)return n;if(Cl.validate(s.password,t))WR.set(t,s.password);else throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qq,"findAndValidateUser");async function Fq(){let e=await Zo(),t=Iq.getConfigFromFile(Rs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ce.isEmpty(r))return r.decrypt_hash=Ll.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KR.SERVER_SUFFIX.ADMIN,r}a(Fq,"getClusterUser")});var Xo=S((PZ,aA)=>{"use strict";var Vq=Or();aA.exports={writeTransaction:kq};function kq(e,t,r){return Vq.writeTransaction(e,t,r)}a(kq,"writeTransaction")});var Dl=S((BZ,xq)=>{xq.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 Rt=S((KZ,CA)=>{"use strict";var nr=Y();nr.initSync();var $q=require("fs-extra"),Yq=require("semver"),Ci=require("path"),{monotonicFactory:Kq}=require("ulidx"),Qq=Kq(),cA=require("util"),_A=require("child_process"),Wq=cA.promisify(_A.exec),Jq=_A.spawn,ee=he(),se=T(),Gl=C(),pr=I(),zo=Fr(),Zq=Xo(),pi=Sr(),{encode:Bl,decode:uA}=require("msgpackr"),{isEmpty:As}=Gl,lA=Kr(),vZ=Es(),Xq=Tt(),HZ=cA.promisify(Xq.searchByHash),{connect:zq,StorageType:EA,RetentionPolicy:dA,AckPolicy:hA,DeliverPolicy:vl,NatsConnection:GZ,JetStreamManager:qZ,JetStreamClient:FZ,StringCodec:VZ,JSONCodec:jq,createInbox:ql,StreamSource:kZ,headers:eF,toJsMsg:tF,nuid:xZ,JetStreamOptions:$Z,ErrorCode:oA,nanos:YZ}=require("nats"),{PACKAGE_ROOT:rF}=T(),sF=Dl(),SA=jq(),nF="clustering",iF=sF.engines[ee.NATS_SERVER_NAME],aF=Ci.join(rF,"dependencies"),Hl=Ci.join(aF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ml,Pl,Ni,gi,Ii,Qt;CA.exports={runCommand:fA,checkNATSServerInstalled:oF,createConnection:Fl,getConnection:jo,getJetStreamManager:Sn,getJetStream:TA,getNATSReferences:yt,getServerList:_F,createLocalStream:Vl,listStreams:mA,deleteLocalStream:uF,getServerConfig:bi,listRemoteStreams:lF,viewStream:EF,publishToStream:dF,createWorkQueueStream:hF,addSourceToWorkStream:RA,request:SF,removeSourceFromWorkStream:OA,reloadNATS:kl,reloadNATSHub:fF,reloadNATSLeaf:TF,extractServerName:AA,requestErrorHandler:mF,updateWorkStream:RF,createLocalTableStream:NA,createTableStreams:AF,purgeTableStream:gA,purgeSchemaTableStreams:OF,getStreamInfo:pF,updateNodeNameLocalStreams:NF,closeConnection:cF};async function fA(e,t=void 0){let{stdout:r,stderr:s}=await Wq(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
1
|
+
"use strict";var zI=Object.defineProperty;var a=(e,t)=>zI(e,"name",{value:t,configurable:!0});var S=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=S((qQ,Jd)=>{"use strict";var xe=require("path"),jI=require("fs");function eb(){let e=__dirname;for(;!jI.existsSync(xe.join(e,"package.json"));){let t=xe.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(eb,"getHDBPackageRoot");var Ht=eb(),Hd="js",Fn=Hd,tb="harperdb-config.yaml",rb="defaultConfig.yaml",sb="hdb",qd=`hdbServer.${Fn}`,Gd=`customFunctionsServer.${Fn}`,Fd=`hdbIpcServer.${Fn}`,nb=`restartHdb.${Fn}`,K_="HarperDB",la="Custom Functions",Ea="Clustering Hub",da="Clustering Leaf",W_="Clustering Ingest Service",Q_="Clustering Reply Service",ib="foreground.pid",Y_={HDB:K_,IPC:"IPC",CLUSTERING_HUB:Ea,CLUSTERING_LEAF:da,CLUSTERING_INGEST_SERVICE:W_,CLUSTERING_REPLY_SERVICE:Q_,CUSTOM_FUNCTIONS:la,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"},ab={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"},ob={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},cb={harperdb:K_,ipc:"IPC","clustering hub":Ea,"clustering leaf":da,"clustering ingest service":W_,"clustering reply service":Q_,"custom functions":la,custom_functions:la,"pm2-logrotate":Y_.PM2_LOGROTATE,logrotate:Y_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},_b={CLUSTERING_HUB_PROC_DESCRIPTOR:Ea,CLUSTERING_LEAF_PROC_DESCRIPTOR:da,CLUSTERING_INGEST_PROC_DESCRIPTOR:W_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Q_},ua={HDB:xe.join(Ht,"server/harperdb"),IPC:xe.join(Ht,"server/ipc"),CUSTOM_FUNCTIONS:xe.join(Ht,"server/customFunctions"),CLUSTERING_HUB:xe.join(Ht,"server/nats"),CLUSTERING_LEAF:xe.join(Ht,"server/nats")},ub={HDB:xe.join(ua.HDB,qd),IPC:xe.join(ua.IPC,Fd),CUSTOM_FUNCTIONS:xe.join(ua.CUSTOM_FUNCTIONS,Gd)},lb={HDB:xe.join(Ht,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:xe.join(Ht,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:xe.join(Ht,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:xe.join(Ht,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:xe.resolve(Ht,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Eb={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},Vd="support@harperdb.io",db="customer-success@harperdb.io",kd=1,hb=4141,$d="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Sb="https://www.harperdb.io/product",fb=`For support, please submit a request at ${$d} or contact ${Vd}`,xd=`For license support, please contact ${db}`,Tb="None of the specified records were found.",mb="hash attribute not found",Rb=`Your current license only supports ${kd} role. ${xd}`,Ab="Your current license only supports 3 connections to a node.",Ob="127.0.0.1",pb=1,Nb=/^\.$/,gb=/^\.\.$/,Ib="U+002E",bb=/\//g,wb="U+002F",Cb=/U\+002F/g,Lb=/^U\+002E$/,Ub=/^U\+002EU\+002E$/,yb="d",Db=999999,Mb="*",Pb="--max-old-space-size=",Bb="system",vb="__hdb_hash",Hb=".harperdb",qb=".hdb",Gb="keys",Fb="hdb_boot_properties.file",Vb=".updateConfig.json",kb="SIGTSTP",$b=24,xb=6e4,Yb=448,Kb="blob",Wb="trash",Qb="schema",Jb="transactions",Zb=".count",Xb="id",zb="install_log.log",jb="run_log.log",ew="PROCESS_NAME",tw={SETTINGS_PATH_KEY:"settings_path"},Yd=require("lodash"),rw={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"},sw={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},nw={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},iw={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"},aw={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"},Et="hdb_internal:",ow={CREATE_SCHEMA:Et+"create_schema",CREATE_TABLE:Et+"create_table",CREATE_ATTRIBUTE:Et+"create_attribute",ADD_USER:Et+"add_user",ALTER_USER:Et+"alter_user",DROP_USER:Et+"drop_user",HDB_NODES:Et+"hdb_nodes",HDB_USERS:Et+"hdb_users",HDB_WORKERS:Et+"hdb_workers",CATCHUP:Et+"catchup",SCHEMA_CATCHUP:Et+"schema_catchup",WORKER_ROOM:Et+"cluster_workers"},cw={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"},_w="060493.ks",uw=".license",lw={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={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"},Ew={CSV:".csv",JSON:".json"},dw={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},hw={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Cr={};Cr[g.CREATE_SCHEMA]=g.CREATE_SCHEMA;Cr[g.CREATE_TABLE]=g.CREATE_TABLE;Cr[g.CREATE_ATTRIBUTE]=g.CREATE_ATTRIBUTE;Cr[g.INSERT]=g.INSERT;Cr[g.UPDATE]=g.UPDATE;Cr[g.UPSERT]=g.UPSERT;Cr[g.DELETE]=g.DELETE;var J=Object.create(null);J[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;J[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;J[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;J[g.READ_LOG]=g.READ_LOG;J[g.ADD_NODE]=g.ADD_NODE;J[g.LIST_USERS]=g.LIST_USERS;J[g.LIST_ROLES]=g.LIST_ROLES;J[g.USER_INFO]=g.USER_INFO;J[g.SQL]=g.SQL;J[g.GET_JOB]=g.GET_JOB;J[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;J[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;J[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;J[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;J[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;J[g.REMOVE_NODE]=g.REMOVE_NODE;J[g.RESTART]=g.RESTART;J[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;J[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;J[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;J[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;J[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;J[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;J[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;J[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Sw={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},fw={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Kd={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"},Tw=Yd.invert(Kd),f={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"},mw={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:f.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},Rw={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.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"},Aw={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"},Ow={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},pw={FILE_SYSTEM:"fs",LMDB:"lmdb"},Nw={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},gw={DEVELOPMENT:8192,DEFAULT:512},Iw={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"},bw={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"},ww={ENOENT:"ENOENT",EACCES:"EACCES"},Wd={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Cw="__clustering__",Lw=Object.values(Wd),Uw=15984864e5,Qd={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},yw=Yd.invert(Qd),Dw={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"},Mw=111,Pw=`\r
|
|
2
|
+
`,Bw={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},vw=["*","%"],Hw="unauthorized_access",qw="func_val",Gw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Fw={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Vw="hdb_ipc_server",kw="hdb_ipc_client_",$w={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"},xw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Yw={STOPPED:"stopped",ONLINE:"online"},Kw="3.x.x";Jd.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:Vd,HDB_SUPPORT_URL:$d,HDB_PRICING_URL:Sb,SUPPORT_HELP_MSG:fb,LICENSE_HELP_MSG:xd,HDB_PROC_NAME:qd,HDB_PROC_DESCRIPTOR:K_,CLUSTERING_LEAF_PROC_DESCRIPTOR:da,CLUSTERING_HUB_PROC_DESCRIPTOR:Ea,SYSTEM_SCHEMA_NAME:Bb,HASH_FOLDER_NAME:vb,HDB_HOME_DIR_NAME:Hb,UPDATE_FILE_NAME:Vb,LICENSE_KEY_DIR_NAME:Gb,BOOT_PROPS_FILE_NAME:Fb,JOB_TYPE_ENUM:Rw,JOB_STATUS_ENUM:lw,SYSTEM_TABLE_NAMES:iw,SYSTEM_TABLE_HASH_ATTRIBUTES:aw,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:Ew,S3_BUCKET_AUTH_KEYS:dw,VALID_SQL_OPS_ENUM:hw,GEO_CONVERSION_ENUM:fw,HDB_SETTINGS_NAMES:Kd,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Tw,SERVICE_ACTIONS_ENUM:Sw,CLUSTER_MESSAGE_TYPE_ENUM:Aw,CLUSTER_CONNECTION_DIRECTION_ENUM:Ow,CLUSTER_EVENTS_DEFS_ENUM:Iw,PERIOD_REGEX:Nb,DOUBLE_PERIOD_REGEX:gb,UNICODE_PERIOD:Ib,FORWARD_SLASH_REGEX:bb,UNICODE_FORWARD_SLASH:wb,ESCAPED_FORWARD_SLASH_REGEX:Cb,ESCAPED_PERIOD_REGEX:Lb,ESCAPED_DOUBLE_PERIOD_REGEX:Ub,REG_KEY_FILE_NAME:_w,RESTART_TIMEOUT_MS:xb,HDB_FILE_PERMISSIONS:Yb,SCHEMA_DIR_NAME:Qb,TRANSACTIONS_DIR_NAME:Jb,LIMIT_COUNT_NAME:Zb,ID_ATTRIBUTE_STRING:Xb,INSERT_MODULE_ENUM:sw,UPGRADE_JSON_FIELD_NAMES_ENUM:nw,RESTART_CODE:kb,RESTART_CODE_NUM:$b,CLUSTER_OPERATIONS:Cr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:cw,HDB_INTERNAL_SC_CHANNEL_PREFIX:Et,INTERNAL_SC_CHANNELS:ow,CLUSTERING_MESSAGE_TYPES:Dw,HDB_FILE_SUFFIX:qb,BLOB_FOLDER_NAME:Kb,HDB_TRASH_DIR:Wb,ORIGINATOR_SET_VALUE:Mw,LICENSE_VALUES:Nw,RAM_ALLOCATION_ENUM:gw,STORAGE_TYPES_ENUM:pw,TIME_STAMP_NAMES_ENUM:Wd,TIME_STAMP_NAMES:Lw,PERMS_UPDATE_RELEASE_TIMESTAMP:Uw,SEARCH_NOT_FOUND_MESSAGE:Tb,SEARCH_ATTRIBUTE_NOT_FOUND:mb,LICENSE_ROLE_DENIED_RESPONSE:Rb,LICENSE_MAX_CONNS_REACHED:Ab,BASIC_LICENSE_MAX_NON_CU_ROLES:kd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hb,VALUE_SEARCH_COMPARATORS:Qd,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:yw,LICENSE_FILE_NAME:uw,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:bw,NEW_LINE:Pw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:pb,MOMENT_DAYS_TAG:yb,API_TURNOVER_SEC:Db,LOOPBACK:Ob,CODE_EXTENSION:Fn,WILDCARD_SEARCH_VALUE:Mb,NODE_ERROR_CODES:ww,JAVASCRIPT_EXTENSION:Hd,PERMS_CRUD_ENUM:Bw,UNAUTHORIZED_PERMISSION_NAME:Hw,SEARCH_WILDCARDS:vw,FUNC_VAL:qw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Gw,JWT_ENUM:Fw,CLUSTERING_FLAG:Cw,RUN_LOG:jb,INSTALL_LOG:zb,IPC_SERVER_MODULE:Fd,HDB_IPC_SERVER:Vw,IPC_EVENT_TYPES:$w,HDB_IPC_CLIENT_PREFIX:kw,CUSTOM_FUNCTION_PROC_NAME:Gd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:la,SERVICES:xw,MEM_SETTING_KEY:Pb,HDB_RESTART_SCRIPT:nb,PROCESS_DESCRIPTORS:Y_,SERVICE_SERVERS:ub,SERVICE_SERVERS_CWD:ua,PROCESS_DESCRIPTORS_VALIDATE:cb,LAUNCH_SERVICE_SCRIPTS:lb,LOG_LEVELS:ob,PROCESS_NAME_ENV_PROP:ew,PROCESS_LOG_NAMES:ab,PM2_PROCESS_STATUSES:Yw,CONFIG_PARAM_MAP:mw,CONFIG_PARAMS:f,HDB_CONFIG_FILE:tb,HDB_DEFAULT_CONFIG_FILE:rb,ROLE_TYPES_ENUM:Eb,BOOT_PROP_PARAMS:tw,INSTALL_PROMPTS:rw,HDB_ROOT_DIR_NAME:sb,CLUSTERING_PROCESSES:_b,FOREGROUND_PID_FILE:ib,PACKAGE_ROOT:Ht,PRE_4_0_0_VERSION:Kw}});var J_=S((GQ,zd)=>{"use strict";var Zd=require("minimist");zd.exports=Ww;function Ww(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Xd(process.env),s=Xd(Zd(process.argv))):(r=process.env,s=Zd(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(Ww,"assignCMDENVVariables");function Xd(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Xd,"objKeysToLowerCase")});var I=S((FQ,ih)=>{"use strict";var jr=require("fs-extra"),es=require("path"),eh=require("yaml"),th=require("properties-reader"),me=T(),Qw=J_(),Jw=require("os"),{PACKAGE_ROOT:z_}=T(),tt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ha=es.join(z_,"logs"),Lr=process.env.pm_id===void 0,Zw=es.join(z_,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),j_=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Gs,Qt,cr,et,Z_,Fs;Fs===void 0&&rh();ih.exports={createLogFile:Xw,notify:eC,fatal:tC,error:X_,warn:rC,info:zw,debug:jw,trace:nh,setLogLevel:nC,log_level:et};function rh(){try{if(Fs===void 0){let e=sC();Fs=th(e),{level:et,config_log_path:Z_,to_file:Qt,to_stream:cr}=iC(Fs.get("settings_path"))}}catch(e){if(Fs=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Qw(Object.keys(me.CONFIG_PARAM_MAP),!0);for(let i in t){let o=me.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let c=t[i];if(o===me.CONFIG_PARAMS.LOGGING_LEVEL){et=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){cr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(Qt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=aC();Qt=Qt===void 0?s:Qt,Qt=jd(Qt),cr=cr===void 0?n:cr,cr=jd(cr),et=et===void 0?r:et,Z_=ha;return}throw X_("Error initializing log settings"),X_(e),e}}a(rh,"initLogSettings");function Xw(e,t){if(!Lr){nh("createLogFile should only be used if the process is not being managed by pm2");return}Fs===void 0&&rh(),j_=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=ha:r=Z_,Qt&&(Gs=es.join(r,e),jr.ensureFileSync(Gs))}a(Xw,"createLogFile");function ts(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let c=t[o];c instanceof Error&&c.stack?s+=c.stack:typeof c=="object"?s+=JSON.stringify(c):s+=c,o<i&&(s+=" ")}return`{"process_name": "${j_}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
|
+
`}a(ts,"createLogRecord");function sh(e){Gs===void 0&&(j_=me.PROCESS_DESCRIPTORS.INSTALL,jr.ensureDirSync(ha),Gs=es.join(ha,me.PROCESS_LOG_NAMES.INSTALL),jr.ensureFileSync(Gs)),jr.appendFileSync(Gs,e)}a(sh,"writeToLogFile");function Sa(e){Qt&&sh(e),cr&&process.stdout.write(e)}a(Sa,"nonPm2LogStdOut");function eu(e){Qt&&sh(e),cr&&process.stderr.write(e)}a(eu,"nonPm2LogStdErr");function zw(...e){if(tt[et]<=tt.info){let t=ts("info",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(zw,"info");function nh(...e){if(tt[et]<=tt.trace){let t=ts("trace",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(nh,"trace");function X_(...e){if(tt[et]<=tt.error){let t=ts("error",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(X_,"error");function jw(...e){if(tt[et]<=tt.debug){let t=ts("debug",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(jw,"debug");function eC(...e){if(tt[et]<=tt.notify){let t=ts("notify",e);if(Lr){Sa(t);return}process.stdout.write(t)}}a(eC,"notify");function tC(...e){if(tt[et]<=tt.fatal){let t=ts("fatal",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(tC,"fatal");function rC(...e){if(tt[et]<=tt.warn){let t=ts("warn",e);if(Lr){eu(t);return}process.stderr.write(t)}}a(rC,"warn");function sC(){let e;try{e=Jw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=es.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return jr.existsSync(t)||(t=es.join(z_,"utility/hdb_boot_properties.file")),t}a(sC,"getPropsFilePath");function nC(e){et=e}a(nC,"setLogLevel");function jd(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jd,"autoCastBoolean");function iC(e){try{if(e.includes("config/settings.js")){let o=th(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:es.dirname(o.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=eh.parseDocument(jr.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===me.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(iC,"getLogConfig");function aC(){try{let e=eh.parseDocument(jr.readFileSync(Zw,"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(aC,"getDefaultConfig")});var oh=S((VQ,ah)=>{"use strict";var oC=require("util"),cC=require("path"),_C=require("child_process"),uC=oC.promisify(_C.execFile),lC=1e3*1e3*10;ah.exports={findPs:EC};async function EC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await uC("ps",["wwxo",`pid,${r}`],{maxBuffer:lC});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:cC.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(EC,"findPs")});var Ye=S((kQ,_h)=>{"use strict";var dC="__dbis__",hC="__environment_name__",SC="__dbi_defintion__",fC={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"},TC=["__createdtime__","__updatedtime__"],mC="\uFFFF",ch={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RC=Object.values(ch);_h.exports={INTERNAL_DBIS_NAME:dC,DBI_DEFINITION_NAME:SC,SEARCH_TYPES:fC,TIMESTAMP_NAMES:TC,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hC,TRANSACTIONS_DBI_NAMES_ENUM:ch,TRANSACTIONS_DBIS:RC,OVERFLOW_MARKER:mC}});var rt=S(($Q,mh)=>{"use strict";var uh=T(),lh=Ye(),Eh={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},dh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hh={500:dh("There was an error processing your request."),400:"Invalid request"},AC=hh[Eh.INTERNAL_SERVER_ERROR],OC={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.`},pC={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},NC={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"},gC={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 ${lh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${lh.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"},IC={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${uh.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 ${uh.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"},Sh={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"},bC={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."},wC={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`},CC={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"},LC={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},UC={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`},fh={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.`},Th={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}`},yC={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."},DC={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},MC={...Sh,...NC,...OC,...bC,...wC,...CC,...LC,...UC,...IC,...fh,...Th,...yC,...DC,...pC};mh.exports={CHECK_LOGS_WRAPPER:dh,HDB_ERROR_MSGS:MC,DEFAULT_ERROR_MSGS:hh,DEFAULT_ERROR_RESP:AC,HTTP_STATUS_CODES:Eh,LMDB_ERRORS_ENUM:gC,AUTHENTICATION_ERROR_MSGS:Sh,VALIDATION_ERROR_MSGS:fh,IPC_ERRORS:Th}});var D=S((xQ,Oh)=>{"use strict";var Vs=rt(),PC=I(),BC=T(),Vn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Rh),this.http_resp_code=s||Vs.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Vs.DEFAULT_ERROR_MSGS[s]?Vs.DEFAULT_ERROR_MSGS[s]:Vs.DEFAULT_ERROR_MSGS[Vs.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&&PC[n](i)}};a(Vn,"HdbError");function Rh(e,t,r,s=BC.LOG_LEVELS.ERROR,n=null,i=!1){if(Ah(e))return e;let o=new Vn(e,t,r,s,n);return i&&delete o.stack,o}a(Rh,"handleHDBError");function Ah(e){return e.__proto__.constructor.name===Vn.name}a(Ah,"isHDBError");Oh.exports={isHDBError:Ah,handleHDBError:Rh,hdb_errors:Vs}});var b=S((KQ,vh)=>{"use strict";var rs=require("path"),vC=require("fs-extra"),Ie=I(),ph=require("fs-extra"),HC=require("truncate-utf8-bytes"),kn=require("os"),qC=require("net"),GC=require("recursive-iterator"),Ue=T(),wh=oh(),Nh=require("papaparse"),fa=require("moment"),{inspect:FC}=require("util"),gh=require("is-number"),YQ=require("lodash"),{hdb_errors:Ta}=D(),Ch=require("util").promisify(setTimeout),VC=100,kC=5,$C="",xC=4,Ih=255,bh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};vh.exports={isEmpty:dt,isEmptyOrZeroLength:Jt,arrayHasEmptyValues:WC,arrayHasEmptyOrZeroLengthValues:QC,buildFolderPath:JC,isBoolean:Lh,errorizeMessage:YC,stripFileExtension:XC,autoCast:zC,autoCastJSONDeep:tu,removeDir:eL,compareVersions:tL,isCompatibleDataVersion:rL,escapeRawValue:yh,unescapeValue:sL,stringifyProps:nL,valueConverter:iL,timeoutPromise:oL,isClusterOperation:_L,getClusterUser:EL,sendTransactionToSocketCluster:uL,checkGlobalSchemaTable:lL,getHomeDir:Dh,getPropsFilePath:aL,promisifyPapaParse:dL,removeBOM:Mh,createEventPromise:hL,checkProcessRunning:SL,checkSchemaTableExist:fL,checkSchemaExists:Ph,checkTableExists:Bh,getStartOfTomorrowInSeconds:TL,getLimitKey:mL,isObject:ZC,isNotEmptyAndHasValue:KC,autoCasterIsNumberCheck:Uh,backtickASTSchemaItems:RL,isPortTaken:cL,stopProcess:AL,createForkArgs:OL,autoCastBoolean:pL,async_set_timeout:Ch,getTableHashAttribute:NL,doesSchemaExist:gL,doesTableExist:IL,stringifyObj:bL,ms_to_time:wL,changeExtension:CL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function YC(e){return e instanceof Error?e:new Error(e)}a(YC,"errorizeMessage");function dt(e){return e==null}a(dt,"isEmpty");function KC(e){return!dt(e)&&(e||e===0||e===""||Lh(e))}a(KC,"isNotEmptyAndHasValue");function Jt(e){return dt(e)||e.length===0||e.size===0}a(Jt,"isEmptyOrZeroLength");function WC(e){if(dt(e))return!0;for(let t=0;t<e.length;t++)if(dt(e[t]))return!0;return!1}a(WC,"arrayHasEmptyValues");function QC(e){if(Jt(e))return!0;for(let t=0;t<e.length;t++)if(Jt(e[t]))return!0;return!1}a(QC,"arrayHasEmptyOrZeroLengthValues");function JC(...e){try{return e.join(rs.sep)}catch{console.error(e)}}a(JC,"buildFolderPath");function Lh(e){return dt(e)?!1:e===!0||e===!1}a(Lh,"isBoolean");function ZC(e){return dt(e)?!1:typeof e=="object"}a(ZC,"isObject");function XC(e){return Jt(e)?$C:e.slice(0,-xC)}a(XC,"stripFileExtension");function zC(e){return dt(e)||e===""||typeof e!="string"?e:bh[e]!==void 0?bh[e]:Uh(e)===!0?Number(e):e}a(zC,"autoCast");function jC(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(jC,"autoCastJSON");function tu(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=tu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=tu(r);s!==r&&(e[t]=s)}return e}else return jC(e)}a(tu,"autoCastJSONDeep");function Uh(e){if(e.startsWith("0.")&&gh(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&gh(e))}a(Uh,"autoCasterIsNumberCheck");async function eL(e){if(Jt(e))throw new Error(`Directory path: ${e} does not exist`);try{await ph.emptyDir(e),await ph.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(eL,"removeDir");function tL(e,t){if(Jt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Jt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(tL,"compareVersions");function rL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(rL,"isCompatibleDataVersion");function yh(e){if(dt(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(yh,"escapeRawValue");function sL(e){if(dt(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(sL,"unescapeValue");function nL(e,t){if(dt(e))return Ie.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+kn.EOL}!Jt(s)&&s[0]===";"?r+=" "+s+n+kn.EOL:Jt(s)||(r+=s+"="+n+kn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(nL,"stringifyProps");function iL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(yh(t)),s=Buffer.byteLength(r)>Ih?HC(r,Ih)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(iL,"valueConverter");function Dh(){let e;try{e=kn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Dh,"getHomeDir");function aL(){let e=rs.join(Dh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return vC.existsSync(e)||(e=rs.join(__dirname,"../","hdb_boot_properties.file")),e}a(aL,"getPropsFilePath");function oL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(oL,"timeoutPromise");async function cL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=qC.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(cL,"isPortTaken");function _L(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(_L,"isClusterOperation");function uL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.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]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(uL,"sendTransactionToSocketCluster");function lL(e,t){if(!global.hdb_schema[e])return Ta.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ta.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lL,"checkGlobalSchemaTable");function EL(e,t){if(dt(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(dt(e)||Jt(e)){Ie.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){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(EL,"getClusterUser");function dL(){Nh.parsePromise=function(e,t){return new Promise(function(r,s){Nh.parse(e,{header:!0,transformHeader:Mh,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(dL,"promisifyPapaParse");function Mh(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Mh,"removeBOM");function hL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${FC(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(hL,"createEventPromise");async function SL(e){let t=!0,r=0;do await Ch(VC*r++),(await wh.findPs(e)).length>0&&(t=!1);while(t&&r<kC);if(t)throw new Error(`process ${e} was not started`)}a(SL,"checkProcessRunning");function fL(e,t){let r=Ph(e);if(r)return r;let s=Bh(e,t);if(s)return s}a(fL,"checkSchemaTableExist");function Ph(e){if(!global.hdb_schema[e])return Ta.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ph,"checkSchemaExists");function Bh(e,t){if(!global.hdb_schema[e][t])return Ta.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Bh,"checkTableExists");function TL(){let e=fa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=fa().utc().unix();return e-t}a(TL,"getStartOfTomorrowInSeconds");function mL(){return fa().utc().format("DD-MM-YYYY")}a(mL,"getLimitKey");function RL(e){try{let t=new GC(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){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(RL,"backtickASTSchemaItems");async function AL(e){let t=kn.userInfo();(await wh.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(AL,"stopProcess");function OL(e){return[e]}a(OL,"createForkArgs");function pL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(pL,"autoCastBoolean");function NL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(NL,"getTableHashAttribute");function gL(e){return global?.hdb_schema?.[e]!==void 0}a(gL,"doesSchemaExist");function IL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(IL,"doesTableExist");function bL(e){try{return JSON.stringify(e)}catch{return e}}a(bL,"stringifyObj");function wL(e){let t=fa.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(wL,"ms_to_time");function CL(e,t){let r=rs.basename(e,rs.extname(e));return rs.join(rs.dirname(e),r+t)}a(CL,"changeExtension")});var ss=S((WQ,LL)=>{LL.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 Jh=S((JQ,Qh)=>{"use strict";var ru=require("recursive-iterator"),UL=require("alasql"),su=require("clone"),Hh=b(),{handleHDBError:qh,hdb_errors:yL}=D(),{HDB_ERROR_MSGS:Gh,HTTP_STATUS_CODES:Fh}=yL,DL=["DISTINCT_ARRAY"],Vh=Symbol("validateTables"),nu=Symbol("validateTable"),QQ=Symbol("getAllColumns"),kh=Symbol("validateAllColumns"),ma=Symbol("findColumn"),$h=Symbol("validateOrderBy"),$n=Symbol("validateSegment"),iu=Symbol("validateColumn"),xh=Symbol("setColumnsForTable"),Yh=Symbol("checkColumnsForAsterisk"),Kh=Symbol("validateGroupBy"),Wh=Symbol("hasColumns"),Ra=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Vh](),this[Yh](),this[kh]()}[Vh](){if(this[Wh]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[nu](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[nu](t.table)})}}[Wh](){let t=!1,r=new ru(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[nu](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw qh(new Error,Gh.SCHEMA_NOT_FOUND(t.databaseid),Fh.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw qh(new Error,Gh.TABLE_NOT_FOUND(t.databaseid,t.tableid),Fh.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=su(s);n.table=su(t),this.attributes.push(n)})}[ma](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)}[Yh](){let t=new ru(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[xh](r.tableid)}[xh](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new UL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kh](){this[$n](this.statement.columns,!1),this[$n](this.statement.joins,!1),this[$n](this.statement.where,!1),this[Kh](this.statement.group,!1),this[$n](this.statement.order,!0)}[$n](t,r){if(!t)return;let s=new ru(t),n=[];for(let{node:i,path:o}of s)!Hh.isEmpty(i)&&!Hh.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$h](i):n.push(this[iu](i)));return n}[Kh](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&DL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=su(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ma](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[ma](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[$h](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[iu](t)}[iu](t){let r=this[ma](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(Ra,"SelectValidator");Qh.exports=Ra});var au=S((ZQ,Zh)=>{"use strict";var Aa=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(Aa,"BridgeMethods");Zh.exports=Aa});var ns=S((jQ,eS)=>{"use strict";var Xh=rt().LMDB_ERRORS_ENUM,XQ=require("lmdb"),ML=Ye(),zQ=require("buffer").Buffer,PL=require("microtime"),{OVERFLOW_MARKER:zh,MAX_SEARCH_KEY_LENGTH:Oa}=ML,jh=["number","string","symbol","boolean","bigint"];function BL(e){if(!e)throw new Error(Xh.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Xh.INVALID_ENVIRONMENT)}a(BL,"validateEnv");function vL(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(vL,"stringifyData");function HL(e){return e instanceof Date?e.valueOf():e}a(HL,"convertKeyValueToWrite");function qL(e){if(e==null)return;if(jh.includes(typeof e))return e.length>Oa?[e.slice(0,Oa)+zh]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];jh.includes(typeof n)&&(n.length>Oa?t.push(n.slice(0,Oa)+zh):t.push(n))}}return t}a(qL,"getIndexedValues");function GL(){let e=PL.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(GL,"getMicroTime");eS.exports={validateEnv:BL,stringifyData:vL,convertKeyValueToWrite:HL,getMicroTime:GL,getIndexedValues:qL}});var rS=S((e1,tS)=>{"use strict";var pa=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(pa,"DBIDefinition");tS.exports=pa});var nS=S((t1,sS)=>{"use strict";var Na=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(Na,"OpenDBIObject");sS.exports=Na});var aS=S((r1,iS)=>{"use strict";var ga=class{constructor(t,r,s,n,i=!1,o=!1,c=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,c!==void 0&&(this.overlappingSync=c)}};a(ga,"OpenEnvironmentObject");iS.exports=ga});var Ee=S((s1,oS)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};oS.exports={validateObject:FL,validateObjectAsync:VL,validateBySchema:kL};function FL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(FL,"validateObject");async function VL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(VL,"validateObjectAsync");function kL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(kL,"validateBySchema")});var cu=S((n1,_S)=>{"use strict";var $L=require("fs-extra"),F=require("joi"),xL=require("os"),{boolean:ye,string:_r,number:Zt,array:ou}=F.types(),cS=require("path"),YL=I(),Ia=b(),KL=Ee(),WL="log",QL="custom_functions",JL="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ZL="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",XL="rootPath config parameter is undefined",zL="clustering.enabled config parameter is undefined",Ur=Zt.min(0).required(),ba=ou.items({host:_r.required(),port:Ur}).empty(null),xn;_S.exports={configValidator:jL,routesValidator:iU,route_constraints:ba};function jL(e){if(xn=e.rootPath,Ia.isEmpty(xn))throw XL;let t=ye.required(),r=F.valid("production","development").required(),s=Zt.min(1).max(1e3).empty(null).default(sU),n=_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(nU),i=F.custom(tU).messages({"any.custom":"{:#label} {:#error}"}),o=_r.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(Ia.isEmpty(c))throw zL;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Ur,routes:ba}).required()}).required(),leafNodes:F.object({network:F.object({port:Ur}).required()}).required(),network:F.object({port:Ur}).required()}).required(),leafServer:F.object({network:F.object({port:Ur,routes:ba}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:ou.required(),headersTimeout:Zt.min(1).required(),https:ye.required(),keepAliveTimeout:Zt.min(1).required(),port:Ur,timeout:Zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Ur})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:_r.required(),maxSize:_r.custom(rU).required(),retain:Zt.min(0).required(),rotate:ye.required(),rotateInterval:_r.required(),rotateModule:ye.required(),timezone:_r.required(),workerInterval:Zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:ou.required(),headersTimeout:Zt.min(1).required(),https:ye.required(),keepAliveTimeout:Zt.min(1).required(),port:Ur,timeout:Zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(jL,"configValidator");function eU(e){return $L.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eU,"doesPathExist");function tU(e,t){if(e===null)return;F.assert(e,_r.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=eU(e);return r?t.message(r):e}a(tU,"validatePemFile");function rU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(JL);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(ZL)}a(rU,"validateRotationMaxSize");function sU(e,t){let r=t.state.path.join("."),s=xL.cpus().length,n=s-1;return n<=2&&(n=2),YL.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(sU,"setDefaultThreads");function nU(e,t){if(!Ia.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Ia.isEmpty(xn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return cS.join(xn,QL);case"logging.root":return cS.join(xn,WL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(nU,"setDefaultRoot");function iU(e){let t=F.object({routes:ba});return KL.validateBySchema({routes:e},t)}a(iU,"routesValidator")});var ur=S((i1,fS)=>{"use strict";var re=T(),gt=b(),Ke=I(),{configValidator:aU,routesValidator:uS}=cu(),qt=require("fs-extra"),oU=require("yaml"),ks=require("path"),cU=require("is-number"),La=require("properties-reader"),_U=require("lodash"),{handleHDBError:uU}=D(),{HTTP_STATUS_CODES:lU,HDB_ERROR_MSGS:wa}=rt(),{PACKAGE_ROOT:EU}=T(),dU="Unable to get config value because config is uninitialized",hU="Config successfully initialized",SU="Error backing up config file",fU="Empty parameter sent to getConfigValue",lS=ks.join(EU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),TU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ca,nt;fS.exports={createConfigFile:mU,getDefaultConfig:RU,getConfigValue:ES,initConfig:dS,flattenConfig:is,updateConfigValue:hS,updateConfigObject:AU,getConfiguration:OU,setConfiguration:pU,readConfigFile:lu,getClusteringRoutes:NU,initOldConfig:SS,getConfigFromFile:gU};function mU(e){let t=$s(lS);Ca=is(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=_u(o,e[i]);try{t.setIn([...c],_)}catch(u){Ke.error(u)}}}uu(t);let r=t.toJSON();nt=is(r);let s=t.getIn(["rootPath"]),n=ks.join(s,re.HDB_CONFIG_FILE);qt.createFileSync(n),qt.writeFileSync(n,String(t)),Ke.trace(`Config file written to ${n}`)}a(mU,"createConfigFile");function RU(e){if(Ca===void 0){let r=$s(lS);Ca=is(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ca[t.toLowerCase()]}a(RU,"getDefaultConfig");function ES(e){if(gt.isEmpty(e)){Ke.error(fU);return}if(nt===void 0){Ke.trace(dU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return nt[t.toLowerCase()]}a(ES,"getConfigValue");function dS(e=!1){if(nt===void 0||e){let t=gt.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(o){throw Ke.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=La(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{SS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=$s(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Ke.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 Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}uu(n);let i=n.toJSON();nt=is(i),Ke.trace(hU)}}a(dS,"initConfig");function uu(e){let t=e.toJSON(),r=aU(t);if(r.error)throw wa.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(uu,"validateConfig");function AU(e,t){nt===void 0&&(nt={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}nt[r.toLowerCase()]=t}a(AU,"updateConfigObject");function hS(e,t,r=void 0,s=!1,n=!1){nt===void 0&&dS();let i=ES(re.CONFIG_PARAM_MAP.hdb_root),o=ks.join(i,re.HDB_CONFIG_FILE),c=$s(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=_u(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),h=_u(E,r[l]);try{c.setIn([...d],h)}catch(m){Ke.error(m)}}}uu(c);let _=c.getIn(["rootPath"]),u=ks.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=ks.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);qt.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(SU),Ke.error(l)}qt.writeFileSync(u,String(c)),n&&(nt=is(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hS,"updateConfigValue");function is(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=is(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(is,"flattenConfig");function _u(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.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(cU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||gt.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 gt.autoCast(t)}a(_u,"castConfigValue");function OU(){let e=gt.getPropsFilePath(),r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(OU,"getConfiguration");async function pU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return hS(void 0,void 0,n,!0),TU}catch(i){throw typeof i=="string"||i instanceof String?uU(i,i,lU.BAD_REQUEST,void 0,void 0,!0):i}}a(pU,"setConfiguration");function lu(){let e=gt.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=La(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return $s(r).toJSON()}a(lu,"readConfigFile");function $s(e){return oU.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a($s,"parseYamlDoc");function NU(){let e=lu(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=gt.isEmptyOrZeroLength(t)?[]:t;let r=uS(t);if(r)throw wa.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=gt.isEmptyOrZeroLength(s)?[]:s;let n=uS(s);if(n)throw wa.CONFIG_VALIDATION(n.message);if(!gt.isEmptyOrZeroLength(s)&&!gt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!gt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw wa.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(NU,"getClusteringRoutes");function SS(e){let t=La(e);nt={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(gt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?nt[n]=ks.dirname(s):nt[n]=s}return nt}a(SS,"initOldConfig");function gU(e){let t=lu();return _U.get(t,e.replaceAll("_","."))}a(gU,"getConfigFromFile")});var Y=S((a1,mS)=>{"use strict";var Eu=require("fs-extra"),Xt=require("path"),IU=require("os"),bU=require("properties-reader"),Yn=I(),xs=b(),M=T(),Ua=ur(),wU="Error initializing environment manager",ya="BOOT_PROPS_FILE_PATH",TS=!1,CU={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},lr={};mS.exports={BOOT_PROPS_FILE_PATH:ya,getHdbBasePath:LU,setHdbBasePath:UU,get:yU,initSync:MU,setProperty:x,initTestEnvironment:PU};function LU(){return lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LU,"getHdbBasePath");function UU(e){lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(UU,"setHdbBasePath");function yU(e){let t=Ua.getConfigValue(e);return t===void 0?lr[e]:t}a(yU,"get");function x(e,t){CU[e]&&(lr[e]=t),Ua.updateConfigObject(e,t)}a(x,"setProperty");function DU(){let e;try{e=xs.getPropsFilePath(),Eu.accessSync(e,Eu.constants.F_OK|Eu.constants.R_OK),TS=!0;let t=bU(e);return lr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),lr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),lr[ya]=e,!0}catch{return Yn.trace(`Environment manager found no properties file at ${e}`),!1}}a(DU,"doesPropFileExist");function MU(e=!1){try{(TS||DU())&&(Ua.initConfig(e),lr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ua.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Yn.error(wU),Yn.error(t),console.error(t),process.exit(1)}}a(MU,"initSync");function PU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=Xt.join(__dirname,"../../","unitTests");lr[ya]=Xt.join(_,"hdb_boot_properties.file"),x(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Xt.join(_,"settings.test")),x(M.HDB_SETTINGS_NAMES.INSTALL_USER,IU.userInfo().username),x(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.HDB_SETTINGS_NAMES.CERT_KEY,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Xt.join(_,"envDir","utility","keys","privateKey.pem")),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Xt.join(_,"envDir","utility","keys","certificate.pem")),x(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),x(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Xt.join(_,"envDir","log")),x(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),x(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),x(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Xt.join(_,"envDir")),x(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xs.isEmpty(n)?!0:n),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xs.isEmpty(n)?!0:n),x(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),x(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xs.isEmpty(i)?!1:i),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,xs.isEmpty(i)?!1:i),x(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),x(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),x(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),x(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Xt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),x(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xs.isEmpty(c)?!1:c),o&&(x("CORS_ACCESSLIST",o),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(x(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(x(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(x(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),x(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ya}. Please check your boot props and settings files`;Yn.fatal(r),Yn.error(t)}}a(PU,"initTestEnvironment")});var z=S((c1,US)=>{"use strict";var du=require("lmdb"),It=require("fs-extra"),Gt=require("path"),Ma=ns(),RS=I(),De=rt().LMDB_ERRORS_ENUM,Pa=rS(),hu=nS(),AS=aS(),yr=Ye(),o1=T(),Kn=Y();Kn.initSync();var OS=Kn.get("STORAGE_WRITEASYNC")===!0||Kn.get("STORAGE_WRITEASYNC")==="true"||Kn.get("STORAGE_WRITEASYNC")==="TRUE",pS=Kn.get("STORAGE_OVERLAPPINGSYNC"),NS=1024*1024*1024,gS=1e4,IS=1e3,Ft=yr.INTERNAL_DBIS_NAME,bS=yr.DBI_DEFINITION_NAME,BU="data.mdb",vU="lock.mdb",Wn=".mdb",HU="-lock",Da=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[yr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[yr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new du.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Da,"TransactionCursor");function Su(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(Su,"pathEnvNameValidation");async function fu(e,t,r=!0){try{await It.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Gt.join(e,t+Wn);return await It.access(s,It.constants.R_OK|It.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await It.access(Gt.join(e,t,BU),It.constants.R_OK|It.constants.F_OK),Gt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(fu,"validateEnvironmentPath");function Ba(e,t){if(Ma.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ba,"validateEnvDBIName");async function qU(e,t,r=!1,s=!1){Su(e,t),t=t.toString();try{return await fu(e,t,s),Tu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Gt.join(e,t);await It.mkdirp(s?i:e);let o=new AS(s?i:i+Wn,NS,gS,IS,!1,OS,pS),c=du.open(o);c.dbis=Object.create(null);let _=new hu(!1);c.openDB(Ft,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=mu(e,t,r);return c[yr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(qU,"createEnvironment");async function GU(e,t,r,s=!0){let n=await Tu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await It.access(Gt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(GU,"copyEnvironment");async function Tu(e,t,r=!1){Su(e,t),t=t.toString();let s=mu(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 fu(e,t),i=Gt.join(e,t+Wn),o=n!=i,c=new AS(n,NS,gS,IS,o,OS,pS),_=du.open(c);_.dbis=Object.create(null);let u=CS(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[yr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Tu,"openEnvironment");async function FU(e,t,r=!1){Su(e,t),t=t.toString();let s=Gt.join(e,t+Wn),n=await fu(e,t);if(global.lmdb_map!==void 0){let i=mu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await wS(o),delete global.lmdb_map[i]}}await It.remove(n),await It.remove(n===s?n+HU:Gt.join(Gt.dirname(n),vU))}a(FU,"deleteEnvironment");async function wS(e){Ma.validateEnv(e);let t=e[yr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(wS,"closeEnvironment");function mu(e,t,r=!1){let n=`${Gt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mu,"getCachedEnvironmentName");function VU(e){Ma.validateEnv(e);let t=Object.create(null),r=bt(e,Ft);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ft)try{t[s]=Object.assign(new Pa,n)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VU,"listDBIDefinitions");function CS(e){Ma.validateEnv(e);let t=[],r=bt(e,Ft);for(let{key:s}of r.getRange({start:!1}))s!==Ft&&t.push(s);return t}a(CS,"listDBIs");function kU(e,t){let s=bt(e,Ft).getEntry(t),n=new Pa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{RS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(kU,"getDBIDefinition");function LS(e,t,r,s=!1){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new hu(r,s===!0),o=e.openDB(t,i),c=new Pa(r===!0,s);return o[bS]=c,bt(e,Ft).putSync(t,c),e.dbis[t]=o,o}throw n}}a(LS,"createDBI");function bt(e,t){if(Ba(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ft?r=kU(e,t):r=new Pa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new hu(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(De.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}a(bt,"openDBI");function $U(e,t){Ba(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[yr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a($U,"statDBI");async function xU(e,t){try{let r=Gt.join(e,t+Wn);return(await It.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(xU,"environmentDataSize");function YU(e,t){if(Ba(e,t),t=t.toString(),t===Ft)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,Ft).removeSync(t)}a(YU,"dropDBI");function KU(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)LS(e,n,n!==t,n===t);else throw i}}}a(KU,"initializeDBIs");US.exports={openDBI:bt,openEnvironment:Tu,createEnvironment:qU,listDBIs:CS,listDBIDefinitions:VU,createDBI:LS,dropDBI:YU,statDBI:$U,deleteEnvironment:FU,initializeDBIs:KU,TransactionCursor:Da,environmentDataSize:xU,copyEnvironment:GU,closeEnvironment:wS}});var DS=S((_1,yS)=>{"use strict";var va=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(va,"InsertRecordsResponseObject");yS.exports=va});var PS=S((u1,MS)=>{"use strict";var Ha=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(Ha,"UpdateRecordsResponseObject");MS.exports=Ha});var vS=S((l1,BS)=>{"use strict";var qa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(qa,"UpsertRecordsResponseObject");BS.exports=qa});var Ys=S((S1,qS)=>{"use strict";var WU=z(),QU=DS(),JU=PS(),ZU=vS(),Jn=ns(),Qn=rt().LMDB_ERRORS_ENUM,XU=Ye(),Dr=T(),zU=b(),jU=require("uuid"),E1=require("lmdb"),{handleHDBError:ey,hdb_errors:ty}=D(),{OVERFLOW_MARKER:d1,MAX_SEARCH_KEY_LENGTH:h1}=XU,Ru=Dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,as=Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function ry(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new QU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];HS(u,!0,n);let l=sy(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Ou(o,c,s,i)}a(ry,"insertRecords");function sy(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][Dr.FUNC_VAL],s[o]=c)}let _=Jn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[as])})}a(sy,"insertRecord");function ny(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(ny,"removeSkippedRecords");function HS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[as]))&&(e[as]=s),t===!0?(r===!0||!Number.isInteger(e[Ru]))&&(e[Ru]=s):delete e[Ru]}a(HS,"setTimestamps");function Au(e,t,r){r.indexOf(Dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Dr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Dr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),WU.initializeDBIs(e,t,r)}a(Au,"initializeTransaction");async function iy(e,t,r,s,n=!0){Nu(e,t,r,s),Au(e,t,r);let i=new JU,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=pu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Ou(c,_,s,i,o)}a(iy,"updateRecords");async function ay(e,t,r,s,n=!0){try{Nu(e,t,r,s)}catch(_){throw ey(_,_.message,ty.HTTP_STATUS_CODES.BAD_REQUEST)}Au(e,t,r);let i=new ZU,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;zU.isEmpty(u[t])?(l=jU.v4(),u[t]=l):l=u[t];let E=pu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Ou(o,c,s,i)}a(ay,"upsertRecords");async function Ou(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Jn.getMicroTime(),ny(r,n),s}a(Ou,"finalizeWrite");function pu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(HS(r,!l,o),Number.isInteger(r[as])&&u[as]>r[as])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],C=e.dbis[m];if(C===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][Dr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Jn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)C.remove(B[X],s);if(B=Jn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)C.put(B[X],s)}let h=Object.assign({},u,r);c.put(s,h,h[as])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(h=>h?!0:pu(e,t,r,s,n,i,o))}a(pu,"updateUpsertRecord");function oy(e,t,r){if(Jn.validateEnv(e),t===void 0)throw new Error(Qn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Qn.WRITE_ATTRIBUTES_REQUIRED):new Error(Qn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(oy,"validateBasic");function Nu(e,t,r,s){if(oy(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Qn.RECORDS_REQUIRED):new Error(Qn.RECORDS_MUST_BE_ARRAY)}a(Nu,"validateWrite");qS.exports={insertRecords:ry,updateRecords:iy,upsertRecords:ay}});var te=S((f1,FS)=>{"use strict";var gu=T(),Ks=Y(),Iu=require("path");Ks.initSync();var Ga,Fa,Va;function GS(){if(Ga!==void 0)return Ga;if(Ks.getHdbBasePath()!==void 0)return Ga=Iu.join(Ks.getHdbBasePath(),gu.SCHEMA_DIR_NAME),Ga}a(GS,"getBaseSchemaPath");function cy(){if(Fa!==void 0)return Fa;if(Ks.getHdbBasePath()!==void 0)return Fa=Iu.join(GS(),gu.SYSTEM_SCHEMA_NAME),Fa}a(cy,"getSystemSchemaPath");function _y(){if(Va!==void 0)return Va;if(Ks.getHdbBasePath()!==void 0)return Va=Iu.join(Ks.getHdbBasePath(),gu.TRANSACTIONS_DIR_NAME),Va}a(_y,"getTransactionAuditStorePath");FS.exports={getBaseSchemaPath:GS,getSystemSchemaPath:cy,getTransactionAuditStorePath:_y}});var Er=S((T1,$S)=>{"use strict";var kS=b(),VS=T(),$a=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,bu=require("joi"),ka={schema_format:{pattern:$a,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},uy=bu.alternatives(bu.string().min(1).max(ka.schema_length.maximum).pattern($a).messages({"string.pattern.base":"{:#label} "+ka.schema_format.message}),bu.number()).required();function ly(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ka.schema_length.maximum?`'${e}' maximum of 250 characters`:$a.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ly,"checkValidTable");function Ey(e,t){return kS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Ey,"validateSchemaExists");function dy(e,t){let r=t.state.ancestors[0].schema;return kS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(dy,"validateTableExists");function hy(e,t){return e.toLowerCase()===VS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${VS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(hy,"validateSchemaName");$S.exports={common_validators:ka,schema_regex:$a,hdb_schema_table:uy,validateSchemaExists:Ey,validateTableExists:dy,validateSchemaName:hy,checkValidTable:ly}});var xa=S((m1,xS)=>{var{common_validators:Mr}=Er(),Zn=Ee(),Vt="is required",Z={schema:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},table:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length},hash_attribute:{presence:!0,format:Mr.schema_format,length:Mr.schema_length}};function Xn(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(Xn,"makeAttributesStrings");function Sy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Sy,"schema_object");function fy(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(fy,"table_object");function Ty(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:Vt},Zn.validateObject(e,Z)}a(Ty,"create_table_object");function my(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence={message:Vt},Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(my,"attribute_object");function Ry(e){return e=Xn(e),Z.schema.presence={message:Vt},Z.table.presence={message:Vt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,Zn.validateObject(e,Z)}a(Ry,"describe_table");function Ay(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(Ay,"validateTableResidence");xS.exports={schema_object:Sy,create_table_object:Ty,table_object:fy,attribute_object:my,describe_table:Ry,validateTableResidence:Ay}});var KS=S((R1,YS)=>{"use strict";var Oy=require("uuid"),Ya=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Oy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Ya,"CreateAttributeObject");YS.exports=Ya});var Wa=S((A1,WS)=>{"use strict";var py=KS(),Ka=class extends py{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Ka,"LMDBCreateAttributeObject");WS.exports=Ka});var JS=S((O1,QS)=>{"use strict";QS.exports=gy;var Ny="inserted";function gy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ny?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(gy,"returnObject")});var Qa=S((p1,XS)=>{"use strict";var Iy=T(),wu=z(),by=Ys(),{getSystemSchemaPath:wy,getBaseSchemaPath:Cy}=te(),Ly=require("path"),Uy=ss(),yy=xa(),Dy=Wa(),My=JS(),{handleHDBError:Py,hdb_errors:By}=D(),vy=b(),Cu=Uy.hdb_attribute,ZS=[];for(let e=0;e<Cu.attributes.length;e++)ZS.push(Cu.attributes[e].attribute);var Hy="inserted";XS.exports=qy;async function qy(e){let t=yy.attribute_object(e);if(t)throw Py(new Error,t.message,By.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=vy.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 Dy(e.schema,e.table,e.attribute,e.id);try{let n=await wu.openEnvironment(Ly.join(Cy(),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}`);wu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await wu.openEnvironment(wy(),Iy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await by.insertRecords(i,Cu.hash_attribute,ZS,[s]);return My(Hy,o,{records:[s]},c)}catch(n){throw n}}a(qy,"lmdbCreateAttribute")});var Uu=S((N1,jS)=>{var{hdb_schema_table:zS}=Er(),Gy=Ee(),Lu=require("joi"),Fy={undefined:"undefined",null:"null"},Vy=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||Fy[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"),ky=Lu.object({schema:zS,table:zS,records:Lu.array().items(Lu.object().custom(Vy)).required()});jS.exports=function(e){return Gy.validateBySchema(e,ky)}});var Ja=S((I1,tf)=>{"use strict";var dr=b(),ef=I(),g1=Uu();tf.exports=$y;function $y(e){if(dr.isEmpty(e))throw new Error("invalid update parameters defined.");if(dr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(dr.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(dr.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&&dr.isEmptyOrZeroLength(o[r]))throw ef.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(!dr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ef.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`);!dr.isEmpty(o[r])&&o[r]!==""&&s.has(dr.autoCast(o[r]))&&(o.skip=!0),s.add(dr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a($y,"insertUpdateValidate")});var zn=S((b1,rf)=>{"use strict";var xy=T().OPERATIONS_ENUM,Za=class{constructor(t,r,s,n,i=void 0){this.operation=xy.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(Za,"InsertObject");rf.exports=Za});var za=S((C1,sf)=>{"use strict";var w1=zn(),Xa=T(),Du=b(),yu=I(),Yy=require("uuid"),{handleHDBError:jn,hdb_errors:Ky}=D(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:ti}=Ky;sf.exports=Wy;function Wy(e,t,r){for(let n=0;n<t.length;n++)Qy(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Jy(i,r,e.operation)}}a(Wy,"processRows");function Qy(e){if(Buffer.byteLength(String(e))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw jn(new Error,ei.ATTR_NAME_LENGTH_ERR(e),ti.BAD_REQUEST,void 0,void 0,!0);if(Du.isEmptyOrZeroLength(e)||Du.isEmpty(e.trim()))throw jn(new Error,ei.ATTR_NAME_NULLISH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Qy,"validateAttribute");function Jy(e,t,r){if(!e.hasOwnProperty(t)||Du.isEmptyOrZeroLength(e[t])){if(r===Xa.OPERATIONS_ENUM.INSERT||r===Xa.OPERATIONS_ENUM.UPSERT){e[t]=Yy.v4();return}throw yu.error("Update transaction aborted due to record with no hash value:",e),jn(new Error,ei.RECORD_MISSING_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Xa.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yu.error(e),jn(new Error,ei.HASH_VAL_LENGTH_ERR,ti.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yu.error(e),jn(new Error,ei.INVALID_FORWARD_SLASH_IN_HASH_ERR,ti.BAD_REQUEST,void 0,void 0,!0)}a(Jy,"validateHash")});var af=S((L1,nf)=>{"use strict";var ja=class{constructor(t,r){this.type=t,this.message=r}};a(ja,"IPCEventObject");nf.exports=ja});var os=S((U1,of)=>{"use strict";var Zy=I(),Mu=b(),Xy=T(),{IPC_ERRORS:ri}=rt();of.exports={sendIpcEvent:zy,validateEvent:jy,SchemaEventMsg:eD,UserEventMsg:tD};function zy(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):Zy.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(zy,"sendIpcEvent");function jy(e){if(typeof e!="object")return ri.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Mu.isEmpty(e.type))return ri.MISSING_TYPE;if(!e.hasOwnProperty("message")||Mu.isEmpty(e.message))return ri.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Mu.isEmpty(e.message.originator))return ri.MISSING_ORIGIN;if(Xy.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ri.INVALID_EVENT(e.type)}a(jy,"validateEvent");function eD(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(eD,"SchemaEventMsg");function tD(e){this.originator=e}a(tD,"UserEventMsg")});var Ws=S((D1,lf)=>{"use strict";var cf=T(),y1=b(),eo=I(),_f=af(),{sendIpcEvent:uf}=os();function rD(e){try{eo.trace("signalSchemaChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.SCHEMA,e);uf(t)}catch(t){eo.error(t)}}a(rD,"signalSchemaChange");function sD(e){try{eo.trace("signalUserChange called with message:",e);let t=new _f(cf.IPC_EVENT_TYPES.USER,e);uf(t)}catch(t){eo.error(t)}}a(sD,"signalUserChange");lf.exports={signalSchemaChange:rD,signalUserChange:sD}});var to=S((M1,df)=>{"use strict";var Ef=b(),nD=T(),iD=I(),aD=Qa(),oD=Wa(),cD=Ws(),{SchemaEventMsg:_D}=os(),uD="already exists in";df.exports=lD;async function lD(e,t,r){try{if(Ef.isEmptyOrZeroLength(r))return r;let s=[];Ef.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 ED(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(lD,"lmdbCheckForNewAttributes");async function ED(e,t,r,s){let n=new oD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await dD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(uD))iD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(ED,"createNewAttribute");async function dD(e){let t;try{return t=await aD(e),cD.signalSchemaChange(new _D(process.pid,nD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(dD,"createAttribute")});var Qs=S((P1,hf)=>{"use strict";var ro=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(ro,"LMDBTransactionObject");hf.exports=ro});var ff=S((B1,Sf)=>{"use strict";var hD=Qs(),SD=T().OPERATIONS_ENUM,so=class extends hD{constructor(t,r,s,n,i=void 0){super(SD.INSERT,r,s,n,i),this.records=t}};a(so,"LMDBInsertTransactionObject");Sf.exports=so});var mf=S((v1,Tf)=>{"use strict";var fD=Qs(),TD=T().OPERATIONS_ENUM,no=class extends fD{constructor(t,r,s,n,i,o=void 0){super(TD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(no,"LMDBUpdateTransactionObject");Tf.exports=no});var Af=S((H1,Rf)=>{"use strict";var mD=Qs(),RD=T().OPERATIONS_ENUM,io=class extends mD{constructor(t,r,s,n,i,o=void 0){super(RD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(io,"LMDBUpsertTransactionObject");Rf.exports=io});var pf=S((q1,Of)=>{"use strict";var AD=Qs(),OD=T().OPERATIONS_ENUM,ao=class extends AD{constructor(t,r,s,n,i=void 0){super(OD.DELETE,s,n,t,i),this.original_records=r}};a(ao,"LMDBDeleteTransactionObject");Of.exports=ao});var si=S((G1,bf)=>{"use strict";var pD=require("path"),Nf=z(),ND=ff(),gD=mf(),ID=Af(),bD=pf(),Js=Ye(),gf=b(),{CONFIG_PARAMS:wD}=T(),If=Y();If.initSync();var oo=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:CD}=te();bf.exports=LD;async function LD(e,t){if(If.get(wD.LOGGING_AUDITLOG)===!1)return;let r=pD.join(CD(),e.schema.toString()),s=await Nf.openEnvironment(r,e.table,!0),n=UD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Nf.initializeDBIs(s,Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Js.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),gf.isEmpty(n.user_name)||s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Js.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(LD,"writeTransaction");function UD(e,t){let r=gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===oo.INSERT)return new ND(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPDATE)return new gD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.UPSERT)return new ID(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===oo.DELETE)return new bD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UD,"createTransactionObject")});var Pu=S((V1,wf)=>{"use strict";var yD=Ja(),F1=zn(),Zs=T(),DD=za(),MD=Ys().insertRecords,PD=z(),BD=require("path"),vD=I(),HD=to(),{getBaseSchemaPath:qD}=te(),GD=si();wf.exports=FD;async function FD(e){try{let{schema_table:t,attributes:r}=yD(e);DD(e,r,t.hash_attribute),e.schema!==Zs.SYSTEM_SCHEMA_NAME&&(r.includes(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await HD(e.hdb_auth_header,t,r),n=BD.join(qD(),e.schema.toString()),i=await PD.openEnvironment(n,e.table),o=await MD(i,t.hash_attribute,r,e.records,e[Zs.CLUSTERING_FLAG]!==!0);try{await GD(e,o)}catch(c){vD.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(FD,"lmdbCreateRecords")});var Uf=S((k1,Lf)=>{"use strict";var Cf=T(),VD=Pu(),kD=zn(),$D=require("fs-extra"),xD=require("path"),{getBaseSchemaPath:YD}=te();Lf.exports=KD;async function KD(e){let t=[{name:e.schema,createddate:Date.now()}],r=new kD(Cf.SYSTEM_SCHEMA_NAME,Cf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VD(r),await $D.mkdirp(xD.join(YD(),e.schema.toString()))}a(KD,"lmdbCreateSchema")});var Df=S(($1,yf)=>{"use strict";var co=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(co,"DeleteRecordsResponseObject");yf.exports=co});var Hu=S((W1,Bf)=>{"use strict";var Mf=z(),Bu=ns(),vu=rt().LMDB_ERRORS_ENUM,WD=Ye(),Pf=I(),x1=b(),QD=require("lmdb"),JD=Df(),{OVERFLOW_MARKER:Y1,MAX_SEARCH_KEY_LENGTH:K1}=WD;async function ZD(e,t,r){if(Bu.validateEnv(e),t===void 0)throw new Error(vu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(vu.IDS_REQUIRED):new Error(vu.IDS_MUST_BE_ARRAY);try{let s=Mf.listDBIs(e);Mf.initializeDBIs(e,t,s);let n=new JD,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let h=e.dbis[t].get(i);if(!h){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,QD.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let C=s[R];if(!h.hasOwnProperty(C)||C===t)continue;let L=e.dbis[C],B=h[C];if(B!=null)try{let X=Bu.getIndexedValues(B);if(X)for(let V=0,Q=X.length;V<Q;V++)L.remove(X[V],i)}catch{Pf.warn(`cannot delete from attribute: ${C}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(h)}catch(h){Pf.warn(h),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Bu.getMicroTime(),n}catch(s){throw s}}a(ZD,"deleteRecords");Bf.exports={deleteRecords:ZD}});var ni=S((Q1,Hf)=>{"use strict";var Xs=b(),XD=Hu(),zD=z(),jD=require("path"),{getBaseSchemaPath:eM}=te(),tM=si(),rM=I();Hf.exports=sM;async function sM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Xs.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Xs.isEmptyOrZeroLength(e.hash_values)&&!Xs.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];Xs.isEmpty(_)||e.hash_values.push(_)}}if(Xs.isEmptyOrZeroLength(e.hash_values))return vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Xs.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=jD.join(eM(),e.schema.toString()),i=await zD.openEnvironment(n,e.table),o=await XD.deleteRecords(i,s,e.hash_values);try{t===!0&&await tM(e,o)}catch(c){rM.error(`unable to write transaction due to ${c.message}`)}return vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(sM,"lmdbDeleteRecords");function vf(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(vf,"createDeleteResponse")});var Gu=S((Z1,qf)=>{"use strict";var nM=T(),J1=ns();function qu(e,t){let r=Object.create(null);if(t.length===1&&nM.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(qu,"parseRow");function iM(e,t,r,s){let n=qu(r,e);s.push(n)}a(iM,"searchAll");function aM(e,t,r,s){let n=qu(r,e);s[t]=n}a(aM,"searchAllToMap");function oM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(oM,"iterateDBI");function cs(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(cs,"pushResults");function cM(e,t,r,s,n,i){t.toString().endsWith(e)&&cs(t,r,s,n,i)}a(cM,"endsWith");function _M(e,t,r,s,n,i){t.toString().includes(e)&&cs(t,r,s,n,i)}a(_M,"contains");function uM(e,t,r,s,n,i){t>e&&cs(t,r,s,n,i)}a(uM,"greaterThanCompare");function lM(e,t,r,s,n,i){t>=e&&cs(t,r,s,n,i)}a(lM,"greaterThanEqualCompare");function EM(e,t,r,s,n,i){t<e&&cs(t,r,s,n,i)}a(EM,"lessThanCompare");function dM(e,t,r,s,n,i){t<=e&&cs(t,r,s,n,i)}a(dM,"lessThanEqualCompare");qf.exports={parseRow:qu,searchAll:iM,searchAllToMap:aM,iterateDBI:oM,endsWith:cM,contains:_M,greaterThanCompare:uM,greaterThanEqualCompare:lM,lessThanCompare:EM,lessThanEqualCompare:dM,pushResults:cs}});var zs=S((j1,xf)=>{"use strict";var wt=z(),hM=I(),ht=ns(),Pr=Ye(),ce=rt().LMDB_ERRORS_ENUM,X1=b(),SM=T(),kt=Gu(),z1=require("lmdb"),{OVERFLOW_MARKER:Gf,MAX_SEARCH_KEY_LENGTH:fM}=Pr,ii={lazy:!0};function Ff(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Ff,"iterateFullIndex");function ai(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=Fu(e,t,r);E[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let h=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,C=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:h,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:C}))kt.pushResults(d(L,B),B,l,t,r);return l}a(ai,"iterateRangeBetween");function Fu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(Gf)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Pr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,ii)[r]}return n}}a(Fu,"getOverflowCheck");function TM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);_o(r),r=oi(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))kt.searchAll(r,_,u,o);return o}a(TM,"searchAll");function mM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return _o(r),r=oi(e,r),Ff(e,t,t,kt.searchAllToMap.bind(null,r),s,n,i)}a(mM,"searchAllToMap");function RM(e,t,r=!1,s=void 0,n=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Ff(e,void 0,t,kt.iterateDBI,r,s,n)}a(RM,"iterateDBI");function AM(e,t){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(AM,"countAll");function OM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=wt.openDBI(e,r);s=ht.convertKeyValueToWrite(s);let _=[[],[]];if(c[Pr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,ii);u!==void 0&&kt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))kt.pushResults(s,u,_,t,r);return _}a(OM,"equals");function pM(e,t,r){return Br(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(pM,"count");function NM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ht.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))kt.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))kt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(NM,"startsWith");function gM(e,t,r,s,n=!1,i=void 0,o=void 0){return Vf(e,t,r,s,n,i,o,!0)}a(gM,"endsWith");function Vf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){Br(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Pr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Fu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let h=d.toString();if(h.endsWith(Gf))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?h.endsWith(s):h.includes(s))if(u[Pr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,h){if(o>0){o--;return}i!==0&&(kt.pushResults(d,h,_,t,r),i--)}return a(E,"found_match"),_}a(Vf,"contains");function IM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!0,!1)}a(IM,"greaterThan");function bM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ai(e,t,r,s,_,n,i,o,!1,!1)}a(bM,"greaterThanEqual");function wM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!0)}a(wM,"lessThan");function CM(e,t,r,s,n=!1,i=void 0,o=void 0){Br(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ai(e,t,r,_,s,n,i,o,!1,!1)}a(CM,"lessThanEqual");function LM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ht.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ht.convertKeyValueToWrite(s),n=ht.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ai(e,t,r,s,n,i,o,c)}a(LM,"between");function UM(e,t,r,s){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),r=oi(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?ii:void 0);return i&&(n=kt.parseRow(i,r)),n}a(UM,"searchByHash");function yM(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,ii)===void 0&&(s=!1),s}a(yM,"checkHashExists");function DM(e,t,r,s,n=[]){$f(e,t,r,s,n);let i=kf(e,t,r,s,n);return Object.values(i)}a(DM,"batchSearchByHash");function MM(e,t,r,s,n=[]){return $f(e,t,r,s,n),kf(e,t,r,s,n)}a(MM,"batchSearchByHashToMap");function kf(e,t,r,s,n=[]){r=oi(e,r);let i=Object.create(null),o=r.length<3?ii:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=kt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw hM.warn(u),u}}return i}a(kf,"batchHashSearch");function $f(e,t,r,s,n){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(_o(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a($f,"initializeBatchSearchByHash");function _o(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(_o,"validateFetchAttributes");function Br(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>fM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(Br,"validateComparisonFunctions");function oi(e,t){return t.length===1&&SM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(oi,"setGetWholeRowAttributes");xf.exports={searchAll:TM,searchAllToMap:mM,count:pM,countAll:AM,equals:OM,startsWith:NM,endsWith:gM,contains:Vf,searchByHash:UM,setGetWholeRowAttributes:oi,batchSearchByHash:DM,batchSearchByHashToMap:MM,checkHashExists:yM,iterateDBI:RM,greaterThan:IM,greaterThanEqual:bM,lessThan:wM,lessThanEqual:CM,between:LM}});var ci=S((tJ,Qf)=>{var Yf=require("lodash"),Kf=Ee(),W=require("joi"),PM=b(),{hdb_schema_table:$t,checkValidTable:Wf}=Er(),{handleHDBError:BM,hdb_errors:vM}=D(),{HTTP_STATUS_CODES:HM}=vM,eJ=W.object({schema:$t,table:$t,hash_values:W.array().min(1).items(W.alternatives(W.string(),W.number())).required(),get_attributes:W.array().min(1).items($t).required()}),qM=W.object({schema:$t,table:$t,search_attribute:$t,search_value:W.any().required(),get_attributes:W.array().min(1).items($t).required(),desc:W.bool(),limit:W.number().integer().min(1),offset:W.number().integer().min(0)}),GM=W.object({schema:$t,table:$t,operator:W.string().valid("and","or").default("and").lowercase(),offset:W.number().integer().min(0),limit:W.number().integer().min(1),get_attributes:W.array().min(1).items($t).required(),conditions:W.array().min(1).items(W.object({search_attribute:$t,search_type:W.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:W.when("search_type",{switch:[{is:"equals",then:W.any()},{is:"between",then:W.array().items(W.alternatives([W.string(),W.number()])).length(2)}],otherwise:W.alternatives(W.string(),W.number())}).required()})).required()});Qf.exports=function(e,t){let r=null;switch(t){case"value":r=Kf.validateBySchema(e,qM);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Wf("schema",e.schema)),i(Wf("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=Kf.validateBySchema(e,GM);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=PM.checkGlobalSchemaTable(e.schema,e.table);if(n)return BM(new Error,n,HM.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=Yf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Yf.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var Vu=S((rJ,Jf)=>{"use strict";var FM=z(),VM=ci(),kM=require("path"),{getBaseSchemaPath:$M}=te();Jf.exports=xM;function xM(e){let t=VM(e,"hashes");if(t)throw t;let r=kM.join($M(),e.schema.toString());return FM.openEnvironment(r,e.table)}a(xM,"initialize")});var ku=S((sJ,Zf)=>{"use strict";var YM=zs(),KM=Vu();Zf.exports=WM;async function WM(e){try{let t=await KM(e),r=global.hdb_schema[e.schema][e.table];return YM.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(WM,"lmdbGetDataByHash")});var _s=S((nJ,Xf)=>{"use strict";var uo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(uo,"SearchByHashObject");Xf.exports=uo});var jf=S((aJ,zf)=>{"use strict";var iJ=_s(),QM=zs(),JM=Vu();zf.exports=ZM;async function ZM(e){try{let t=await JM(e),r=global.hdb_schema[e.schema][e.table];return QM.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(ZM,"lmdbSearchByHash")});var xt=S((oJ,eT)=>{"use strict";var lo=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(lo,"SearchObject");eT.exports=lo});var Eo=S((cJ,iT)=>{"use strict";var We=zs(),XM=z(),zM=require("path"),jM=b(),U=Ye(),us=T(),{getBaseSchemaPath:eP}=te(),tP=ss(),tT=rt().LMDB_ERRORS_ENUM,{compareKeys:js}=require("ordered-binary"),hr=us.SEARCH_WILDCARDS;async function rP(e,t,r){let s;e.schema===us.SYSTEM_SCHEMA_NAME?s=tP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=nT(e,s.hash_attribute,r,t);return rT(e,n,s.hash_attribute,r)}a(rP,"prepSearch");async function rT(e,t,r,s){let n=zM.join(eP(),e.schema.toString()),i=await XM.openEnvironment(n,e.table),o=sT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(iP(e,r)===!1)return s===!0?nP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(rT,"executeSearch");function sT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=We.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=We.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=We.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=We.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return We.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return We.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return We.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return We.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=We.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=We.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=We.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=We.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=We.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(sT,"searchByType");function sP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return js(i,s[0])>=0&&js(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>js(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>js(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>js(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>js(n[r],s)<=0;default:return Object.create(null)}}a(sP,"filterByType");function nP(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(nP,"createMapFromArrays");function iP(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(iP,"checkToFetchMore");function nT(e,t,r,s){if(jM.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),hr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(hr[0])<0&&n.indexOf(hr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(hr.indexOf(i)>=0&&hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(hr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(hr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(hr[0])||n.includes(hr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(tT.UNKNOWN_SEARCH_TYPE)}else switch(s){case us.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case us.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case us.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case us.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case us.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(tT.UNKNOWN_SEARCH_TYPE)}}a(nT,"createSearchTypeFromSearchObject");iT.exports={executeSearch:rT,createSearchTypeFromSearchObject:nT,prepSearch:rP,searchByType:sT,filterByType:sP}});var oT=S((uJ,aT)=>{"use strict";var _J=xt(),aP=ci(),oP=b(),cP=T(),_P=Eo();aT.exports=uP;async function uP(e,t){if(!oP.isEmpty(t)&&cP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aP(e,"value");if(s)throw s;let n=!0;try{return await _P.prepSearch(e,t,n)}catch(i){throw i}}a(uP,"lmdbGetDataByValue")});var en=S((EJ,cT)=>{"use strict";var lJ=xt(),lP=ci(),EP=b(),dP=T(),hP=Eo();cT.exports=SP;async function SP(e,t){if(!EP.isEmpty(t)&&dP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=lP(e,"value");if(s)throw s;let n=!1;try{return await hP.prepSearch(e,t,n)}catch(i){throw i}}a(SP,"lmdbSearchByValue")});var uT=S((hJ,_T)=>{"use strict";var dJ=Ye(),ho=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(ho,"SearchByConditionsObject");var So=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(So,"SearchCondition");var fo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(fo,"SortAttribute");_T.exports={SearchByConditionsObject:ho,SearchCondition:So,SortAttribute:fo}});var fT=S((fJ,ST)=>{"use strict";var SJ=uT().SearchByConditionsObject,fP=xt(),TP=ci(),$u=zs(),To=Ye(),hT=Eo(),mP=Gu(),lT=require("lodash"),{getBaseSchemaPath:RP}=te(),AP=require("path"),OP=z(),{handleHDBError:ET,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:NP}=pP,gP=1e8,IP={lazy:!0};ST.exports=bP;async function bP(e){try{let t=TP(e,"conditions");if(t)throw ET(t,t.message,NP.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=AP.join(RP(),e.schema.toString()),s=await OP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=lT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===To.SEARCH_TYPES.EQUALS?o.estimated_count=$u.count(s,o.search_attribute,o.search_value):c===To.SEARCH_TYPES.CONTAINS||c===To.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=gP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await dT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(hT.filterByType),u=_.length,l=[],E=$u.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,h=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,IP);for(let C=0;C<u;C++)if(!_[C](R))continue e;if(d>0){d--;continue}if(h<=0)break;h--,l.push(mP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await dT(s,e,_,n.hash_attribute);c.push(u)}if(o=lT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return $u.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw ET(t)}}a(bP,"lmdbSearchByConditions");async function dT(e,t,r,s){let n=new fP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===To.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,hT.searchByType(e,n,i,s)}a(dT,"executeConditionSearch")});var _i=S((TJ,TT)=>{"use strict";var wP=T().OPERATIONS_ENUM,mo=class{constructor(t,r,s,n=void 0){this.operation=wP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(mo,"DeleteObject");TT.exports=mo});var xu=S((mJ,mT)=>{"use strict";var Ro=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Ro,"DropAttributeObject");mT.exports=Ro});var Ku=S((AJ,RT)=>{"use strict";var CP=xt(),LP=_i(),RJ=xu(),zt=T(),UP=b(),Yu=z(),yP=ss(),DP=en(),MP=ni(),{getBaseSchemaPath:PP}=te(),BP=require("path");RT.exports=vP;async function vP(e,t=!0){let r;e.schema===zt.SYSTEM_SCHEMA_NAME?r=yP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await qP(e),n=BP.join(PP(),e.schema.toString()),i=await Yu.openEnvironment(n,e.table);return t===!0&&await HP(e,i,r.hash_attribute),Yu.dropDBI(i,e.attribute),s}a(vP,"lmdbDropAttribute");async function HP(e,t,r){let s=Yu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(HP,"removeAttributeFromAllObjects");async function qP(e){let t=new CP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await DP(t)).filter(o=>o[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(UP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new LP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return MP(i)}a(qP,"dropAttributeFromSystem")});var NT=S((OJ,pT)=>{"use strict";var GP=Ku(),FP=xu(),AT=b(),OT=I(),VP=rt().LMDB_ERRORS_ENUM;pT.exports=kP;async function kP(e){if(AT.isEmpty(global.hdb_schema[e.schema])||AT.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 FP(e.schema,e.table,r);try{await GP(n,!1)}catch(i){i.message!==VP.DBI_DOES_NOT_EXIST&&OT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw OT.error(`Error dropping attribute ${r}`),s}}a(kP,"lmdbDropAllAttributes")});var Wu=S((NJ,DT)=>{"use strict";var CT=xt(),LT=_i(),UT=en(),yT=ni(),pJ=NT(),it=T(),gT=b(),IT=z(),{getBaseSchemaPath:$P,getTransactionAuditStorePath:xP}=te(),bT=require("path"),wT=I();DT.exports=YP;async function YP(e){try{if(gT.isEmpty(global.hdb_schema[e.schema])||gT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await KP(e),await WP(e);let t=bT.join($P(),e.schema.toString());try{await IT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=bT.join(xP(),e.schema.toString());await IT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")wT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(YP,"lmdbDropTable");async function KP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await yT(n)}a(KP,"deleteAttributesFromSystem");async function WP(e){let t=new CT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,it.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await UT(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 LT(it.SYSTEM_SCHEMA_NAME,it.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await yT(n)}catch(i){throw i}}a(WP,"dropTableFromSystem")});var PT=S((IJ,MT)=>{"use strict";var QP=require("fs-extra"),JP=xt(),ZP=_s(),XP=_i(),zP=Wu(),jP=ni(),eB=ku(),tB=en(),Sr=T(),gJ=b(),rB=require("path"),{getBaseSchemaPath:sB}=te(),{handleHDBError:nB,hdb_errors:iB}=D(),{HDB_ERROR_MSGS:aB,HTTP_STATUS_CODES:oB}=iB;MT.exports=cB;async function cB(e){let t;try{t=await _B(e.schema);let r=new JP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await tB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await zP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new XP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await jP(n);let i=rB.join(sB(),t.toString());await QP.remove(i)}catch(r){throw r}}a(cB,"lmdbDropSchema");async function _B(e){let t=new ZP(Sr.SYSTEM_SCHEMA_NAME,Sr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Sr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await eB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw nB(new Error,aB.SCHEMA_NOT_FOUND(e),oB.NOT_FOUND,void 0,void 0,!0);return s}a(_B,"validateDropSchema")});var Qu=S((bJ,BT)=>{"use strict";var Ao=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(Ao,"CreateTableObject");BT.exports=Ao});var HT=S((CJ,vT)=>{"use strict";var uB=require("path"),lB=require("fs-extra"),Oo=z(),{getTransactionAuditStorePath:EB}=te(),Ju=Ye(),wJ=Qu();vT.exports=dB;async function dB(e){let t;try{let r=uB.join(EB(),e.schema.toString());await lB.mkdirp(r),t=await Oo.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{Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Oo.createDBI(t,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Oo.createDBI(t,Ju.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(dB,"createTransactionsAuditEnvironment")});var VT=S((LJ,FT)=>{"use strict";var Zu=T(),qT=z(),hB=Ys(),SB=require("path"),{getSystemSchemaPath:fB,getBaseSchemaPath:TB}=te(),mB=ss(),RB=Qa(),Xu=Wa(),AB=I(),OB=HT(),ju=mB.hdb_table,GT=[];for(let e=0;e<ju.attributes.length;e++)GT.push(ju.attributes[e].attribute);FT.exports=pB;async function pB(e,t){let r=SB.join(TB(),t.schema.toString()),s=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Xu(t.schema,t.table,Zu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Xu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qT.createEnvironment(r,t.table),e!==void 0){let o=await qT.openEnvironment(fB(),Zu.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hB.insertRecords(o,ju.hash_attribute,GT,[e]),await zu(s),await zu(n),await zu(i)}await OB(t)}catch(o){throw o}}a(pB,"lmdbCreateTable");async function zu(e){try{await RB(e)}catch(t){AB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(zu,"createAttribute")});var $T=S((UJ,kT)=>{"use strict";var NB=Ja(),gB=za(),IB=to(),tn=T(),bB=Ys().updateRecords,wB=z(),CB=require("path"),{getBaseSchemaPath:LB}=te(),UB=si(),yB=I();kT.exports=DB;async function DB(e){try{let{schema_table:t,attributes:r}=NB(e);gB(e,r,t.hash_attribute),e.schema!==tn.SYSTEM_SCHEMA_NAME&&(r.includes(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await IB(e.hdb_auth_header,t,r),n=CB.join(LB(),e.schema.toString()),i=await wB.openEnvironment(n,e.table),o=await bB(i,t.hash_attribute,r,e.records,e[tn.CLUSTERING_FLAG]!==!0);try{await UB(e,o)}catch(c){yB.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(DB,"lmdbUpdateRecords")});var YT=S((yJ,xT)=>{"use strict";var MB=T().OPERATIONS_ENUM,po=class{constructor(t,r,s,n=void 0){this.operation=MB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(po,"UpsertObject");xT.exports=po});var WT=S((MJ,KT)=>{"use strict";var DJ=YT(),PB=Ja(),BB=za(),vB=to(),rn=T(),HB=Ys().upsertRecords,qB=z(),GB=require("path"),{getBaseSchemaPath:FB}=te(),VB=si(),kB=I(),{handleHDBError:$B,hdb_errors:xB}=D();KT.exports=YB;async function YB(e){let t;try{t=PB(e)}catch(_){throw $B(_,_.message,xB.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;BB(e,s,r.hash_attribute),e.schema!==rn.SYSTEM_SCHEMA_NAME&&(s.includes(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(rn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vB(e.hdb_auth_header,r,s),i=GB.join(FB(),e.schema.toString()),o=await qB.openEnvironment(i,e.table),c=await HB(o,r.hash_attribute,s,e.records,e[rn.CLUSTERING_FLAG]!==!0);try{await VB(e,c)}catch(_){kB.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(YB,"lmdbUpsertRecords")});var jT=S((PJ,zT)=>{"use strict";var KB=xt(),QT=b(),JT=I(),WB=en(),ZT=T(),QB=Hu().deleteRecords,JB=z(),ZB=require("path"),{getBaseSchemaPath:XB}=te(),{promisify:zB}=require("util"),jB=zB(setTimeout),XT=1e4,ev=10;zT.exports=tv;async function tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(QT.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 KB(e.schema,e.table,ZT.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await WB(n,ZT.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw JT.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return QT.isEmptyOrZeroLength(s)?(JT.trace("No records found to delete"),{message:"No records found to delete"}):await rv(e,s,t)}a(tv,"lmdbDeleteRecordsBefore");async function rv(e,t,r){let s=ZB.join(XB(),e.schema.toString()),n=await JB.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=XT){let _=t.slice(o,o+XT),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await QB(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await jB(ev)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(rv,"chunkDeletes")});var tm=S((BJ,em)=>{"use strict";var No=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(No,"DeleteBeforeObject");em.exports=No});var sm=S((vJ,rm)=>{"use strict";var go=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(go,"DeleteAuditLogsBeforeResults");rm.exports=go});var am=S((qJ,im)=>{"use strict";var el=z(),{getTransactionAuditStorePath:sv}=te(),HJ=tm(),nv=require("path"),ui=Ye(),iv=b(),nm=sm(),av=require("util").promisify,ov=av(setTimeout),cv=1e4,_v=100;im.exports=uv;async function uv(e){let t=nv.join(sv(),e.schema),r=await el.openEnvironment(t,e.table,!0),s=el.listDBIs(r);el.initializeDBIs(r,ui.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new nm;do n=await lv(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 ov(_v);while(n.transactions_deleted>0);return i}a(uv,"deleteAuditLogsBefore");async function lv(e,t){let r=new nm;try{let s=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];iv.isEmpty(c)||(n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[ui.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cv)break}return await n,r}catch(s){throw s}}a(lv,"deleteTransactions")});var dm=S((GJ,Em)=>{"use strict";var tl=z(),sn=Ye(),om=ns(),rl=T(),cm=b(),{getTransactionAuditStorePath:Ev}=te(),dv=require("path"),hv=zs(),Io=Qs(),Sv=I();Em.exports=fv;async function fv(e){let t=dv.join(Ev(),e.schema),r=await tl.openEnvironment(t,e.table,!0),s=tl.listDBIs(r);tl.initializeDBIs(r,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _m(r,e.search_values);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,mv(r,e.search_values,n);case rl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Tv(r,e.search_values);default:return _m(r)}}a(fv,"readAuditLog");function _m(e,t=[0,om.getMicroTime()]){cm.isEmpty(t[0])&&(t[0]=0),cm.isEmpty(t[1])&&(t[1]=om.getMicroTime());let r=[];try{let s=e.dbis[sn.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 Io,i);r.push(o)}return r}catch(s){throw s}}a(_m,"searchTransactionsByTimestamp");function Tv(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[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,lm(e,i))}return Object.fromEntries(r)}a(Tv,"searchTransactionsByUsername");function mv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=hv.equals(e,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let h=l[0][E],m=Number(h);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=lm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);um(_,"records",r,l,o),um(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(mv,"searchTransactionsByHashValues");function um(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new Io(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Io(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(um,"loopRecords");function lm(e,t){let r=[];try{let s=e.dbis[sn.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 Io,i);r.push(o)}}catch(i){Sv.warn(i)}return r}catch(s){throw s}}a(lm,"batchSearchTransactions")});var Sm=S((FJ,hm)=>{"use strict";var Rv=require("path"),{getBaseSchemaPath:Av}=te(),Ov=z();hm.exports={writeTransaction:pv};async function pv(e,t,r){let s=Rv.join(Av(),e);return(await Ov.openEnvironment(s,t)).transaction(r)}a(pv,"writeTransaction")});var Tm=S((VJ,fm)=>{"use strict";var Nv=require("path"),{getBaseSchemaPath:gv}=te(),Iv=z();fm.exports={flush:bv};async function bv(e,t){let r=Nv.join(gv(),e.toString());return(await Iv.openEnvironment(r,t.toString())).flushed}a(bv,"flush")});var Rm=S((kJ,mm)=>{"use strict";var Re=I(),{handleHDBError:wv}=D(),Cv=au(),Lv=Qa(),Uv=Pu(),yv=Uf(),Dv=ni(),Mv=ku(),Pv=jf(),Bv=oT(),vv=en(),Hv=fT(),qv=PT(),Gv=VT(),Fv=$T(),Vv=WT(),kv=jT(),$v=am(),xv=Wu(),Yv=Ku(),Kv=dm(),Wv=Sm(),Qv=Tm(),bo=class extends Cv{async searchByConditions(t){try{return Hv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Mv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Pv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Bv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await vv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await yv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await qv(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await Gv(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await xv(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Lv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Uv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await Fv(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await Vv(t)}catch(r){throw wv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Dv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await kv(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await $v(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return Wv.writeTransaction(t,r,s)}flush(t,r){return Qv.flush(t,r)}};a(bo,"LMDBBridge");mm.exports=bo});var fr=S(($J,Om)=>{"use strict";var Jv=Rm(),Zv=au(),Xv=Y();Xv.initSync();var Am;function zv(){return Am instanceof Zv?Am:new Jv}a(zv,"getBridge");Om.exports=zv()});var Im=S((xJ,gm)=>{"use strict";var pm=require("lodash"),li=require("mathjs"),jv=require("jsonata"),Nm=b();gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?pm.uniqWith(e,pm.isEqual):e,searchJSON:eH,mad:Ei.bind(null,li.mad),mean:Ei.bind(null,li.mean),mode:Ei.bind(null,li.mode),prod:Ei.bind(null,li.prod),median:Ei.bind(null,li.median)};function Ei(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(Ei,"aggregateFunction");function eH(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(Nm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Nm.isEmpty(this.__ala__.res[r])){let s=jv(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(eH,"searchJSON")});var wm=S((YJ,bm)=>{"use strict";var de=require("moment"),sl="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;bm.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(sl),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(sl),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(sl)}});var ym=S((KJ,Um)=>{"use strict";var tH=require("@turf/area"),rH=require("@turf/length"),sH=require("@turf/circle"),nH=require("@turf/difference"),iH=require("@turf/distance"),aH=require("@turf/boolean-contains"),oH=require("@turf/boolean-equal"),cH=require("@turf/boolean-disjoint"),_H=require("@turf/helpers"),Cm=T(),k=b();Um.exports={geoArea:uH,geoLength:lH,geoCircle:EH,geoDifference:dH,geoDistance:Lm,geoNear:hH,geoContains:SH,geoEqual:fH,geoCrosses:TH,geoConvert:mH};var nl="geo1 is required",il="geo2 is required";function uH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),tH.default(e)}a(uH,"geoArea");function lH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),rH.default(e,{units:t||"kilometers"})}a(lH,"geoLength");function EH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),sH.default(e,t,{units:r||"kilometers"})}a(EH,"geoCircle");function dH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),nH(e,t)}a(dH,"geoDifference");function Lm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),iH.default(e,t,{units:r||"kilometers"})}a(Lm,"geoDistance");function hH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Lm(e,t,s)<=r}a(hH,"geoNear");function SH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),aH.default(e,t)}a(SH,"geoContains");function fH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),oH.default(e,t)}a(fH,"geoEqual");function TH(e,t){if(k.isEmpty(e))throw new Error(nl);if(k.isEmpty(e))throw new Error(il);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!cH.default(e,t)}a(TH,"geoCrosses");function mH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Cm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Cm.GEO_CONVERSION_ENUM).join(",")}`);return _H[t](e,r)}a(mH,"geoConvert")});var wo=S((WJ,Dm)=>{var ls=Im(),St=wm(),jt=ym();Dm.exports=e=>{e.aggr.mad=e.aggr.MAD=ls.mad,e.aggr.mean=e.aggr.MEAN=ls.mean,e.aggr.mode=e.aggr.MODE=ls.mode,e.aggr.prod=e.aggr.PROD=ls.prod,e.aggr.median=e.aggr.MEDIAN=ls.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ls.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ls.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=St.current_date,e.fn.current_time=e.fn.CURRENT_TIME=St.current_time,e.fn.extract=e.fn.EXTRACT=St.extract,e.fn.date=e.fn.DATE=St.date,e.fn.date_format=e.fn.DATE_FORMAT=St.date_format,e.fn.date_add=e.fn.DATE_ADD=St.date_add,e.fn.date_sub=e.fn.DATE_SUB=St.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=St.date_diff,e.fn.now=e.fn.NOW=St.now,e.fn.offset_utc=e.fn.OFFSET_UTC=St.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=St.get_server_time,e.fn.getdate=e.fn.GETDATE=St.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=St.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=jt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=jt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=jt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=jt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=jt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=jt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=jt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=jt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=jt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=jt.geoNear}});var Bm=S((QJ,Pm)=>{"use strict";var di=require("lodash"),Me=require("alasql");Me.options.cache=!1;var RH=wo(),Mm=require("clone"),Co=require("recursive-iterator"),v=I(),q=b(),nn=fr(),AH=T(),{hdb_errors:OH}=D(),pH="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";RH(Me);var Lo=class{constructor(t,r){if(q.isEmpty(t))throw v.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(),q.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!q.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(hi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(hi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(hi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(hi)}}_getColumns(){let t=new Co(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(Mm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=di.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(q.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Co(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!q.isEmpty(r)&&r.right)if(q.isNotEmptyAndHasValue(r.right.value)){let s=q.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!q.isEmpty(s)&&q.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=q.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&q.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Co(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(!q.isEmpty(AH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(q.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(q.isEmptyOrZeroLength(r.left.columnid)||q.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(q.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!q.isEmpty(r.right.value)||!q.isEmpty(r.left.value)?s.add(q.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from)&&q.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&&di.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(q.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);q.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(q.isEmptyOrZeroLength(this.all_table_attributes)&&!q.isEmptyOrZeroLength(this.columns.columns))return t;if(q.isEmptyOrZeroLength(this.all_table_attributes)&&q.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.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(Mm(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(q.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(pH)>-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=di.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!q.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await nn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await nn.getDataByValue(E);for(let h in d)this.data[i].__merged_data[h]?this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]):(this.data[i].__merged_data[h]=[...s[i]],this._updateMergedAttribute(i,h,n.attribute,d[h][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(h)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!q.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!q.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let h=l[E];c.search_attribute=h.attribute,c.search_value=h.search_value;let m=await nn.getDataByValue(c,h.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await nn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,q.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_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 Me.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 Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.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 Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(h.table);let m=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(m+=" ON "+h.on.toString()),i.push(m),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(h=>{let m=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hash_name,R=h.as?h.as_orig:h.tableid_orig;o.push({key:`'${R}.${m}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${m}\` AS "${R}.${m}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(h,n);d=await Me.promise(m,t),t=null}catch(h){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(h),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let h=0,m=d.length;h<m;h++){let R=d[h];o.forEach(C=>{R[C.key]!==null&&R[C.key]!==void 0&&C.keys.add(R[C.key])})}o.forEach(h=>{let m=Object.keys(this.data[`${h.schema}_${h.table}`].__merged_data),R=di.difference(m,[...h.keys].map(C=>C.toString()));for(let C=0,L=R.length;C<L;C++){let B=R[C];delete this.data[`${h.schema}_${h.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Co(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=di.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){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.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 l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await nn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],h=_[d];for(let m=0;m<u;m++){let R=n.columns[m],C=h[R]===void 0?null:h[R];this.data[s].__merged_data[d].push(C)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.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 v.error(OH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await nn.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(Lo,"SQLSearch");Pm.exports=Lo});var ft=S((JJ,Hm)=>{"use strict";var NH=Jh();Hm.exports={searchByConditions:wH,searchByHash:CH,searchByValue:LH,search:UH};var al=fr(),vm=require("util"),gH=vm.callbackify(al.searchByHash),IH=vm.callbackify(al.searchByValue),bH=Bm();async function wH(e){return al.searchByConditions(e)}a(wH,"searchByConditions");function CH(e,t){try{gH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(CH,"searchByHash");function LH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),IH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(LH,"searchByValue");function UH(e,t){try{let r=new NH(e);r.validate(),new bH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(UH,"search")});var vr=S((ZJ,Vm)=>{"use strict";var Si=require("crypto"),Gm="aes-256-cbc",yH=32,DH=16,ol=64,Fm=32,MH=ol+Fm,qm=new Map;Vm.exports={encrypt:PH,decrypt:BH,createNatsTableStreamName:vH};function PH(e){let t=Si.randomBytes(yH),r=Si.randomBytes(DH),s=Si.createCipheriv(Gm,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(PH,"encrypt");function BH(e){let t=e.substr(0,ol),r=e.substr(ol,Fm),s=e.substr(MH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Si.createDecipheriv(Gm,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(BH,"decrypt");function vH(e,t){let r=`${e}.${t}`,s=qm.get(r);return s||(s=Si.createHash("md5").update(`${e}.${t}`).digest("hex"),qm.set(r,s)),s}a(vH,"createNatsTableStreamName")});var on=S((XJ,Qm)=>{"use strict";var $m=ft(),Hr=I(),xm=xa(),HH=require("lodash"),qH=require("path"),GH=vr(),cl=b(),{promisify:Ym}=require("util"),j=T(),{handleHDBError:Uo,hdb_errors:FH}=D(),{HDB_ERROR_MSGS:yo,HTTP_STATUS_CODES:Km}=FH,VH=Y();VH.initSync();var km=z(),kH=te(),fi=Ym($m.searchByValue),$H=Ym($m.searchByHash),an="name",Wm="hash_attribute",_l="schema",xH="schema_table",YH="attribute";Qm.exports={describeAll:KH,describeTable:Do,describeSchema:QH};async function KH(e){try{let t=cl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:an,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[an]},i=await fi(n);if(cl.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},u=await fi(_),l=[];for(let d of u)try{let h;if(t||s)h=await Do({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;h=await Do({schema:d.schema,table:d.name},m)}h&&l.push(h)}catch(h){Hr.error(h)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Hr.error("Got an error in describeAll"),Hr.error(t),Uo(new Error,yo.DESCRIBE_ALL_ERR)}}a(KH,"describeAll");async function Do(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=xm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:an,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await fi(c);if(!_||_.length===0)throw Uo(new Error,yo.TABLE_NOT_FOUND(e.schema,e.table),Km.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Uo(new Error,yo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:xH,search_value:r+"."+s,get_attributes:[YH]},E=await fi(l);E=HH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=WH(n)),i.attributes=E,i.clustering_stream_name=GH.createNatsTableStreamName(u.schema,u.name);try{let d=qH.join(kH.getBaseSchemaPath(),i.schema.toString()),h=await km.openEnvironment(d,i.name),m=km.statDBI(h,i.hash_attribute);i.record_count=m.entryCount}catch(d){Hr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Hr.error(`There was an error getting attributes for table '${u.name}'`),Hr.error(l)}return i}a(Do,"descTable");function WH(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(WH,"getAttrsByPerms");async function QH(e){let t=xm.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:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_l,search_value:s,hash_values:[],get_attributes:[Wm,j.ID_ATTRIBUTE_STRING,an,_l]},i=await fi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[an]},c=await $H(o);if(c&&c.length<1)throw Uo(new Error,yo.SCHEMA_NOT_FOUND(e.schema),Km.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),cl.isEmpty(_)||_.describe){let u=await Do({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Hr.error(`Error describing schema table '${e.schema}.${c}'`),Hr.error(_)}})),o}}a(QH,"describeSchema")});var Es=S((eZ,jm)=>{var zJ=require("async"),cn=ss(),jJ=I(),{callbackify:Xm,promisify:JH}=require("util");jm.exports={setSchemaDataToGlobal:Jm,getTableSchema:zH,getSystemSchema:eq,setSchemaDataToGlobalAsync:JH(Jm)};var zm=on(),ZH=Xm(zm.describeAll),XH=Xm(zm.describeTable);function Jm(e){ZH(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=cn),global.hdb_schema=r,e(null,null)})}a(Jm,"setSchemaDataToGlobal");function Zm(e,t){return e==="system"?cn[t]:global.hdb_schema[e][t]}a(Zm,"returnSchema");function zH(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?jH(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,Zm(e,t))}):r(null,Zm(e,t))}a(zH,"getTableSchema");function jH(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=cn:global.hdb_schema={system:cn},r();return}XH(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:cn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(jH,"setTableDataToGlobal");function eq(){return cn}a(eq,"getSystemSchema")});var he=S((rZ,tR)=>{"use strict";var{platform:tZ}=require("os"),tq="nats-server.zip",ul="nats-server",rq=process.platform==="win32"?`${ul}.exe`:ul,ll="HDB",sq=/^[^\s.,*>]+$/,eR="__request__",nq=a(e=>`${e}.${eR}`,"REQUEST_SUBJECT"),iq={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},aq={HUB:"hub.pid",LEAF:"leaf.pid"},oq={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},cq={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:ll,deliver_subject:"__HDB__.WORKQUEUE"},_q={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:ll,deliver_subject:"HDB.SCHEMAQUEUE"},uq={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:ll,deliver_subject:"HDB.USERQUEUE"},lq={SUCCESS:"success",ERROR:"error"},Eq={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},dq={TXN:"txn",MSGID:"msgid"};tR.exports={NATS_SERVER_ZIP:tq,NATS_SERVER_NAME:ul,NATS_BINARY_NAME:rq,PID_FILES:aq,NATS_CONFIG_FILES:iq,SERVER_SUFFIX:oq,WORK_QUEUE_CONSUMER_NAMES:cq,SCHEMA_QUEUE_CONSUMER_NAMES:_q,USER_QUEUE_CONSUMER_NAMES:uq,NATS_TERM_CONSTRAINTS_RX:sq,REQUEST_SUFFIX:eR,UPDATE_REMOTE_RESPONSE_STATUSES:lq,CLUSTER_STATUS_STATUSES:Eq,REQUEST_SUBJECT:nq,SUBJECT_PREFIXES:dq}});var sR=S((sZ,rR)=>{"use strict";var hq=he(),Mo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,h){this.port=t,o===null&&(o=void 0),this.server_name=r+hq.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:h}},this.system_account="SYS"}};a(Mo,"HubConfigObject");rR.exports=Mo});var aR=S((nZ,iR)=>{"use strict";var nR=he(),Po=class{constructor(t,r,s,n,i,o,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+nR.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+nR.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(Po,"LeafConfigObject");iR.exports=Po});var cR=S((iZ,oR)=>{"use strict";var Bo=class{constructor(t,r){this.user=t,this.password=r}};a(Bo,"HdbUserObject");oR.exports=Bo});var uR=S((aZ,_R)=>{"use strict";var Sq=he(),vo=class{constructor(t,r){this.user=t+Sq.SERVER_SUFFIX.ADMIN,this.password=r}};a(vo,"SysUserObject");_R.exports=vo});var Lt=S((oZ,dR)=>{"use strict";var qo=Uu(),Ct=b(),fq=require("util"),Go=fr(),Tq=Es(),El=I(),{handleHDBError:qr,hdb_errors:mq}=D(),{HTTP_STATUS_CODES:ds}=mq,Rq=fq.promisify(Tq.getTableSchema),Aq="updated",lR="inserted",ER="upserted";dR.exports={insert:pq,update:Nq,upsert:gq,validation:Oq,flush:Iq};async function Oq(e){if(Ct.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ct.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ct.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Rq(e.schema,e.table),r=qo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Ct.isEmptyOrZeroLength(c[s]))throw El.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Ct.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw El.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ct.isEmpty(c[s])&&c[s]!==""&&n.has(Ct.autoCast(c[s]))&&(c.skip=!0),n.add(Ct.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Oq,"validation");async function pq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.createRecords(e);return Ho(lR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(pq,"insertData");async function Nq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.updateRecords(e);return Ct.isEmpty(s.existing_rows)?Ho(Aq,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ho(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Nq,"updateData");async function gq(e){if(e.operation!=="upsert")throw qr(new Error,"invalid operation, must be upsert",ds.INTERNAL_SERVER_ERROR);let t=qo(e);if(t)throw qr(new Error,t.message,ds.BAD_REQUEST);let r=Ct.checkSchemaTableExist(e.schema,e.table);if(r)throw qr(new Error,r,ds.BAD_REQUEST);try{let s=await Go.upsertRecords(e);return Ho(ER,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw qr(s,null,null,El.ERR,n)}}a(gq,"upsertData");function Ho(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===lR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===ER?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ho,"returnObject");function Iq(e){return Go.flush(e.schema,e.table)}a(Iq,"flush")});var hl=S((cZ,fR)=>{var bq=Ee(),dl=require("joi"),{hdb_schema_table:hR}=Er(),SR={schema:hR,table:hR},wq={date:dl.date().iso().required()},Cq={timestamp:dl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};fR.exports=function(e,t){let r=t==="timestamp"?{...SR,...Cq}:{...SR,...wq},s=dl.object(r);return bq.validateBySchema(e,s)}});var AR=S((_Z,RR)=>{var Lq=Ee(),TR=require("joi"),{hdb_schema_table:mR}=Er(),Uq=TR.object({schema:mR,table:mR,hash_values:TR.array().required()});RR.exports=function(e){return Lq.validateBySchema(e,Uq)}});var pR=S((uZ,OR)=>{"use strict";var Fo=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(Fo,"InsertObject");var Vo=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(Vo,"NoSQLSeachObject");var ko=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(ko,"DeleteResponseObject");OR.exports={InsertObject:Fo,NoSQLSeachObject:Vo,DeleteResponseObject:ko}});var Ss=S((lZ,wR)=>{"use strict";var gR=hl(),yq=AR(),$o=b(),NR=require("moment"),IR=I(),{promisify:Dq,callbackify:Mq}=require("util"),hs=T(),Pq=Es(),Sl=Dq(Pq.getTableSchema),fl=fr(),{DeleteResponseObject:Bq}=pR(),{handleHDBError:Gr,hdb_errors:vq}=D(),{HDB_ERROR_MSGS:xo,HTTP_STATUS_CODES:Fr}=vq,Hq="records successfully deleted",qq=Mq(bR);wR.exports={delete:qq,deleteRecord:bR,deleteFilesBefore:Gq,deleteAuditLogsBefore:Fq};async function Gq(e){let t=gR(e,"date");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(!NR(e.date,NR.ISO_8601).isValid())throw Gr(new Error,xo.INVALID_DATE,Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_DATE,!0);let s=$o.checkSchemaTableExist(e.schema,e.table);if(s)throw Gr(new Error,s,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,s,!0);try{let n=await fl.deleteRecordsBefore(e);if(await Sl(e.schema,e.table),IR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Gq,"deleteFilesBefore");async function Fq(e){let t=gR(e,"timestamp");if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Gr(new Error,xo.INVALID_VALUE("Timestamp"),Fr.BAD_REQUEST,hs.LOG_LEVELS.ERROR,xo.INVALID_VALUE("Timestamp"),!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{let s=await fl.deleteAuditLogsBefore(e);return await Sl(e.schema,e.table),IR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Fq,"deleteAuditLogsBefore");async function bR(e){let t=yq(e);if(t)throw Gr(t,t.message,Fr.BAD_REQUEST,void 0,void 0,!0);let r=$o.checkSchemaTableExist(e.schema,e.table);if(r)throw Gr(new Error,r,Fr.NOT_FOUND,hs.LOG_LEVELS.ERROR,r,!0);try{await Sl(e.schema,e.table);let s=await fl.deleteRecords(e);return $o.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Hq}`),s}catch(s){if(s.message===hs.SEARCH_NOT_FOUND_MESSAGE){let n=new Bq;return n.message=hs.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(bR,"deleteRecord")});var Yo=S((EZ,UR)=>{var Vq=require("crypto"),CR=9;function kq(e){let t=xq(CR),r=LR(e+t);return t+r}a(kq,"createHash");function $q(e,t){let r=e.substr(0,CR),s=r+LR(t+r);return e===s}a($q,"validateHash");function xq(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(xq,"generateSalt");function LR(e){return Vq.createHash("md5").update(e).digest("hex")}a(LR,"md5");UR.exports={hash:kq,validate:$q}});var DR=S((dZ,yR)=>{var Tl=Ee(),Qe={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 Yq(e){return Qe.password.presence=!0,Qe.username.presence=!0,Qe.role.presence=!0,Qe.active.presence=!0,Tl.validateObject(e,Qe)}a(Yq,"addUserValidation");function Kq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Kq,"alterUserValidation");function Wq(e){return Qe.password.presence=!1,Qe.username.presence=!0,Qe.role.presence=!1,Qe.active.presence=!1,Tl.validateObject(e,Qe)}a(Wq,"dropUserValidation");yR.exports={addUserValidation:Yq,alterUserValidation:Kq,dropUserValidation:Wq}});var PR=S((hZ,MR)=>{"use strict";var Vr=T(),Ti=class{constructor(t=0,r=Vr.STORAGE_TYPES_ENUM.LMDB,s=Vr.LICENSE_VALUES.API_CALL_DEFAULT,n=Vr.RAM_ALLOCATION_ENUM.DEFAULT,i=Vr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ti,"BaseLicense");var Ko=class extends Ti{constructor(t=0,r=Vr.STORAGE_TYPES_ENUM.LMDB,s=Vr.LICENSE_VALUES.API_CALL_DEFAULT,n=Vr.RAM_ALLOCATION_ENUM.DEFAULT,i=Vr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Ko,"ExtendedLicense");MR.exports={BaseLicense:Ti,ExtendedLicense:Ko}});var mi=S((SZ,FR)=>{"use strict";var un=require("fs-extra"),BR=Yo(),vR=require("crypto"),Qq=require("moment"),Jq=require("uuid").v4,Je=I(),Rl=require("path"),Zq=b(),Tt=T(),Xq=PR().ExtendedLicense,_n="invalid license key format",zq="061183",jq="mofi25",eG="aes-256-cbc",tG=16,rG=32,HR=Y();HR.initSync();var ml;FR.exports={validateLicense:qR,generateFingerPrint:nG,licenseSearch:GR,getLicense:oG};function Al(){return Rl.join(HR.getHdbBasePath(),Tt.LICENSE_KEY_DIR_NAME,Tt.LICENSE_FILE_NAME)}a(Al,"getLicenseDirPath");function sG(){let e=Al();return Rl.join(e,Tt.LICENSE_FILE_NAME)}a(sG,"getLicenseFilePath");function Ol(){let e=Al();return Rl.join(e,Tt.REG_KEY_FILE_NAME)}a(Ol,"getFingerPrintFilePath");async function nG(){let e=Ol();try{return await un.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await iG();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(nG,"generateFingerPrint");async function iG(){let e=Jq(),t=BR.hash(e),r=Ol();try{await un.mkdirp(Al()),await un.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(iG,"writeFingerprint");function qR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Tt.STORAGE_TYPES_ENUM.LMDB,api_call:Tt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Tt.RAM_ALLOCATION_ENUM.DEFAULT,version:Tt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=Ol(),n=!1;try{n=un.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=un.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(jq),c=o[1];c=Buffer.concat([Buffer.from(c)],tG);let _=Buffer.concat([Buffer.from(i)],rG),u=vR.createDecipheriv(eG,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let h=aG(o[0],i);if(h)l=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(_n),Je.error(_n),new Error(_n)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(_n),Je.error(_n),new Error(_n)}else r.exp_date=l;r.exp_date<Qq().valueOf()&&(r.valid_date=!1),BR.validate(o[1],`${zq}${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||Je.error("Invalid licence"),r}a(qR,"validateLicense");function aG(e,t){try{let r=vR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(aG,"checkOldLicense");function GR(){let e=new Xq;e.api_call=0;let t=[];try{t=un.readFileSync(sG(),"utf-8").split(Tt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Zq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qR(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){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Tt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Tt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Tt.LICENSE_VALUES.API_CALL_DEFAULT),ml=e,e}a(GR,"licenseSearch");async function oG(){return ml||await GR(),ml}a(oG,"getLicense")});var kr=S((fZ,eA)=>{"use strict";var xR="username is required",YR="nothing to update, must supply active, role or password to update",KR="password cannot be an empty string",WR="If role is specified, it cannot be empty.",QR="active must be true or false";eA.exports={addUser:SG,alterUser:fG,dropUser:mG,userInfo:RG,listUsers:Qo,listUsersExternal:AG,setUsersToGlobal:Ri,findAndValidateUser:NG,getClusterUser:gG,USERNAME_REQUIRED:xR,ALTERUSER_NOTHING_TO_UPDATE:YR,EMPTY_PASSWORD:KR,EMPTY_ROLE:WR,ACTIVE_BOOLEAN:QR};var JR=Lt(),cG=Ss(),Nl=Yo(),ZR=DR(),XR=ft(),gl=Ws(),be=b(),zR=require("validate.js"),H=I(),{promisify:Il}=require("util"),bl=vr(),fs=T(),VR=he(),_G=ur(),wl=Y(),uG=mi(),lG=ss(),{handleHDBError:er,hdb_errors:EG}=D(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:pl,HDB_ERROR_MSGS:ln}=EG,{UserEventMsg:Cl}=os(),kR=require("lodash"),jR={username:!0,active:!0,role:!0,password:!0},$R=new Map,Wo=Il(XR.searchByValue),dG=Il(XR.searchByHash),hG=Il(cG.delete);async function SG(e){let t=zR.cleanAttributes(e,jR),r=ZR.addUserValidation(t);if(r)throw er(new Error,r.message,tr.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 Wo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw er(new Error,ln.ROLE_NAME_NOT_FOUND(t.role),tr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw er(new Error,ln.DUP_ROLES_FOUND(t.role),tr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await JR.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Ri()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw er(new Error,ln.USER_ALREADY_EXISTS(t.username),tr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ADD_USER,_,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${c.username} successfully added`}a(SG,"addUser");async function fG(e){let t=zR.cleanAttributes(e,jR);if(be.isEmptyOrZeroLength(t.username))throw new Error(xR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(YR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(KR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(QR);let r=TG(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bl.encrypt(t.password)),t.password=Nl.hash(t.password)),t.role==="")throw new Error(WR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Wo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=ln.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),er(new Error,_,tr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=ln.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),er(new Error,_,tr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await JR.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Ri()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.ALTER_USER,i,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),n}a(fG,"alterUser");function TG(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(TG,"isClusterUser");async function mG(e){try{let t=ZR.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(be.isEmpty(global.hdb_users.get(e.username)))throw er(new Error,ln.USER_NOT_EXIST(e.username),tr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await hG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Ri()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,be.sendTransactionToSocketCluster(fs.INTERNAL_SC_CHANNELS.DROP_USER,n,wl.get(fs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),gl.signalUserChange(new Cl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(mG,"dropUser");async function RG(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 dG(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(RG,"userInfo");async function AG(){let e;try{e=await Qo()}catch(t){throw H.error("Got an error listing users."),H.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(AG,"listUsersExternal");async function Qo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=kR.cloneDeep(await Wo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!be.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=kR.cloneDeep(await Wo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],OG(c.role),i.set(c.username,c)}return(await uG.getLicense()).enterprise?i:pG(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Qo,"listUsers");function OG(e){try{if(!e){H.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(lG)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(OG,"appendSystemTablesToRole");function pG(e){try{if(H.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?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(pG,"nonEnterpriseFilter");async function Ri(){try{let e=await Qo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Ri,"setUsersToGlobal");async function NG(e,t,r=!0){global.hdb_users||await Ri();let s=global.hdb_users.get(e);if(!s)throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw er(new Error,pl.USER_INACTIVE,tr.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($R.get(t)===s.password)return n;if(Nl.validate(s.password,t))$R.set(t,s.password);else throw er(new Error,pl.GENERIC_AUTH_FAIL,tr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(NG,"findAndValidateUser");async function gG(){let e=await Qo(),t=_G.getConfigFromFile(fs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!be.isEmpty(r))return r.decrypt_hash=bl.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+VR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VR.SERVER_SUFFIX.ADMIN,r}a(gG,"getClusterUser")});var Jo=S((TZ,tA)=>{"use strict";var IG=fr();tA.exports={writeTransaction:bG};function bG(e,t,r){return IG.writeTransaction(e,t,r)}a(bG,"writeTransaction")});var Ll=S((mZ,wG)=>{wG.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 mt=S((LZ,OA)=>{"use strict";var Tr=Y();Tr.initSync();var CG=require("fs-extra"),LG=require("semver"),gi=require("path"),{monotonicFactory:UG}=require("ulidx"),yG=UG(),sA=require("util"),nA=require("child_process"),DG=sA.promisify(nA.exec),MG=nA.spawn,ee=he(),ie=T(),Bl=b(),mr=I(),Zo=vr(),PG=Jo(),Ai=ur(),{encode:Dl,decode:iA}=require("msgpackr"),{isEmpty:Ts}=Bl,aA=kr(),RZ=_s(),BG=ft(),AZ=sA.promisify(BG.searchByHash),{connect:vG,StorageType:oA,RetentionPolicy:cA,AckPolicy:_A,DeliverPolicy:Ml,NatsConnection:OZ,JetStreamManager:pZ,JetStreamClient:NZ,StringCodec:gZ,JSONCodec:HG,createInbox:vl,StreamSource:IZ,headers:qG,toJsMsg:GG,nuid:bZ,JetStreamOptions:wZ,ErrorCode:rA,nanos:CZ}=require("nats"),{PACKAGE_ROOT:FG}=T(),VG=Ll(),uA=HG(),kG="clustering",$G=VG.engines[ee.NATS_SERVER_NAME],xG=gi.join(FG,"dependencies"),Pl=gi.join(xG,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ul,yl,Oi,pi,Ni,Yt;OA.exports={runCommand:lA,checkNATSServerInstalled:YG,createConnection:Hl,getConnection:Xo,getJetStreamManager:En,getJetStream:EA,getNATSReferences:Ut,getServerList:WG,createLocalStream:ql,listStreams:dA,deleteLocalStream:QG,getServerConfig:Ii,listRemoteStreams:JG,viewStream:ZG,publishToStream:XG,createWorkQueueStream:zG,addSourceToWorkStream:hA,request:jG,removeSourceFromWorkStream:fA,reloadNATS:Gl,reloadNATSHub:eF,reloadNATSLeaf:tF,extractServerName:SA,requestErrorHandler:rF,updateWorkStream:sF,createLocalTableStream:mA,createTableStreams:nF,purgeTableStream:RA,purgeSchemaTableStreams:iF,getStreamInfo:aF,updateNodeNameLocalStreams:oF,closeConnection:KG};async function lA(e,t=void 0){let{stdout:r,stderr:s}=await DG(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
|
-
`,"")}a(fA,"runCommand");async function oF(){try{await $q.access(Hl)}catch{return!1}let e=await fA(`${Hl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Yq.eq(t,iF)}a(oF,"checkNATSServerInstalled");async function Fl(e,t,r,s=!0,n="127.0.0.1"){return zq({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(Fl,"createConnection");async function cF(){Qt&&(await Qt.close(),Qt=void 0)}a(cF,"closeConnection");async function jo(){if(!Qt){let e=await lA.getClusterUser();if(As(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=nr.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Qt=await Fl(t,e.username,e.decrypt_hash)}return Qt}a(jo,"getConnection");async function Sn(){if(gi)return gi;As(Qt)&&await jo();let{domain:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(As(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return gi=await Qt.jetstreamManager({domain:e}),gi}a(Sn,"getJetStreamManager");async function TA(){if(Ii)return Ii;As(Qt)&&await jo();let{domain:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(As(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ii=Qt.jetstream({domain:e}),Ii}a(TA,"getJetStream");async function yt(){let e=Qt||await jo(),t=gi||await Sn(),r=Ii||await TA();return{connection:e,jsm:t,js:r}}a(yt,"getNATSReferences");async function _F(){let e=nr.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await lA.getClusterUser(),s=await Fl(e,t,r),n=ql(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(SA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Gl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(_F,"getServerList");async function Vl(e,t){let{jsm:r}=await yt();await r.streams.add({name:e,storage:EA.File,retention:dA.Limits,subjects:t})}a(Vl,"createLocalStream");async function mA(){let{jsm:e}=await yt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(mA,"listStreams");async function uF(e){let{jsm:t}=await yt();await t.streams.delete(e)}a(uF,"deleteLocalStream");async function lF(e){let{connection:t}=await yt(),r=[],s=ql(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(SA.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(lF,"listRemoteStreams");async function EF(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await yt(),i=Qq(),o=[],c={ack_policy:hA.None,durable_name:i,deliver_subject:i,deliver_policy:vl.All};t&&(c.deliver_policy=vl.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=tF(l),d=uA(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),h.originators=m)}o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(EF,"viewStream");async function dF(e,t,r=[],s=[]){pr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await yt(),o=await ec(),c=`${e}.${o}`,_=eF();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{pr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Bl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")pr.trace(`publishToStream creating stream: ${t}`),await Vl(t,[c]),await i.publish(c,Bl(r[u]),{headers:_});else throw E}}a(dF,"publishToStream");function bi(e){e=e.toLowerCase();let t=Ci.join(nr.get(se.CONFIG_PARAMS.ROOTPATH),nF);if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return As(Pl)&&(Pl={port:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ci.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),Pl;if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return As(Ml)&&(Ml={port:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:Ci.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Ml;pr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bi,"getServerConfig");async function hF(e){let{jsm:t}=await yt(),r=await ec();try{await t.streams.add({name:e.stream_name,storage:EA.File,retention:dA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.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:hA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:vl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(hF,"createWorkQueueStream");async function RA(e,t,r){let{jsm:s}=await yt(),n=await s.streams.info(t),i=AA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=zo.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,w=n.config.sources.length;R<w;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;await pA(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(RA,"addSourceToWorkStream");function AA(e){return e.split(".")[1]}a(AA,"extractServerName");async function OA(e,t,r){let{schema:s,table:n}=r,i=zo.createNatsTableStreamName(s,n),{jsm:o}=await yt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await pA(s,n,u,t)}a(OA,"removeSourceFromWorkStream");async function pA(e,t,r,s){let n=await Sn(),i;try{i=IA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{pr.error("Error purging source subject",i,"from work stream",s)}}a(pA,"purgeSourceFromWorkStream");async function SF(e,t,r=2e3,s=ql()){if(!Gl.isObject(t))throw new Error("data param must be an object");let n=Bl(t),{connection:i}=await yt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return uA(c.data)}a(SF,"request");function kl(e){return new Promise(async(t,r)=>{let s=Jq(Hl,["--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(kl,"reloadNATS");async function fF(){let{pid_file_path:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kl(e)}a(fF,"reloadNATSHub");async function TF(){let{pid_file_path:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kl(e)}a(TF,"reloadNATSLeaf");function mF(e,t,r){let s;switch(e.code){case oA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case oA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(mF,"requestErrorHandler");async function RF(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await Zq.writeTransaction(se.SYSTEM_SCHEMA_NAME,se.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await RA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await OA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(RF,"updateWorkStream");async function NA(e,t){let r=zo.createNatsTableStreamName(e,t),s=await ec(),n=IA(e,t,s);await Vl(r,[n])}a(NA,"createLocalTableStream");async function AF(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await NA(s,n)}}a(AF,"createTableStreams");async function gA(e,t){if(nr.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=zo.createNatsTableStreamName(e,t),{jsm:s}=await yt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")pr.warn(r);else throw r}}a(gA,"purgeTableStream");async function OF(e,t){if(nr.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gA(e,t[r])}a(OF,"purgeSchemaTableStreams");async function pF(e){return(await Sn()).streams.info(e)}a(pF,"getStreamInfo");function IA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(IA,"createSubjectName");async function ec(){if(Ni)return Ni;if(Ni=(await Sn())?.nc?.info?.server_name,Ni===void 0)throw new Error("Unable to get jetstream manager server name");return Ni}a(ec,"getJsmServerName");async function NF(){let e=await Sn(),t=await ec(),r=await mA();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===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;pr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;pr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");pr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(NF,"updateNodeNameLocalStreams")});var Yl=S((QZ,LA)=>{"use strict";var fn=require("path"),nc=require("fs-extra"),gF=cR(),IF=lR(),CF=dR(),bF=SR(),xl=Kr(),mn=C(),Dt=Sr(),sc=T(),tc=he(),{CONFIG_PARAMS:be}=sc,ic=I(),ac=Y(),bA=Fr(),$l=Rt(),Tn="clustering",wF=1e4,wA=5;LA.exports={generateNatsConfig:LF,removeNatsConfig:UF};async function LF(e=!1,t=void 0){ac.initSync();let r=ac.get(be.ROOTPATH),s=fn.join(r,Tn,tc.PID_FILES.HUB),n=fn.join(r,Tn,tc.PID_FILES.LEAF),i=fn.join(r,Tn,"leaf"),o=fn.join(r,Tn,tc.NATS_CONFIG_FILES.HUB_SERVER),c=fn.join(r,Tn,tc.NATS_CONFIG_FILES.LEAF_SERVER),_=Dt.getConfigFromFile(be.CLUSTERING_TLS_CERTIFICATE),u=Dt.getConfigFromFile(be.CLUSTERING_TLS_PRIVATEKEY),l=Dt.getConfigFromFile(be.CLUSTERING_TLS_CERT_AUTH),E=Dt.getConfigFromFile(be.CLUSTERING_TLS_INSECURE),d=Dt.getConfigFromFile(be.CLUSTERING_NODENAME),h=Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $l.checkNATSServerInstalled()||oc("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await xl.listUsers(),R=Dt.getConfigFromFile(be.CLUSTERING_USER),w=await xl.getClusterUser();(mn.isEmpty(w)||w.active!==!0)&&oc(`invalid cluster user '${R}'`),e||(await rc(be.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await rc(be.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await rc(be.CLUSTERING_HUBSERVER_NETWORK_PORT),await rc(be.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[la,yr]of m.entries())yr.role.role===sc.ROLE_TYPES_ENUM.CLUSTER_USER&&yr.active&&(L.push(new bF(yr.username,bA.decrypt(yr.hash))),B.push(new CF(yr.username,bA.decrypt(yr.hash))));let X=[],{hub_routes:V}=Dt.getClusteringRoutes();if(!mn.isEmptyOrZeroLength(V))for(let la of V)X.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${la.host}:${la.port}`);let W=new gF(Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,h,Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_CLUSTER_NAME),Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),X,L,B);t=mn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===sc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await nc.writeJson(o,W),ic.trace(`Hub server config written to ${o}`));let ke=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${h}`,xe=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${h}`,ua=new IF(Dt.getConfigFromFile(be.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[xe],L,B,_,u,l,E);(t===void 0||t===sc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await nc.writeJson(c,ua),ic.trace(`Leaf server config written to ${c}`))}a(LF,"generateNatsConfig");async function rc(e){let t=ac.get(e);mn.isEmpty(t)&&oc(`port undefined for '${e}'`),await mn.isPortTaken(t)&&oc(`'${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(rc,"isPortAvailable");function oc(e){let t=`Error generating clustering config: ${e}`;ic.error(t),console.error(t),process.exit(1)}a(oc,"generateNatsConfigError");async function UF(e){let{port:t,config_file:r}=$l.getServerConfig(e),{username:s,decrypt_hash:n}=await xl.getClusterUser(),i=0,o=500;for(;i<wA;){try{let u=await $l.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ic.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=wA)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await mn.async_set_timeout(o*i)}let c="0".repeat(wF),_=fn.join(ac.get(be.ROOTPATH),Tn,r);await nc.writeFile(_,c),await nc.remove(_)}a(UF,"removeNatsConfig")});var _c=S((WZ,vA)=>{"use strict";var ne=Y(),UA=Ai(),b=T(),Kl=he(),Ae=require("path"),{PACKAGE_ROOT:cc}=T(),_e="/dev/null",Rn=Ae.join(cc,"launchServiceScripts"),yA=Ae.join(cc,"utility/scripts"),yF=Ae.join(yA,b.HDB_RESTART_SCRIPT),DA=Ae.resolve(cc,"dependencies",`${process.platform}-${process.arch}`,Kl.NATS_BINARY_NAME),Pe,Be;function ir(){(Pe===void 0||Be===void 0)&&(ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ir,"initLogConfig");function MA(){ir();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.IPC),t={name:b.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:b.SERVICE_SERVERS_CWD.IPC};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:b.SERVICE_SERVERS.IPC}}a(MA,"generateIPCServerConfig");function PA(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,b.PROCESS_LOG_NAMES.HDB),t=UA.licenseSearch(),r=t.ram_allocation?b.MEM_SETTING_KEY+t.ram_allocation:b.MEM_SETTING_KEY+b.RAM_ALLOCATION_ENUM.DEFAULT,s={name:b.PROCESS_DESCRIPTORS.HDB,script:b.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(b.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Rn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(PA,"generateHDBServerConfig");function BA(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=UA.licenseSearch(),r=t.ram_allocation?b.MEM_SETTING_KEY+t.ram_allocation:b.MEM_SETTING_KEY+b.RAM_ALLOCATION_ENUM.DEFAULT,s={name:b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:b.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(b.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Rn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(BA,"generateCFServerConfig");function DF(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(b.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",Kl.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(DF,"generateNatsHubServerConfig");function MF(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(b.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",Kl.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(MF,"generateNatsLeafServerConfig");function PF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:b.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(PF,"generateNatsIngestServiceConfig");function BF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:b.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(BF,"generateNatsReplyServiceConfig");function vF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:b.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn,autorestart:!1};return Pe||(t.out_file=_e,t.error_file=_e),t}a(vF,"generateClusteringUpgradeV4ServiceConfig");function HF(){ir();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.PM2),t={name:b.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:yA};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:yF}}a(HF,"generateRestart");function GF(e){ir();let t=Ae.join(Be,b.PROCESS_LOG_NAMES.JOBS),r=Ae.join(cc,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Rn,autorestart:!1};return Pe||(s.out_file=_e,s.error_file=_e),{...s,script:Ae.join(r,"jobProcess.js")}}a(GF,"generateJobConfig");function qF(){return{apps:[MA(),PA(),BA()]}}a(qF,"generateAllServiceConfigs");vA.exports={generateAllServiceConfigs:qF,generateIPCServerConfig:MA,generateHDBServerConfig:PA,generateCFServerConfig:BA,generateRestart:HF,generateNatsHubServerConfig:DF,generateNatsLeafServerConfig:MF,generateNatsIngestServiceConfig:PF,generateNatsReplyServiceConfig:BF,generateClusteringUpgradeV4ServiceConfig:vF,generateJobConfig:GF}});var GA=S((JZ,HA)=>{var FF=Ee(),VF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HA.exports=function(e){return FF.validateObject(e,VF)}});var Ql=S((ZZ,qA)=>{"use strict";var kF=T().OPERATIONS_ENUM,uc=class{constructor(t,r,s,n=void 0){this.operation=kF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(uc,"UpdateObject");qA.exports=uc});var VA=S((XZ,FA)=>{"use strict";var xF={OPERATION:"operation",REFRESH:"refresh"},lc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(lc,"JWTTokens");var Ec=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Ec,"JWTRSAKeys");FA.exports={JWTTokens:lc,TOKEN_TYPE_ENUM:xF,JWTRSAKeys:Ec}});var fc=S((zZ,YA)=>{"use strict";var Li=require("jsonwebtoken"),Wl=require("fs-extra"),Jl=C(),Mt=T(),{handleHDBError:ot,hdb_errors:$F}=D(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:_t}=$F,wi=I(),kA=Qo(),zl=Kr(),YF=Ut().update,KF=Ql(),QF=Zs(),{UserEventMsg:WF}=us(),Qr=Y();Qr.initSync();var Zl=require("path"),{JWTTokens:JF,JWTRSAKeys:ZF,TOKEN_TYPE_ENUM:dc}=VA(),XF=Qr.get(Mt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qr.get(Mt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",zF=Qr.get(Mt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qr.get(Mt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",hc="RS256",Xl;YA.exports={createTokens:jF,validateOperationToken:t0,refreshOperationToken:e0,validateRefreshToken:$A};async function jF(e){if(Jl.isEmpty(e)||typeof e!="object")throw ot(new Error,_t.INVALID_AUTH_OBJECT,ct.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmpty(e.username))throw ot(new Error,_t.USERNAME_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmpty(e.password))throw ot(new Error,_t.PASSWORD_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await zl.findAndValidateUser(e.username,e.password),!t)throw ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw wi.error(d),ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}let r=await Sc(),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 xA(i,r.private_key,r.passphrase),c=await Li.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:zF,algorithm:hc,subject:dc.REFRESH}),_=kA.hash(c),u=new KF(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await YF(u)}catch(d){wi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ot(new Error,_t.REFRESH_TOKEN_SAVE_FAILED,ct.INTERNAL_SERVER_ERROR);return QF.signalUserChange(new WF(process.pid)),new JF(o,c)}a(jF,"createTokens");async function xA(e,t,r){return await Li.sign(e,{key:t,passphrase:r},{expiresIn:XF,algorithm:hc,subject:dc.OPERATION})}a(xA,"signOperationToken");async function Sc(){if(Xl===void 0)try{let e=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Wl.readFile(e)).toString(),n=(await Wl.readFile(t)).toString(),i=(await Wl.readFile(r)).toString();Xl=new ZF(i,n,s)}catch(e){throw wi.error(e),ot(new Error,_t.NO_ENCRYPTION_KEYS,ct.INTERNAL_SERVER_ERROR)}return Xl}a(Sc,"getJWTRSAKeys");async function e0(e){if(!e)throw ot(new Error,_t.INVALID_BODY,ct.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ot(new Error,_t.REFRESH_TOKEN_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);await $A(e.refresh_token);let t=await Sc(),r=await Li.decode(e.refresh_token);return{operation_token:await xA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(e0,"refreshOperationToken");async function t0(e){try{let t=await Sc(),r=await Li.verify(e,t.public_key,{algorithms:hc,subject:dc.OPERATION});return await zl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wi.warn(t),t.name&&t.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}}a(t0,"validateOperationToken");async function $A(e){let t;try{let r=await Sc(),s=await Li.verify(e,r.public_key,{algorithms:hc,subject:dc.REFRESH});t=await zl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw wi.warn(r),r.name&&r.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}if(!kA.validate(t.refresh_token,e))throw ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED);return t}a($A,"validateRefreshToken")});var JA=S((eX,WA)=>{"use strict";var r0=GA(),An=require("passport"),s0=require("passport-local").Strategy,n0=require("passport-http").BasicStrategy,i0=require("util"),a0=Kr(),QA=i0.callbackify(a0.findAndValidateUser),jZ=rt(),o0=T(),KA=fc();An.use(new s0(function(e,t,r){QA(e,t,r)}));An.use(new n0(function(e,t,r){QA(e,t,r)}));An.serializeUser(function(e,t){t(null,e)});An.deserializeUser(function(e,t){t(null,e)});function c0(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":An.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===o0.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?KA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):KA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:An.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(c0,"authorize");function _0(e,t){let r=r0(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(_0,"checkPermissions");WA.exports={authorize:c0,checkPermissions:_0}});var On=S((tX,ZA)=>{"use strict";var Tc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Tc,"Node");var mc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(mc,"NodeSubscription");ZA.exports={Node:Tc,NodeSubscription:mc}});var zA=S((rX,XA)=>{"use strict";var u0=T().OPERATIONS_ENUM,Rc=class{constructor(t,r,s,n=void 0){this.operation=u0.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Rc,"UpsertObject");XA.exports=Rc});var Ui=S((sX,jA)=>{"use strict";var Ac=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ac,"RemotePayloadObject");var Oc=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(Oc,"RemotePayloadSubscription");jA.exports={RemotePayloadObject:Ac,RemotePayloadSubscription:Oc}});var tO=S((nX,eO)=>{"use strict";var pc=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(pc,"TableSizeObject");eO.exports=pc});var iO=S((iX,nO)=>{"use strict";var l0=tO(),rO=require("path"),sO=te(),E0=Ye(),pn=z(),d0=I();nO.exports=h0;async function h0(e){let t=new l0;try{let r=rO.join(sO.getBaseSchemaPath(),e.schema.toString()),s=await pn.openEnvironment(r,e.name),n=pn.statDBI(s,e.hash_attribute),i=rO.join(sO.getTransactionAuditStorePath(),e.schema.toString()),o=await pn.openEnvironment(i,e.name,!0),c=pn.statDBI(o,E0.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await pn.environmentDataSize(r,e.name),u=await pn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){d0.warn(`unable to stat table dbi due to ${r}`)}return t}a(h0,"lmdbGetTableSize")});var oO=S((aX,aO)=>{"use strict";var S0=T(),Nc=class{constructor(t){this.operator=S0.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Nc,"SystemInformationOperation");aO.exports=Nc});var _O=S((oX,cO)=>{"use strict";var gc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(gc,"SystemInformationObject");cO.exports=gc});var Cc=S((_X,uO)=>{"use strict";var ve=require("systeminformation"),Nn=I(),f0=T(),T0=iO(),m0=un(),R0=Y();R0.initSync();var cX=oO(),A0=_O(),Ic;uO.exports={getHDBProcessInfo:rE,getNetworkInfo:nE,getDiskInfo:sE,getMemoryInfo:tE,getCPUInfo:eE,getTimeInfo:jl,getSystemInformation:iE,systemInformation:O0,getTableSize:aE};function jl(){return ve.time()}a(jl,"getTimeInfo");async function eE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(X=>{let{raw_load:V,raw_load_idle:W,raw_load_irq:ke,raw_load_nice:xe,raw_load_system:ua,raw_load_user:la,...yr}=X;B.cpus.push(yr)}),l.current_load=B,l}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}a(eE,"getCPUInfo");async function tE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return Nn.error(`error in getMemoryInfo: ${e}`),{}}}a(tE,"getMemoryInfo");async function rE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(f0.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Nn.error(`error in getHDBProcessInfo: ${t}`),e}}a(rE,"getHDBProcessInfo");async function sE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return Nn.error(`error in getDiskInfo: ${t}`),e}}a(sE,"getDiskInfo");async function nE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return Nn.error(`error in getNetworkInfo: ${t}`),e}}a(nE,"getNetworkInfo");async function iE(){if(Ic!==void 0)return Ic;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,Ic=e,Ic}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}a(iE,"getSystemInformation");async function aE(){let e=[],t=await m0.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await T0(s));return e}a(aE,"getTableSize");async function O0(e){let t=new A0;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iE(),t.time=jl(),t.cpu=await eE(),t.memory=await tE(),t.disk=await sE(),t.network=await nE(),t.harperdb_processes=await rE(),t.table_size=await aE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iE();break;case"time":t.time=jl();break;case"cpu":t.cpu=await eE();break;case"memory":t.memory=await tE();break;case"disk":t.disk=await sE();break;case"network":t.network=await nE();break;case"harperdb_processes":t.harperdb_processes=await rE();break;case"table_size":t.table_size=await aE();break;default:break}return t}a(O0,"systemInformation")});var oE=S((EX,lO)=>{"use strict";var uX=require("fs-extra"),lX=I();lO.exports={version:p0,printVersion:g0,nodeVersion:N0};var Wr=Dl();function p0(){if(Wr)return Wr.version}a(p0,"version");function N0(){if(Wr&&Wr.engines&&Wr.engines["preferred-node"])return Wr.engines["preferred-node"]}a(N0,"nodeVersion");function g0(){Wr&&console.log(`HarperDB Version ${Wr.version}`)}a(g0,"printVersion")});var ps=S((SX,SO)=>{"use strict";var I0=Ut(),cE=C(),_E=require("util"),Os=T(),EO=Y();EO.initSync();var C0=JA(),dO=Tt(),{Node:dX,NodeSubscription:hX}=On(),b0=Es(),w0=zA(),{RemotePayloadObject:L0,RemotePayloadSubscription:U0}=Ui(),{handleHDBError:y0,hdb_errors:D0}=D(),{HTTP_STATUS_CODES:M0,HDB_ERROR_MSGS:P0}=D0,B0=Kt(),v0=Cc(),H0=oE(),G0=_E.promisify(C0.authorize),q0=_E.promisify(dO.searchByHash),F0=_E.promisify(dO.searchByValue);SO.exports={authHeaderToUser:V0,isEmpty:k0,getNodeRecord:x0,upsertNodeRecord:$0,buildNodePayloads:Y0,checkClusteringEnabled:K0,getAllNodeRecords:Q0,getSystemInfo:W0,reverseSubscription:hO};async function V0(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await G0(t,null),e}a(V0,"authHeaderToUser");function k0(e){return e==null}a(k0,"isEmpty");async function x0(e){let t=new b0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return q0(t)}a(x0,"getNodeRecord");async function $0(e){let t=new w0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return I0.upsert(t)}a($0,"upsertNodeRecord");function hO(e){if(cE.isEmpty(e.subscribe)||cE.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(hO,"reverseSubscription");function Y0(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=cE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=hO(c),h=new U0(_,u,l,d,E,c.start_time);n.push(h)}return new L0(r,t,n,s)}a(Y0,"buildNodePayloads");function K0(){if(!EO.get(Os.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y0(new Error,P0.CLUSTERING_NOT_ENABLED,M0.BAD_REQUEST,void 0,void 0,!0)}a(K0,"checkClusteringEnabled");async function Q0(){let e=new B0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return F0(e)}a(Q0,"getAllNodeRecords");async function W0(){let e=await v0.getSystemInformation();return{hdb_version:H0.version(),node_version:e.node_version,platform:e.platform}}a(W0,"getSystemInfo")});var gn=S((fX,CO)=>{"use strict";var P=T(),bc=C(),yi=Yl(),wc=Rt(),J0=he(),x=require("pm2"),Z0=require("fs-extra"),Nr=_c(),ut=Y(),gr=I(),X0=_c(),z0=ps(),j0=require("util"),TO=j0.promisify(require("child_process").exec),mO=require("path");CO.exports={start:Ns,stop:Uc,reload:AO,restart:OO,list:lE,describe:yc,connect:ar,kill:NO,startAllServices:_V,startService:Lc,getUniqueServicesList:EE,restartAllServices:uV,stopAllServices:lV,isServiceRegistered:gO,reloadStopStart:uE,restartHdb:pO,deleteProcess:oV,configureLogRotate:hV,startClustering:IO,isHdbRestartRunning:cV,isClusteringRunning:fV,stopClustering:SV,reloadClustering:TV};var{PACKAGE_ROOT:eV}=T(),tV="2.7.0",RO=mO.join(eV,"node_modules/pm2/bin/pm2"),rV="Log rotate installed.",sV="Error installing log rotate.",nV="Log rotate updated.",iV="Error updating log rotate.",aV="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 ar(){return new Promise((e,t)=>{x.connect((r,s)=>{r&&t(r),e(s)})})}a(ar,"connect");function Ns(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.start(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(Ns,"start");function Uc(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.stop(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.delete(e,(i,o)=>{i&&(x.disconnect(),r(s)),x.disconnect(),t(o)})})})}a(Uc,"stop");function AO(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.reload(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(AO,"reload");function OO(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.restart(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(OO,"restart");function oV(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.delete(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(oV,"deleteProcess");async function pO(){await Ns(X0.generateRestart())}a(pO,"restartHdb");async function cV(){let e=await lE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cV,"isHdbRestartRunning");function lE(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.list((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(lE,"list");function yc(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.describe(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(yc,"describe");function NO(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.killDaemon((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(NO,"kill");async function _V(){try{await IO(),await Ns(Nr.generateAllServiceConfigs())}catch(e){throw x.disconnect(),e}}a(_V,"startAllServices");async function Lc(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Nr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Nr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Nr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Nr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Nr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Nr.generateNatsHubServerConfig(),await Ns(t),await yi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Nr.generateNatsLeafServerConfig(),await Ns(t),await yi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Nr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ns(t)}catch(t){throw x.disconnect(),t}}a(Lc,"startService");async function EE(){try{let e=await lE(),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 x.disconnect(),e}}a(EE,"getUniqueServicesList");async function uV(e=[]){try{let t=!1,r=await EE();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 uE(o):await OO(o))}t&&await uE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw x.disconnect(),t}}a(uV,"restartAllServices");async function lV(){try{let e=await EE();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Uc(s.name)}if(await NO(),ut.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Z0.readFile(mO.join(ut.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){gr.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw x.disconnect(),e}}a(lV,"stopAllServices");async function gO(e){return!bc.isEmptyOrZeroLength(await yc(e))}a(gO,"isServiceRegistered");async function uE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ut.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ut.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await yc(e),s=bc.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?gr.error(aV):(await Uc(e),await Lc(e)):e===P.PROCESS_DESCRIPTORS.HDB?await pO():await AO(e)}a(uE,"reloadStopStart");function EV(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(EV,"stopLogrotate");async function dV(){let{stdout:e,stderr:t}=await TO(`${process.platform==="win32"?"node":""} ${RO} install pm2-logrotate@${tV}`);if(gr.debug(`loadLogRotate stdout: ${e}`),t)throw gr.error(sV),t;gr.info(rV)}a(dV,"installLogRotate");async function fO(){let e={max_size:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${RO} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await TO(t);if(gr.debug(`updateLogRotateConfig stdout: ${r}`),s)throw gr.error(iV),s;gr.info(nV)}a(fO,"updateLogRotateConfig");async function hV(){ut.initSync();let e=bc.autoCastBoolean(ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await yc(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(bc.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await dV(),await fO();return}if(e&&s){await Ns(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await fO();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await EV()}a(hV,"configureLogRotate");async function IO(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await Lc(r)}await wc.createWorkQueueStream(J0.WORK_QUEUE_CONSUMER_NAMES),await wc.updateNodeNameLocalStreams();let e=await z0.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){gr.info("Starting clustering upgrade 4.0.0 process"),await Lc(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(IO,"startClustering");async function SV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await Uc(t)}}a(SV,"stopClustering");async function fV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await gO(t)===!1)return!1}return!0}a(fV,"isClusteringRunning");async function TV(){await yi.generateNatsConfig(!0),await wc.reloadNATSHub(),await wc.reloadNATSLeaf(),await yi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(TV,"reloadClustering")});var dE=S((TX,bO)=>{"use strict";var Dc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Dc,"ClusteringOriginObject");bO.exports=Dc});var bn=S((mX,UO)=>{"use strict";var wO=C(),Mi=Y(),ue=T(),hE=he(),In=Rt(),Se=I(),LO=dE(),mV=Fr();Mi.initSync();var Cn=hE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Di=hE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;UO.exports={sendAttributeTransaction:Pc,postOperationHandler:AV};async function Pc(e,t,r=[]){if(!!Mi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!wO.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==ue.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Mi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new LO(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${Cn}`,o),await In.publishToStream(Di,Cn,[o],r)}}}a(Pc,"sendAttributeTransaction");async function Mc(e,t,r,s=[]){if(e.schema===ue.SYSTEM_SCHEMA_NAME)return;let n=RV(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await In.publishToStream(`${hE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,mV.createNatsTableStreamName(e.schema,e.table),[n],s))}a(Mc,"sendOperationTransaction");function RV(e,t,r){if(wO.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===ue.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(RV,"convertCRUDOperationToTransaction");async function AV(e,t,r=[]){if(!Mi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=Mi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new LO(t.txn_time,s,n);switch(e.operation){case ue.OPERATIONS_ENUM.INSERT:try{await Mc(e,t.inserted_hashes,i,r),await Pc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.DELETE:try{await Mc(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPDATE:try{await Mc(e,t.update_hashes,i,r),await Pc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPSERT:try{await Mc(e,t.upserted_hashes,i,r),await Pc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:ue.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await In.publishToStream(Di,Cn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(AV,"postOperationHandler")});var BO=S((RX,PO)=>{"use strict";var OV=Tt(),pV=Ss(),yO=I(),DO=Ut(),NV=Xo(),gV=require("clone"),fE=require("alasql"),IV=Lo(),MO=require("util"),CV=MO.promisify(pV.getTableSchema),bV=MO.promisify(OV.search),wV=T(),SE=C(),LV=bn();IV(fE);PO.exports={update:yV};var UV="There was a problem performing this update. Please check the logs and try again.";async function yV({statement:e,hdb_user:t}){let r=await CV(e.table.databaseid,e.table.tableid),s=DV(e.columns);SE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=gV(n),c=SE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=fE.parse(_).statements[0],l=await NV.writeTransaction(r.schema,r.name,async()=>{let E=await bV(u),d=MV(s,E);return PV(o,d,t)});return await DO.flush({schema:r.schema,table:r.name}),l}a(yV,"update");function DV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=fE.compile(`SELECT ${r.expression.toString()} AS [${wV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw yO.error(t),new Error(UV)}}a(DV,"createUpdateRecord");function MV(e,t){return SE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(MV,"buildUpdateRecords");async function PV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await DO.update(s);await LV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){yO.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(PV,"updateRecords")});var HO=S((AX,vO)=>{var BV=require("alasql"),vV=Tt(),HV=I(),GV=Or(),mE=require("util"),TE=C(),qV=T(),FV=Ss(),VV=Xo(),kV=bn(),xV=Ut(),$V="record",YV="successfully deleted",KV=mE.callbackify(ZV),QV=mE.promisify(vV.search),WV=mE.promisify(FV.getTableSchema);vO.exports={convertDelete:KV};function JV(e){return`${e.deleted_hashes.length} ${$V}${e.deleted_hashes.length===1?"":"s"} ${YV}`}a(JV,"generateReturnMessage");async function ZV({statement:e,hdb_user:t}){let r=await WV(e.table.databaseid,e.table.tableid);TE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=TE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=BV.parse(o).statements[0],_={operation:qV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await VV.writeTransaction(r.schema,r.name,async()=>(_.records=await QV(c),GV.deleteRecords(_)));return await xV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await kV.postOperationHandler(_,u),TE.isEmptyOrZeroLength(u.message)&&(u.message=JV(u)),delete u.txn_time,u}catch(u){throw HV.error(u),u.hdb_code?u.message:u}}a(ZV,"convertDelete")});var FO=S((OX,qO)=>{"use strict";var AE=un(),{hdb_errors:RE}=D();qO.exports={checkSchemaExists:GO,checkSchemaTableExists:XV,schema_describe:AE};async function GO(e){if(!global.hdb_schema[e])try{let t=await AE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return RE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(GO,"checkSchemaExists");async function XV(e,t){let r=await GO(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await AE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(XV,"checkSchemaTableExists")});var Bc=S((NX,YO)=>{"use strict";var wn=Ka(),gs=FO(),VO=I(),zV=require("uuid").v4,pX=require("clone"),Un=Zs(),Is=T(),jV=require("util"),Cs=Or(),{handleHDBError:He,hdb_errors:ek}=D(),{HDB_ERROR_MSGS:Ln,HTTP_STATUS_CODES:Ge}=ek,{SchemaEventMsg:yn}=us(),kO=Rt();YO.exports={createSchema:tk,createSchemaStructure:xO,createTable:rk,createTableStructure:$O,createAttribute:ok,dropSchema:sk,dropTable:nk,dropAttribute:ik};async function tk(e){try{let t=await xO(e);return Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(tk,"createSchema");async function xO(e){let t=wn.schema_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);if(!await gs.checkSchemaExists(e.schema))throw He(new Error,Ln.SCHEMA_EXISTS_ERR(e.schema),Ge.BAD_REQUEST,Is.LOG_LEVELS.ERROR,Ln.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Cs.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(xO,"createSchemaStructure");async function rk(e){try{let t=await $O(e);return Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(rk,"createTable");async function $O(e){let t=wn.create_table_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);wn.validateTableResidence(e.residence);let r=await gs.checkSchemaExists(e.schema);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(!await gs.checkSchemaTableExists(e.schema,e.table))throw He(new Error,Ln.TABLE_EXISTS_ERR(e.schema,e.table),Ge.BAD_REQUEST,Is.LOG_LEVELS.ERROR,Ln.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Cs.createTable(n,e);else throw He(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ge.BAD_REQUEST);else await Cs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a($O,"createTableStructure");async function sk(e){let t=wn.schema_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaExists(e.schema);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);let s=await gs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Cs.dropSchema(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await kO.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(sk,"dropSchema");async function nk(e){let t=wn.table_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);return await Cs.dropTable(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table)),await kO.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nk,"dropTable");async function ik(e){let t=wn.attribute_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw He(new Error,"You cannot drop a hash attribute",Ge.BAD_REQUEST,void 0,void 0,!0);if(Is.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw He(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ge.BAD_REQUEST,void 0,void 0,!0);try{return await Cs.dropAttribute(e),ak(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw VO.error(`Got an error deleting attribute ${jV.inspect(e)}.`),s}}a(ik,"dropAttribute");function ak(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(ak,"dropAttributeFromGlobal");async function ok(e){if(!global.hdb_schema[e.schema])throw He(new Error,Ln.SCHEMA_NOT_FOUND(e.schema),Ge.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw He(new Error,Ln.TABLE_NOT_FOUND(e.schema,e.table),Ge.NOT_FOUND,void 0,void 0,!0);try{return await Cs.createAttribute(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw VO.error(t),t}}a(ok,"createAttribute")});var QO=S((gX,KO)=>{"use strict";var{OPERATIONS_ENUM:ck}=T(),vc=class{constructor(t,r,s=void 0,n=void 0){this.operation=ck.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(vc,"ReadAuditLogObject");KO.exports=vc});var OE=S((CX,zO)=>{"use strict";var _k=Or(),IX=QO(),Hc=C(),Gc=T(),uk=Y(),{handleHDBError:WO,hdb_errors:lk}=D(),{HDB_ERROR_MSGS:JO,HTTP_STATUS_CODES:ZO}=lk,Ek=Object.values(Gc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),XO="To use this operation audit log must be enabled in harperdb-config.yaml";zO.exports=dk;async function dk(e){if(Hc.isEmpty(e.schema))throw new Error(JO.SCHEMA_REQUIRED_ERR);if(Hc.isEmpty(e.table))throw new Error(JO.TABLE_REQUIRED_ERR);if(!uk.get(Gc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw WO(new Error,XO,ZO.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,XO,!0);let t=Hc.checkSchemaTableExist(e.schema,e.table);if(t)throw WO(new Error,t,ZO.NOT_FOUND,Gc.LOG_LEVELS.ERROR,t,!0);if(!Hc.isEmpty(e.search_type)&&Ek.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _k.readAuditLog(e)}a(dk,"readAuditLog")});var np=S((bX,sp)=>{var Jr=require("validate.js"),ep=Ee(),Dn=T(),{handleHDBError:hk,hdb_errors:Sk}=D(),{HDB_ERROR_MSGS:le,HTTP_STATUS_CODES:fk}=Sk,pE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Tk={STRUCTURE_USER:"structure_user"},jO=Object.values(Dn.ROLE_TYPES_ENUM),mk="attribute_permissions",Rk="attribute_name",{PERMS_CRUD_ENUM:Mn}=Dn,Ak=[mk,...Object.values(Mn)],tp=[Mn.READ,Mn.INSERT,Mn.UPDATE],Ok=[Rk,...tp];function pk(e){let t=pE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,rp(e,t)}a(pk,"addRoleValidation");function Nk(e){let t=pE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,rp(e,t)}a(Nk,"alterRoleValidation");function gk(e){let t=pE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ep.validateObject(e,t)}a(gk,"dropRoleValidation");var Ik=["operation","role","id","permission","hdb_user","hdb_auth_header"];function rp(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Ik.includes(s[o])||n.push(s[o]);n.length>0&&fe(le.INVALID_ROLE_JSON_KEYS(n),r);let i=ep.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=Ck(e);o&&fe(o,r),jO.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&fe(le.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(jO.indexOf(o)<0){if(o===Tk.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(le.SCHEMA_NOT_FOUND(E),r)}continue}fe(le.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(le.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(le.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{Ak.includes(l)||fe(le.INVALID_PERM_KEY(l),r,o,_)}),Object.values(Mn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||fe(le.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(le.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){fe(le.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(le.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!Ok.includes(R)&&R!==Mn.DELETE&&fe(le.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(h.attribute_name)){fe(le.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){fe(le.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}tp.forEach(R=>{Jr.isDefined(h[R])?Jr.isBoolean(h[R])||fe(le.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(le.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;fe(le.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return bk(r)}a(rp,"customValidate");sp.exports={addRoleValidation:pk,alterRoleValidation:Nk,dropRoleValidation:gk};function Ck(e){let{operation:t,permission:r}=e;if(t===Dn.OPERATIONS_ENUM.ADD_ROLE||t===Dn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return le.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Dn.ROLE_TYPES_ENUM.SUPER_USER:Dn.ROLE_TYPES_ENUM.CLUSTER_USER;return le.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Ck,"validateNoSUPerms");function bk(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:le.ROLE_PERMS_ERROR,...e};return hk(new Error,s,fk.BAD_REQUEST)}else return null}a(bk,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var UE=S((wX,up)=>{"use strict";var ip=Ut(),ap=Tt(),wk=ms(),IE=np(),CE=Zs(),Lk=require("uuid").v4,bE=require("util"),Uk=Ai(),Ir=T(),op=C(),wE=bE.promisify(ap.searchByValue),yk=bE.promisify(ap.searchByHash),Dk=bE.promisify(wk.delete),Mk=Kt(),Pk=Es(),{hdb_errors:Bk,handleHDBError:Pi}=D(),{HDB_ERROR_MSGS:cp,HTTP_STATUS_CODES:NE}=Bk,{UserEventMsg:LE}=us();up.exports={addRole:vk,alterRole:Gk,dropRole:qk,listRoles:_p};function gE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(gE,"scrubRoleDetails");async function vk(e){let t=IE.addRoleValidation(e);if(t)throw t;if(!(await Uk.getLicense()).enterprise){let o=await _p();if(Hk(e,o))throw new Error(`Your current license only supports ${Ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Ir.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Ir.BASIC_LICENSE_MAX_NON_CU_ROLES+Ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Ir.SUPPORT_HELP_MSG}`)}e=gE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await wE(s)}catch(o){throw Pi(o)}if(n&&n.length>0)throw Pi(new Error,cp.ROLE_ALREADY_EXISTS(e.role),NE.CONFLICT,void 0,void 0,!0);e.id||(e.id=Lk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ip.insert(i),CE.signalUserChange(new LE(process.pid)),e=gE(e),e}a(vk,"addRole");function Hk(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!op.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(Hk,"checkClusterUserRole");async function Gk(e){let t=IE.alterRoleValidation(e);if(t)throw t;e=gE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ip.update(r)}catch(s){throw Pi(s)}return CE.signalUserChange(new LE(process.pid)),e}a(Gk,"alterRole");async function qk(e){let t=IE.dropRoleValidation(e);if(t)throw Pi(new Error,t,NE.BAD_REQUEST,void 0,void 0,!0);let r=new Pk(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await yk(r);if(s.length===0)throw Pi(new Error,cp.ROLE_NOT_FOUND,NE.NOT_FOUND,void 0,void 0,!0);let n=new Mk(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await wE(n),o=!1;if(op.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Dk(c),CE.signalUserChange(new LE(process.pid)),`${s[0].role} successfully deleted`}a(qk,"dropRole");async function _p(){return wE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(_p,"listRoles")});var hp=S((LX,dp)=>{"use strict";var Fk=Y(),Zr=require("joi"),Vk=Ee(),lp=require("moment"),kk=require("fs-extra"),yE=require("path"),xk=require("lodash"),Bi=T(),{LOG_LEVELS:bs}=T(),$k="YYYY-MM-DD hh:mm:ss",Yk=yE.resolve(__dirname,"../logs");dp.exports=function(e){return Vk.validateBySchema(e,Kk)};var Kk=Zr.object({from:Zr.custom(Ep),until:Zr.custom(Ep),level:Zr.valid(bs.NOTIFY,bs.FATAL,bs.ERROR,bs.WARN,bs.INFO,bs.DEBUG,bs.TRACE),order:Zr.valid("asc","desc"),limit:Zr.number().min(1),start:Zr.number().min(0),log_name:Zr.custom(Qk)});function Ep(e,t){if(lp(e,lp.ISO_8601).format($k)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Ep,"validateDatetime");function Qk(e,t){if(xk.invert(Bi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Fk.get(Bi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Bi.PROCESS_LOG_NAMES.HDB:e,i=n===Bi.PROCESS_LOG_NAMES.INSTALL?yE.join(Yk,Bi.PROCESS_LOG_NAMES.INSTALL):yE.join(s,n);return kk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Qk,"validateReadLogPath")});var ME=S((UX,fp)=>{"use strict";var qc=T(),Sp=I(),Wk=Y(),Jk=hp(),DE=require("path"),Zk=require("fs-extra"),Xk=require("readline"),{once:zk}=require("events"),{handleHDBError:jk,hdb_errors:ex}=D(),{PACKAGE_ROOT:tx}=T(),rx=DE.join(tx,"logs"),sx=1e3;fp.exports=nx;async function nx(e){let t=Jk(e);if(t)throw jk(t,t.message,ex.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Wk.get(qc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?qc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===qc.PROCESS_LOG_NAMES.INSTALL?DE.join(rx,qc.PROCESS_LOG_NAMES.INSTALL):DE.join(r,s),i=Zk.createReadStream(n);i.on("error",X=>{Sp.error(X)});let o=Xk.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,h=e.limit===void 0?sx:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+h,L=0,B=[];return o.on("line",X=>{let V,W,ke,xe;try{V=JSON.parse(X)}catch(ua){Sp.warn(ua.message);return}switch(!0){case(c&&u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),V.level===_&&W>=ke&&W<=xe&&L<R?L++:V.level===_&&W>=ke&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(c&&u):W=new Date(V.timestamp),ke=new Date(l),V.level===_&&W>=ke&&L<R?L++:V.level===_&&W>=ke&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(c&&E):W=new Date(V.timestamp),xe=new Date(d),V.level===_&&W<=xe&&L<R?L++:V.level===_&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),W>=ke&&W<=xe&&L<R?L++:W>=ke&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(zr(V,m,B),L++,L===w&&Xr(o));break;case u:W=new Date(V.timestamp),ke=new Date(l),W>=ke&&L<R?L++:W>=ke&&L>=R&&(zr(V,m,B),L++,L===w&&Xr(o));break;case E:W=new Date(V.timestamp),xe=new Date(d),W<=xe&&L<R?L++:W<=xe&&L>=R&&(zr(V,m,B),L++,L===w&&Xr(o));break;default:L<R?L++:(zr(V,m,B),L++,L===w&&Xr(o))}}),await zk(o,"close"),B}a(nx,"readLog");function Xr(e){e.close(),e.removeAllListeners()}a(Xr,"endReadLine");function zr(e,t,r){t==="desc"?ix(e,r):t==="asc"?ax(e,r):r.push(e)}a(zr,"pushLineToResult");function ix(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ix,"insertDescending");function ax(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ax,"insertAscending")});var Vc=S((MX,Rp)=>{"use strict";var PE=require("joi"),{string:Fc,boolean:Tp,date:ox}=PE.types(),cx=Ee(),{validateSchemaExists:yX,validateTableExists:DX,validateSchemaName:_x}=Tr(),ux=T(),lx=he(),Ex=Y(),dx=Fc.invalid(Ex.get(ux.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lx.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),mp={operation:Fc.valid("add_node","update_node"),node_name:dx,subscriptions:PE.array().items({table:Fc.required(),schema:Fc.custom(_x).required(),subscribe:Tp.required(),publish:Tp.required().custom(Sx),start_time:ox.iso()}).min(1).required()};function hx(e){return cx.validateBySchema(e,PE.object(mp))}a(hx,"addUpdateNodeValidator");function Sx(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(Sx,"checkForFalsy");Rp.exports={addUpdateNodeValidator:hx,validation_schema:mp}});var vE=S((PX,Ip)=>{"use strict";var BE=Rt(),Ap=C(),Op=he(),fx=T(),kc=I(),pp=Bc(),Tx=Xu(),{RemotePayloadObject:mx}=Ui(),{handleHDBError:Np,hdb_errors:Rx}=D(),{HTTP_STATUS_CODES:gp}=Rx,{NodeSubscription:Ax}=On();Ip.exports=Ox;async function Ox(e,t){let r;try{r=await BE.request(`${t}.${Op.REQUEST_SUFFIX}`,new mx(fx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),kc.trace("Response from remote describe all request:",r)}catch(o){kc.error(`addNode received error from describe all request to remote node: ${o}`);let c=BE.requestErrorHandler(o,"add_node",t);throw Np(new Error,c,gp.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Op.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Np(new Error,o,gp.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Ap.doesSchemaExist(c),l=s[c]!==void 0,E=Ap.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(kc.trace(`addNode creating schema: ${c}`),await pp.createSchema({operation:"create_schema",schema:c})),!E&&d){kc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new Tx(c,_,s[c][_].hash_attribute);await pp.createTable(m)}await BE.createLocalTableStream(c,_);let h=new Ax(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(Ox,"reviewSubscriptions")});var Yc=S((BX,wp)=>{"use strict";var{handleHDBError:xc,hdb_errors:px}=D(),{HTTP_STATUS_CODES:$c}=px,{addUpdateNodeValidator:Nx}=Vc(),vi=I(),bp=T(),Cp=he(),gx=C(),HE=Rt(),Hi=ps(),Ix=Y(),Cx=vE(),{Node:bx,NodeSubscription:wx}=On(),Lx="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ux="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",yx=Ix.get(bp.CONFIG_PARAMS.CLUSTERING_NODENAME);wp.exports=Dx;async function Dx(e,t=!1){vi.trace("addNode called with:",e),Hi.checkClusteringEnabled();let r=Nx(e);if(r)throw xc(r,r.message,$c.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Hi.getNodeRecord(s);if(!gx.isEmptyOrZeroLength(E))throw xc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,$c.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Cx(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Lx,o;let c=Hi.buildNodePayloads(n,yx,bp.OPERATIONS_ENUM.ADD_NODE,await Hi.getSystemInfo());vi.trace("addNode sending remote payload:",c);let _;try{_=await HE.request(`${s}.${Cp.REQUEST_SUFFIX}`,c)}catch(E){vi.error(`addNode received error from request: ${E}`);let d=HE.requestErrorHandler(E,"add_node",s);throw xc(new Error,d,$c.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Cp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw xc(new Error,E,$c.INTERNAL_SERVER_ERROR,"error",E)}vi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];vi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await HE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new wx(h.schema,h.table,h.publish,h.subscribe))}let l=new bx(s,u,_.system_info);return await Hi.upsertNodeRecord(l),i.length>0?o.message=Ux:o.message=`Successfully added '${s}' to manifest`,o}a(Dx,"addNode")});var qE=S((vX,yp)=>{"use strict";var{handleHDBError:Kc,hdb_errors:Mx}=D(),{HTTP_STATUS_CODES:Qc}=Mx,{addUpdateNodeValidator:Px}=Vc(),Gi=I(),Up=T(),Lp=he(),Bx=C(),GE=Rt(),qi=ps(),vx=Y(),{cloneDeep:Hx}=require("lodash"),Gx=vE(),{NodeSubscription:qx}=On(),Fx="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Vx="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kx=vx.get(Up.CONFIG_PARAMS.CLUSTERING_NODENAME);yp.exports=xx;async function xx(e){Gi.trace("updateNode called with:",e),qi.checkClusteringEnabled();let t=Px(e);if(t)throw Kc(t,t.message,Qc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Hx(await qi.getNodeRecord(r));if(Bx.isEmptyOrZeroLength(s))throw Kc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Qc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Gx(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Fx,o;let c=qi.buildNodePayloads(n,kx,Up.OPERATIONS_ENUM.UPDATE_NODE,await qi.getSystemInfo());Gi.trace("updateNode sending remote payload:",c);let _;try{_=await GE.request(`${r}.${Lp.REQUEST_SUFFIX}`,c)}catch(u){Gi.error(`updateNode received error from request: ${u}`);let l=GE.requestErrorHandler(u,"update_node",r);throw Kc(new Error,l,Qc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===Lp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Kc(new Error,u,Qc.INTERNAL_SERVER_ERROR,"error",u)}Gi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Gi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await GE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await $x(s[0],n,_.system_info),i.length>0?o.message=Vx:o.message=`Successfully updated '${r}'`,o}a(xx,"updateNode");async function $x(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new qx(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qi.upsertNodeRecord(s)}a($x,"updateNodeTable")});var vp=S((HX,Bp)=>{"use strict";var Pp=require("joi"),{string:Dp}=Pp.types(),Yx=Ee(),Mp=T(),Kx=Y(),Qx=he();Bp.exports=Wx;function Wx(e){let t=Dp.invalid(Kx.get(Mp.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Qx.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Pp.object({operation:Dp.valid(Mp.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Yx.validateBySchema(e,r)}a(Wx,"removeNodeValidator")});var Jc=S((GX,kp)=>{"use strict";var{handleHDBError:Hp,hdb_errors:Jx}=D(),{HTTP_STATUS_CODES:Gp}=Jx,Zx=vp(),Fi=I(),qp=ps(),Xx=C(),Wc=T(),Fp=he(),Vp=Rt(),zx=Y(),{RemotePayloadObject:jx}=Ui(),{NodeSubscription:e$}=On(),t$=li(),r$=ms(),s$=zx.get(Wc.CONFIG_PARAMS.CLUSTERING_NODENAME);kp.exports=n$;async function n$(e){Fi.trace("removeNode called with:",e),qp.checkClusteringEnabled();let t=Zx(e);if(t)throw Hp(t,t.message,Gp.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await qp.getNodeRecord(r);if(Xx.isEmptyOrZeroLength(s))throw Hp(new Error,`Node '${r}' was not found.`,Gp.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new jx(Wc.OPERATIONS_ENUM.REMOVE_NODE,s$,[]),i,o=!1;try{i=await Vp.request(`${r}.${Fp.REQUEST_SUFFIX}`,n),Fi.trace("Remove node reply from remote node:",r,i)}catch(_){Fi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Fi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new e$(l.schema,l.table,!1,!1);await Vp.updateWorkStream(E,r)}let c=new t$(Wc.SYSTEM_SCHEMA_NAME,Wc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await r$.deleteRecord(c),i?.status===Fp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(n$,"removeNode")});var Yp=S((qX,$p)=>{"use strict";var xp=require("joi"),{string:i$,array:a$}=xp.types(),o$=Ee(),c$=Vc();$p.exports=_$;function _$(e){let t=xp.object({operation:i$.valid("configure_cluster").required(),connections:a$.items(c$.validation_schema).required()});return o$.validateBySchema(e,t)}a(_$,"configureClusterValidator")});var FE=S((FX,Zp)=>{"use strict";var u$=T(),Zc=I(),l$=C(),E$=Jc(),d$=Yc(),Kp=ps(),h$=Yp(),{handleHDBError:Qp,hdb_errors:S$}=D(),{HTTP_STATUS_CODES:Wp}=S$,f$="Configure cluster complete.",T$="Failed to configure the cluster. Check the logs for more details.",m$="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Zp.exports=R$;async function R$(e){Zc.trace("configure cluster called with:",e),Kp.checkClusteringEnabled();let t=h$(e);if(t)throw Qp(t,t.message,Wp.BAD_REQUEST,void 0,void 0,!0);let r=await Kp.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(Jp(E$,{operation:u$.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);Zc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(Jp(d$,h,h.node_name))}let c=await Promise.allSettled(i);Zc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let m=E[d];m.status==="rejected"&&(Zc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(l$.isEmptyOrZeroLength(_))return{message:f$,connections:u};if(l)return{message:m$,failed_nodes:_,connections:u};throw Qp(new Error,T$,Wp.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(R$,"configureCluster");async function Jp(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Jp,"functionWrapper")});var xE=S((VX,rN)=>{"use strict";var kE=ps(),A$=Rt(),jp=Y(),Xc=T(),ws=he(),O$=C(),VE=I(),{RemotePayloadObject:p$}=Ui(),{ErrorCode:Xp}=require("nats"),zp=jp.get(Xc.CONFIG_PARAMS.CLUSTERING_ENABLED),eN=jp.get(Xc.CONFIG_PARAMS.CLUSTERING_NODENAME);rN.exports={clusterStatus:N$,buildNodeStatus:tN};async function N$(){let e={node_name:eN,is_enabled:zp,connections:[]};if(!zp)return e;let t=await kE.getAllNodeRecords();if(O$.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(tN(t[s],e.connections));return await Promise.allSettled(r),e}a(N$,"clusterStatus");async function tN(e,t){let r=e.name,s=new p$(Xc.OPERATIONS_ENUM.CLUSTER_STATUS,eN,void 0,await kE.getSystemInfo()),n,i,o=ws.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await A$.request(ws.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===ws.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ws.CLUSTER_STATUS_STATUSES.CLOSED,VE.error(`Error getting node status from ${r} `,n))}catch(_){VE.warn(`Error getting node status from ${r}`,_),_.code===Xp.NoResponders?o=ws.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===Xp.Timeout?o=ws.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ws.CLUSTER_STATUS_STATUSES.CLOSED}let c=new g$(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Xc.PRE_4_0_0_VERSION&&await kE.upsertNodeRecord(_)}catch(_){VE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(tN,"buildNodeStatus");function g$(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(g$,"NodeStatusObject")});var aN=S((kX,iN)=>{"use strict";var $E=require("joi"),sN=Ee(),{route_constraints:nN}=lu();iN.exports={setRoutesValidator:I$,deleteRoutesValidator:C$};function I$(e){let t=$E.object({server:$E.valid("hub","leaf").required(),routes:nN.required()});return sN.validateBySchema(e,t)}a(I$,"setRoutesValidator");function C$(e){let t=$E.object({routes:nN.required()});return sN.validateBySchema(e,t)}a(C$,"deleteRoutesValidator")});var KE=S((xX,uN)=>{"use strict";var Ls=Sr(),YE=C(),zc=T(),oN=aN(),{handleHDBError:cN,hdb_errors:b$}=D(),{HTTP_STATUS_CODES:_N}=b$,w$="cluster routes successfully set",L$="cluster routes successfully deleted";uN.exports={setRoutes:U$,getRoutes:y$,deleteRoutes:D$};function U$(e){let t=oN.setRoutesValidator(e);if(t)throw cN(t,t.message,_N.BAD_REQUEST,void 0,void 0,!0);let r=Ls.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=YE.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:w$,set:o,skipped:i}}a(U$,"setRoutes");function y$(){let e=Ls.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(y$,"getRoutes");function D$(e){let t=oN.deleteRoutesValidator(e);if(t)throw cN(t,t.message,_N.BAD_REQUEST,void 0,void 0,!0);let r=Ls.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,m=s.length;h<m;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let m=0,R=n.length;m<R;m++){let w=n[m];if(E.host===w.host&&E.port===w.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=YE.isEmptyOrZeroLength(s)?null:s,Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=YE.isEmptyOrZeroLength(n)?null:n,Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:L$,deleted:i,skipped:o}}a(D$,"deleteRoutes")});var EN=S(($X,lN)=>{"use strict";var Vi=require("alasql"),Us=require("recursive-iterator"),Wt=I(),M$=C(),ki=T(),jc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,B$(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>ki.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!ki.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][ki.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=P$(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!ki.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Vi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(jc,"sql_statement_bucket");function P$(e){return e.filter(t=>t[ki.PERMS_CRUD_ENUM.READ])}a(P$,"filterReadRestrictedAttrs");function B$(e,t,r,s,n){v$(e,t,r,s,n)}a(B$,"interpretAST");function xi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(xi,"addSchemaTableToMap");function v$(e,t,r,s,n){if(!e){Wt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Vi.yy.Insert?F$(e,t,r):e instanceof Vi.yy.Select?H$(e,t,r,s,n):e instanceof Vi.yy.Update?G$(e,t,r):e instanceof Vi.yy.Delete?q$(e,t,r):Wt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(v$,"getRecordAttributesAST");function H$(e,t,r,s,n){if(!e){Wt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(M$.isEmptyOrZeroLength(i)){Wt.error("No schema specified");return}e.from.forEach(c=>{xi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xi(c.table,t,r,s,n)});let o=new Us(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Wt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Us(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Us(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Us(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Wt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(H$,"getSelectAttributes");function G$(e,t,r){if(!e){Wt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Us(e.columns),n=e.table.databaseid;xi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(G$,"getUpdateAttributes");function q$(e,t,r){if(!e){Wt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Us(e.where),n=e.table.databaseid;xi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(q$,"getDeleteAttributes");function F$(e,t,r){if(!e){Wt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Us(e.columns),n=e.into.databaseid;xi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.into.tableid,n,i.columnid,t,r)}a(F$,"getInsertAttributes");function QE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(QE,"pushAttribute");lN.exports=jc});var SN=S((YX,hN)=>{var V$=require("os"),dN=Y();hN.exports={checkPermission:k$};function k$(){if(V$.userInfo().username!==dN.get("install_user"))throw new Error(`Error: Must execute as ${dN.get("install_user")}`)}a(k$,"checkPermission")});var JE=S((KX,AN)=>{var t_=Ai(),fN=require("chalk"),or=I(),TN=SN(),mN=require("prompt"),{promisify:x$}=require("util"),e_=T(),$$=require("fs-extra"),Y$=require("path"),K$=C(),Q$=oE(),RN=Y();RN.initSync();var W$=require("moment"),J$=x$(mN.get),Z$=Y$.join(RN.getHdbBasePath(),e_.LICENSE_KEY_DIR_NAME,e_.LICENSE_FILE_NAME,e_.LICENSE_FILE_NAME);AN.exports={getFingerprint:z$,setLicense:X$,parseLicense:WE,register:j$,getRegistrationInfo:tY};async function X$(e){if(e&&e.key&&e.company){try{or.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await WE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw or.error(r),or.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(X$,"setLicense");async function z$(){try{TN.checkPermission()}catch(t){throw or.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await t_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw or.error(r),or.error(t),new Error(r)}return e}a(z$,"getFingerprint");async function WE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=t_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{or.info("writing license to disk"),await $$.writeFile(Z$,JSON.stringify({license_key:e,company:t}))}catch(s){throw or.error("Failed to write License"),s}return"Registration successful."}a(WE,"parseLicense");async function j$(){let e=await eY();return WE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(j$,"register");async function eY(){try{TN.checkPermission()}catch(s){return console.error(s.message)}let e=await t_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:fN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:fN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{mN.start()}catch(s){or.error(s)}let r;try{r=await J$(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(eY,"promptForRegistration");async function tY(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await t_.getLicense()}catch(r){throw or.error(`There was an error when searching licenses due to: ${r.message}`),r}if(K$.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Q$.version(),e.storage_type=e_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=W$.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(tY,"getRegistrationInfo")});var ed=S((QX,IN)=>{"use strict";var y=T(),K=I(),r_=C(),rY=X_(),ZE=Yl(),jE=Rt(),sY=he(),pN=require("minimist"),{handleHDBError:XE,hdb_errors:nY}=D(),$i=Sr(),{HTTP_STATUS_CODES:zE}=nY,q,ON=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,ys="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",iY="Invalid service",aY="'service' is required",oY="Restarting all services",cY="Clustering is not enabled so cannot be restarted";IN.exports={stop:uY,restartProcesses:_Y,restartService:NN};async function _Y(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{q===void 0&&(q=gn());let e=rY(Object.keys(y.CONFIG_PARAM_MAP),!0);r_.isEmptyOrZeroLength(Object.keys(e))||$i.updateConfigValue(void 0,void 0,e,!0,!0);let t=$i.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=$i.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=pN(process.argv);if(!r_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await q.isHdbRestartRunning()===!0){K.notify(ys),console.error(ys);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await q.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await Pn(_);else if(await q.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await q.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await NN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await q.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await q.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await q.isHdbRestartRunning()===!0)return K.notify(ys),console.error(ys),ys;console.log(ON),t&&await gN();let n=await q.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await q.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await q.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await q.configureLogRotate(),K.notify(oY),await q.restartAllServices(i),ON}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(_Y,"restartProcesses");async function NN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),q===void 0&&(q=gn()),r_.isEmpty(e.service))throw XE(new Error,aY,zE.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw XE(new Error,iY,zE.BAD_REQUEST,void 0,void 0,!0);let r=$i.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await q.isHdbRestartRunning()===!0)return K.notify(ys),ys;await q.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await q.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await Pn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await q.isServiceRegistered(s);if(r)i?(await q.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await q.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await q.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),XE(new Error,o,zE.BAD_REQUEST,void 0,void 0,!0)}}else await q.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(NN,"restartService");async function uY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{q===void 0&&(q=gn());let e=pN(process.argv);if(r_.isEmpty(e.service))console.log("Stopping HarperDB."),await q.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await q.stopClustering():await q.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(uY,"stop");async function gN(){await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await jE.updateNodeNameLocalStreams(),await jE.closeConnection()}a(gN,"restartAllClusteringServices");async function Pn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=$i.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await q.isServiceRegistered(e),i=r||s?await q.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(cY);break}await q.reloadClustering();break;case(r&&i&&!t):await q.stopClustering();break;case(r&&!i&&t):await q.startClustering();break;case(r&&i&&t):await gN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await q.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await ZE.generateNatsConfig(!0,e),await q.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await jE.createWorkQueueStream(sY.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await q.reload(e):(await ZE.generateNatsConfig(!0,e),await q.restart(e),await ZE.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(Pn,"restartClustering")});var vN=S((JX,BN)=>{"use strict";var WX=require("lodash"),Ze=T(),{handleHDBError:CN,hdb_errors:lY}=D(),{HDB_ERROR_MSGS:EY,HTTP_STATUS_CODES:dY}=lY,td=I();BN.exports={getRolePermissions:SY};var Ds=Object.create(null),hY=a(e=>({key:e,perms:{}}),"perms_template_obj"),UN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),yN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),rd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...yN(t,r,s,n)}),"table_perms_template"),bN=a((e,t=yN())=>({attribute_name:e,describe:PN(t),[Yi]:t[Yi],[sd]:t[sd],[nd]:t[nd]}),"attr_perms_template"),wN=a((e,t=!1)=>({attribute_name:e,describe:t,[Yi]:t}),"timestamp_attr_perms_template"),{READ:Yi,INSERT:sd,UPDATE:nd}=Ze.PERMS_CRUD_ENUM,DN=Object.values(Ze.PERMS_CRUD_ENUM),MN=[Yi,sd,nd];function SY(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ds[t]&&Ds[t].key===s)return Ds[t].perms;let n=fY(e,r);return Ds[t]?Ds[t].key=s:Ds[t]=hY(s),Ds[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw td.error(s),td.debug(r),CN(new Error,EY.OUTDATED_PERMS_TRANSLATION_ERROR,dY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
-
${r.stack}`;throw td.error(s),CN(new Error)}}}a(SY,"getRolePermissions");function fY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=TY(t[i]);return}r[i]=UN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=mY(c,_);r[i].describe||DN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=rd()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=rd()})}),r}a(fY,"translateRolePermissions");function TY(e){let t=UN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rd(!0,!0,!0,!0,!0)}),t}a(TY,"createStructureUserPermissions");function mY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Ze.TIME_STAMP_NAMES.includes(E)&&(d=wN(E,l[Yi])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=bN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=PN(l),n.attribute_permissions.push(l),c||RY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=wN(u):l=bN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=LN(n),n}else return e.describe=LN(e),e}a(mY,"getTableAttrPerms");function LN(e){return DN.filter(t=>e[t]).length>0}a(LN,"getSchemaTableDescribePerm");function PN(e){return MN.filter(t=>e[t]).length>0}a(PN,"getAttributeDescribePerm");function RY(e,t){MN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(RY,"checkForHashPerms")});var xN=S((ZX,kN)=>{"use strict";var Te=require("joi"),HN=require("fs-extra"),GN=require("path"),Bn=Ee(),qN=Y(),FN=T(),VN=I(),{hdb_errors:AY}=D(),{HDB_ERROR_MSGS:lt}=AY,jr=/^[a-zA-Z0-9-_]+$/;kN.exports={getDropCustomFunctionValidator:pY,setCustomFunctionValidator:NY,addCustomFunctionProjectValidator:gY,dropCustomFunctionProjectValidator:IY,packageCustomFunctionProjectValidator:CY,deployCustomFunctionProjectValidator:bY};function Ki(e,t,r){try{let s=qN.get(FN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=GN.join(s,t);return HN.existsSync(n)?e?t:r.message(lt.PROJECT_EXISTS):e?r.message(lt.NO_PROJECT):t}catch(s){return VN.error(s),r.message(lt.VALIDATION_ERR)}}a(Ki,"checkProjectExists");function OY(e,t,r,s){try{let n=qN.get(FN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=GN.join(n,e,t,r+".js");return HN.existsSync(i)?r:s.message(lt.NO_FILE)}catch(n){return VN.error(n),s.message(lt.VALIDATION_ERR)}}a(OY,"checkFileExists");function pY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(jr).custom(OY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":lt.BAD_FILE_NAME})});return Bn.validateBySchema(e,t)}a(pY,"getDropCustomFunctionValidator");function NY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(jr).required().messages({"string.pattern.base":lt.BAD_FILE_NAME}),function_content:Te.string().required()});return Bn.validateBySchema(e,t)}a(NY,"setCustomFunctionValidator");function gY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!1)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Bn.validateBySchema(e,t)}a(gY,"addCustomFunctionProjectValidator");function IY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Bn.validateBySchema(e,t)}a(IY,"dropCustomFunctionProjectValidator");function CY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Bn.validateBySchema(e,t)}a(CY,"packageCustomFunctionProjectValidator");function bY(e){let t=Te.object({project:Te.string().pattern(jr).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":lt.BAD_PACKAGE})});return Bn.validateBySchema(e,t)}a(bY,"deployCustomFunctionProjectValidator")});var od=S((XX,KN)=>{"use strict";var we=require("fs-extra"),s_=require("fast-glob"),ie=require("path"),$N=require("tar-fs"),YN=require("uuid").v4,Qi=require("normalize-path"),Ms=xN(),Le=I(),At=T(),Ot=Y(),{PACKAGE_ROOT:wY}=T(),{handleHDBError:Xe,hdb_errors:LY}=D(),{HDB_ERROR_MSGS:es,HTTP_STATUS_CODES:ze}=LY,UY=ie.join(wY,"custom_function_template"),id=ie.join(Ot.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ad(){let e=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Xe(new Error,es.NOT_ENABLED,ze.BAD_REQUEST,void 0,void 0,!0)}a(ad,"isCFEnabled");function yY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Xe(new Error,es.FUNCTION_STATUS,ze.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(yY,"customFunctionsStatus");function DY(){Le.trace("getting custom api endpoints");let e={},t=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{s_.sync(Qi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:s_.sync(Qi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:s_.sync(Qi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Qi(`${s}/static`))&&s_.sync(Qi(`${s}/static/**/*`)).length}})}catch(r){throw Xe(new Error,es.GET_FUNCTIONS,ze.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(DY,"getCustomFunctions");function MY(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ie.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Xe(new Error,es.GET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(MY,"getCustomFunction");function PY(e){ad(),e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.setCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("setting custom function file content");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ie.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Xe(new Error,es.SET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(PY,"setCustomFunction");function BY(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function file");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ie.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Xe(new Error,es.DROP_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(BY,"dropCustomFunction");function vY(e){ad(),e.project&&(e.project=ie.parse(e.project).name);let t=Ms.addCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("adding custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(UY,n),`Successfully created custom function project: ${s}`}catch(n){throw Xe(new Error,es.ADD_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(vY,"addCustomFunctionProject");function HY(e){e.project&&(e.project=ie.parse(e.project).name);let t=Ms.dropCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Xe(new Error,es.DROP_FUNCTION_PROJECT,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(HY,"dropCustomFunctionProject");async function GY(e){e.project&&(e.project=ie.parse(e.project).name);let t=Ms.packageCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("packaging custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ie.join(r,s),i=YN();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(id);let c=ie.join(id,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ie.join(n,"node_modules"))}),$N.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(GY,"packageCustomFunctionProject");async function qY(e){ad(),e.project&&(e.project=ie.parse(e.project).name);let t=Ms.deployCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("deploying custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ie.join(r,s);await we.ensureDir(o);let c,_;do c=ie.join(id,YN()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe($N.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(qY,"deployCustomFunctionProject");KN.exports={customFunctionsStatus:yY,getCustomFunctions:DY,getCustomFunction:MY,setCustomFunction:PY,dropCustomFunction:BY,addCustomFunctionProject:vY,dropCustomFunctionProject:HY,packageCustomFunctionProject:GY,deployCustomFunctionProject:qY}});var cd=S((zX,WN)=>{"use strict";var cr=require("joi"),QN=Ee();WN.exports={readTransactionLogValidator:FY,deleteTransactionLogsBeforeValidator:VY};function FY(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),from:cr.date().timestamp(),to:cr.date().timestamp(),limit:cr.number().min(1)});return QN.validateBySchema(e,t)}a(FY,"readTransactionLogValidator");function VY(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),timestamp:cr.date().timestamp().required()});return QN.validateBySchema(e,t)}a(VY,"deleteTransactionLogsBeforeValidator")});var i_=S((jX,jN)=>{"use strict";var _d=T(),n_=Rt(),JN=C(),ZN=Y(),XN=Fr(),{handleHDBError:vn,hdb_errors:kY}=D(),{HTTP_STATUS_CODES:Hn}=kY,{readTransactionLogValidator:xY,deleteTransactionLogsBeforeValidator:$Y}=cd(),zN="This operation relies on clustering and cannot run with it disable.",YY="Logs successfully deleted from transaction log.",KY="All logs successfully deleted from transaction log.";jN.exports={readTransactionLog:QY,deleteTransactionLogsBefore:WY};async function QY(e){let t=xY(e);if(t)throw vn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!ZN.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vn(new Error,zN,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=JN.checkSchemaTableExist(r,s);if(n)throw vn(new Error,n,Hn.NOT_FOUND,void 0,void 0,!0);let i=XN.createNatsTableStreamName(r,s),o=await n_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===_d.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(QY,"readTransactionLog");async function WY(e){let t=$Y(e);if(t)throw vn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!ZN.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vn(new Error,zN,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=JN.checkSchemaTableExist(r,s);if(i)throw vn(new Error,i,Hn.NOT_FOUND,void 0,void 0,!0);let o=XN.createNatsTableStreamName(r,s),{jsm:c}=await n_.getNATSReferences(),_=await n_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=YY,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=KY):E=(await n_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(WY,"deleteTransactionLogsBefore")});var ld=S((e3,_g)=>{"use strict";var a_=require("joi"),o_=require("path"),eg=require("fs-extra"),{exec:JY}=require("child_process"),ZY=require("util"),tg=ZY.promisify(JY),XY=T(),{handleHDBError:Gn,hdb_errors:zY}=D(),{HTTP_STATUS_CODES:qn}=zY,rg=Y(),jY=Ee(),c_=I();rg.initSync();var ud=rg.get(XY.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),sg="npm install --omit=dev --json",eK=`${sg} --dry-run`;_g.exports={installModules:tK,auditModules:rK};async function ng(e,t=void 0){let{stdout:r,stderr:s}=await tg(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
|
+
`,"")}a(lA,"runCommand");async function YG(){try{await CG.access(Pl)}catch{return!1}let e=await lA(`${Pl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return LG.eq(t,$G)}a(YG,"checkNATSServerInstalled");async function Hl(e,t,r,s=!0,n="127.0.0.1"){return vG({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tr.get(ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}a(Hl,"createConnection");async function KG(){Yt&&(await Yt.close(),Yt=void 0)}a(KG,"closeConnection");async function Xo(){if(!Yt){let e=await aA.getClusterUser();if(Ts(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=Tr.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Yt=await Hl(t,e.username,e.decrypt_hash)}return Yt}a(Xo,"getConnection");async function En(){if(pi)return pi;Ts(Yt)&&await Xo();let{domain:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ts(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return pi=await Yt.jetstreamManager({domain:e}),pi}a(En,"getJetStreamManager");async function EA(){if(Ni)return Ni;Ts(Yt)&&await Xo();let{domain:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ts(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ni=Yt.jetstream({domain:e}),Ni}a(EA,"getJetStream");async function Ut(){let e=Yt||await Xo(),t=pi||await En(),r=Ni||await EA();return{connection:e,jsm:t,js:r}}a(Ut,"getNATSReferences");async function WG(){let e=Tr.get(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await aA.getClusterUser(),s=await Hl(e,t,r),n=vl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(uA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Bl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(WG,"getServerList");async function ql(e,t){let{jsm:r}=await Ut();await r.streams.add({name:e,storage:oA.File,retention:cA.Limits,subjects:t})}a(ql,"createLocalStream");async function dA(){let{jsm:e}=await Ut(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(dA,"listStreams");async function QG(e){let{jsm:t}=await Ut();await t.streams.delete(e)}a(QG,"deleteLocalStream");async function JG(e){let{connection:t}=await Ut(),r=[],s=vl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(uA.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(JG,"listRemoteStreams");async function ZG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Ut(),i=yG(),o=[],c={ack_policy:_A.None,durable_name:i,deliver_subject:i,deliver_policy:Ml.All};t&&(c.deliver_policy=Ml.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=GG(l),d=iA(E.data),h={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),h.originators=m)}o.push(h),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(ZG,"viewStream");async function XG(e,t,r=[],s=[]){mr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Ut(),o=await zo(),c=`${e}.${o}`,_=qG();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{mr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Dl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")mr.trace(`publishToStream creating stream: ${t}`),await ql(t,[c]),await i.publish(c,Dl(r[u]),{headers:_});else throw E}}a(XG,"publishToStream");function Ii(e){e=e.toLowerCase();let t=gi.join(Tr.get(ie.CONFIG_PARAMS.ROOTPATH),kG);if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ts(yl)&&(yl={port:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:gi.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),yl;if(e===ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ts(Ul)&&(Ul={port:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ai.getConfigFromFile(ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:gi.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Ul;mr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ii,"getServerConfig");async function zG(e){let{jsm:t}=await Ut(),r=await zo();try{await t.streams.add({name:e.stream_name,storage:oA.File,retention:cA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.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:_A.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ml.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(zG,"createWorkQueueStream");async function hA(e,t,r){let{jsm:s}=await Ut(),n=await s.streams.info(t),i=SA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Zo.createNatsTableStreamName(c,_),l=i===e,E,d,h=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,C=n.config.sources.length;R<C;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){h=!0;break}if(h===!0){if(E.opt_start_time===o)return;await TA(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(hA,"addSourceToWorkStream");function SA(e){return e.split(".")[1]}a(SA,"extractServerName");async function fA(e,t,r){let{schema:s,table:n}=r,i=Zo.createNatsTableStreamName(s,n),{jsm:o}=await Ut(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await TA(s,n,u,t)}a(fA,"removeSourceFromWorkStream");async function TA(e,t,r,s){let n=await En(),i;try{i=AA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mr.error("Error purging source subject",i,"from work stream",s)}}a(TA,"purgeSourceFromWorkStream");async function jG(e,t,r=2e3,s=vl()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=Dl(t),{connection:i}=await Ut(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return iA(c.data)}a(jG,"request");function Gl(e){return new Promise(async(t,r)=>{let s=MG(Pl,["--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(Gl,"reloadNATS");async function eF(){let{pid_file_path:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Gl(e)}a(eF,"reloadNATSHub");async function tF(){let{pid_file_path:e}=Ii(ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Gl(e)}a(tF,"reloadNATSLeaf");function rF(e,t,r){let s;switch(e.code){case rA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case rA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(rF,"requestErrorHandler");async function sF(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await PG.writeTransaction(ie.SYSTEM_SCHEMA_NAME,ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await hA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await fA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(sF,"updateWorkStream");async function mA(e,t){let r=Zo.createNatsTableStreamName(e,t),s=await zo(),n=AA(e,t,s);await ql(r,[n])}a(mA,"createLocalTableStream");async function nF(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mA(s,n)}}a(nF,"createTableStreams");async function RA(e,t){if(Tr.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Zo.createNatsTableStreamName(e,t),{jsm:s}=await Ut();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mr.warn(r);else throw r}}a(RA,"purgeTableStream");async function iF(e,t){if(Tr.get(ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await RA(e,t[r])}a(iF,"purgeSchemaTableStreams");async function aF(e){return(await En()).streams.info(e)}a(aF,"getStreamInfo");function AA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(AA,"createSubjectName");async function zo(){if(Oi)return Oi;if(Oi=(await En())?.nc?.info?.server_name,Oi===void 0)throw new Error("Unable to get jetstream manager server name");return Oi}a(zo,"getJsmServerName");async function oF(){let e=await En(),t=await zo(),r=await dA();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===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");mr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(oF,"updateNodeNameLocalStreams")});var kl=S((UZ,gA)=>{"use strict";var dn=require("path"),rc=require("fs-extra"),cF=sR(),_F=aR(),uF=cR(),lF=uR(),Fl=kr(),Sn=b(),yt=ur(),tc=T(),jo=he(),{CONFIG_PARAMS:we}=tc,sc=I(),nc=Y(),pA=vr(),Vl=mt(),hn="clustering",EF=1e4,NA=5;gA.exports={generateNatsConfig:dF,removeNatsConfig:hF};async function dF(e=!1,t=void 0){nc.initSync();let r=nc.get(we.ROOTPATH),s=dn.join(r,hn,jo.PID_FILES.HUB),n=dn.join(r,hn,jo.PID_FILES.LEAF),i=dn.join(r,hn,"leaf"),o=dn.join(r,hn,jo.NATS_CONFIG_FILES.HUB_SERVER),c=dn.join(r,hn,jo.NATS_CONFIG_FILES.LEAF_SERVER),_=yt.getConfigFromFile(we.CLUSTERING_TLS_CERTIFICATE),u=yt.getConfigFromFile(we.CLUSTERING_TLS_PRIVATEKEY),l=yt.getConfigFromFile(we.CLUSTERING_TLS_CERT_AUTH),E=yt.getConfigFromFile(we.CLUSTERING_TLS_INSECURE),d=yt.getConfigFromFile(we.CLUSTERING_NODENAME),h=yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Vl.checkNATSServerInstalled()||ic("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await Fl.listUsers(),R=yt.getConfigFromFile(we.CLUSTERING_USER),C=await Fl.getClusterUser();(Sn.isEmpty(C)||C.active!==!0)&&ic(`invalid cluster user '${R}'`),e||(await ec(we.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ec(we.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ec(we.CLUSTERING_HUBSERVER_NETWORK_PORT),await ec(we.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[_a,wr]of m.entries())wr.role.role===tc.ROLE_TYPES_ENUM.CLUSTER_USER&&wr.active&&(L.push(new lF(wr.username,pA.decrypt(wr.hash))),B.push(new uF(wr.username,pA.decrypt(wr.hash))));let X=[],{hub_routes:V}=yt.getClusteringRoutes();if(!Sn.isEmptyOrZeroLength(V))for(let _a of V)X.push(`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@${_a.host}:${_a.port}`);let Q=new cF(yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,h,yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_CLUSTER_NAME),yt.getConfigFromFile(we.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),X,L,B);t=Sn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===tc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await rc.writeJson(o,Q),sc.trace(`Hub server config written to ${o}`));let ke=`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@0.0.0.0:${h}`,$e=`tls://${C.uri_encoded_name}:${C.uri_encoded_d_hash}@0.0.0.0:${h}`,ca=new _F(yt.getConfigFromFile(we.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[$e],L,B,_,u,l,E);(t===void 0||t===tc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await rc.writeJson(c,ca),sc.trace(`Leaf server config written to ${c}`))}a(dF,"generateNatsConfig");async function ec(e){let t=nc.get(e);Sn.isEmpty(t)&&ic(`port undefined for '${e}'`),await Sn.isPortTaken(t)&&ic(`'${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(ec,"isPortAvailable");function ic(e){let t=`Error generating clustering config: ${e}`;sc.error(t),console.error(t),process.exit(1)}a(ic,"generateNatsConfigError");async function hF(e){let{port:t,config_file:r}=Vl.getServerConfig(e),{username:s,decrypt_hash:n}=await Fl.getClusterUser(),i=0,o=500;for(;i<NA;){try{let u=await Vl.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){sc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=NA)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 Sn.async_set_timeout(o*i)}let c="0".repeat(EF),_=dn.join(nc.get(we.ROOTPATH),hn,r);await rc.writeFile(_,c),await rc.remove(_)}a(hF,"removeNatsConfig")});var oc=S((yZ,yA)=>{"use strict";var se=Y(),IA=mi(),w=T(),$l=he(),Ae=require("path"),{PACKAGE_ROOT:ac}=T(),_e="/dev/null",fn=Ae.join(ac,"launchServiceScripts"),bA=Ae.join(ac,"utility/scripts"),SF=Ae.join(bA,w.HDB_RESTART_SCRIPT),wA=Ae.resolve(ac,"dependencies",`${process.platform}-${process.arch}`,$l.NATS_BINARY_NAME),Pe,Be;function rr(){(Pe===void 0||Be===void 0)&&(se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(rr,"initLogConfig");function CA(){rr();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.IPC),t={name:w.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:w.SERVICE_SERVERS_CWD.IPC};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:w.SERVICE_SERVERS.IPC}}a(CA,"generateIPCServerConfig");function LA(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,w.PROCESS_LOG_NAMES.HDB),t=IA.licenseSearch(),r=t.ram_allocation?w.MEM_SETTING_KEY+t.ram_allocation:w.MEM_SETTING_KEY+w.RAM_ALLOCATION_ENUM.DEFAULT,s={name:w.PROCESS_DESCRIPTORS.HDB,script:w.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:se.get(w.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:fn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(LA,"generateHDBServerConfig");function UA(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=IA.licenseSearch(),r=t.ram_allocation?w.MEM_SETTING_KEY+t.ram_allocation:w.MEM_SETTING_KEY+w.RAM_ALLOCATION_ENUM.DEFAULT,s={name:w.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:w.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:se.get(w.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:fn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(UA,"generateCFServerConfig");function fF(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(w.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",$l.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:wA,args:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(fF,"generateNatsHubServerConfig");function TF(){rr(),se.initSync(),Pe=se.get(w.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=se.get(w.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=se.get(w.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",$l.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:wA,args:`-c ${t}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(TF,"generateNatsLeafServerConfig");function mF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:w.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(mF,"generateNatsIngestServiceConfig");function RF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:w.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(RF,"generateNatsReplyServiceConfig");function AF(){rr(),se.initSync();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:w.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fn,autorestart:!1};return Pe||(t.out_file=_e,t.error_file=_e),t}a(AF,"generateClusteringUpgradeV4ServiceConfig");function OF(){rr();let e=Ae.join(Be,w.PROCESS_LOG_NAMES.PM2),t={name:w.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:w.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:bA};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:SF}}a(OF,"generateRestart");function pF(e){rr();let t=Ae.join(Be,w.PROCESS_LOG_NAMES.JOBS),r=Ae.join(ac,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[w.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:fn,autorestart:!1};return Pe||(s.out_file=_e,s.error_file=_e),{...s,script:Ae.join(r,"jobProcess.js")}}a(pF,"generateJobConfig");function NF(){return{apps:[CA(),LA(),UA()]}}a(NF,"generateAllServiceConfigs");yA.exports={generateAllServiceConfigs:NF,generateIPCServerConfig:CA,generateHDBServerConfig:LA,generateCFServerConfig:UA,generateRestart:OF,generateNatsHubServerConfig:fF,generateNatsLeafServerConfig:TF,generateNatsIngestServiceConfig:mF,generateNatsReplyServiceConfig:RF,generateClusteringUpgradeV4ServiceConfig:AF,generateJobConfig:pF}});var MA=S((DZ,DA)=>{var gF=Ee(),IF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};DA.exports=function(e){return gF.validateObject(e,IF)}});var xl=S((MZ,PA)=>{"use strict";var bF=T().OPERATIONS_ENUM,cc=class{constructor(t,r,s,n=void 0){this.operation=bF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(cc,"UpdateObject");PA.exports=cc});var vA=S((PZ,BA)=>{"use strict";var wF={OPERATION:"operation",REFRESH:"refresh"},_c=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(_c,"JWTTokens");var uc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(uc,"JWTRSAKeys");BA.exports={JWTTokens:_c,TOKEN_TYPE_ENUM:wF,JWTRSAKeys:uc}});var hc=S((BZ,FA)=>{"use strict";var wi=require("jsonwebtoken"),Yl=require("fs-extra"),Kl=b(),Dt=T(),{handleHDBError:at,hdb_errors:CF}=D(),{HTTP_STATUS_CODES:ot,AUTHENTICATION_ERROR_MSGS:ct}=CF,bi=I(),HA=Yo(),Jl=kr(),LF=Lt().update,UF=xl(),yF=Ws(),{UserEventMsg:DF}=os(),$r=Y();$r.initSync();var Wl=require("path"),{JWTTokens:MF,JWTRSAKeys:PF,TOKEN_TYPE_ENUM:lc}=vA(),BF=$r.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?$r.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",vF=$r.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?$r.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ec="RS256",Ql;FA.exports={createTokens:HF,validateOperationToken:GF,refreshOperationToken:qF,validateRefreshToken:GA};async function HF(e){if(Kl.isEmpty(e)||typeof e!="object")throw at(new Error,ct.INVALID_AUTH_OBJECT,ot.BAD_REQUEST,void 0,void 0,!0);if(Kl.isEmpty(e.username))throw at(new Error,ct.USERNAME_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);if(Kl.isEmpty(e.password))throw at(new Error,ct.PASSWORD_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Jl.findAndValidateUser(e.username,e.password),!t)throw at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw bi.error(d),at(new Error,ct.INVALID_CREDENTIALS,ot.UNAUTHORIZED,void 0,void 0,!0)}let r=await dc(),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 qA(i,r.private_key,r.passphrase),c=await wi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:vF,algorithm:Ec,subject:lc.REFRESH}),_=HA.hash(c),u=new UF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await LF(u)}catch(d){bi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw at(new Error,ct.REFRESH_TOKEN_SAVE_FAILED,ot.INTERNAL_SERVER_ERROR);return yF.signalUserChange(new DF(process.pid)),new MF(o,c)}a(HF,"createTokens");async function qA(e,t,r){return await wi.sign(e,{key:t,passphrase:r},{expiresIn:BF,algorithm:Ec,subject:lc.OPERATION})}a(qA,"signOperationToken");async function dc(){if(Ql===void 0)try{let e=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Wl.join($r.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Yl.readFile(e)).toString(),n=(await Yl.readFile(t)).toString(),i=(await Yl.readFile(r)).toString();Ql=new PF(i,n,s)}catch(e){throw bi.error(e),at(new Error,ct.NO_ENCRYPTION_KEYS,ot.INTERNAL_SERVER_ERROR)}return Ql}a(dc,"getJWTRSAKeys");async function qF(e){if(!e)throw at(new Error,ct.INVALID_BODY,ot.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw at(new Error,ct.REFRESH_TOKEN_REQUIRED,ot.BAD_REQUEST,void 0,void 0,!0);await GA(e.refresh_token);let t=await dc(),r=await wi.decode(e.refresh_token);return{operation_token:await qA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(qF,"refreshOperationToken");async function GF(e){try{let t=await dc(),r=await wi.verify(e,t.public_key,{algorithms:Ec,subject:lc.OPERATION});return await Jl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bi.warn(t),t.name&&t.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}}a(GF,"validateOperationToken");async function GA(e){let t;try{let r=await dc(),s=await wi.verify(e,r.public_key,{algorithms:Ec,subject:lc.REFRESH});t=await Jl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bi.warn(r),r.name&&r.name==="TokenExpiredError"?at(new Error,ct.TOKEN_EXPIRED,ot.FORBIDDEN):at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED)}if(!HA.validate(t.refresh_token,e))throw at(new Error,ct.INVALID_TOKEN,ot.UNAUTHORIZED);return t}a(GA,"validateRefreshToken")});var xA=S((HZ,$A)=>{"use strict";var FF=MA(),Tn=require("passport"),VF=require("passport-local").Strategy,kF=require("passport-http").BasicStrategy,$F=require("util"),xF=kr(),kA=$F.callbackify(xF.findAndValidateUser),vZ=rt(),YF=T(),VA=hc();Tn.use(new VF(function(e,t,r){kA(e,t,r)}));Tn.use(new kF(function(e,t,r){kA(e,t,r)}));Tn.serializeUser(function(e,t){t(null,e)});Tn.deserializeUser(function(e,t){t(null,e)});function KF(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Tn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===YF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?VA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):VA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Tn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(KF,"authorize");function WF(e,t){let r=FF(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(WF,"checkPermissions");$A.exports={authorize:KF,checkPermissions:WF}});var mn=S((qZ,YA)=>{"use strict";var Sc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Sc,"Node");var fc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(fc,"NodeSubscription");YA.exports={Node:Sc,NodeSubscription:fc}});var WA=S((GZ,KA)=>{"use strict";var QF=T().OPERATIONS_ENUM,Tc=class{constructor(t,r,s,n=void 0){this.operation=QF.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Tc,"UpsertObject");KA.exports=Tc});var Ci=S((FZ,QA)=>{"use strict";var mc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(mc,"RemotePayloadObject");var Rc=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(Rc,"RemotePayloadSubscription");QA.exports={RemotePayloadObject:mc,RemotePayloadSubscription:Rc}});var ZA=S((VZ,JA)=>{"use strict";var Ac=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(Ac,"TableSizeObject");JA.exports=Ac});var eO=S((kZ,jA)=>{"use strict";var JF=ZA(),XA=require("path"),zA=te(),ZF=Ye(),Rn=z(),XF=I();jA.exports=zF;async function zF(e){let t=new JF;try{let r=XA.join(zA.getBaseSchemaPath(),e.schema.toString()),s=await Rn.openEnvironment(r,e.name),n=Rn.statDBI(s,e.hash_attribute),i=XA.join(zA.getTransactionAuditStorePath(),e.schema.toString()),o=await Rn.openEnvironment(i,e.name,!0),c=Rn.statDBI(o,ZF.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Rn.environmentDataSize(r,e.name),u=await Rn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){XF.warn(`unable to stat table dbi due to ${r}`)}return t}a(zF,"lmdbGetTableSize")});var rO=S(($Z,tO)=>{"use strict";var jF=T(),Oc=class{constructor(t){this.operator=jF.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Oc,"SystemInformationOperation");tO.exports=Oc});var nO=S((xZ,sO)=>{"use strict";var pc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(pc,"SystemInformationObject");sO.exports=pc});var gc=S((KZ,iO)=>{"use strict";var ve=require("systeminformation"),An=I(),e0=T(),t0=eO(),r0=on(),s0=Y();s0.initSync();var YZ=rO(),n0=nO(),Nc;iO.exports={getHDBProcessInfo:jl,getNetworkInfo:tE,getDiskInfo:eE,getMemoryInfo:zl,getCPUInfo:Xl,getTimeInfo:Zl,getSystemInformation:rE,systemInformation:i0,getTableSize:sE};function Zl(){return ve.time()}a(Zl,"getTimeInfo");async function Xl(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:h,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:C,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(X=>{let{raw_load:V,raw_load_idle:Q,raw_load_irq:ke,raw_load_nice:$e,raw_load_system:ca,raw_load_user:_a,...wr}=X;B.cpus.push(wr)}),l.current_load=B,l}catch(e){return An.error(`error in getCPUInfo: ${e}`),{}}}a(Xl,"getCPUInfo");async function zl(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return An.error(`error in getMemoryInfo: ${e}`),{}}}a(zl,"getMemoryInfo");async function jl(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(e0.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return An.error(`error in getHDBProcessInfo: ${t}`),e}}a(jl,"getHDBProcessInfo");async function eE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return An.error(`error in getDiskInfo: ${t}`),e}}a(eE,"getDiskInfo");async function tE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return An.error(`error in getNetworkInfo: ${t}`),e}}a(tE,"getNetworkInfo");async function rE(){if(Nc!==void 0)return Nc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,Nc=e,Nc}catch(t){return An.error(`error in getSystemInformation: ${t}`),e}}a(rE,"getSystemInformation");async function sE(){let e=[],t=await r0.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await t0(s));return e}a(sE,"getTableSize");async function i0(e){let t=new n0;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rE(),t.time=Zl(),t.cpu=await Xl(),t.memory=await zl(),t.disk=await eE(),t.network=await tE(),t.harperdb_processes=await jl(),t.table_size=await sE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rE();break;case"time":t.time=Zl();break;case"cpu":t.cpu=await Xl();break;case"memory":t.memory=await zl();break;case"disk":t.disk=await eE();break;case"network":t.network=await tE();break;case"harperdb_processes":t.harperdb_processes=await jl();break;case"table_size":t.table_size=await sE();break;default:break}return t}a(i0,"systemInformation")});var nE=S((JZ,aO)=>{"use strict";var WZ=require("fs-extra"),QZ=I();aO.exports={version:a0,printVersion:c0,nodeVersion:o0};var xr=Ll();function a0(){if(xr)return xr.version}a(a0,"version");function o0(){if(xr&&xr.engines&&xr.engines["preferred-node"])return xr.engines["preferred-node"]}a(o0,"nodeVersion");function c0(){xr&&console.log(`HarperDB Version ${xr.version}`)}a(c0,"printVersion")});var Rs=S((zZ,uO)=>{"use strict";var _0=Lt(),iE=b(),aE=require("util"),ms=T(),oO=Y();oO.initSync();var u0=xA(),cO=ft(),{Node:ZZ,NodeSubscription:XZ}=mn(),l0=_s(),E0=WA(),{RemotePayloadObject:d0,RemotePayloadSubscription:h0}=Ci(),{handleHDBError:S0,hdb_errors:f0}=D(),{HTTP_STATUS_CODES:T0,HDB_ERROR_MSGS:m0}=f0,R0=xt(),A0=gc(),O0=nE(),p0=aE.promisify(u0.authorize),N0=aE.promisify(cO.searchByHash),g0=aE.promisify(cO.searchByValue);uO.exports={authHeaderToUser:I0,isEmpty:b0,getNodeRecord:w0,upsertNodeRecord:C0,buildNodePayloads:L0,checkClusteringEnabled:U0,getAllNodeRecords:y0,getSystemInfo:D0,reverseSubscription:_O};async function I0(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await p0(t,null),e}a(I0,"authHeaderToUser");function b0(e){return e==null}a(b0,"isEmpty");async function w0(e){let t=new l0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return N0(t)}a(w0,"getNodeRecord");async function C0(e){let t=new E0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return _0.upsert(t)}a(C0,"upsertNodeRecord");function _O(e){if(iE.isEmpty(e.subscribe)||iE.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(_O,"reverseSubscription");function L0(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=iE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=_O(c),h=new h0(_,u,l,d,E,c.start_time);n.push(h)}return new d0(r,t,n,s)}a(L0,"buildNodePayloads");function U0(){if(!oO.get(ms.CONFIG_PARAMS.CLUSTERING_ENABLED))throw S0(new Error,m0.CLUSTERING_NOT_ENABLED,T0.BAD_REQUEST,void 0,void 0,!0)}a(U0,"checkClusteringEnabled");async function y0(){let e=new R0(ms.SYSTEM_SCHEMA_NAME,ms.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return g0(e)}a(y0,"getAllNodeRecords");async function D0(){let e=await A0.getSystemInformation();return{hdb_version:O0.version(),node_version:e.node_version,platform:e.platform}}a(D0,"getSystemInfo")});var On=S((jZ,OO)=>{"use strict";var P=T(),Ic=b(),Li=kl(),bc=mt(),M0=he(),$=require("pm2"),P0=require("fs-extra"),Rr=oc(),_t=Y(),Ar=I(),B0=oc(),v0=Rs(),H0=require("util"),EO=H0.promisify(require("child_process").exec),dO=require("path");OO.exports={start:As,stop:Cc,reload:SO,restart:fO,list:cE,describe:Lc,connect:sr,kill:mO,startAllServices:W0,startService:wc,getUniqueServicesList:_E,restartAllServices:Q0,stopAllServices:J0,isServiceRegistered:RO,reloadStopStart:oE,restartHdb:TO,deleteProcess:Y0,configureLogRotate:z0,startClustering:AO,isHdbRestartRunning:K0,isClusteringRunning:eV,stopClustering:j0,reloadClustering:tV};var{PACKAGE_ROOT:q0}=T(),G0="2.7.0",hO=dO.join(q0,"node_modules/pm2/bin/pm2"),F0="Log rotate installed.",V0="Error installing log rotate.",k0="Log rotate updated.",$0="Error updating log rotate.",x0="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 sr(){return new Promise((e,t)=>{$.connect((r,s)=>{r&&t(r),e(s)})})}a(sr,"connect");function As(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.start(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(As,"start");function Cc(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.stop(e,(s,n)=>{s&&($.disconnect(),r(s)),$.delete(e,(i,o)=>{i&&($.disconnect(),r(s)),$.disconnect(),t(o)})})})}a(Cc,"stop");function SO(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.reload(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(SO,"reload");function fO(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.restart(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(fO,"restart");function Y0(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.delete(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(Y0,"deleteProcess");async function TO(){await As(B0.generateRestart())}a(TO,"restartHdb");async function K0(){let e=await cE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(K0,"isHdbRestartRunning");function cE(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.list((r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(cE,"list");function Lc(e){return new Promise(async(t,r)=>{try{await sr()}catch(s){r(s)}$.describe(e,(s,n)=>{s&&($.disconnect(),r(s)),$.disconnect(),t(n)})})}a(Lc,"describe");function mO(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.killDaemon((r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(mO,"kill");async function W0(){try{await AO(),await As(Rr.generateAllServiceConfigs())}catch(e){throw $.disconnect(),e}}a(W0,"startAllServices");async function wc(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Rr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Rr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Rr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Rr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Rr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Rr.generateNatsHubServerConfig(),await As(t),await Li.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Rr.generateNatsLeafServerConfig(),await As(t),await Li.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Rr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await As(t)}catch(t){throw $.disconnect(),t}}a(wc,"startService");async function _E(){try{let e=await cE(),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 $.disconnect(),e}}a(_E,"getUniqueServicesList");async function Q0(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===P.PROCESS_DESCRIPTORS.HDB?t=!0:await oE(o):await fO(o))}t&&await oE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw $.disconnect(),t}}a(Q0,"restartAllServices");async function J0(){try{let e=await _E();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Cc(s.name)}if(await mO(),_t.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await P0.readFile(dO.join(_t.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ar.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw $.disconnect(),e}}a(J0,"stopAllServices");async function RO(e){return!Ic.isEmptyOrZeroLength(await Lc(e))}a(RO,"isServiceRegistered");async function oE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?_t.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):_t.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Lc(e),s=Ic.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?Ar.error(x0):(await Cc(e),await wc(e)):e===P.PROCESS_DESCRIPTORS.HDB?await TO():await SO(e)}a(oE,"reloadStopStart");function Z0(){return new Promise(async(e,t)=>{try{await sr()}catch(r){t(r)}$.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&($.disconnect(),t(r)),$.disconnect(),e(s)})})}a(Z0,"stopLogrotate");async function X0(){let{stdout:e,stderr:t}=await EO(`${process.platform==="win32"?"node":""} ${hO} install pm2-logrotate@${G0}`);if(Ar.debug(`loadLogRotate stdout: ${e}`),t)throw Ar.error(V0),t;Ar.info(F0)}a(X0,"installLogRotate");async function lO(){let e={max_size:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${hO} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await EO(t);if(Ar.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ar.error($0),s;Ar.info(k0)}a(lO,"updateLogRotateConfig");async function z0(){_t.initSync();let e=Ic.autoCastBoolean(_t.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Lc(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Ic.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await X0(),await lO();return}if(e&&s){await As(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await lO();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await Z0()}a(z0,"configureLogRotate");async function AO(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await wc(r)}await bc.createWorkQueueStream(M0.WORK_QUEUE_CONSUMER_NAMES),await bc.updateNodeNameLocalStreams();let e=await v0.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){Ar.info("Starting clustering upgrade 4.0.0 process"),await wc(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(AO,"startClustering");async function j0(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await Cc(t)}}a(j0,"stopClustering");async function eV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await RO(t)===!1)return!1}return!0}a(eV,"isClusteringRunning");async function tV(){await Li.generateNatsConfig(!0),await bc.reloadNATSHub(),await bc.reloadNATSLeaf(),await Li.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Li.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(tV,"reloadClustering")});var uE=S((eX,pO)=>{"use strict";var Uc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Uc,"ClusteringOriginObject");pO.exports=Uc});var gn=S((tX,IO)=>{"use strict";var NO=b(),yi=Y(),ue=T(),lE=he(),pn=mt(),Se=I(),gO=uE(),rV=vr();yi.initSync();var Nn=lE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Ui=lE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;IO.exports={sendAttributeTransaction:Dc,postOperationHandler:nV};async function Dc(e,t,r=[]){if(!!yi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!NO.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==ue.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=yi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new gO(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${Nn}`,o),await pn.publishToStream(Ui,Nn,[o],r)}}}a(Dc,"sendAttributeTransaction");async function yc(e,t,r,s=[]){if(e.schema===ue.SYSTEM_SCHEMA_NAME)return;let n=sV(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await pn.publishToStream(`${lE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,rV.createNatsTableStreamName(e.schema,e.table),[n],s))}a(yc,"sendOperationTransaction");function sV(e,t,r){if(NO.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===ue.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(sV,"convertCRUDOperationToTransaction");async function nV(e,t,r=[]){if(!yi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Se.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=yi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new gO(t.txn_time,s,n);switch(e.operation){case ue.OPERATIONS_ENUM.INSERT:try{await yc(e,t.inserted_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.DELETE:try{await yc(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPDATE:try{await yc(e,t.update_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case ue.OPERATIONS_ENUM.UPSERT:try{await yc(e,t.upserted_hashes,i,r),await Dc(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case ue.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:ue.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await pn.publishToStream(Ui,Nn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for csv_data_load."),Se.error(o)}break;default:break}return t}a(nV,"postOperationHandler")});var UO=S((rX,LO)=>{"use strict";var iV=ft(),aV=Es(),bO=I(),wO=Lt(),oV=Jo(),cV=require("clone"),dE=require("alasql"),_V=wo(),CO=require("util"),uV=CO.promisify(aV.getTableSchema),lV=CO.promisify(iV.search),EV=T(),EE=b(),dV=gn();_V(dE);LO.exports={update:SV};var hV="There was a problem performing this update. Please check the logs and try again.";async function SV({statement:e,hdb_user:t}){let r=await uV(e.table.databaseid,e.table.tableid),s=fV(e.columns);EE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=cV(n),c=EE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=dE.parse(_).statements[0],l=await oV.writeTransaction(r.schema,r.name,async()=>{let E=await lV(u),d=TV(s,E);return mV(o,d,t)});return await wO.flush({schema:r.schema,table:r.name}),l}a(SV,"update");function fV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=dE.compile(`SELECT ${r.expression.toString()} AS [${EV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw bO.error(t),new Error(hV)}}a(fV,"createUpdateRecord");function TV(e,t){return EE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(TV,"buildUpdateRecords");async function mV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await wO.update(s);await dV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){bO.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(mV,"updateRecords")});var DO=S((sX,yO)=>{var RV=require("alasql"),AV=ft(),OV=I(),pV=fr(),SE=require("util"),hE=b(),NV=T(),gV=Es(),IV=Jo(),bV=gn(),wV=Lt(),CV="record",LV="successfully deleted",UV=SE.callbackify(PV),yV=SE.promisify(AV.search),DV=SE.promisify(gV.getTableSchema);yO.exports={convertDelete:UV};function MV(e){return`${e.deleted_hashes.length} ${CV}${e.deleted_hashes.length===1?"":"s"} ${LV}`}a(MV,"generateReturnMessage");async function PV({statement:e,hdb_user:t}){let r=await DV(e.table.databaseid,e.table.tableid);hE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=hE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=RV.parse(o).statements[0],_={operation:NV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await IV.writeTransaction(r.schema,r.name,async()=>(_.records=await yV(c),pV.deleteRecords(_)));return await wV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await bV.postOperationHandler(_,u),hE.isEmptyOrZeroLength(u.message)&&(u.message=MV(u)),delete u.txn_time,u}catch(u){throw OV.error(u),u.hdb_code?u.message:u}}a(PV,"convertDelete")});var BO=S((nX,PO)=>{"use strict";var TE=on(),{hdb_errors:fE}=D();PO.exports={checkSchemaExists:MO,checkSchemaTableExists:BV,schema_describe:TE};async function MO(e){if(!global.hdb_schema[e])try{let t=await TE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return fE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(MO,"checkSchemaExists");async function BV(e,t){let r=await MO(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await TE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return fE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(BV,"checkSchemaTableExists")});var Mc=S((aX,FO)=>{"use strict";var In=xa(),Os=BO(),vO=I(),vV=require("uuid").v4,iX=require("clone"),wn=Ws(),ps=T(),HV=require("util"),Ns=fr(),{handleHDBError:He,hdb_errors:qV}=D(),{HDB_ERROR_MSGS:bn,HTTP_STATUS_CODES:qe}=qV,{SchemaEventMsg:Cn}=os(),HO=mt();FO.exports={createSchema:GV,createSchemaStructure:qO,createTable:FV,createTableStructure:GO,createAttribute:YV,dropSchema:VV,dropTable:kV,dropAttribute:$V};async function GV(e){try{let t=await qO(e);return wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(GV,"createSchema");async function qO(e){let t=In.schema_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);if(!await Os.checkSchemaExists(e.schema))throw He(new Error,bn.SCHEMA_EXISTS_ERR(e.schema),qe.BAD_REQUEST,ps.LOG_LEVELS.ERROR,bn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Ns.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(qO,"createSchemaStructure");async function FV(e){try{let t=await GO(e);return wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(FV,"createTable");async function GO(e){let t=In.create_table_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);In.validateTableResidence(e.residence);let r=await Os.checkSchemaExists(e.schema);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);if(!await Os.checkSchemaTableExists(e.schema,e.table))throw He(new Error,bn.TABLE_EXISTS_ERR(e.schema,e.table),qe.BAD_REQUEST,ps.LOG_LEVELS.ERROR,bn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:vV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ns.createTable(n,e);else throw He(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",qe.BAD_REQUEST);else await Ns.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(GO,"createTableStructure");async function VV(e){let t=In.schema_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaExists(e.schema);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);let s=await Os.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ns.dropSchema(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await HO.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(VV,"dropSchema");async function kV(e){let t=In.table_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);return await Ns.dropTable(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table)),await HO.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(kV,"dropTable");async function $V(e){let t=In.attribute_object(e);if(t)throw He(t,t.message,qe.BAD_REQUEST,void 0,void 0,!0);let r=await Os.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,qe.NOT_FOUND,ps.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw He(new Error,"You cannot drop a hash attribute",qe.BAD_REQUEST,void 0,void 0,!0);if(ps.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw He(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,qe.BAD_REQUEST,void 0,void 0,!0);try{return await Ns.dropAttribute(e),xV(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw vO.error(`Got an error deleting attribute ${HV.inspect(e)}.`),s}}a($V,"dropAttribute");function xV(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(xV,"dropAttributeFromGlobal");async function YV(e){if(!global.hdb_schema[e.schema])throw He(new Error,bn.SCHEMA_NOT_FOUND(e.schema),qe.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw He(new Error,bn.TABLE_NOT_FOUND(e.schema,e.table),qe.NOT_FOUND,void 0,void 0,!0);try{return await Ns.createAttribute(e),wn.signalSchemaChange(new Cn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw vO.error(t),t}}a(YV,"createAttribute")});var kO=S((oX,VO)=>{"use strict";var{OPERATIONS_ENUM:KV}=T(),Pc=class{constructor(t,r,s=void 0,n=void 0){this.operation=KV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(Pc,"ReadAuditLogObject");VO.exports=Pc});var mE=S((_X,WO)=>{"use strict";var WV=fr(),cX=kO(),Bc=b(),vc=T(),QV=Y(),{handleHDBError:$O,hdb_errors:JV}=D(),{HDB_ERROR_MSGS:xO,HTTP_STATUS_CODES:YO}=JV,ZV=Object.values(vc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),KO="To use this operation audit log must be enabled in harperdb-config.yaml";WO.exports=XV;async function XV(e){if(Bc.isEmpty(e.schema))throw new Error(xO.SCHEMA_REQUIRED_ERR);if(Bc.isEmpty(e.table))throw new Error(xO.TABLE_REQUIRED_ERR);if(!QV.get(vc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw $O(new Error,KO,YO.BAD_REQUEST,vc.LOG_LEVELS.ERROR,KO,!0);let t=Bc.checkSchemaTableExist(e.schema,e.table);if(t)throw $O(new Error,t,YO.NOT_FOUND,vc.LOG_LEVELS.ERROR,t,!0);if(!Bc.isEmpty(e.search_type)&&ZV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await WV.readAuditLog(e)}a(XV,"readAuditLog")});var jO=S((uX,zO)=>{var Yr=require("validate.js"),JO=Ee(),Ln=T(),{handleHDBError:zV,hdb_errors:jV}=D(),{HDB_ERROR_MSGS:le,HTTP_STATUS_CODES:ek}=jV,RE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tk={STRUCTURE_USER:"structure_user"},QO=Object.values(Ln.ROLE_TYPES_ENUM),rk="attribute_permissions",sk="attribute_name",{PERMS_CRUD_ENUM:Un}=Ln,nk=[rk,...Object.values(Un)],ZO=[Un.READ,Un.INSERT,Un.UPDATE],ik=[sk,...ZO];function ak(e){let t=RE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,XO(e,t)}a(ak,"addRoleValidation");function ok(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,XO(e,t)}a(ok,"alterRoleValidation");function ck(e){let t=RE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,JO.validateObject(e,t)}a(ck,"dropRoleValidation");var _k=["operation","role","id","permission","hdb_user","hdb_auth_header"];function XO(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_k.includes(s[o])||n.push(s[o]);n.length>0&&fe(le.INVALID_ROLE_JSON_KEYS(n),r);let i=JO.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=uk(e);o&&fe(o,r),QO.forEach(c=>{e.permission[c]&&!Yr.isBoolean(e.permission[c])&&fe(le.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(QO.indexOf(o)<0){if(o===tk.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(le.SCHEMA_NOT_FOUND(E),r)}continue}fe(le.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(le.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(le.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{nk.includes(l)||fe(le.INVALID_PERM_KEY(l),r,o,_)}),Object.values(Un).forEach(l=>{Yr.isDefined(u[l])?Yr.isBoolean(u[l])||fe(le.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(le.TABLE_PERM_MISSING(l),r,o,_)}),Yr.isDefined(u.attribute_permissions)){if(!Yr.isArray(u.attribute_permissions)){fe(le.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(le.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let h=u.attribute_permissions[d];if(Object.keys(h).forEach(R=>{!ik.includes(R)&&R!==Un.DELETE&&fe(le.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Yr.isDefined(h.attribute_name)){fe(le.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=h.attribute_name;if(!l.includes(m)){fe(le.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}ZO.forEach(R=>{Yr.isDefined(h[R])?Yr.isBoolean(h[R])||fe(le.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(le.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&h.read===!0&&(E.read=!0),!E.insert&&h.insert===!0&&(E.insert=!0),!E.update&&h.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;fe(le.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return lk(r)}a(XO,"customValidate");zO.exports={addRoleValidation:ak,alterRoleValidation:ok,dropRoleValidation:ck};function uk(e){let{operation:t,permission:r}=e;if(t===Ln.OPERATIONS_ENUM.ADD_ROLE||t===Ln.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return le.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ln.ROLE_TYPES_ENUM.SUPER_USER:Ln.ROLE_TYPES_ENUM.CLUSTER_USER;return le.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(uk,"validateNoSUPerms");function lk(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:le.ROLE_PERMS_ERROR,...e};return zV(new Error,s,ek.BAD_REQUEST)}else return null}a(lk,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var wE=S((lX,ip)=>{"use strict";var ep=Lt(),tp=ft(),Ek=Ss(),pE=jO(),NE=Ws(),dk=require("uuid").v4,gE=require("util"),hk=mi(),Or=T(),rp=b(),IE=gE.promisify(tp.searchByValue),Sk=gE.promisify(tp.searchByHash),fk=gE.promisify(Ek.delete),Tk=xt(),mk=_s(),{hdb_errors:Rk,handleHDBError:Di}=D(),{HDB_ERROR_MSGS:sp,HTTP_STATUS_CODES:AE}=Rk,{UserEventMsg:bE}=os();ip.exports={addRole:Ak,alterRole:pk,dropRole:Nk,listRoles:np};function OE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(OE,"scrubRoleDetails");async function Ak(e){let t=pE.addRoleValidation(e);if(t)throw t;if(!(await hk.getLicense()).enterprise){let o=await np();if(Ok(e,o))throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Or.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Or.BASIC_LICENSE_MAX_NON_CU_ROLES+Or.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Or.SUPPORT_HELP_MSG}`)}e=OE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await IE(s)}catch(o){throw Di(o)}if(n&&n.length>0)throw Di(new Error,sp.ROLE_ALREADY_EXISTS(e.role),AE.CONFLICT,void 0,void 0,!0);e.id||(e.id=dk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ep.insert(i),NE.signalUserChange(new bE(process.pid)),e=OE(e),e}a(Ak,"addRole");function Ok(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!rp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(Ok,"checkClusterUserRole");async function pk(e){let t=pE.alterRoleValidation(e);if(t)throw t;e=OE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ep.update(r)}catch(s){throw Di(s)}return NE.signalUserChange(new bE(process.pid)),e}a(pk,"alterRole");async function Nk(e){let t=pE.dropRoleValidation(e);if(t)throw Di(new Error,t,AE.BAD_REQUEST,void 0,void 0,!0);let r=new mk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await Sk(r);if(s.length===0)throw Di(new Error,sp.ROLE_NOT_FOUND,AE.NOT_FOUND,void 0,void 0,!0);let n=new Tk(Or.SYSTEM_SCHEMA_NAME,Or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await IE(n),o=!1;if(rp.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await fk(c),NE.signalUserChange(new bE(process.pid)),`${s[0].role} successfully deleted`}a(Nk,"dropRole");async function np(){return IE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(np,"listRoles")});var _p=S((EX,cp)=>{"use strict";var gk=Y(),Kr=require("joi"),Ik=Ee(),ap=require("moment"),bk=require("fs-extra"),CE=require("path"),wk=require("lodash"),Mi=T(),{LOG_LEVELS:gs}=T(),Ck="YYYY-MM-DD hh:mm:ss",Lk=CE.resolve(__dirname,"../logs");cp.exports=function(e){return Ik.validateBySchema(e,Uk)};var Uk=Kr.object({from:Kr.custom(op),until:Kr.custom(op),level:Kr.valid(gs.NOTIFY,gs.FATAL,gs.ERROR,gs.WARN,gs.INFO,gs.DEBUG,gs.TRACE),order:Kr.valid("asc","desc"),limit:Kr.number().min(1),start:Kr.number().min(0),log_name:Kr.custom(yk)});function op(e,t){if(ap(e,ap.ISO_8601).format(Ck)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(op,"validateDatetime");function yk(e,t){if(wk.invert(Mi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=gk.get(Mi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Mi.PROCESS_LOG_NAMES.HDB:e,i=n===Mi.PROCESS_LOG_NAMES.INSTALL?CE.join(Lk,Mi.PROCESS_LOG_NAMES.INSTALL):CE.join(s,n);return bk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(yk,"validateReadLogPath")});var UE=S((dX,lp)=>{"use strict";var Hc=T(),up=I(),Dk=Y(),Mk=_p(),LE=require("path"),Pk=require("fs-extra"),Bk=require("readline"),{once:vk}=require("events"),{handleHDBError:Hk,hdb_errors:qk}=D(),{PACKAGE_ROOT:Gk}=T(),Fk=LE.join(Gk,"logs"),Vk=1e3;lp.exports=kk;async function kk(e){let t=Mk(e);if(t)throw Hk(t,t.message,qk.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Dk.get(Hc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Hc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Hc.PROCESS_LOG_NAMES.INSTALL?LE.join(Fk,Hc.PROCESS_LOG_NAMES.INSTALL):LE.join(r,s),i=Pk.createReadStream(n);i.on("error",X=>{up.error(X)});let o=Bk.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,h=e.limit===void 0?Vk:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,C=R+h,L=0,B=[];return o.on("line",X=>{let V,Q,ke,$e;try{V=JSON.parse(X)}catch(ca){up.warn(ca.message);return}switch(!0){case(c&&u&&E):Q=new Date(V.timestamp),ke=new Date(l),$e=new Date(d),V.level===_&&Q>=ke&&Q<=$e&&L<R?L++:V.level===_&&Q>=ke&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(c&&u):Q=new Date(V.timestamp),ke=new Date(l),V.level===_&&Q>=ke&&L<R?L++:V.level===_&&Q>=ke&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(c&&E):Q=new Date(V.timestamp),$e=new Date(d),V.level===_&&Q<=$e&&L<R?L++:V.level===_&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case(u&&E):Q=new Date(V.timestamp),ke=new Date(l),$e=new Date(d),Q>=ke&&Q<=$e&&L<R?L++:Q>=ke&&Q<=$e&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case u:Q=new Date(V.timestamp),ke=new Date(l),Q>=ke&&L<R?L++:Q>=ke&&L>=R&&(Qr(V,m,B),L++,L===C&&Wr(o));break;case E:Q=new Date(V.timestamp),$e=new Date(d),Q<=$e&&L<R?L++:Q<=$e&&L>=R&&(Qr(V,m,B),L++,L===C&&Wr(o));break;default:L<R?L++:(Qr(V,m,B),L++,L===C&&Wr(o))}}),await vk(o,"close"),B}a(kk,"readLog");function Wr(e){e.close(),e.removeAllListeners()}a(Wr,"endReadLine");function Qr(e,t,r){t==="desc"?$k(e,r):t==="asc"?xk(e,r):r.push(e)}a(Qr,"pushLineToResult");function $k(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a($k,"insertDescending");function xk(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(xk,"insertAscending")});var Gc=S((fX,hp)=>{"use strict";var yE=require("joi"),{string:qc,boolean:Ep,date:Yk}=yE.types(),Kk=Ee(),{validateSchemaExists:hX,validateTableExists:SX,validateSchemaName:Wk}=Er(),Qk=T(),Jk=he(),Zk=Y(),Xk=qc.invalid(Zk.get(Qk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Jk.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),dp={operation:qc.valid("add_node","update_node"),node_name:Xk,subscriptions:yE.array().items({table:qc.required(),schema:qc.custom(Wk).required(),subscribe:Ep.required(),publish:Ep.required().custom(jk),start_time:Yk.iso()}).min(1).required()};function zk(e){return Kk.validateBySchema(e,yE.object(dp))}a(zk,"addUpdateNodeValidator");function jk(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(jk,"checkForFalsy");hp.exports={addUpdateNodeValidator:zk,validation_schema:dp}});var ME=S((TX,Ap)=>{"use strict";var DE=mt(),Sp=b(),fp=he(),e$=T(),Fc=I(),Tp=Mc(),t$=Qu(),{RemotePayloadObject:r$}=Ci(),{handleHDBError:mp,hdb_errors:s$}=D(),{HTTP_STATUS_CODES:Rp}=s$,{NodeSubscription:n$}=mn();Ap.exports=i$;async function i$(e,t){let r;try{r=await DE.request(`${t}.${fp.REQUEST_SUFFIX}`,new r$(e$.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Fc.trace("Response from remote describe all request:",r)}catch(o){Fc.error(`addNode received error from describe all request to remote node: ${o}`);let c=DE.requestErrorHandler(o,"add_node",t);throw mp(new Error,c,Rp.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===fp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw mp(new Error,o,Rp.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Sp.doesSchemaExist(c),l=s[c]!==void 0,E=Sp.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Fc.trace(`addNode creating schema: ${c}`),await Tp.createSchema({operation:"create_schema",schema:c})),!E&&d){Fc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new t$(c,_,s[c][_].hash_attribute);await Tp.createTable(m)}await DE.createLocalTableStream(c,_);let h=new n$(c,_,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h)}return{added:i,skipped:n}}a(i$,"reviewSubscriptions")});var $c=S((mX,Np)=>{"use strict";var{handleHDBError:Vc,hdb_errors:a$}=D(),{HTTP_STATUS_CODES:kc}=a$,{addUpdateNodeValidator:o$}=Gc(),Pi=I(),pp=T(),Op=he(),c$=b(),PE=mt(),Bi=Rs(),_$=Y(),u$=ME(),{Node:l$,NodeSubscription:E$}=mn(),d$="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",h$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",S$=_$.get(pp.CONFIG_PARAMS.CLUSTERING_NODENAME);Np.exports=f$;async function f$(e,t=!1){Pi.trace("addNode called with:",e),Bi.checkClusteringEnabled();let r=o$(e);if(r)throw Vc(r,r.message,kc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Bi.getNodeRecord(s);if(!c$.isEmptyOrZeroLength(E))throw Vc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,kc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await u$(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=d$,o;let c=Bi.buildNodePayloads(n,S$,pp.OPERATIONS_ENUM.ADD_NODE,await Bi.getSystemInfo());Pi.trace("addNode sending remote payload:",c);let _;try{_=await PE.request(`${s}.${Op.REQUEST_SUFFIX}`,c)}catch(E){Pi.error(`addNode received error from request: ${E}`);let d=PE.requestErrorHandler(E,"add_node",s);throw Vc(new Error,d,kc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Op.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw Vc(new Error,E,kc.INTERNAL_SERVER_ERROR,"error",E)}Pi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let h=n[E];Pi.trace("Add node updating work stream for node:",s,"subscriptions:",h),await PE.updateWorkStream(h,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new E$(h.schema,h.table,h.publish,h.subscribe))}let l=new l$(s,u,_.system_info);return await Bi.upsertNodeRecord(l),i.length>0?o.message=h$:o.message=`Successfully added '${s}' to manifest`,o}a(f$,"addNode")});var vE=S((RX,bp)=>{"use strict";var{handleHDBError:xc,hdb_errors:T$}=D(),{HTTP_STATUS_CODES:Yc}=T$,{addUpdateNodeValidator:m$}=Gc(),vi=I(),Ip=T(),gp=he(),R$=b(),BE=mt(),Hi=Rs(),A$=Y(),{cloneDeep:O$}=require("lodash"),p$=ME(),{NodeSubscription:N$}=mn(),g$="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",I$="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",b$=A$.get(Ip.CONFIG_PARAMS.CLUSTERING_NODENAME);bp.exports=w$;async function w$(e){vi.trace("updateNode called with:",e),Hi.checkClusteringEnabled();let t=m$(e);if(t)throw xc(t,t.message,Yc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=O$(await Hi.getNodeRecord(r));if(R$.isEmptyOrZeroLength(s))throw xc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Yc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await p$(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=g$,o;let c=Hi.buildNodePayloads(n,b$,Ip.OPERATIONS_ENUM.UPDATE_NODE,await Hi.getSystemInfo());vi.trace("updateNode sending remote payload:",c);let _;try{_=await BE.request(`${r}.${gp.REQUEST_SUFFIX}`,c)}catch(u){vi.error(`updateNode received error from request: ${u}`);let l=BE.requestErrorHandler(u,"update_node",r);throw xc(new Error,l,Yc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===gp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw xc(new Error,u,Yc.INTERNAL_SERVER_ERROR,"error",u)}vi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];vi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await BE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await C$(s[0],n,_.system_info),i.length>0?o.message=I$:o.message=`Successfully updated '${r}'`,o}a(w$,"updateNode");async function C$(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new N$(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hi.upsertNodeRecord(s)}a(C$,"updateNodeTable")});var yp=S((AX,Up)=>{"use strict";var Lp=require("joi"),{string:wp}=Lp.types(),L$=Ee(),Cp=T(),U$=Y(),y$=he();Up.exports=D$;function D$(e){let t=wp.invalid(U$.get(Cp.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(y$.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Lp.object({operation:wp.valid(Cp.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return L$.validateBySchema(e,r)}a(D$,"removeNodeValidator")});var Wc=S((OX,Hp)=>{"use strict";var{handleHDBError:Dp,hdb_errors:M$}=D(),{HTTP_STATUS_CODES:Mp}=M$,P$=yp(),qi=I(),Pp=Rs(),B$=b(),Kc=T(),Bp=he(),vp=mt(),v$=Y(),{RemotePayloadObject:H$}=Ci(),{NodeSubscription:q$}=mn(),G$=_i(),F$=Ss(),V$=v$.get(Kc.CONFIG_PARAMS.CLUSTERING_NODENAME);Hp.exports=k$;async function k$(e){qi.trace("removeNode called with:",e),Pp.checkClusteringEnabled();let t=P$(e);if(t)throw Dp(t,t.message,Mp.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await Pp.getNodeRecord(r);if(B$.isEmptyOrZeroLength(s))throw Dp(new Error,`Node '${r}' was not found.`,Mp.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new H$(Kc.OPERATIONS_ENUM.REMOVE_NODE,V$,[]),i,o=!1;try{i=await vp.request(`${r}.${Bp.REQUEST_SUFFIX}`,n),qi.trace("Remove node reply from remote node:",r,i)}catch(_){qi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];qi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new q$(l.schema,l.table,!1,!1);await vp.updateWorkStream(E,r)}let c=new G$(Kc.SYSTEM_SCHEMA_NAME,Kc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await F$.deleteRecord(c),i?.status===Bp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(qi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(k$,"removeNode")});var Fp=S((pX,Gp)=>{"use strict";var qp=require("joi"),{string:$$,array:x$}=qp.types(),Y$=Ee(),K$=Gc();Gp.exports=W$;function W$(e){let t=qp.object({operation:$$.valid("configure_cluster").required(),connections:x$.items(K$.validation_schema).required()});return Y$.validateBySchema(e,t)}a(W$,"configureClusterValidator")});var HE=S((NX,Yp)=>{"use strict";var Q$=T(),Qc=I(),J$=b(),Z$=Wc(),X$=$c(),Vp=Rs(),z$=Fp(),{handleHDBError:kp,hdb_errors:j$}=D(),{HTTP_STATUS_CODES:$p}=j$,ex="Configure cluster complete.",tx="Failed to configure the cluster. Check the logs for more details.",rx="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Yp.exports=sx;async function sx(e){Qc.trace("configure cluster called with:",e),Vp.checkClusteringEnabled();let t=z$(e);if(t)throw kp(t,t.message,$p.BAD_REQUEST,void 0,void 0,!0);let r=await Vp.getAllNodeRecords(),s=[];for(let d=0,h=r.length;d<h;d++)s.push(xp(Z$,{operation:Q$.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);Qc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let h=e.connections[d];i.push(xp(X$,h,h.node_name))}let c=await Promise.allSettled(i);Qc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,h=E.length;d<h;d++){let m=E[d];m.status==="rejected"&&(Qc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(J$.isEmptyOrZeroLength(_))return{message:ex,connections:u};if(l)return{message:rx,failed_nodes:_,connections:u};throw kp(new Error,tx,$p.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(sx,"configureCluster");async function xp(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(xp,"functionWrapper")});var FE=S((gX,Xp)=>{"use strict";var GE=Rs(),nx=mt(),Qp=Y(),Jc=T(),Is=he(),ix=b(),qE=I(),{RemotePayloadObject:ax}=Ci(),{ErrorCode:Kp}=require("nats"),Wp=Qp.get(Jc.CONFIG_PARAMS.CLUSTERING_ENABLED),Jp=Qp.get(Jc.CONFIG_PARAMS.CLUSTERING_NODENAME);Xp.exports={clusterStatus:ox,buildNodeStatus:Zp};async function ox(){let e={node_name:Jp,is_enabled:Wp,connections:[]};if(!Wp)return e;let t=await GE.getAllNodeRecords();if(ix.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(Zp(t[s],e.connections));return await Promise.allSettled(r),e}a(ox,"clusterStatus");async function Zp(e,t){let r=e.name,s=new ax(Jc.OPERATIONS_ENUM.CLUSTER_STATUS,Jp,void 0,await GE.getSystemInfo()),n,i,o=Is.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await nx.request(Is.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Is.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Is.CLUSTER_STATUS_STATUSES.CLOSED,qE.error(`Error getting node status from ${r} `,n))}catch(_){qE.warn(`Error getting node status from ${r}`,_),_.code===Kp.NoResponders?o=Is.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===Kp.Timeout?o=Is.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Is.CLUSTER_STATUS_STATUSES.CLOSED}let c=new cx(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Jc.PRE_4_0_0_VERSION&&await GE.upsertNodeRecord(_)}catch(_){qE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(Zp,"buildNodeStatus");function cx(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(cx,"NodeStatusObject")});var tN=S((IX,eN)=>{"use strict";var VE=require("joi"),zp=Ee(),{route_constraints:jp}=cu();eN.exports={setRoutesValidator:_x,deleteRoutesValidator:ux};function _x(e){let t=VE.object({server:VE.valid("hub","leaf").required(),routes:jp.required()});return zp.validateBySchema(e,t)}a(_x,"setRoutesValidator");function ux(e){let t=VE.object({routes:jp.required()});return zp.validateBySchema(e,t)}a(ux,"deleteRoutesValidator")});var $E=S((bX,iN)=>{"use strict";var bs=ur(),kE=b(),Zc=T(),rN=tN(),{handleHDBError:sN,hdb_errors:lx}=D(),{HTTP_STATUS_CODES:nN}=lx,Ex="cluster routes successfully set",dx="cluster routes successfully deleted";iN.exports={setRoutes:hx,getRoutes:Sx,deleteRoutes:fx};function hx(e){let t=rN.setRoutesValidator(e);if(t)throw sN(t,t.message,nN.BAD_REQUEST,void 0,void 0,!0);let r=bs.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=kE.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Ex,set:o,skipped:i}}a(hx,"setRoutes");function Sx(){let e=bs.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Sx,"getRoutes");function fx(e){let t=rN.deleteRoutesValidator(e);if(t)throw sN(t,t.message,nN.BAD_REQUEST,void 0,void 0,!0);let r=bs.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let h=0,m=s.length;h<m;h++){let R=s[h];if(E.host===R.host&&E.port===R.port){s.splice(h,1),d=!0,c=!0,i.push(E);break}}if(!d){let h=!0;for(let m=0,R=n.length;m<R;m++){let C=n[m];if(E.host===C.host&&E.port===C.port){n.splice(m,1),_=!0,h=!1,i.push(E);break}}h&&o.push(E)}}return c&&(s=kE.isEmptyOrZeroLength(s)?null:s,bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=kE.isEmptyOrZeroLength(n)?null:n,bs.updateConfigValue(Zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:dx,deleted:i,skipped:o}}a(fx,"deleteRoutes")});var oN=S((wX,aN)=>{"use strict";var Gi=require("alasql"),ws=require("recursive-iterator"),Kt=I(),Tx=b(),Fi=T(),Xc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Rx(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Fi.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Fi.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Fi.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=mx(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!Fi.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Gi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(Xc,"sql_statement_bucket");function mx(e){return e.filter(t=>t[Fi.PERMS_CRUD_ENUM.READ])}a(mx,"filterReadRestrictedAttrs");function Rx(e,t,r,s,n){Ax(e,t,r,s,n)}a(Rx,"interpretAST");function Vi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Vi,"addSchemaTableToMap");function Ax(e,t,r,s,n){if(!e){Kt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gi.yy.Insert?gx(e,t,r):e instanceof Gi.yy.Select?Ox(e,t,r,s,n):e instanceof Gi.yy.Update?px(e,t,r):e instanceof Gi.yy.Delete?Nx(e,t,r):Kt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Ax,"getRecordAttributesAST");function Ox(e,t,r,s,n){if(!e){Kt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Tx.isEmptyOrZeroLength(i)){Kt.error("No schema specified");return}e.from.forEach(c=>{Vi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vi(c.table,t,r,s,n)});let o=new ws(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Kt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new ws(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Kt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new ws(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Kt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new ws(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Kt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(Ox,"getSelectAttributes");function px(e,t,r){if(!e){Kt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ws(e.columns),n=e.table.databaseid;Vi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(px,"getUpdateAttributes");function Nx(e,t,r){if(!e){Kt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ws(e.where),n=e.table.databaseid;Vi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.table.tableid,n,i.columnid,t,r)}a(Nx,"getDeleteAttributes");function gx(e,t,r){if(!e){Kt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ws(e.columns),n=e.into.databaseid;Vi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&xE(e.into.tableid,n,i.columnid,t,r)}a(gx,"getInsertAttributes");function xE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(xE,"pushAttribute");aN.exports=Xc});var uN=S((CX,_N)=>{var Ix=require("os"),cN=Y();_N.exports={checkPermission:bx};function bx(){if(Ix.userInfo().username!==cN.get("install_user"))throw new Error(`Error: Must execute as ${cN.get("install_user")}`)}a(bx,"checkPermission")});var KE=S((LX,SN)=>{var jc=mi(),lN=require("chalk"),nr=I(),EN=uN(),dN=require("prompt"),{promisify:wx}=require("util"),zc=T(),Cx=require("fs-extra"),Lx=require("path"),Ux=b(),yx=nE(),hN=Y();hN.initSync();var Dx=require("moment"),Mx=wx(dN.get),Px=Lx.join(hN.getHdbBasePath(),zc.LICENSE_KEY_DIR_NAME,zc.LICENSE_FILE_NAME,zc.LICENSE_FILE_NAME);SN.exports={getFingerprint:vx,setLicense:Bx,parseLicense:YE,register:Hx,getRegistrationInfo:Gx};async function Bx(e){if(e&&e.key&&e.company){try{nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await YE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw nr.error(r),nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Bx,"setLicense");async function vx(){try{EN.checkPermission()}catch(t){throw nr.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await jc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw nr.error(r),nr.error(t),new Error(r)}return e}a(vx,"getFingerprint");async function YE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=jc.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{nr.info("writing license to disk"),await Cx.writeFile(Px,JSON.stringify({license_key:e,company:t}))}catch(s){throw nr.error("Failed to write License"),s}return"Registration successful."}a(YE,"parseLicense");async function Hx(){let e=await qx();return YE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Hx,"register");async function qx(){try{EN.checkPermission()}catch(s){return console.error(s.message)}let e=await jc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:lN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:lN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{dN.start()}catch(s){nr.error(s)}let r;try{r=await Mx(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(qx,"promptForRegistration");async function Gx(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await jc.getLicense()}catch(r){throw nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Ux.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=yx.version(),e.storage_type=zc.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Dx.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Gx,"getRegistrationInfo")});var XE=S((UX,AN)=>{"use strict";var y=T(),K=I(),e_=b(),Fx=J_(),WE=kl(),ZE=mt(),Vx=he(),TN=require("minimist"),{handleHDBError:QE,hdb_errors:kx}=D(),ki=ur(),{HTTP_STATUS_CODES:JE}=kx,G,fN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Cs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",$x="Invalid service",xx="'service' is required",Yx="Restarting all services",Kx="Clustering is not enabled so cannot be restarted";AN.exports={stop:Qx,restartProcesses:Wx,restartService:mN};async function Wx(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=On());let e=Fx(Object.keys(y.CONFIG_PARAM_MAP),!0);e_.isEmptyOrZeroLength(Object.keys(e))||ki.updateConfigValue(void 0,void 0,e,!0,!0);let t=ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=TN(process.argv);if(!e_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await G.isHdbRestartRunning()===!0){K.notify(Cs),console.error(Cs);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await yn(_);else if(await G.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await mN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await G.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await G.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await G.isHdbRestartRunning()===!0)return K.notify(Cs),console.error(Cs),Cs;console.log(fN),t&&await RN();let n=await G.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await G.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await G.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await G.configureLogRotate(),K.notify(Yx),await G.restartAllServices(i),fN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(Wx,"restartProcesses");async function mN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=On()),e_.isEmpty(e.service))throw QE(new Error,xx,JE.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw QE(new Error,$x,JE.BAD_REQUEST,void 0,void 0,!0);let r=ki.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await G.isHdbRestartRunning()===!0)return K.notify(Cs),Cs;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await yn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await G.isServiceRegistered(s);if(r)i?(await G.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await G.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await G.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),QE(new Error,o,JE.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(mN,"restartService");async function Qx(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=On());let e=TN(process.argv);if(e_.isEmpty(e.service))console.log("Stopping HarperDB."),await G.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await G.stopClustering():await G.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(Qx,"stop");async function RN(){await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await yn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await ZE.updateNodeNameLocalStreams(),await ZE.closeConnection()}a(RN,"restartAllClusteringServices");async function yn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=ki.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await G.isServiceRegistered(e),i=r||s?await G.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(Kx);break}await G.reloadClustering();break;case(r&&i&&!t):await G.stopClustering();break;case(r&&!i&&t):await G.startClustering();break;case(r&&i&&t):await RN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await G.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await WE.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await ZE.createWorkQueueStream(Vx.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await G.reload(e):(await WE.generateNatsConfig(!0,e),await G.restart(e),await WE.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(yn,"restartClustering")});var yN=S((DX,UN)=>{"use strict";var yX=require("lodash"),Ze=T(),{handleHDBError:ON,hdb_errors:Jx}=D(),{HDB_ERROR_MSGS:Zx,HTTP_STATUS_CODES:Xx}=Jx,zE=I();UN.exports={getRolePermissions:jx};var Ls=Object.create(null),zx=a(e=>({key:e,perms:{}}),"perms_template_obj"),IN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),bN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),jE=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...bN(t,r,s,n)}),"table_perms_template"),pN=a((e,t=bN())=>({attribute_name:e,describe:LN(t),[$i]:t[$i],[ed]:t[ed],[td]:t[td]}),"attr_perms_template"),NN=a((e,t=!1)=>({attribute_name:e,describe:t,[$i]:t}),"timestamp_attr_perms_template"),{READ:$i,INSERT:ed,UPDATE:td}=Ze.PERMS_CRUD_ENUM,wN=Object.values(Ze.PERMS_CRUD_ENUM),CN=[$i,ed,td];function jx(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ls[t]&&Ls[t].key===s)return Ls[t].perms;let n=eY(e,r);return Ls[t]?Ls[t].key=s:Ls[t]=zx(s),Ls[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw zE.error(s),zE.debug(r),ON(new Error,Zx.OUTDATED_PERMS_TRANSLATION_ERROR,Xx.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
|
+
${r.stack}`;throw zE.error(s),ON(new Error)}}}a(jx,"getRolePermissions");function eY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=tY(t[i]);return}r[i]=IN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=rY(c,_);r[i].describe||wN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=jE()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=jE()})}),r}a(eY,"translateRolePermissions");function tY(e){let t=IN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jE(!0,!0,!0,!0,!0)}),t}a(tY,"createStructureUserPermissions");function rY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Ze.TIME_STAMP_NAMES.includes(E)&&(d=NN(E,l[$i])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=pN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=LN(l),n.attribute_permissions.push(l),c||sY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=NN(u):l=pN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=gN(n),n}else return e.describe=gN(e),e}a(rY,"getTableAttrPerms");function gN(e){return wN.filter(t=>e[t]).length>0}a(gN,"getSchemaTableDescribePerm");function LN(e){return CN.filter(t=>e[t]).length>0}a(LN,"getAttributeDescribePerm");function sY(e,t){CN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(sY,"checkForHashPerms")});var qN=S((MX,HN)=>{"use strict";var Te=require("joi"),DN=require("fs-extra"),MN=require("path"),Dn=Ee(),PN=Y(),BN=T(),vN=I(),{hdb_errors:nY}=D(),{HDB_ERROR_MSGS:ut}=nY,Jr=/^[a-zA-Z0-9-_]+$/;HN.exports={getDropCustomFunctionValidator:aY,setCustomFunctionValidator:oY,addCustomFunctionProjectValidator:cY,dropCustomFunctionProjectValidator:_Y,packageCustomFunctionProjectValidator:uY,deployCustomFunctionProjectValidator:lY};function xi(e,t,r){try{let s=PN.get(BN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=MN.join(s,t);return DN.existsSync(n)?e?t:r.message(ut.PROJECT_EXISTS):e?r.message(ut.NO_PROJECT):t}catch(s){return vN.error(s),r.message(ut.VALIDATION_ERR)}}a(xi,"checkProjectExists");function iY(e,t,r,s){try{let n=PN.get(BN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=MN.join(n,e,t,r+".js");return DN.existsSync(i)?r:s.message(ut.NO_FILE)}catch(n){return vN.error(n),s.message(ut.VALIDATION_ERR)}}a(iY,"checkFileExists");function aY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(Jr).custom(iY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":ut.BAD_FILE_NAME})});return Dn.validateBySchema(e,t)}a(aY,"getDropCustomFunctionValidator");function oY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(Jr).required().messages({"string.pattern.base":ut.BAD_FILE_NAME}),function_content:Te.string().required()});return Dn.validateBySchema(e,t)}a(oY,"setCustomFunctionValidator");function cY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!1)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(cY,"addCustomFunctionProjectValidator");function _Y(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME})});return Dn.validateBySchema(e,t)}a(_Y,"dropCustomFunctionProjectValidator");function uY(e){let t=Te.object({project:Te.string().pattern(Jr).custom(xi.bind(null,!0)).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Dn.validateBySchema(e,t)}a(uY,"packageCustomFunctionProjectValidator");function lY(e){let t=Te.object({project:Te.string().pattern(Jr).required().messages({"string.pattern.base":ut.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":ut.BAD_PACKAGE})});return Dn.validateBySchema(e,t)}a(lY,"deployCustomFunctionProjectValidator")});var nd=S((PX,VN)=>{"use strict";var Ce=require("fs-extra"),t_=require("fast-glob"),ne=require("path"),GN=require("tar-fs"),FN=require("uuid").v4,Yi=require("normalize-path"),Us=qN(),Le=I(),Rt=T(),At=Y(),{PACKAGE_ROOT:EY}=T(),{handleHDBError:Xe,hdb_errors:dY}=D(),{HDB_ERROR_MSGS:Zr,HTTP_STATUS_CODES:ze}=dY,hY=ne.join(EY,"custom_function_template"),rd=ne.join(At.get(Rt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function sd(){let e=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Xe(new Error,Zr.NOT_ENABLED,ze.BAD_REQUEST,void 0,void 0,!0)}a(sd,"isCFEnabled");function SY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Xe(new Error,Zr.FUNCTION_STATUS,ze.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(SY,"customFunctionsStatus");function fY(){Le.trace("getting custom api endpoints");let e={},t=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{t_.sync(Yi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:t_.sync(Yi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:t_.sync(Yi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:Ce.existsSync(Yi(`${s}/static`))&&t_.sync(Yi(`${s}/static/**/*`)).length}})}catch(r){throw Xe(new Error,Zr.GET_FUNCTIONS,ze.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(fY,"getCustomFunctions");function TY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ne.join(r,s,n,i+".js");try{return Ce.readFileSync(o,{encoding:"utf8"})}catch(c){throw Xe(new Error,Zr.GET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(TY,"getCustomFunction");function mY(e){sd(),e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.setCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("setting custom function file content");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Ce.outputFileSync(ne.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Xe(new Error,Zr.SET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(mY,"setCustomFunction");function RY(e){e.project&&(e.project=ne.parse(e.project).name),e.file&&(e.file=ne.parse(e.file).name);let t=Us.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function file");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Ce.unlinkSync(ne.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Xe(new Error,Zr.DROP_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(RY,"dropCustomFunction");function AY(e){sd(),e.project&&(e.project=ne.parse(e.project).name);let t=Us.addCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("adding custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return Ce.mkdirSync(n,{recursive:!0}),Ce.copySync(hY,n),`Successfully created custom function project: ${s}`}catch(n){throw Xe(new Error,Zr.ADD_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(AY,"addCustomFunctionProject");function OY(e){e.project&&(e.project=ne.parse(e.project).name);let t=Us.dropCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ne.join(r,s);return Ce.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Xe(new Error,Zr.DROP_FUNCTION_PROJECT,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(OY,"dropCustomFunctionProject");async function pY(e){e.project&&(e.project=ne.parse(e.project).name);let t=Us.packageCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("packaging custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ne.join(r,s),i=FN();if(!Ce.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}Ce.ensureDirSync(rd);let c=ne.join(rd,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ne.join(n,"node_modules"))}),GN.pack(n,_).pipe(Ce.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=Ce.readFileSync(c,{encoding:"base64"});return Ce.unlinkSync(c),{project:s,payload:u,file:c}}a(pY,"packageCustomFunctionProject");async function NY(e){sd(),e.project&&(e.project=ne.parse(e.project).name);let t=Us.deployCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("deploying custom function project");let r=At.get(Rt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ne.join(r,s);await Ce.ensureDir(o);let c,_;do c=ne.join(rd,FN()+".tar"),_=await Ce.pathExists(c);while(_);await Ce.outputFile(c,n,{encoding:"base64"});let u=Ce.createReadStream(c);return u.pipe(GN.extract(o)),await new Promise(l=>u.on("end",l)),await Ce.unlink(c),`Successfully deployed project: ${s}`}a(NY,"deployCustomFunctionProject");VN.exports={customFunctionsStatus:SY,getCustomFunctions:fY,getCustomFunction:TY,setCustomFunction:mY,dropCustomFunction:RY,addCustomFunctionProject:AY,dropCustomFunctionProject:OY,packageCustomFunctionProject:pY,deployCustomFunctionProject:NY}});var id=S((BX,$N)=>{"use strict";var ir=require("joi"),kN=Ee();$N.exports={readTransactionLogValidator:gY,deleteTransactionLogsBeforeValidator:IY};function gY(e){let t=ir.object({schema:ir.string().required(),table:ir.string().required(),from:ir.date().timestamp(),to:ir.date().timestamp(),limit:ir.number().min(1)});return kN.validateBySchema(e,t)}a(gY,"readTransactionLogValidator");function IY(e){let t=ir.object({schema:ir.string().required(),table:ir.string().required(),timestamp:ir.date().timestamp().required()});return kN.validateBySchema(e,t)}a(IY,"deleteTransactionLogsBeforeValidator")});var s_=S((vX,QN)=>{"use strict";var ad=T(),r_=mt(),xN=b(),YN=Y(),KN=vr(),{handleHDBError:Mn,hdb_errors:bY}=D(),{HTTP_STATUS_CODES:Pn}=bY,{readTransactionLogValidator:wY,deleteTransactionLogsBeforeValidator:CY}=id(),WN="This operation relies on clustering and cannot run with it disable.",LY="Logs successfully deleted from transaction log.",UY="All logs successfully deleted from transaction log.";QN.exports={readTransactionLog:yY,deleteTransactionLogsBefore:DY};async function yY(e){let t=wY(e);if(t)throw Mn(t,t.message,Pn.BAD_REQUEST,void 0,void 0,!0);if(!YN.get(ad.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mn(new Error,WN,Pn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xN.checkSchemaTableExist(r,s);if(n)throw Mn(new Error,n,Pn.NOT_FOUND,void 0,void 0,!0);let i=KN.createNatsTableStreamName(r,s),o=await r_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===ad.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(yY,"readTransactionLog");async function DY(e){let t=CY(e);if(t)throw Mn(t,t.message,Pn.BAD_REQUEST,void 0,void 0,!0);if(!YN.get(ad.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mn(new Error,WN,Pn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xN.checkSchemaTableExist(r,s);if(i)throw Mn(new Error,i,Pn.NOT_FOUND,void 0,void 0,!0);let o=KN.createNatsTableStreamName(r,s),{jsm:c}=await r_.getNATSReferences(),_=await r_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=LY,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=UY):E=(await r_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(DY,"deleteTransactionLogsBefore")});var cd=S((HX,ng)=>{"use strict";var n_=require("joi"),i_=require("path"),JN=require("fs-extra"),{exec:MY}=require("child_process"),PY=require("util"),ZN=PY.promisify(MY),BY=T(),{handleHDBError:Bn,hdb_errors:vY}=D(),{HTTP_STATUS_CODES:vn}=vY,XN=Y(),HY=Ee(),a_=I();XN.initSync();var od=XN.get(BY.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),zN="npm install --omit=dev --json",qY=`${zN} --dry-run`;ng.exports={installModules:GY,auditModules:FY};async function jN(e,t=void 0){let{stdout:r,stderr:s}=await ZN(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(jN,"runCommand");async function GY(e){a_.info(`starting installModules for request: ${e}`);let t=sg(e);if(t)throw Bn(t,t.message,vn.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?qY:zN;await tg(),await rg(r);let i={};for(let o=0,c=r.length;o<c;o++){let _=r[o];i[_]={npm_output:null,npm_error:null};let u=i_.join(od,_),l,E=null;try{let{stdout:d,stderr:h}=await ZN(n,{cwd:u});l=d?d.replace(`
|
|
11
11
|
`,""):null,E=h?h.replace(`
|
|
12
|
-
`,""):null}catch(d){d.stderr?i[_].npm_error=
|
|
13
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(ig,"parseNPMStdErr");async function rK(e){c_.info(`starting auditModules for request: ${e}`);let t=cg(e);if(t)throw Gn(t,t.message,qn.BAD_REQUEST);let{projects:r}=e;await ag(),await og(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=o_.join(ud,o);s[o]={npm_output:null,npm_error:null};try{let _=await ng("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=ig(_.stderr)}}return c_.info(`finished auditModules with response ${s}`),s}a(rK,"auditModules");async function ag(){try{return await ng("npm -v"),!0}catch{throw Gn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",qn.BAD_REQUEST,void 0,void 0,!0)}}a(ag,"checkNPMInstalled");async function og(e){if(!Array.isArray(e)||e.length===0)throw Gn(new Error,"projects argument must be an array with at least 1 element",qn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=o_.join(ud,i.toString());if(!await eg.pathExists(o)){t.push(i);continue}let _=o_.join(o,"package.json");await eg.pathExists(_)||r.push(i)}if(t.length>0)throw Gn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,qn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Gn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,qn.BAD_REQUEST,void 0,void 0,!0)}a(og,"checkProjectPaths");function cg(e){let t=a_.object({projects:a_.array().min(1).items(a_.string()).required(),dry_run:a_.boolean().default(!1)});return jY.validateBySchema(e,t)}a(cg,"modulesValidator")});var lg=S((t3,ug)=>{"use strict";var __=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(__,"PermissionTableResponseObject");ug.exports=__});var dg=S((r3,Eg)=>{"use strict";var u_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(u_,"PermissionAttributeResponseObject");Eg.exports=u_});var Ed=S((s3,Sg)=>{"use strict";var hg=lg(),sK=dg(),{HDB_ERROR_MSGS:nK}=rt(),l_=class{constructor(){this.error=nK.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new hg(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new sK(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new hg(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(l_,"PermissionResponseObject");Sg.exports=l_});var S_=S((n3,Ug)=>{"use strict";var dd=Ut(),E_=Tt(),Bt=Bc(),Zi=un(),hd=ms(),iK=OE(),Xi=Kr(),d_=UE(),Oe=I(),aK=ME(),oK=Yc(),cK=qE(),_K=Jc(),uK=FE(),lK=xE(),Sd=KE(),Cr=C(),EK=EN(),fd=JE(),mg=ed(),Pt=T(),Rg=vN(),dK=Cc(),Ag=fc(),Og=Sr(),br=od(),hK=require("alasql"),pg=i_(),Ng=ld(),gg=Ed(),{handleHDBError:Et,hdb_errors:Ig}=D(),{HDB_ERROR_MSGS:qe,HTTP_STATUS_CODES:Wi}=Ig,O=new Map,Cg="delete",ts="insert",_r="read",Ps="update",Ji="describe",fg=Zi.describeSchema.name,Tg=Zi.describeTable.name,bg={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},SK="catchup",fK="handleGetJob",TK="handleGetJobsByStartDate",h_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mK=[Bt.createTable.name,Bt.createAttribute.name,Bt.dropTable.name,Bt.dropAttribute.name],wg={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},p=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(p,"permission");O.set(dd.insert.name,new p(!1,[ts]));O.set(dd.update.name,new p(!1,[Ps]));O.set(dd.upsert.name,new p(!1,[ts,Ps]));O.set(E_.searchByConditions.name,new p(!1,[_r]));O.set(E_.searchByHash.name,new p(!1,[_r]));O.set(E_.searchByValue.name,new p(!1,[_r]));O.set(E_.search.name,new p(!1,[_r]));O.set(Bt.createSchema.name,new p(!0,[]));O.set(Bt.createTable.name,new p(!0,[]));O.set(Bt.createAttribute.name,new p(!1,[ts]));O.set(Bt.dropSchema.name,new p(!0,[]));O.set(Bt.dropTable.name,new p(!0,[]));O.set(Bt.dropAttribute.name,new p(!0,[]));O.set(Zi.describeSchema.name,new p(!1,[_r]));O.set(Zi.describeTable.name,new p(!1,[_r]));O.set(hd.deleteRecord.name,new p(!1,[Cg]));O.set(Xi.addUser.name,new p(!0,[]));O.set(Xi.alterUser.name,new p(!0,[]));O.set(Xi.dropUser.name,new p(!0,[]));O.set(Xi.listUsersExternal.name,new p(!0,[]));O.set(d_.listRoles.name,new p(!0,[]));O.set(d_.addRole.name,new p(!0,[]));O.set(d_.alterRole.name,new p(!0,[]));O.set(d_.dropRole.name,new p(!0,[]));O.set(aK.name,new p(!0,[]));O.set(oK.name,new p(!0,[]));O.set(cK.name,new p(!0,[]));O.set(_K.name,new p(!0,[]));O.set(uK.name,new p(!0,[]));O.set(Sd.setRoutes.name,new p(!0,[]));O.set(Sd.getRoutes.name,new p(!0,[]));O.set(Sd.deleteRoutes.name,new p(!0,[]));O.set(Og.setConfiguration.name,new p(!0,[]));O.set(lK.clusterStatus.name,new p(!0,[]));O.set(fd.getFingerprint.name,new p(!0,[]));O.set(fd.setLicense.name,new p(!0,[]));O.set(hd.deleteFilesBefore.name,new p(!0,[]));O.set(hd.deleteAuditLogsBefore.name,new p(!0,[]));O.set(mg.restartProcesses.name,new p(!0,[]));O.set(mg.restartService.name,new p(!0,[]));O.set(iK.name,new p(!0,[]));O.set(dK.systemInformation.name,new p(!0,[]));O.set(Og.getConfiguration.name,new p(!0,[]));O.set(pg.readTransactionLog.name,new p(!0,[]));O.set(pg.deleteTransactionLogsBefore.name,new p(!0,[]));O.set(Ng.installModules.name,new p(!0,[]));O.set(Ng.auditModules.name,new p(!0,[]));O.set(Ag.createTokens.name,new p(!1,[]));O.set(Ag.refreshOperationToken.name,new p(!1,[]));O.set(br.customFunctionsStatus.name,new p(!0,[]));O.set(br.getCustomFunctions.name,new p(!0,[]));O.set(br.getCustomFunction.name,new p(!0,[]));O.set(br.setCustomFunction.name,new p(!0,[]));O.set(br.dropCustomFunction.name,new p(!0,[]));O.set(br.addCustomFunctionProject.name,new p(!0,[]));O.set(br.dropCustomFunctionProject.name,new p(!0,[]));O.set(br.packageCustomFunctionProject.name,new p(!0,[]));O.set(br.deployCustomFunctionProject.name,new p(!0,[]));O.set(fd.getRegistrationInfo.name,new p(!1,[]));O.set(Xi.userInfo.name,new p(!1,[]));O.set(Zi.describeAll.name,new p(!1,[]));O.set(fK,new p(!1,[]));O.set(TK,new p(!0,[]));O.set(SK,new p(!0,[]));O.set(h_.CSV_DATA_LOAD,new p(!1,[ts,Ps]));O.set(h_.CSV_URL_LOAD,new p(!1,[ts,Ps]));O.set(h_.CSV_FILE_LOAD,new p(!1,[ts,Ps]));O.set(h_.IMPORT_FROM_S3,new p(!1,[ts,Ps]));O.set(wg.EXPORT_TO_S3,new p(!1,[_r]));O.set(wg.EXPORT_LOCAL,new p(!1,[_r]));O.set(Pt.VALID_SQL_OPS_ENUM.DELETE,new p(!1,[Cg]));O.set(Pt.VALID_SQL_OPS_ENUM.SELECT,new p(!1,[_r]));O.set(Pt.VALID_SQL_OPS_ENUM.INSERT,new p(!1,[ts]));O.set(Pt.VALID_SQL_OPS_ENUM.UPDATE,new p(!1,[Ps]));Ug.exports={verifyPerms:AK,verifyPermsAst:RK,verifyBulkLoadAttributePerms:pK};function RK(e,t,r){if(Cr.isEmptyOrZeroLength(e))throw Oe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(Cr.isEmptyOrZeroLength(t))throw Oe.info("verify_perms_ast has an empty user parameter"),Et(new Error);if(Cr.isEmptyOrZeroLength(r))throw Oe.info("verify_perms_ast has a null operation parameter"),Et(new Error);try{let s=new gg,n=new EK(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Oe.info("No schemas defined in verifyPermsAst(), will not continue."),Et(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&bg[r])throw Et(new Error,qe.DROP_SYSTEM,Wi.FORBIDDEN);if(c&&!_)return null;let u=Rg.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof hK.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=Lg(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let m=n.getAttributesBySchemaTableName(d,E[h]),R=md(t.role.permission,d,E[h]);Td(m,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw Et(s)}}a(RK,"verifyPermsAst");function AK(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Oe.info("null required parameter in verifyPerms"),Et(new Error,qe.DEFAULT_INVALID_REQUEST,Wi.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new gg;if(Cr.isEmptyOrZeroLength(e.hdb_user.role)||Cr.isEmptyOrZeroLength(e.hdb_user.role.permission))return Oe.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(qe.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(Pt.SYSTEM_SCHEMA_NAME)||n===Pt.SYSTEM_SCHEMA_NAME;if(l&&bg[r])throw Et(new Error,qe.DROP_SYSTEM,Wi.FORBIDDEN);if(_&&!l||u===!0&&(r===Bt.createSchema.name||r===Bt.dropSchema.name))return null;if(mK.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=Rg.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===fg||r===Tg){if(n===Pt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(qe.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===fg&&(!E[n]||!E[n][Ji]))return c.handleInvalidItem(qe.SCHEMA_NOT_FOUND(n));if(r===Tg&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][Ji]))return c.handleInvalidItem(qe.TABLE_NOT_FOUND(n,i))}}let d=Lg(e.hdb_user,r,o,c,s);if(d)return d;if(O.get(r)&&O.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&Pt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],w=E[n].tables[i];w[Pt.PERMS_CRUD_ENUM.READ]&&(w.attribute_permissions.length>0?w.attribute_permissions.filter(B=>B[Pt.PERMS_CRUD_ENUM.READ]).forEach(B=>{R.push(B.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(L=>L.attribute),e.get_attributes=R)}let h=OK(e),m=md(e.hdb_user.role.permission,n,i);return Td(h,m,r,i,n,c,s),c.getPermsResponse()}a(AK,"verifyPerms");function Lg(e,t,r,s,n){if(Cr.arrayHasEmptyValues([e,t,r]))throw Oe.info("hasPermissions has an invalid parameter"),Et(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!O.get(t))throw Oe.info(`operation ${t} not found.`),Et(new Error,qe.OP_NOT_FOUND(t),Wi.BAD_REQUEST);if(O.get(t)&&O.get(t).requires_su)return Oe.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(qe.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][Ji]===!1){s.addInvalidItem(qe.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(qe.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[Ji]===!1)s.addInvalidItem(qe.TABLE_NOT_FOUND(_,l));else try{let d=[],h=O.get(t).perms;!Cr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let m=0;m<h.length;m++){let R=h[m],w=E[R];(w==null||w===!1)&&(Oe.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=qe.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw Oe.error(h),Oe.error(d),Et(Ig.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(Lg,"hasPermissions");function Td(e,t,r,s,n,i,o){if(!e||!t)throw Oe.info("no attributes specified in checkAttributePerms."),Et(new Error);let c=O.get(r).perms;if(!c||c==="")throw Oe.info(`no permissions found for ${r} in checkAttributePerms().`),Et(new Error);if(Cr.isEmptyOrZeroLength(t))return Oe.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[Ji]===!1){i.addInvalidItem(qe.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Pt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==_r)throw Et(new Error,qe.SYSTEM_TIMESTAMP_PERMS_ERR,Wi.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(qe.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(Td,"checkAttributePerms");function OK(e){let t=new Set;try{if(e.action)return t;if(e.operation===Pt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Oe.info(r)}return t}a(OK,"getRecordAttributes");function md(e,t,r){let s=new Map;if(Cr.isEmpty(e))return Oe.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Oe.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(md,"getAttributePermissions");function pK(e,t,r,s,n,i,o){let c=new Set(i),_=md(e,s,n);Td(c,_,t,n,s,o,r)}a(pK,"verifyBulkLoadAttributePerms")});var T_=S((i3,Bg)=>{"use strict";Bg.exports={evaluateSQL:HK,processAST:Pg,convertSQLToAST:Mg,checkASTPermissions:Dg};var yg=Ut(),Od=require("util"),NK=Od.callbackify(yg.insert),gK=Tt().search,IK=BO().update,CK=Od.callbackify(IK),bK=HO().convertDelete,rs=require("alasql"),wK=S_(),ji=I(),LK=Lo(),UK=C(),zi=T(),{hdb_errors:yK,handleHDBError:Rd}=D(),{HTTP_STATUS_CODES:Ad}=yK,DK=bn();function MK(e,t,r){return Promise.all([DK.postOperationHandler(e,t,r),yg.flush(e)])}a(MK,"postWrite");var PK=Od.callbackify(MK);LK(rs);var BK=403,vK="There was a problem performing this insert. Please check the logs and try again.",f_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(f_,"ParsedSQLObject");function HK(e,t){let r=e.parsed_sql_object;if(!r){r=Mg(e.sql);let s,n=r.ast.statements[0];if(n instanceof rs.yy.Insert?s=n.into.databaseid:n instanceof rs.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof rs.yy.Update||n instanceof rs.yy.Delete?s=n.table.databaseid:ji.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof rs.yy.Select)&&UK.isEmptyOrZeroLength(s))return t("No schema specified",null)}Pg(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(HK,"evaluateSQL");function Dg(e,t){let r;try{r=wK.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Dg,"checkASTPermissions");function Mg(e){let t=new f_;if(!e)throw Rd(new Error,"The 'sql' parameter is missing from the request body",Ad.BAD_REQUEST);try{let r=e.trim(),s=rs.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
-
`);throw s[1]?Rd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ad.BAD_REQUEST):Rd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ad.BAD_REQUEST)}return t}a(Mg,"convertSQLToAST");function Pg(e,t,r){try{let s=GK;if(!e.bypass_auth&&!t.permissions_checked){let i=Dg(e,t);if(i&&i.length>0)return r(BK,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case zi.VALID_SQL_OPS_ENUM.SELECT:s=gK,n=t.ast.statements[0];break;case zi.VALID_SQL_OPS_ENUM.INSERT:s=qK;break;case zi.VALID_SQL_OPS_ENUM.UPDATE:s=CK;break;case zi.VALID_SQL_OPS_ENUM.DELETE:s=bK;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(Pg,"processAST");function GK(e,t){ji.info(e),t("unknown sql statement")}a(GK,"nullFunction");function qK({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=FK(i,e.values)}catch(o){return r(o)}NK(n,(o,c)=>{if(o)return r(o);PK(n,c,_=>{_&&ji.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){ji.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(qK,"convertInsert");function FK(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=rs.compile(`SELECT ${n.toString()} AS [${zi.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ji.error(r),new Error(vK)}}a(FK,"createDataObjects")});var Nd=S((a3,Fg)=>{var p_=require("clone"),N_=Ee(),VK=C(),O_=T(),kK=I(),m_=require("fs"),{hdb_errors:xK,handleHDBError:ea}=D(),{HDB_ERROR_MSGS:$K,HTTP_STATUS_CODES:R_}=xK,{common_validators:A_}=Tr(),vg=1e9,pd=" is required",YK=["insert","update","upsert"],g_={schema:{presence:!0,format:A_.schema_format,length:A_.schema_length},table:{presence:!0,format:A_.schema_format,length:A_.schema_length},action:{inclusion:{within:YK,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{}},{AWS_ACCESS_KEY:KK,AWS_SECRET:QK,AWS_BUCKET:WK,AWS_FILE_KEY:JK}=O_.S3_BUCKET_AUTH_KEYS,ZK={s3:{presence:!0},[`s3.${KK}`]:{presence:!0,type:"String"},[`s3.${QK}`]:{presence:!0,type:"String"},[`s3.${WK}`]:{presence:!0,type:"String"},[`s3.${JK}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]}},Hg=p_(g_);Hg.data.presence={message:pd};var Gg=p_(g_);Gg.file_path.presence={message:pd};var XK=Object.assign(p_(g_),ZK),qg=p_(g_);qg.csv_url.presence={message:pd};function zK(e){let t=N_.validateObject(e,Hg);return I_(e,t)}a(zK,"dataObject");function jK(e){let t=N_.validateObject(e,qg);return I_(e,t)}a(jK,"urlObject");function eQ(e){let t=N_.validateObject(e,Gg);return I_(e,t)}a(eQ,"fileObject");function tQ(e){let t=N_.validateObject(e,XK);return I_(e,t)}a(tQ,"s3FileObject");function I_(e,t){if(!t){let r=VK.checkGlobalSchemaTable(e.schema,e.table);if(r)return ea(new Error,r,R_.BAD_REQUEST);if(e.operation===O_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{m_.accessSync(e.file_path,m_.constants.R_OK|m_.constants.F_OK)}catch(s){return s.code===O_.NODE_ERROR_CODES.ENOENT?ea(s,`No such file or directory ${s.path}`,R_.BAD_REQUEST):s.code===O_.NODE_ERROR_CODES.EACCES?ea(s,`Permission denied ${s.path}`,R_.BAD_REQUEST):ea(s)}try{let s=m_.statSync(e.file_path).size;if(s>vg)return ea(new Error,$K.MAX_FILE_SIZE_ERR(s,vg),R_.BAD_REQUEST)}catch(s){kK.error(s),console.error(s)}}}return t}a(I_,"postValidateChecks");Fg.exports={dataObject:zK,urlObject:jK,fileObject:eQ,s3FileObject:tQ}});var gd=S((o3,Vg)=>{"use strict";var ta=I(),C_=T();async function rQ(e,t,r,s=[]){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===C_.OPERATIONS_ENUM.INSERT||t.operation===C_.OPERATIONS_ENUM.UPDATE||t.operation===C_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===C_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ta.info(i.message),i):i.http_resp_msg?(ta.error(`Error calling operation: ${e.name}`),ta.error(i.http_resp_msg),i):(ta.error(`Error calling operation: ${e.name}`),ta.error(i),i)}}a(rQ,"callOperationFunctionAsAwait");Vg.exports={callOperationFunctionAsAwait:rQ}});var Id=S((c3,xg)=>{"use strict";var sQ=require("aws-sdk/clients/s3");xg.exports={getFileStreamFromS3:nQ,getS3AuthObj:kg};function nQ(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return kg(t.aws_access_key_id,t.aws_secret_access_key).getObject(r).createReadStream()}a(nQ,"getFileStreamFromS3");function kg(e,t){return new sQ({accessKeyId:e,secretAccessKey:t})}a(kg,"getS3AuthObj")});var Yg=S((_3,$g)=>{"use strict";var b_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(b_,"BulkLoadFileObject");var w_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(w_,"BulkLoadDataObject");$g.exports={BulkLoadFileObject:b_,BulkLoadDataObject:w_}});var Ud=S((u3,cI)=>{"use strict";var L_=Ut(),D_=Nd(),iQ=require("needle"),pt=T(),aQ=he(),ra=C(),{handleHDBError:ae,hdb_errors:eI}=D(),{HTTP_STATUS_CODES:Fe,HDB_ERROR_MSGS:pe,CHECK_LOGS_WRAPPER:Hs}=eI,vs=I(),U_=require("papaparse");ra.promisifyPapaParse();var Jt=require("fs-extra"),oQ=require("path"),{chain:Kg}=require("stream-chain"),Qg=require("stream-json/streamers/StreamArray"),Wg=require("stream-json/utils/Batch"),Jg=require("stream-chain/utils/comp"),{finished:Zg}=require("stream"),Cd=Y(),cQ=bn(),tI=gd(),_Q=Id(),{BulkLoadFileObject:bd,BulkLoadDataObject:uQ}=Yg(),wd=Ed(),{verifyBulkLoadAttributePerms:rI}=S_(),lQ=dE(),EQ=Rt(),dQ=Fr(),Xg="No records parsed from csv file.",Bs=`${Cd.get("HDB_ROOT")}/tmp`,{schema_regex:hQ}=Tr(),zg=1024*1024*5,jg=5e3,SQ={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};cI.exports={csvDataLoad:fQ,csvURLLoad:TQ,csvFileLoad:mQ,importFromS3:RQ};async function fQ(e,t=[]){let r=D_.dataObject(e);if(r)throw ae(r,r.message,Fe.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=U_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new wd;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&rI(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ae(new Error,o,Fe.BAD_REQUEST,void 0,void 0,!0);let c=new uQ(e.action,e.schema,e.table,n.data);return s=await tI.callOperationFunctionAsAwait(iI,c,aI.bind(null,n.meta.fields),t),s.message===Xg?Xg:oI(s.records,s.number_written)}catch(n){throw Gs(n)}}a(fQ,"csvDataLoad");async function TQ(e){let t=D_.urlObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Bs}/${r}`;try{await AQ(e.csv_url,r)}catch(n){throw vs.error(pe.DOWNLOAD_FILE_ERR(r)+" - "+n),ae(n,Hs(pe.DOWNLOAD_FILE_ERR(r)))}try{let n=new bd(this.job_operation_function.name,e.action,e.schema,e.table,s,pt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Ld(n);return await y_(s),i}catch(n){throw await y_(s),Gs(n)}}a(TQ,"csvURLLoad");async function mQ(e){let t=D_.fileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=new bd(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,pt.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Ld(r)}catch(s){throw Gs(s)}}a(mQ,"csvFileLoad");async function RQ(e){let t=D_.s3FileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=oQ.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Bs}/${n}`;let i=new bd(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await OQ(n,e);let o=await Ld(i);return await y_(r),o}catch(s){throw await y_(r),Gs(s)}}a(RQ,"importFromS3");async function AQ(e,t){let r;try{r=await iQ("get",e)}catch(s){let n=`Error downloading CSV file from ${e}, status code: ${s.statusCode}. Check the log for more information.`;throw ae(s,n,s.statusCode,pt.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}NQ(r,e),await pQ(t,r.raw)}a(AQ,"downloadCSVFile");async function OQ(e,t){try{let r=`${Bs}/${e}`;await Jt.mkdirp(Bs),await Jt.writeFile(`${Bs}/${e}`,"",{flag:"a+"});let s=await Jt.createWriteStream(r),n=_Q.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){vs.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw vs.error(pe.S3_DOWNLOAD_ERR+" - "+r),ae(r,Hs(pe.S3_DOWNLOAD_ERR))}}a(OQ,"downloadFileFromS3");async function pQ(e,t){try{await Jt.mkdirp(Bs),await Jt.writeFile(`${Bs}/${e}`,t)}catch(r){throw vs.error(pe.WRITE_TEMP_FILE_ERR),ae(r,Hs(pe.DEFAULT_BULK_LOAD_ERR))}}a(pQ,"writeFileToTempFolder");async function y_(e){if(e)try{await Jt.access(e),await Jt.unlink(e)}catch{vs.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(y_,"deleteTempFile");function NQ(e,t){if(e.statusCode!==eI.HTTP_STATUS_CODES.OK)throw ae(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Fe.BAD_REQUEST);if(!SQ[e.headers["content-type"]])throw ae(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Fe.BAD_REQUEST);if(!e.raw)throw ae(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Fe.BAD_REQUEST)}a(NQ,"validateURLResponse");async function Ld(e){try{let t;switch(e.file_type){case pt.VALID_S3_FILE_TYPES.CSV:t=await gQ(e);break;case pt.VALID_S3_FILE_TYPES.JSON:t=await IQ(e);break;default:throw ae(new Error,pe.DEFAULT_BULK_LOAD_ERR,Fe.BAD_REQUEST,pt.LOG_LEVELS.ERROR,pe.INVALID_FILE_EXT_ERR(e))}return oI(t.records,t.number_written)}catch(t){throw Gs(t)}}a(Ld,"fileLoad");async function sI(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await L_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&rI(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ae(c);r(_)}}a(sI,"validateChunk");async function nI(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ra.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ra.isEmpty(c)&&!ra.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await tI.callOperationFunctionAsAwait(iI,c,aI.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ae(c,Hs(pe.INSERT_CSV_ERR),Fe.INTERNAL_SERVER_ERROR,pt.LOG_LEVELS.ERROR,pe.INSERT_CSV_ERR+" - "+c);r(_)}}a(nI,"insertChunk");async function gQ(e){let t={records:0,number_written:0};try{let r=new wd,s=Jt.createReadStream(e.file_path,{highWaterMark:zg});s.setEncoding("utf8"),await U_.parsePromise(s,sI.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ae(new Error,n,Fe.BAD_REQUEST);return s=Jt.createReadStream(e.file_path,{highWaterMark:zg}),s.setEncoding("utf8"),await U_.parsePromise(s,nI.bind(null,e,t)),s.destroy(),t}catch(r){throw ae(r,Hs(pe.PAPA_PARSE_ERR),Fe.INTERNAL_SERVER_ERROR,pt.LOG_LEVELS.ERROR,pe.PAPA_PARSE_ERR+r)}}a(gQ,"callPapaParse");async function IQ(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new wd,n=Kg([Jt.createReadStream(e.file_path,{encoding:"utf-8"}),Qg.withParser(),c=>c.value,new Wg({batchSize:jg}),Jg(async c=>{await sI(e,s,r,c)})]);await new Promise((c,_)=>{Zg(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ae(new Error,i,Fe.BAD_REQUEST);let o=Kg([Jt.createReadStream(e.file_path,{encoding:"utf-8"}),Qg.withParser(),c=>c.value,new Wg({batchSize:jg}),Jg(async c=>{await nI(e,t,r,c)})]);return await new Promise((c,_)=>{Zg(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ae(s,Hs(pe.INSERT_JSON_ERR),Fe.INTERNAL_SERVER_ERROR,pt.LOG_LEVELS.ERROR,pe.INSERT_JSON_ERR+s)}}a(IQ,"insertJson");async function iI(e){let t={};try{e.data&&e.data.length>0&&CQ(e.data[0])?t=await bQ(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",vs.info(t.message))}catch(r){throw Gs(r)}return t}a(iI,"callBulkFileLoad");function CQ(e){let t=Object.keys(e);for(let r of t)if(!hQ.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(CQ,"validateColumnNames");async function bQ(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=L_.insert;break;case"update":i=L_.update;break;case"upsert":i=L_.upsert;break;default:throw ae(new Error,pe.INVALID_ACTION_PARAM_ERR(s),Fe.BAD_REQUEST,pt.LOG_LEVELS.ERROR,pe.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Gs(o)}}a(bQ,"bulkFileLoad");async function aI(e,t,r,s=[]){try{if(t.data.length===0||!Cd.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=U_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new lQ(r.txn_time,i,Cd.get(pt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await EQ.publishToStream(`${aQ.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,dQ.createNatsTableStreamName(t.schema,t.table),[o],s),await cQ.sendAttributeTransaction(r,t,s),delete r.new_attributes}catch(n){vs.error(n)}}a(aI,"postCSVLoadFunction");function oI(e,t){return`successfully loaded ${t} of ${e} records`}a(oI,"buildResponseMsg");function Gs(e){return ae(e,Hs(pe.DEFAULT_BULK_LOAD_ERR),Fe.INTERNAL_SERVER_ERROR,pt.LOG_LEVELS.ERROR,pe.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Gs,"buildTopLevelErrMsg")});var Dd=S((l3,fI)=>{"use strict";var lI=Tt(),wQ=T_(),LQ=Id(),{AsyncParser:UQ,Transform:yQ}=require("json2csv"),sa=require("stream"),DQ=require("events"),vt=C(),yd=require("fs-extra"),MQ=require("path"),je=I(),{promisify:M_}=require("util"),na=C(),{handleHDBError:Ne,hdb_errors:PQ}=D(),{HDB_ERROR_MSGS:Nt,HTTP_STATUS_CODES:ge}=PQ,_I=["search_by_value","search_by_hash","sql"],uI=["json","csv"],EI="json",dI="csv",BQ="Successfully exported JSON locally.",vQ="Successfully exported CSV locally.",HQ=1e3,GQ=1e3,qQ=M_(lI.searchByHash),FQ=M_(lI.searchByValue),VQ=M_(wQ.evaluateSQL),kQ=M_(sa.finished);fI.exports={export_to_s3:KQ,export_local:xQ};async function xQ(e){je.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=hI(e);if(!vt.isEmpty(t))throw je.error(t),Ne(new Error,t,ge.BAD_REQUEST,void 0,void 0,!0);if(vt.isEmpty(e.path))throw je.error(Nt.MISSING_VALUE("path")),Ne(new Error,Nt.MISSING_VALUE("path"),ge.BAD_REQUEST,void 0,void 0,!0);let r=(vt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(MQ.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=vt.buildFolderPath(e.path,r);try{await $Q(e.path);let n=await SI(e);return await YQ(s,e.format,n)}catch(n){throw je.error(n),new Error(n)}}a(xQ,"export_local");async function $Q(e){if(je.trace("in confirmPath"),vt.isEmptyOrZeroLength(e))throw Ne(new Error,`Invalid path: ${e}`,ge.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await yd.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,je.error(s),Ne(new Error,s,ge.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw je.error(r),Ne(new Error,r,ge.BAD_REQUEST,void 0,void 0,!0)}return!0}a($Q,"confirmPath");async function YQ(e,t,r){if(je.trace("in saveToLocal"),na.isEmptyOrZeroLength(e))throw Ne(new Error,Nt.INVALID_VALUE("file_path"),ge.BAD_REQUEST,void 0,void 0,!0);if(na.isEmptyOrZeroLength(t))throw Ne(new Error,Nt.INVALID_VALUE("Source format"),ge.BAD_REQUEST,void 0,void 0,!0);if(na.isEmpty(r))throw Ne(new Error,Nt.NOT_FOUND("Data"),ge.BAD_REQUEST,void 0,void 0,!0);if(t===EI){let s=yd.createWriteStream(e),n=r.length;s.write("[");let i="";for await(let[o,c]of r.entries())i+=o===n-1?JSON.stringify(c):JSON.stringify(c)+",",o!==0&&o%GQ===0&&(s.write(i)||await DQ.once(s,"drain"),i="");return i.length!==0&&s.write(i),s.write("]"),s.end(),await kQ(s),BQ}else if(t===dI){let s=yd.createWriteStream(e),n=sa.Readable.from(r),i={},o={objectMode:!0};return await new UQ(i,o).fromInput(n).toOutput(s).promise(!1),vQ}throw Ne(new Error,Nt.INVALID_VALUE("format"),ge.BAD_REQUEST)}a(YQ,"saveToLocal");async function KQ(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ne(new Error,Nt.MISSING_VALUE("S3 object"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ne(new Error,Nt.MISSING_VALUE("aws_access_key_id"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ne(new Error,Nt.MISSING_VALUE("aws_secret_access_key"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.bucket))throw Ne(new Error,Nt.MISSING_VALUE("bucket"),ge.BAD_REQUEST);if(vt.isEmptyOrZeroLength(e.s3.key))throw Ne(new Error,Nt.MISSING_VALUE("key"),ge.BAD_REQUEST);let t=hI(e);if(!vt.isEmpty(t))throw Ne(new Error,t,ge.BAD_REQUEST);je.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await SI(e)}catch(c){throw je.error(c),c}let s,n=LQ.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key),i,o=new sa.PassThrough;if(e.format===dI){i=e.s3.key+".csv";let c=sa.Readable.from(r),_={},u={objectMode:!0},l=new yQ(_,u);l.on("error",E=>{throw E}),c.pipe(l).pipe(o)}else if(e.format===EI){i=e.s3.key+".json";let c=new sa.Readable;c.pipe(o),c.on("error",l=>{throw l}),c.push("[");let _=r.length,u="";for(let[l,E]of r.entries())u+=l===_-1?JSON.stringify(E):JSON.stringify(E)+",",l!==0&&l%HQ===0&&(c.push(u),u="");u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ne(new Error,Nt.INVALID_VALUE("format"),ge.BAD_REQUEST);try{s=await n.upload({Bucket:e.s3.bucket,Key:i,Body:o}).promise()}catch(c){throw je.error(c),c}return s}a(KQ,"export_to_s3");function hI(e){if(je.trace("in exportCoreValidation"),vt.isEmpty(e.format))return"format missing";if(uI.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${uI.join(", ")}`;let t=e.search_operation.operation;if(vt.isEmpty(t))return"search_operation.operation missing";if(_I.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${_I.join(", ")}`}a(hI,"exportCoreValidation");async function SI(e){je.trace("in getRecords");let t,r;if(na.isEmpty(e.search_operation)||na.isEmptyOrZeroLength(e.search_operation.operation))throw Ne(new Error,Nt.INVALID_VALUE("Search operation"),ge.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=FQ;break;case"search_by_hash":t=qQ;break;case"sql":t=VQ;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,je.error(r),Ne(new Error,r,ge.BAD_REQUEST)}e.search_operation.hdb_user=e.hdb_user;try{return t(e.search_operation)}catch(s){throw je.error(s),s}}a(SI,"getRecords")});var mI=S((E3,TI)=>{"use strict";var P_=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(P_,"SqlSearchObject");TI.exports=P_});var OI=S((d3,AI)=>{"use strict";var QQ=T(),RI=require("moment"),WQ=require("uuid").v4,B_=class{constructor(){this.id=WQ(),this.type=void 0,this.start_datetime=RI().valueOf(),this.created_datetime=RI().valueOf(),this.end_datetime=void 0,this.status=QQ.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(B_,"JobObject");AI.exports=B_});var H_=S((h3,bI)=>{"use strict";var JQ=require("uuid").v4,gI=Ut(),II=Tt(),ZQ=Kt(),XQ=Es(),zQ=mI(),oe=T(),jQ=OI(),eW=Ql(),Ht=I(),tW=ei(),Fn=C(),{promisify:Md}=require("util"),qs=require("moment"),rW=T_(),v_=Nd(),pI=Tl(),{deleteTransactionLogsBeforeValidator:sW}=cd(),{handleHDBError:nW,hdb_errors:iW}=D(),{HTTP_STATUS_CODES:aW}=iW,NI=Md(II.searchByValue),oW=Md(II.searchByHash),cW=gI.insert,_W=Md(rW.evaluateSQL),uW=gI.update;bI.exports={addJob:dW,updateJob:SW,handleGetJob:lW,handleGetJobsByStartDate:EW,getJobById:CI};async function lW(e){try{let t=await CI(e.id);return Fn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ht.error(r),new Error(r)}}a(lW,"handleGetJob");async function EW(e){try{let t=await hW(e);if(Ht.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=qs(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=qs(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ht.error(r),new Error(r)}}a(EW,"handleGetJobsByStartDate");async function dW(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Fn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ht.info(l),t.error=l,t}if(!oe.JOB_TYPE_ENUM[e.operation])return Ht.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case oe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=v_.fileObject(e);break;case oe.OPERATIONS_ENUM.CSV_URL_LOAD:s=v_.urlObject(e);break;case oe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=v_.dataObject(e);break;case oe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=v_.s3FileObject(e);break;case oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=pI(e,"date");break;case oe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=pI(e,"timestamp");break;case oe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=sW(e);break;default:break}if(s)throw nW(s,s.message,aW.BAD_REQUEST,void 0,void 0,!0);let n=new jQ;n.type=e.operation===oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new ZQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await NI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Ht.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=JQ();try{o=await NI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return Ht.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ht.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new tW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await cW(_)}catch(l){return Ht.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ht.trace(l)}return t}a(dW,"addJob");async function hW(e){let t=qs(e.from_date,qs.ISO_8601),r=qs(e.to_date,qs.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new zQ(s,e.hdb_user);try{return await _W(n)}catch(i){throw Ht.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(hW,"getJobsInDateRange");async function CI(e){if(Fn.isEmptyOrZeroLength(e))return Fn.errorizeMessage("Invalid job ID specified.");let t=new XQ(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await oW(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ht.error(s),Fn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(CI,"getJobById");async function SW(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Fn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===oe.JOB_STATUS_ENUM.COMPLETE||e.status===oe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=qs().valueOf());let t=new eW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await uW(t)}catch(s){throw new Error(s)}return r}a(SW,"updateJob")});var MI=S((S3,DI)=>{"use strict";var wI=C(),gt=T(),fW=require("moment"),G_=Ud(),q_=I(),LI=H_(),UI=Dd(),yI=ms(),TW=_c(),mW=gn(),RW=i_(),F_=class{constructor(t,r){this.job=t,this.json=r}};a(F_,"RunnerMessage");async function AW(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(wI.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(wI.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case gt.JOB_TYPE_ENUM.csv_file_load:await wr(e,G_.csvFileLoad);break;case gt.JOB_TYPE_ENUM.csv_url_load:await wr(e,G_.csvURLLoad);break;case gt.JOB_TYPE_ENUM.csv_data_load:await wr(e,G_.csvDataLoad);break;case gt.JOB_TYPE_ENUM.import_from_s3:await wr(e,G_.importFromS3);break;case gt.JOB_TYPE_ENUM.empty_trash:break;case gt.JOB_TYPE_ENUM.export_local:await wr(e,UI.export_local);break;case gt.JOB_TYPE_ENUM.export_to_s3:await wr(e,UI.export_to_s3);break;case gt.JOB_TYPE_ENUM.delete_files_before:case gt.JOB_TYPE_ENUM.delete_records_before:await wr(e,yI.deleteFilesBefore);break;case gt.JOB_TYPE_ENUM.delete_audit_logs_before:await wr(e,yI.deleteAuditLogsBefore);break;case gt.JOB_TYPE_ENUM.delete_transaction_logs_before:await wr(e,RW.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(AW,"parseMessage");async function wr(e,t){try{e.job.status=gt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=fW().valueOf(),await LI.updateJob(e.job),await OW(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):q_.error(`There was an error running ${t.name} job with id ${e.job.id}`),q_.error(s),e.job.message=s,e.job.status=gt.JOB_STATUS_ENUM.ERROR;try{await LI.updateJob(e.job)}catch(n){throw q_.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(wr,"runJob");async function OW(e){let t=TW.generateJobConfig(e);q_.trace("launching job process:",e),await mW.start(t)}a(OW,"launchJobProcess");DI.exports={parseMessage:AW,RunnerMessage:F_}});var BI=S((f3,PI)=>{"use strict";var V_=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(V_,"OperationFunctionObject");PI.exports=V_});var WI=S((T3,QI)=>{"use strict";var $_=Tt(),Hd=T_(),k_=Ud(),Vn=Bc(),Pd=un(),aa=ms(),pW=OE(),ia=Kr(),x_=UE(),Lr=od(),Ve=I(),NW=ME(),gW=Yc(),IW=qE(),CW=Jc(),bW=FE(),wW=xE(),Bd=KE(),vI=Dd(),LW=S_(),Gd=H_(),A=T(),{hdb_errors:ca,handleHDBError:oa}=D(),{HTTP_STATUS_CODES:HI}=ca,vd=JE(),GI=ed(),Y_=require("util"),Fs=Ut(),UW=Ss(),yW=Cc(),YI=bn(),qI=MI(),FI=fc(),VI=Sr(),kI=i_(),xI=ld(),DW=gd(),MW=Y_.promisify($_.searchByHash),PW=Y_.promisify($_.searchByValue),BW=Y_.promisify($_.search),vW=Y_.promisify(Hd.evaluateSQL),HW={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},N=BI();function GW(e,t,r){return Promise.all([YI.postOperationHandler(e,t,r),e.table?Fs.flush(e):null])}a(GW,"postWrite");async function qW(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ve.info(o)}}catch(s){Ve.error(s)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:GW;try{let s=await DW.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return HW[e.body.operation]&&UW.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}catch(s){throw Ve.info(s),s}}a(qW,"processLocalTransaction");var $I=kW();QI.exports={chooseOperation:FW,getOperationFunction:KI,processLocalTransaction:qW};function FW(e){let t;try{t=KI(e)}catch(n){throw Ve.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Hd.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Hd.checkASTPermissions(e,i);if(o)throw Ve.error(`${HI.FORBIDDEN} from operation ${e.search_operation}`),oa(new Error,o,ca.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=LW.verifyPerms(i,n);if(o)throw Ve.error(`${HI.FORBIDDEN} from operation ${e.operation}`),oa(new Error,o,ca.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw oa(n,"There was an error when trying to choose an operation path")}return r}a(FW,"chooseOperation");function KI(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),$I.has(e.operation))return $I.get(e.operation);throw oa(new Error,ca.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ca.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(KI,"getOperationFunction");async function VW(e){Ve.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await Fs.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Fs.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Fs.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await aa.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await YI.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(VW,"catchup");async function ur(e){let t,r;try{r=await Gd.addJob(e),t=r.createdJob;let s=new qI.RunnerMessage(t,e);return await qI.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ve.error(n),oa(s,n)}}a(ur,"executeJob");function kW(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(Fs.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(Fs.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(Fs.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N($_.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(MW)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(PW)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(BW)),e.set(A.OPERATIONS_ENUM.SQL,new N(vW)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(ur,k_.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(ur,k_.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(ur,k_.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(ur,k_.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(Vn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(Vn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(Vn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(Vn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(Vn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(Vn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(Pd.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(Pd.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(Pd.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(aa.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(ia.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(ia.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(ia.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(ia.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(x_.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(x_.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(x_.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(x_.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(ia.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(NW)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(gW)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N(IW)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(CW)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(bW)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(VI.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N(wW.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(Bd.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(Bd.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(Bd.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(ur,vI.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(ur,aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(ur,aa.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(ur,vI.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(Gd.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(Gd.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N(vd.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N(vd.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N(vd.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(GI.restartProcesses)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(GI.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(VW)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(yW.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(ur,aa.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(pW)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(FI.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(FI.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(VI.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Lr.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Lr.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Lr.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Lr.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Lr.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Lr.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Lr.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Lr.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Lr.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(kI.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(ur,kI.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(xI.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(xI.auditModules)),e}a(kW,"initializeOperationFunctionMap")});var zI=S((m3,XI)=>{"use strict";var xW=require("node-ipc").IPC,JI=C(),ZI=T(),Ur=I(),{IPC_ERRORS:kn}=rt(),$W=require("os"),K_=class{constructor(t,r){this.ipc=new xW,this.server_name=ZI.HDB_IPC_SERVER,this.ipc.config.retry=$W.platform()=="win32"?6e5:100,this.ipc.config.id=ZI.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{Ur.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{Ur.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&Ur.warn("Error connecting to HDB IPC server. Confirm that the server is running."),Ur.warn(`Error with IPC client ${this.ipc.config.id}`),Ur.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw Ur.warn(kn.INVALID_IPC_DATA_TYPE),new Error(kn.INVALID_IPC_DATA_TYPE);if(JI.isEmpty(t.type))throw Ur.warn(kn.MISSING_TYPE),new Error(kn.MISSING_TYPE);if(JI.isEmpty(t.message))throw Ur.warn(kn.MISSING_MSG),new Error(kn.MISSING_MSG);Ur.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(K_,"IPCClient");XI.exports=K_});var qd=T(),jI=C(),_a=I(),YW=Ss(),KW=gn(),QW=Kr(),WW=require("util").promisify,JW=WW(YW.setSchemaDataToGlobal),ZW=WI(),XW=zI(),eC=require("moment"),tC=H_(),{cloneDeep:zW}=require("lodash"),rC=process.env[qd.PROCESS_NAME_ENV_PROP],Vs=rC.substring(4);a(async function(){let t={id:Vs,request:void 0};try{_a.notify("Starting job:",Vs),await JW(),await QW.setUsersToGlobal(),global.hdb_ipc=new XW(process.pid,{});let r=await tC.getJobById(Vs);if(jI.isEmptyOrZeroLength(r))throw new Error(`Unable to find a record in hdb_job for job: ${Vs}`);let{request:s}=r[0];if(jI.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=zW(s);let n=ZW.getOperationFunction(s);_a.trace("Running operation:",s.operation,"for job",Vs);let i=await n.job_operation_function(s);_a.trace("Result from job:",Vs,i),t.status=qd.JOB_STATUS_ENUM.COMPLETE,t.message=i,t.end_datetime=eC().valueOf(),_a.notify("Successfully completed job:",Vs)}catch(r){_a.error(r),t.status=qd.JOB_STATUS_ENUM.ERROR,t.message=r.message?r.message:r,t.end_datetime=eC().valueOf()}finally{await tC.updateJob(t),await KW.deleteProcess(rC)}},"job")();
|
|
12
|
+
`,""):null}catch(d){d.stderr?i[_].npm_error=eg(d.stderr):i[_].npm_error=d.message;continue}try{i[_].npm_output=JSON.parse(l)}catch{i[_].npm_output=l}try{i[_].npm_error=JSON.parse(E)}catch{i[_].npm_error=E}}return a_.info(`finished installModules with response ${i}`),i}a(GY,"installModules");function eg(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
13
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(eg,"parseNPMStdErr");async function FY(e){a_.info(`starting auditModules for request: ${e}`);let t=sg(e);if(t)throw Bn(t,t.message,vn.BAD_REQUEST);let{projects:r}=e;await tg(),await rg(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=i_.join(od,o);s[o]={npm_output:null,npm_error:null};try{let _=await jN("npm audit --json",c);s[o].npm_output=JSON.parse(_)}catch(_){s[o].npm_error=eg(_.stderr)}}return a_.info(`finished auditModules with response ${s}`),s}a(FY,"auditModules");async function tg(){try{return await jN("npm -v"),!0}catch{throw Bn(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",vn.BAD_REQUEST,void 0,void 0,!0)}}a(tg,"checkNPMInstalled");async function rg(e){if(!Array.isArray(e)||e.length===0)throw Bn(new Error,"projects argument must be an array with at least 1 element",vn.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=i_.join(od,i.toString());if(!await JN.pathExists(o)){t.push(i);continue}let _=i_.join(o,"package.json");await JN.pathExists(_)||r.push(i)}if(t.length>0)throw Bn(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,vn.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Bn(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,vn.BAD_REQUEST,void 0,void 0,!0)}a(rg,"checkProjectPaths");function sg(e){let t=n_.object({projects:n_.array().min(1).items(n_.string()).required(),dry_run:n_.boolean().default(!1)});return HY.validateBySchema(e,t)}a(sg,"modulesValidator")});var ag=S((qX,ig)=>{"use strict";var o_=class{constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};a(o_,"PermissionTableResponseObject");ig.exports=o_});var cg=S((GX,og)=>{"use strict";var c_=class{constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};a(c_,"PermissionAttributeResponseObject");og.exports=c_});var _d=S((FX,ug)=>{"use strict";var _g=ag(),VY=cg(),{HDB_ERROR_MSGS:kY}=rt(),__=class{constructor(){this.error=kY.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new _g(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let _=new VY(c,n[c]);i.push(_)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new _g(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};a(__,"PermissionResponseObject");ug.exports=__});var d_=S((VX,Ig)=>{"use strict";var ud=Lt(),u_=ft(),Pt=Mc(),Qi=on(),ld=Ss(),$Y=mE(),Ji=kr(),l_=wE(),Oe=I(),xY=UE(),YY=$c(),KY=vE(),WY=Wc(),QY=HE(),JY=FE(),Ed=$E(),pr=b(),ZY=oN(),dd=KE(),dg=XE(),Mt=T(),hg=yN(),XY=gc(),Sg=hc(),fg=ur(),Nr=nd(),zY=require("alasql"),Tg=s_(),mg=cd(),Rg=_d(),{handleHDBError:lt,hdb_errors:Ag}=D(),{HDB_ERROR_MSGS:Ge,HTTP_STATUS_CODES:Ki}=Ag,O=new Map,Og="delete",Xr="insert",ar="read",ys="update",Wi="describe",lg=Qi.describeSchema.name,Eg=Qi.describeTable.name,pg={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},jY="catchup",eK="handleGetJob",tK="handleGetJobsByStartDate",E_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},rK=[Pt.createTable.name,Pt.createAttribute.name,Pt.dropTable.name,Pt.dropAttribute.name],Ng={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},p=class{constructor(t,r){this.requires_su=t,this.perms=r}};a(p,"permission");O.set(ud.insert.name,new p(!1,[Xr]));O.set(ud.update.name,new p(!1,[ys]));O.set(ud.upsert.name,new p(!1,[Xr,ys]));O.set(u_.searchByConditions.name,new p(!1,[ar]));O.set(u_.searchByHash.name,new p(!1,[ar]));O.set(u_.searchByValue.name,new p(!1,[ar]));O.set(u_.search.name,new p(!1,[ar]));O.set(Pt.createSchema.name,new p(!0,[]));O.set(Pt.createTable.name,new p(!0,[]));O.set(Pt.createAttribute.name,new p(!1,[Xr]));O.set(Pt.dropSchema.name,new p(!0,[]));O.set(Pt.dropTable.name,new p(!0,[]));O.set(Pt.dropAttribute.name,new p(!0,[]));O.set(Qi.describeSchema.name,new p(!1,[ar]));O.set(Qi.describeTable.name,new p(!1,[ar]));O.set(ld.deleteRecord.name,new p(!1,[Og]));O.set(Ji.addUser.name,new p(!0,[]));O.set(Ji.alterUser.name,new p(!0,[]));O.set(Ji.dropUser.name,new p(!0,[]));O.set(Ji.listUsersExternal.name,new p(!0,[]));O.set(l_.listRoles.name,new p(!0,[]));O.set(l_.addRole.name,new p(!0,[]));O.set(l_.alterRole.name,new p(!0,[]));O.set(l_.dropRole.name,new p(!0,[]));O.set(xY.name,new p(!0,[]));O.set(YY.name,new p(!0,[]));O.set(KY.name,new p(!0,[]));O.set(WY.name,new p(!0,[]));O.set(QY.name,new p(!0,[]));O.set(Ed.setRoutes.name,new p(!0,[]));O.set(Ed.getRoutes.name,new p(!0,[]));O.set(Ed.deleteRoutes.name,new p(!0,[]));O.set(fg.setConfiguration.name,new p(!0,[]));O.set(JY.clusterStatus.name,new p(!0,[]));O.set(dd.getFingerprint.name,new p(!0,[]));O.set(dd.setLicense.name,new p(!0,[]));O.set(ld.deleteFilesBefore.name,new p(!0,[]));O.set(ld.deleteAuditLogsBefore.name,new p(!0,[]));O.set(dg.restartProcesses.name,new p(!0,[]));O.set(dg.restartService.name,new p(!0,[]));O.set($Y.name,new p(!0,[]));O.set(XY.systemInformation.name,new p(!0,[]));O.set(fg.getConfiguration.name,new p(!0,[]));O.set(Tg.readTransactionLog.name,new p(!0,[]));O.set(Tg.deleteTransactionLogsBefore.name,new p(!0,[]));O.set(mg.installModules.name,new p(!0,[]));O.set(mg.auditModules.name,new p(!0,[]));O.set(Sg.createTokens.name,new p(!1,[]));O.set(Sg.refreshOperationToken.name,new p(!1,[]));O.set(Nr.customFunctionsStatus.name,new p(!0,[]));O.set(Nr.getCustomFunctions.name,new p(!0,[]));O.set(Nr.getCustomFunction.name,new p(!0,[]));O.set(Nr.setCustomFunction.name,new p(!0,[]));O.set(Nr.dropCustomFunction.name,new p(!0,[]));O.set(Nr.addCustomFunctionProject.name,new p(!0,[]));O.set(Nr.dropCustomFunctionProject.name,new p(!0,[]));O.set(Nr.packageCustomFunctionProject.name,new p(!0,[]));O.set(Nr.deployCustomFunctionProject.name,new p(!0,[]));O.set(dd.getRegistrationInfo.name,new p(!1,[]));O.set(Ji.userInfo.name,new p(!1,[]));O.set(Qi.describeAll.name,new p(!1,[]));O.set(eK,new p(!1,[]));O.set(tK,new p(!0,[]));O.set(jY,new p(!0,[]));O.set(E_.CSV_DATA_LOAD,new p(!1,[Xr,ys]));O.set(E_.CSV_URL_LOAD,new p(!1,[Xr,ys]));O.set(E_.CSV_FILE_LOAD,new p(!1,[Xr,ys]));O.set(E_.IMPORT_FROM_S3,new p(!1,[Xr,ys]));O.set(Ng.EXPORT_TO_S3,new p(!1,[ar]));O.set(Ng.EXPORT_LOCAL,new p(!1,[ar]));O.set(Mt.VALID_SQL_OPS_ENUM.DELETE,new p(!1,[Og]));O.set(Mt.VALID_SQL_OPS_ENUM.SELECT,new p(!1,[ar]));O.set(Mt.VALID_SQL_OPS_ENUM.INSERT,new p(!1,[Xr]));O.set(Mt.VALID_SQL_OPS_ENUM.UPDATE,new p(!1,[ys]));Ig.exports={verifyPerms:nK,verifyPermsAst:sK,verifyBulkLoadAttributePerms:aK};function sK(e,t,r){if(pr.isEmptyOrZeroLength(e))throw Oe.info("verify_perms_ast has an empty user parameter"),lt(new Error);if(pr.isEmptyOrZeroLength(t))throw Oe.info("verify_perms_ast has an empty user parameter"),lt(new Error);if(pr.isEmptyOrZeroLength(r))throw Oe.info("verify_perms_ast has a null operation parameter"),lt(new Error);try{let s=new Rg,n=new ZY(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Oe.info("No schemas defined in verifyPermsAst(), will not continue."),lt(new Error);let c=!!t.role.permission.super_user,_=i.includes("system");if(_&&pg[r])throw lt(new Error,Ge.DROP_SYSTEM,Ki.FORBIDDEN);if(c&&!_)return null;let u=hg.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof zY.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(u));for(let E=0;E<i.length;E++){let d=n.getTablesBySchemaName(i[E]);d&&o.set(i[E],d)}let l=gg(t,r,o,s);return l||(o.forEach((E,d)=>{for(let h=0;h<E.length;h++){let m=n.getAttributesBySchemaTableName(d,E[h]),R=Sd(t.role.permission,d,E[h]);hd(m,R,r,E[h],d,s)}}),s.getPermsResponse())}catch(s){throw lt(s)}}a(sK,"verifyPermsAst");function nK(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Oe.info("null required parameter in verifyPerms"),lt(new Error,Ge.DEFAULT_INVALID_REQUEST,Ki.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new Rg;if(pr.isEmptyOrZeroLength(e.hdb_user.role)||pr.isEmptyOrZeroLength(e.hdb_user.role.permission))return Oe.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ge.USER_HAS_NO_PERMS(e.hdb_user.username));let _=!!e.hdb_user.role.permission.super_user,u=e.hdb_user.role.permission.structure_user,l=o.has(Mt.SYSTEM_SCHEMA_NAME)||n===Mt.SYSTEM_SCHEMA_NAME;if(l&&pg[r])throw lt(new Error,Ge.DROP_SYSTEM,Ki.FORBIDDEN);if(_&&!l||u===!0&&(r===Pt.createSchema.name||r===Pt.dropSchema.name))return null;if(rK.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let E=hg.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=E,r===lg||r===Eg){if(n===Mt.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ge.SCHEMA_PERM_ERROR(n));if(!E.super_user){if(r===lg&&(!E[n]||!E[n][Wi]))return c.handleInvalidItem(Ge.SCHEMA_NOT_FOUND(n));if(r===Eg&&(!E[n]||!E[n].tables[i]||!E[n].tables[i][Wi]))return c.handleInvalidItem(Ge.TABLE_NOT_FOUND(n,i))}}let d=gg(e.hdb_user,r,o,c,s);if(d)return d;if(O.get(r)&&O.get(r).perms.length===0)return null;if(!_&&e.get_attributes&&Mt.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let R=[],C=E[n].tables[i];C[Mt.PERMS_CRUD_ENUM.READ]&&(C.attribute_permissions.length>0?C.attribute_permissions.filter(B=>B[Mt.PERMS_CRUD_ENUM.READ]).forEach(B=>{R.push(B.attribute_name)}):R=global.hdb_schema[n][i].attributes.map(L=>L.attribute),e.get_attributes=R)}let h=iK(e),m=Sd(e.hdb_user.role.permission,n,i);return hd(h,m,r,i,n,c,s),c.getPermsResponse()}a(nK,"verifyPerms");function gg(e,t,r,s,n){if(pr.arrayHasEmptyValues([e,t,r]))throw Oe.info("hasPermissions has an invalid parameter"),lt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&!i)return null;if(!O.get(t))throw Oe.info(`operation ${t} not found.`),lt(new Error,Ge.OP_NOT_FOUND(t),Ki.BAD_REQUEST);if(O.get(t)&&O.get(t).requires_su)return Oe.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ge.OP_IS_SU_ONLY(t));let c=r.keys();for(let _ of c){try{if(_&&!o[_]||o[_][Wi]===!1){s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}}catch{s.addInvalidItem(Ge.SCHEMA_NOT_FOUND(_));continue}let u=r.get(_);for(let l of u){let E=o[_].tables[l];if(!E||E[Wi]===!1)s.addInvalidItem(Ge.TABLE_NOT_FOUND(_,l));else try{let d=[],h=O.get(t).perms;!pr.isEmpty(n)&&h.includes(n)&&(h=[n]);for(let m=0;m<h.length;m++){let R=h[m],C=E[R];(C==null||C===!1)&&(Oe.info(`Required ${R} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),d.push(R))}d.length>0&&s.addUnauthorizedTable(_,l,d)}catch(d){let h=Ge.UNKNOWN_OP_AUTH_ERROR(t,_,l);throw Oe.error(h),Oe.error(d),lt(Ag.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?s.getPermsResponse():null}a(gg,"hasPermissions");function hd(e,t,r,s,n,i,o){if(!e||!t)throw Oe.info("no attributes specified in checkAttributePerms."),lt(new Error);let c=O.get(r).perms;if(!c||c==="")throw Oe.info(`no permissions found for ${r} in checkAttributePerms().`),lt(new Error);if(pr.isEmptyOrZeroLength(t))return Oe.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let _={};for(let l of e){let E=t.get(l);if(E){if(E[Wi]===!1){i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let d of c){if(Mt.TIME_STAMP_NAMES.includes(E.attribute_name)&&d!==ar)throw lt(new Error,Ge.SYSTEM_TIMESTAMP_PERMS_ERR,Ki.FORBIDDEN);E[d]===!1&&(_[E.attribute_name]?_[E.attribute_name].push(d):_[E.attribute_name]=[d])}}else i.addInvalidItem(Ge.ATTR_NOT_FOUND(n,s,l),n,s)}let u=Object.keys(_);u.length>0&&i.addUnauthorizedAttributes(u,n,s,_)}a(hd,"checkAttributePerms");function iK(e){let t=new Set;try{if(e.action)return t;if(e.operation===Mt.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Oe.info(r)}return t}a(iK,"getRecordAttributes");function Sd(e,t,r){let s=new Map;if(pr.isEmpty(e))return Oe.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Oe.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Sd,"getAttributePermissions");function aK(e,t,r,s,n,i,o){let c=new Set(i),_=Sd(e,s,n);hd(c,_,t,n,s,o,r)}a(aK,"verifyBulkLoadAttributePerms")});var S_=S((kX,Ug)=>{"use strict";Ug.exports={evaluateSQL:OK,processAST:Lg,convertSQLToAST:Cg,checkASTPermissions:wg};var bg=Lt(),md=require("util"),oK=md.callbackify(bg.insert),cK=ft().search,_K=UO().update,uK=md.callbackify(_K),lK=DO().convertDelete,zr=require("alasql"),EK=d_(),Xi=I(),dK=wo(),hK=b(),Zi=T(),{hdb_errors:SK,handleHDBError:fd}=D(),{HTTP_STATUS_CODES:Td}=SK,fK=gn();function TK(e,t,r){return Promise.all([fK.postOperationHandler(e,t,r),bg.flush(e)])}a(TK,"postWrite");var mK=md.callbackify(TK);dK(zr);var RK=403,AK="There was a problem performing this insert. Please check the logs and try again.",h_=class{constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};a(h_,"ParsedSQLObject");function OK(e,t){let r=e.parsed_sql_object;if(!r){r=Cg(e.sql);let s,n=r.ast.statements[0];if(n instanceof zr.yy.Insert?s=n.into.databaseid:n instanceof zr.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof zr.yy.Update||n instanceof zr.yy.Delete?s=n.table.databaseid:Xi.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof zr.yy.Select)&&hK.isEmptyOrZeroLength(s))return t("No schema specified",null)}Lg(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(OK,"evaluateSQL");function wg(e,t){let r;try{r=EK.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(wg,"checkASTPermissions");function Cg(e){let t=new h_;if(!e)throw fd(new Error,"The 'sql' parameter is missing from the request body",Td.BAD_REQUEST);try{let r=e.trim(),s=zr.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
14
|
+
`);throw s[1]?fd(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Td.BAD_REQUEST):fd(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Td.BAD_REQUEST)}return t}a(Cg,"convertSQLToAST");function Lg(e,t,r){try{let s=pK;if(!e.bypass_auth&&!t.permissions_checked){let i=wg(e,t);if(i&&i.length>0)return r(RK,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Zi.VALID_SQL_OPS_ENUM.SELECT:s=cK,n=t.ast.statements[0];break;case Zi.VALID_SQL_OPS_ENUM.INSERT:s=NK;break;case Zi.VALID_SQL_OPS_ENUM.UPDATE:s=uK;break;case Zi.VALID_SQL_OPS_ENUM.DELETE:s=lK;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(Lg,"processAST");function pK(e,t){Xi.info(e),t("unknown sql statement")}a(pK,"nullFunction");function NK({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=gK(i,e.values)}catch(o){return r(o)}oK(n,(o,c)=>{if(o)return r(o);mK(n,c,_=>{_&&Xi.error(_)});try{delete c.new_attributes,delete c.txn_time}catch(_){Xi.error(`Error delete new_attributes from insert response: ${_}`)}r(null,c)})}a(NK,"convertInsert");function gK(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=zr.compile(`SELECT ${n.toString()} AS [${Zi.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Xi.error(r),new Error(AK)}}a(gK,"createDataObjects")});var Ad=S(($X,Bg)=>{var A_=require("clone"),O_=Ee(),IK=b(),R_=T(),bK=I(),f_=require("fs"),{hdb_errors:wK,handleHDBError:zi}=D(),{HDB_ERROR_MSGS:CK,HTTP_STATUS_CODES:T_}=wK,{common_validators:m_}=Er(),yg=1e9,Rd=" is required",LK=["insert","update","upsert"],p_={schema:{presence:!0,format:m_.schema_format,length:m_.schema_length},table:{presence:!0,format:m_.schema_format,length:m_.schema_length},action:{inclusion:{within:LK,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{}},{AWS_ACCESS_KEY:UK,AWS_SECRET:yK,AWS_BUCKET:DK,AWS_FILE_KEY:MK}=R_.S3_BUCKET_AUTH_KEYS,PK={s3:{presence:!0},[`s3.${UK}`]:{presence:!0,type:"String"},[`s3.${yK}`]:{presence:!0,type:"String"},[`s3.${DK}`]:{presence:!0,type:"String"},[`s3.${MK}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]}},Dg=A_(p_);Dg.data.presence={message:Rd};var Mg=A_(p_);Mg.file_path.presence={message:Rd};var BK=Object.assign(A_(p_),PK),Pg=A_(p_);Pg.csv_url.presence={message:Rd};function vK(e){let t=O_.validateObject(e,Dg);return N_(e,t)}a(vK,"dataObject");function HK(e){let t=O_.validateObject(e,Pg);return N_(e,t)}a(HK,"urlObject");function qK(e){let t=O_.validateObject(e,Mg);return N_(e,t)}a(qK,"fileObject");function GK(e){let t=O_.validateObject(e,BK);return N_(e,t)}a(GK,"s3FileObject");function N_(e,t){if(!t){let r=IK.checkGlobalSchemaTable(e.schema,e.table);if(r)return zi(new Error,r,T_.BAD_REQUEST);if(e.operation===R_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{f_.accessSync(e.file_path,f_.constants.R_OK|f_.constants.F_OK)}catch(s){return s.code===R_.NODE_ERROR_CODES.ENOENT?zi(s,`No such file or directory ${s.path}`,T_.BAD_REQUEST):s.code===R_.NODE_ERROR_CODES.EACCES?zi(s,`Permission denied ${s.path}`,T_.BAD_REQUEST):zi(s)}try{let s=f_.statSync(e.file_path).size;if(s>yg)return zi(new Error,CK.MAX_FILE_SIZE_ERR(s,yg),T_.BAD_REQUEST)}catch(s){bK.error(s),console.error(s)}}}return t}a(N_,"postValidateChecks");Bg.exports={dataObject:vK,urlObject:HK,fileObject:qK,s3FileObject:GK}});var Od=S((xX,vg)=>{"use strict";var ji=I(),g_=T();async function FK(e,t,r,s=[]){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===g_.OPERATIONS_ENUM.INSERT||t.operation===g_.OPERATIONS_ENUM.UPDATE||t.operation===g_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===g_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(ji.info(i.message),i):i.http_resp_msg?(ji.error(`Error calling operation: ${e.name}`),ji.error(i.http_resp_msg),i):(ji.error(`Error calling operation: ${e.name}`),ji.error(i),i)}}a(FK,"callOperationFunctionAsAwait");vg.exports={callOperationFunctionAsAwait:FK}});var pd=S((YX,qg)=>{"use strict";var VK=require("aws-sdk/clients/s3");qg.exports={getFileStreamFromS3:kK,getS3AuthObj:Hg};function kK(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return Hg(t.aws_access_key_id,t.aws_secret_access_key).getObject(r).createReadStream()}a(kK,"getFileStreamFromS3");function Hg(e,t){return new VK({accessKeyId:e,secretAccessKey:t})}a(Hg,"getS3AuthObj")});var Fg=S((KX,Gg)=>{"use strict";var I_=class{constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}};a(I_,"BulkLoadFileObject");var b_=class{constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};a(b_,"BulkLoadDataObject");Gg.exports={BulkLoadFileObject:I_,BulkLoadDataObject:b_}});var wd=S((WX,sI)=>{"use strict";var w_=Lt(),U_=Ad(),$K=require("needle"),Ot=T(),xK=he(),ea=b(),{handleHDBError:ae,hdb_errors:Jg}=D(),{HTTP_STATUS_CODES:Fe,HDB_ERROR_MSGS:pe,CHECK_LOGS_WRAPPER:Ps}=Jg,Ms=I(),C_=require("papaparse");ea.promisifyPapaParse();var Wt=require("fs-extra"),YK=require("path"),{chain:Vg}=require("stream-chain"),kg=require("stream-json/streamers/StreamArray"),$g=require("stream-json/utils/Batch"),xg=require("stream-chain/utils/comp"),{finished:Yg}=require("stream"),Nd=Y(),KK=gn(),Zg=Od(),WK=pd(),{BulkLoadFileObject:gd,BulkLoadDataObject:QK}=Fg(),Id=_d(),{verifyBulkLoadAttributePerms:Xg}=d_(),JK=uE(),ZK=mt(),XK=vr(),Kg="No records parsed from csv file.",Ds=`${Nd.get("HDB_ROOT")}/tmp`,{schema_regex:zK}=Er(),Wg=1024*1024*5,Qg=5e3,jK={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};sI.exports={csvDataLoad:eW,csvURLLoad:tW,csvFileLoad:rW,importFromS3:sW};async function eW(e,t=[]){let r=U_.dataObject(e);if(r)throw ae(r,r.message,Fe.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=C_.parse(e.data,{header:!0,skipEmptyLines:!0,dynamicTyping:!0}),i=new Id;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&Xg(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,n.meta.fields,i);let o=i.getPermsResponse();if(o)throw ae(new Error,o,Fe.BAD_REQUEST,void 0,void 0,!0);let c=new QK(e.action,e.schema,e.table,n.data);return s=await Zg.callOperationFunctionAsAwait(eI,c,tI.bind(null,n.meta.fields),t),s.message===Kg?Kg:rI(s.records,s.number_written)}catch(n){throw Bs(n)}}a(eW,"csvDataLoad");async function tW(e){let t=U_.urlObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ds}/${r}`;try{await nW(e.csv_url,r)}catch(n){throw Ms.error(pe.DOWNLOAD_FILE_ERR(r)+" - "+n),ae(n,Ps(pe.DOWNLOAD_FILE_ERR(r)))}try{let n=new gd(this.job_operation_function.name,e.action,e.schema,e.table,s,Ot.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await bd(n);return await L_(s),i}catch(n){throw await L_(s),Bs(n)}}a(tW,"csvURLLoad");async function rW(e){let t=U_.fileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r=new gd(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ot.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await bd(r)}catch(s){throw Bs(s)}}a(rW,"csvFileLoad");async function sW(e){let t=U_.s3FileObject(e);if(t)throw ae(t,t.message,Fe.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=YK.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ds}/${n}`;let i=new gd(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await iW(n,e);let o=await bd(i);return await L_(r),o}catch(s){throw await L_(r),Bs(s)}}a(sW,"importFromS3");async function nW(e,t){let r;try{r=await $K("get",e)}catch(s){let n=`Error downloading CSV file from ${e}, status code: ${s.statusCode}. Check the log for more information.`;throw ae(s,n,s.statusCode,Ot.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}oW(r,e),await aW(t,r.raw)}a(nW,"downloadCSVFile");async function iW(e,t){try{let r=`${Ds}/${e}`;await Wt.mkdirp(Ds),await Wt.writeFile(`${Ds}/${e}`,"",{flag:"a+"});let s=await Wt.createWriteStream(r),n=WK.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Ms.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ms.error(pe.S3_DOWNLOAD_ERR+" - "+r),ae(r,Ps(pe.S3_DOWNLOAD_ERR))}}a(iW,"downloadFileFromS3");async function aW(e,t){try{await Wt.mkdirp(Ds),await Wt.writeFile(`${Ds}/${e}`,t)}catch(r){throw Ms.error(pe.WRITE_TEMP_FILE_ERR),ae(r,Ps(pe.DEFAULT_BULK_LOAD_ERR))}}a(aW,"writeFileToTempFolder");async function L_(e){if(e)try{await Wt.access(e),await Wt.unlink(e)}catch{Ms.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(L_,"deleteTempFile");function oW(e,t){if(e.statusCode!==Jg.HTTP_STATUS_CODES.OK)throw ae(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Fe.BAD_REQUEST);if(!jK[e.headers["content-type"]])throw ae(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Fe.BAD_REQUEST);if(!e.raw)throw ae(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Fe.BAD_REQUEST)}a(oW,"validateURLResponse");async function bd(e){try{let t;switch(e.file_type){case Ot.VALID_S3_FILE_TYPES.CSV:t=await cW(e);break;case Ot.VALID_S3_FILE_TYPES.JSON:t=await _W(e);break;default:throw ae(new Error,pe.DEFAULT_BULK_LOAD_ERR,Fe.BAD_REQUEST,Ot.LOG_LEVELS.ERROR,pe.INVALID_FILE_EXT_ERR(e))}return rI(t.records,t.number_written)}catch(t){throw Bs(t)}}a(bd,"fileLoad");async function zg(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await w_.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&Xg(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let _=ae(c);r(_)}}a(zg,"validateChunk");async function jg(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ea.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ea.isEmpty(c)&&!ea.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(_=>{Object.keys(_).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},_=await Zg.callOperationFunctionAsAwait(eI,c,tI.bind(null,o));t.records+=_.records,t.number_written+=_.number_written,n&&n.resume()}catch(c){let _=ae(c,Ps(pe.INSERT_CSV_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,pe.INSERT_CSV_ERR+" - "+c);r(_)}}a(jg,"insertChunk");async function cW(e){let t={records:0,number_written:0};try{let r=new Id,s=Wt.createReadStream(e.file_path,{highWaterMark:Wg});s.setEncoding("utf8"),await C_.parsePromise(s,zg.bind(null,e,r));let n=r.getPermsResponse();if(n)throw ae(new Error,n,Fe.BAD_REQUEST);return s=Wt.createReadStream(e.file_path,{highWaterMark:Wg}),s.setEncoding("utf8"),await C_.parsePromise(s,jg.bind(null,e,t)),s.destroy(),t}catch(r){throw ae(r,Ps(pe.PAPA_PARSE_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,pe.PAPA_PARSE_ERR+r)}}a(cW,"callPapaParse");async function _W(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Id,n=Vg([Wt.createReadStream(e.file_path,{encoding:"utf-8"}),kg.withParser(),c=>c.value,new $g({batchSize:Qg}),xg(async c=>{await zg(e,s,r,c)})]);await new Promise((c,_)=>{Yg(n,u=>{u?_(u):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw ae(new Error,i,Fe.BAD_REQUEST);let o=Vg([Wt.createReadStream(e.file_path,{encoding:"utf-8"}),kg.withParser(),c=>c.value,new $g({batchSize:Qg}),xg(async c=>{await jg(e,t,r,c)})]);return await new Promise((c,_)=>{Yg(o,u=>{u?_(u):c()}),o.resume()}),t}catch(s){throw ae(s,Ps(pe.INSERT_JSON_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,pe.INSERT_JSON_ERR+s)}}a(_W,"insertJson");async function eI(e){let t={};try{e.data&&e.data.length>0&&uW(e.data[0])?t=await lW(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ms.info(t.message))}catch(r){throw Bs(r)}return t}a(eI,"callBulkFileLoad");function uW(e){let t=Object.keys(e);for(let r of t)if(!zK.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(uW,"validateColumnNames");async function lW(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=w_.insert;break;case"update":i=w_.update;break;case"upsert":i=w_.upsert;break;default:throw ae(new Error,pe.INVALID_ACTION_PARAM_ERR(s),Fe.BAD_REQUEST,Ot.LOG_LEVELS.ERROR,pe.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,E=e.length;for(;E--;)o.skipped_hashes.indexOf(e[E][l])>=0&&e.splice(E,1)}let _=ea.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:_,new_attributes:o.new_attributes}}catch(o){throw Bs(o)}}a(lW,"bulkFileLoad");async function tI(e,t,r,s=[]){try{if(t.data.length===0||!Nd.get(Ot.CONFIG_PARAMS.CLUSTERING_ENABLED))return;let n=C_.unparse(t.data,{header:!0,skipEmptyLines:!0,columns:e}),i;t.hdb_user&&t.hdb_user.username&&(i=t.hdb_user.username);let o={operation:"csv_data_load",action:t.action?t.action:"insert",schema:t.schema,table:t.table,data:n,__origin:new JK(r.txn_time,i,Nd.get(Ot.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY))};await ZK.publishToStream(`${xK.SUBJECT_PREFIXES.TXN}.${t.schema}.${t.table}`,XK.createNatsTableStreamName(t.schema,t.table),[o],s),await KK.sendAttributeTransaction(r,t,s),delete r.new_attributes}catch(n){Ms.error(n)}}a(tI,"postCSVLoadFunction");function rI(e,t){return`successfully loaded ${t} of ${e} records`}a(rI,"buildResponseMsg");function Bs(e){return ae(e,Ps(pe.DEFAULT_BULK_LOAD_ERR),Fe.INTERNAL_SERVER_ERROR,Ot.LOG_LEVELS.ERROR,pe.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Bs,"buildTopLevelErrMsg")});var Ld=S((QX,lI)=>{"use strict";var aI=ft(),EW=S_(),dW=pd(),{AsyncParser:hW,Transform:SW}=require("json2csv"),ta=require("stream"),fW=require("events"),Bt=b(),Cd=require("fs-extra"),TW=require("path"),je=I(),{promisify:y_}=require("util"),ra=b(),{handleHDBError:Ne,hdb_errors:mW}=D(),{HDB_ERROR_MSGS:pt,HTTP_STATUS_CODES:ge}=mW,nI=["search_by_value","search_by_hash","sql"],iI=["json","csv"],oI="json",cI="csv",RW="Successfully exported JSON locally.",AW="Successfully exported CSV locally.",OW=1e3,pW=1e3,NW=y_(aI.searchByHash),gW=y_(aI.searchByValue),IW=y_(EW.evaluateSQL),bW=y_(ta.finished);lI.exports={export_to_s3:UW,export_local:wW};async function wW(e){je.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=_I(e);if(!Bt.isEmpty(t))throw je.error(t),Ne(new Error,t,ge.BAD_REQUEST,void 0,void 0,!0);if(Bt.isEmpty(e.path))throw je.error(pt.MISSING_VALUE("path")),Ne(new Error,pt.MISSING_VALUE("path"),ge.BAD_REQUEST,void 0,void 0,!0);let r=(Bt.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(TW.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Bt.buildFolderPath(e.path,r);try{await CW(e.path);let n=await uI(e);return await LW(s,e.format,n)}catch(n){throw je.error(n),new Error(n)}}a(wW,"export_local");async function CW(e){if(je.trace("in confirmPath"),Bt.isEmptyOrZeroLength(e))throw Ne(new Error,`Invalid path: ${e}`,ge.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Cd.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,je.error(s),Ne(new Error,s,ge.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw je.error(r),Ne(new Error,r,ge.BAD_REQUEST,void 0,void 0,!0)}return!0}a(CW,"confirmPath");async function LW(e,t,r){if(je.trace("in saveToLocal"),ra.isEmptyOrZeroLength(e))throw Ne(new Error,pt.INVALID_VALUE("file_path"),ge.BAD_REQUEST,void 0,void 0,!0);if(ra.isEmptyOrZeroLength(t))throw Ne(new Error,pt.INVALID_VALUE("Source format"),ge.BAD_REQUEST,void 0,void 0,!0);if(ra.isEmpty(r))throw Ne(new Error,pt.NOT_FOUND("Data"),ge.BAD_REQUEST,void 0,void 0,!0);if(t===oI){let s=Cd.createWriteStream(e),n=r.length;s.write("[");let i="";for await(let[o,c]of r.entries())i+=o===n-1?JSON.stringify(c):JSON.stringify(c)+",",o!==0&&o%pW===0&&(s.write(i)||await fW.once(s,"drain"),i="");return i.length!==0&&s.write(i),s.write("]"),s.end(),await bW(s),RW}else if(t===cI){let s=Cd.createWriteStream(e),n=ta.Readable.from(r),i={},o={objectMode:!0};return await new hW(i,o).fromInput(n).toOutput(s).promise(!1),AW}throw Ne(new Error,pt.INVALID_VALUE("format"),ge.BAD_REQUEST)}a(LW,"saveToLocal");async function UW(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ne(new Error,pt.MISSING_VALUE("S3 object"),ge.BAD_REQUEST);if(Bt.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ne(new Error,pt.MISSING_VALUE("aws_access_key_id"),ge.BAD_REQUEST);if(Bt.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ne(new Error,pt.MISSING_VALUE("aws_secret_access_key"),ge.BAD_REQUEST);if(Bt.isEmptyOrZeroLength(e.s3.bucket))throw Ne(new Error,pt.MISSING_VALUE("bucket"),ge.BAD_REQUEST);if(Bt.isEmptyOrZeroLength(e.s3.key))throw Ne(new Error,pt.MISSING_VALUE("key"),ge.BAD_REQUEST);let t=_I(e);if(!Bt.isEmpty(t))throw Ne(new Error,t,ge.BAD_REQUEST);je.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await uI(e)}catch(c){throw je.error(c),c}let s,n=dW.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key),i,o=new ta.PassThrough;if(e.format===cI){i=e.s3.key+".csv";let c=ta.Readable.from(r),_={},u={objectMode:!0},l=new SW(_,u);l.on("error",E=>{throw E}),c.pipe(l).pipe(o)}else if(e.format===oI){i=e.s3.key+".json";let c=new ta.Readable;c.pipe(o),c.on("error",l=>{throw l}),c.push("[");let _=r.length,u="";for(let[l,E]of r.entries())u+=l===_-1?JSON.stringify(E):JSON.stringify(E)+",",l!==0&&l%OW===0&&(c.push(u),u="");u.length!==0&&c.push(u),c.push("]"),c.push(null)}else throw Ne(new Error,pt.INVALID_VALUE("format"),ge.BAD_REQUEST);try{s=await n.upload({Bucket:e.s3.bucket,Key:i,Body:o}).promise()}catch(c){throw je.error(c),c}return s}a(UW,"export_to_s3");function _I(e){if(je.trace("in exportCoreValidation"),Bt.isEmpty(e.format))return"format missing";if(iI.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${iI.join(", ")}`;let t=e.search_operation.operation;if(Bt.isEmpty(t))return"search_operation.operation missing";if(nI.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${nI.join(", ")}`}a(_I,"exportCoreValidation");async function uI(e){je.trace("in getRecords");let t,r;if(ra.isEmpty(e.search_operation)||ra.isEmptyOrZeroLength(e.search_operation.operation))throw Ne(new Error,pt.INVALID_VALUE("Search operation"),ge.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=gW;break;case"search_by_hash":t=NW;break;case"sql":t=IW;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,je.error(r),Ne(new Error,r,ge.BAD_REQUEST)}e.search_operation.hdb_user=e.hdb_user;try{return t(e.search_operation)}catch(s){throw je.error(s),s}}a(uI,"getRecords")});var dI=S((JX,EI)=>{"use strict";var D_=class{constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};a(D_,"SqlSearchObject");EI.exports=D_});var fI=S((ZX,SI)=>{"use strict";var yW=T(),hI=require("moment"),DW=require("uuid").v4,M_=class{constructor(){this.id=DW(),this.type=void 0,this.start_datetime=hI().valueOf(),this.created_datetime=hI().valueOf(),this.end_datetime=void 0,this.status=yW.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};a(M_,"JobObject");SI.exports=M_});var B_=S((XX,pI)=>{"use strict";var MW=require("uuid").v4,RI=Lt(),AI=ft(),PW=xt(),BW=_s(),vW=dI(),oe=T(),HW=fI(),qW=xl(),vt=I(),GW=zn(),Hn=b(),{promisify:Ud}=require("util"),vs=require("moment"),FW=S_(),P_=Ad(),TI=hl(),{deleteTransactionLogsBeforeValidator:VW}=id(),{handleHDBError:kW,hdb_errors:$W}=D(),{HTTP_STATUS_CODES:xW}=$W,mI=Ud(AI.searchByValue),YW=Ud(AI.searchByHash),KW=RI.insert,WW=Ud(FW.evaluateSQL),QW=RI.update;pI.exports={addJob:XW,updateJob:jW,handleGetJob:JW,handleGetJobsByStartDate:ZW,getJobById:OI};async function JW(e){try{let t=await OI(e.id);return Hn.isEmptyOrZeroLength(t)||(t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw vt.error(r),new Error(r)}}a(JW,"handleGetJob");async function ZW(e){try{let t=await zW(e);if(vt.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=vs(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=vs(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw vt.error(r),new Error(r)}}a(ZW,"handleGetJobsByStartDate");async function XW(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Hn.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return vt.info(l),t.error=l,t}if(!oe.JOB_TYPE_ENUM[e.operation])return vt.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case oe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=P_.fileObject(e);break;case oe.OPERATIONS_ENUM.CSV_URL_LOAD:s=P_.urlObject(e);break;case oe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=P_.dataObject(e);break;case oe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=P_.s3FileObject(e);break;case oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=TI(e,"date");break;case oe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=TI(e,"timestamp");break;case oe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=VW(e);break;default:break}if(s)throw kW(s,s.message,xW.BAD_REQUEST,void 0,void 0,!0);let n=new HW;n.type=e.operation===oe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?oe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new PW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=await mI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return vt.error(E),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=MW();try{o=await mI(i)}catch(l){let E=`There was an error inserting a new job: ${l}`;return vt.error(E),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return vt.error("Error creating a job, could not find a unique job id."),t}n.request=e;let _=new GW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),u;try{u=await KW(_)}catch(l){return vt.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,vt.trace(l)}return t}a(XW,"addJob");async function zW(e){let t=vs(e.from_date,vs.ISO_8601),r=vs(e.to_date,vs.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new vW(s,e.hdb_user);try{return await WW(n)}catch(i){throw vt.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(zW,"getJobsInDateRange");async function OI(e){if(Hn.isEmptyOrZeroLength(e))return Hn.errorizeMessage("Invalid job ID specified.");let t=new BW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await YW(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return vt.error(s),Hn.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(OI,"getJobById");async function jW(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Hn.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===oe.JOB_STATUS_ENUM.COMPLETE||e.status===oe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=vs().valueOf());let t=new qW(oe.SYSTEM_SCHEMA_NAME,oe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;try{r=await QW(t)}catch(s){throw new Error(s)}return r}a(jW,"updateJob")});var CI=S((zX,wI)=>{"use strict";var NI=b(),Nt=T(),eQ=require("moment"),v_=wd(),H_=I(),gI=B_(),II=Ld(),bI=Ss(),tQ=oc(),rQ=On(),sQ=s_(),q_=class{constructor(t,r){this.job=t,this.json=r}};a(q_,"RunnerMessage");async function nQ(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(NI.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(NI.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Nt.JOB_TYPE_ENUM.csv_file_load:await gr(e,v_.csvFileLoad);break;case Nt.JOB_TYPE_ENUM.csv_url_load:await gr(e,v_.csvURLLoad);break;case Nt.JOB_TYPE_ENUM.csv_data_load:await gr(e,v_.csvDataLoad);break;case Nt.JOB_TYPE_ENUM.import_from_s3:await gr(e,v_.importFromS3);break;case Nt.JOB_TYPE_ENUM.empty_trash:break;case Nt.JOB_TYPE_ENUM.export_local:await gr(e,II.export_local);break;case Nt.JOB_TYPE_ENUM.export_to_s3:await gr(e,II.export_to_s3);break;case Nt.JOB_TYPE_ENUM.delete_files_before:case Nt.JOB_TYPE_ENUM.delete_records_before:await gr(e,bI.deleteFilesBefore);break;case Nt.JOB_TYPE_ENUM.delete_audit_logs_before:await gr(e,bI.deleteAuditLogsBefore);break;case Nt.JOB_TYPE_ENUM.delete_transaction_logs_before:await gr(e,sQ.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(nQ,"parseMessage");async function gr(e,t){try{e.job.status=Nt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=eQ().valueOf(),await gI.updateJob(e.job),await iQ(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):H_.error(`There was an error running ${t.name} job with id ${e.job.id}`),H_.error(s),e.job.message=s,e.job.status=Nt.JOB_STATUS_ENUM.ERROR;try{await gI.updateJob(e.job)}catch(n){throw H_.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(gr,"runJob");async function iQ(e){let t=tQ.generateJobConfig(e);H_.trace("launching job process:",e),await rQ.start(t)}a(iQ,"launchJobProcess");wI.exports={parseMessage:nQ,RunnerMessage:q_}});var UI=S((jX,LI)=>{"use strict";var G_=class{constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};a(G_,"OperationFunctionObject");LI.exports=G_});var $I=S((e3,kI)=>{"use strict";var k_=ft(),Pd=S_(),F_=wd(),qn=Mc(),yd=on(),na=Ss(),aQ=mE(),sa=kr(),V_=wE(),Ir=nd(),Ve=I(),oQ=UE(),cQ=$c(),_Q=vE(),uQ=Wc(),lQ=HE(),EQ=FE(),Dd=$E(),yI=Ld(),dQ=d_(),Bd=B_(),A=T(),{hdb_errors:aa,handleHDBError:ia}=D(),{HTTP_STATUS_CODES:DI}=aa,Md=KE(),MI=XE(),$_=require("util"),Hs=Lt(),hQ=Es(),SQ=gc(),FI=gn(),PI=CI(),BI=hc(),vI=ur(),HI=s_(),qI=cd(),fQ=Od(),TQ=$_.promisify(k_.searchByHash),mQ=$_.promisify(k_.searchByValue),RQ=$_.promisify(k_.search),AQ=$_.promisify(Pd.evaluateSQL),OQ={[A.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.CREATE_TABLE]:!0,[A.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[A.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[A.OPERATIONS_ENUM.DROP_TABLE]:!0,[A.OPERATIONS_ENUM.DROP_SCHEMA]:!0},N=UI();function pQ(e,t,r){return Promise.all([FI.postOperationHandler(e,t,r),e.table?Hs.flush(e):null])}a(pQ,"postWrite");async function NQ(e,t){try{if(e.body.operation!=="read_log"&&(Ve.log_level===A.LOG_LEVELS.INFO||Ve.log_level===A.LOG_LEVELS.DEBUG||Ve.log_level===A.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ve.info(o)}}catch(s){Ve.error(s)}let r=A.CLUSTER_OPERATIONS[e.body.operation]===void 0?null:pQ;try{let s=await fQ.callOperationFunctionAsAwait(t,e.body,r);if(typeof s!="object"&&(s={message:s}),s instanceof Error)throw s;return OQ[e.body.operation]&&hQ.setSchemaDataToGlobal(n=>{n&&Ve.error(n)}),s}catch(s){throw Ve.info(s),s}}a(NQ,"processLocalTransaction");var GI=bQ();kI.exports={chooseOperation:gQ,getOperationFunction:VI,processLocalTransaction:NQ};function gQ(e){let t;try{t=VI(e)}catch(n){throw Ve.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Pd.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Pd.checkASTPermissions(e,i);if(o)throw Ve.error(`${DI.FORBIDDEN} from operation ${e.search_operation}`),ia(new Error,o,aa.HTTP_STATUS_CODES.FORBIDDEN)}}else if(!e.bypass_auth&&e.operation!==A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=dQ.verifyPerms(i,n);if(o)throw Ve.error(`${DI.FORBIDDEN} from operation ${e.operation}`),ia(new Error,o,aa.HTTP_STATUS_CODES.FORBIDDEN)}}catch(n){throw ia(n,"There was an error when trying to choose an operation path")}return r}a(gQ,"chooseOperation");function VI(e){if(Ve.trace(`getOperationFunction with operation: ${e.operation}`),GI.has(e.operation))return GI.get(e.operation);throw ia(new Error,aa.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),aa.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(VI,"getOperationFunction");async function IQ(e){Ve.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[A.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case A.OPERATIONS_ENUM.INSERT:o=await Hs.insert(i);break;case A.OPERATIONS_ENUM.UPDATE:o=await Hs.update(i);break;case A.OPERATIONS_ENUM.UPSERT:o=await Hs.upsert(i);break;case A.OPERATIONS_ENUM.DELETE:o=await na.deleteRecord(i);break;default:Ve.warn("invalid operation in catchup");break}await FI.postOperationHandler(i,o,e)}catch(o){Ve.info("Invalid operation in transaction"),Ve.error(o)}}a(IQ,"catchup");async function or(e){let t,r;try{r=await Bd.addJob(e),t=r.createdJob;let s=new PI.RunnerMessage(t,e);return await PI.parseMessage(s),`Starting job with id ${t.id}`}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Ve.error(n),ia(s,n)}}a(or,"executeJob");function bQ(){let e=new Map;return e.set(A.OPERATIONS_ENUM.INSERT,new N(Hs.insert)),e.set(A.OPERATIONS_ENUM.UPDATE,new N(Hs.update)),e.set(A.OPERATIONS_ENUM.UPSERT,new N(Hs.upsert)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new N(k_.searchByConditions)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_HASH,new N(TQ)),e.set(A.OPERATIONS_ENUM.SEARCH_BY_VALUE,new N(mQ)),e.set(A.OPERATIONS_ENUM.SEARCH,new N(RQ)),e.set(A.OPERATIONS_ENUM.SQL,new N(AQ)),e.set(A.OPERATIONS_ENUM.CSV_DATA_LOAD,new N(or,F_.csvDataLoad)),e.set(A.OPERATIONS_ENUM.CSV_FILE_LOAD,new N(or,F_.csvFileLoad)),e.set(A.OPERATIONS_ENUM.CSV_URL_LOAD,new N(or,F_.csvURLLoad)),e.set(A.OPERATIONS_ENUM.IMPORT_FROM_S3,new N(or,F_.importFromS3)),e.set(A.OPERATIONS_ENUM.CREATE_SCHEMA,new N(qn.createSchema)),e.set(A.OPERATIONS_ENUM.CREATE_TABLE,new N(qn.createTable)),e.set(A.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new N(qn.createAttribute)),e.set(A.OPERATIONS_ENUM.DROP_SCHEMA,new N(qn.dropSchema)),e.set(A.OPERATIONS_ENUM.DROP_TABLE,new N(qn.dropTable)),e.set(A.OPERATIONS_ENUM.DROP_ATTRIBUTE,new N(qn.dropAttribute)),e.set(A.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new N(yd.describeSchema)),e.set(A.OPERATIONS_ENUM.DESCRIBE_TABLE,new N(yd.describeTable)),e.set(A.OPERATIONS_ENUM.DESCRIBE_ALL,new N(yd.describeAll)),e.set(A.OPERATIONS_ENUM.DELETE,new N(na.deleteRecord)),e.set(A.OPERATIONS_ENUM.ADD_USER,new N(sa.addUser)),e.set(A.OPERATIONS_ENUM.ALTER_USER,new N(sa.alterUser)),e.set(A.OPERATIONS_ENUM.DROP_USER,new N(sa.dropUser)),e.set(A.OPERATIONS_ENUM.LIST_USERS,new N(sa.listUsersExternal)),e.set(A.OPERATIONS_ENUM.LIST_ROLES,new N(V_.listRoles)),e.set(A.OPERATIONS_ENUM.ADD_ROLE,new N(V_.addRole)),e.set(A.OPERATIONS_ENUM.ALTER_ROLE,new N(V_.alterRole)),e.set(A.OPERATIONS_ENUM.DROP_ROLE,new N(V_.dropRole)),e.set(A.OPERATIONS_ENUM.USER_INFO,new N(sa.userInfo)),e.set(A.OPERATIONS_ENUM.READ_LOG,new N(oQ)),e.set(A.OPERATIONS_ENUM.ADD_NODE,new N(cQ)),e.set(A.OPERATIONS_ENUM.UPDATE_NODE,new N(_Q)),e.set(A.OPERATIONS_ENUM.REMOVE_NODE,new N(uQ)),e.set(A.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new N(lQ)),e.set(A.OPERATIONS_ENUM.SET_CONFIGURATION,new N(vI.setConfiguration)),e.set(A.OPERATIONS_ENUM.CLUSTER_STATUS,new N(EQ.clusterStatus)),e.set(A.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new N(Dd.setRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new N(Dd.getRoutes)),e.set(A.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new N(Dd.deleteRoutes)),e.set(A.OPERATIONS_ENUM.EXPORT_TO_S3,new N(or,yI.export_to_s3)),e.set(A.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new N(or,na.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new N(or,na.deleteFilesBefore)),e.set(A.OPERATIONS_ENUM.EXPORT_LOCAL,new N(or,yI.export_local)),e.set(A.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new N(Bd.handleGetJobsByStartDate)),e.set(A.OPERATIONS_ENUM.GET_JOB,new N(Bd.handleGetJob)),e.set(A.OPERATIONS_ENUM.GET_FINGERPRINT,new N(Md.getFingerprint)),e.set(A.OPERATIONS_ENUM.SET_LICENSE,new N(Md.setLicense)),e.set(A.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new N(Md.getRegistrationInfo)),e.set(A.OPERATIONS_ENUM.RESTART,new N(MI.restartProcesses)),e.set(A.OPERATIONS_ENUM.RESTART_SERVICE,new N(MI.restartService)),e.set(A.OPERATIONS_ENUM.CATCHUP,new N(IQ)),e.set(A.OPERATIONS_ENUM.SYSTEM_INFORMATION,new N(SQ.systemInformation)),e.set(A.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new N(or,na.deleteAuditLogsBefore)),e.set(A.OPERATIONS_ENUM.READ_AUDIT_LOG,new N(aQ)),e.set(A.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new N(BI.createTokens)),e.set(A.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new N(BI.refreshOperationToken)),e.set(A.OPERATIONS_ENUM.GET_CONFIGURATION,new N(vI.getConfiguration)),e.set(A.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new N(Ir.customFunctionsStatus)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new N(Ir.getCustomFunctions)),e.set(A.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new N(Ir.getCustomFunction)),e.set(A.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new N(Ir.setCustomFunction)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new N(Ir.dropCustomFunction)),e.set(A.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new N(Ir.addCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new N(Ir.dropCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new N(Ir.packageCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new N(Ir.deployCustomFunctionProject)),e.set(A.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new N(HI.readTransactionLog)),e.set(A.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new N(or,HI.deleteTransactionLogsBefore)),e.set(A.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new N(qI.installModules)),e.set(A.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new N(qI.auditModules)),e}a(bQ,"initializeOperationFunctionMap")});var WI=S((t3,KI)=>{"use strict";var wQ=require("node-ipc").IPC,xI=b(),YI=T(),br=I(),{IPC_ERRORS:Gn}=rt(),CQ=require("os"),x_=class{constructor(t,r){this.ipc=new wQ,this.server_name=YI.HDB_IPC_SERVER,this.ipc.config.retry=CQ.platform()=="win32"?6e5:100,this.ipc.config.id=YI.HDB_IPC_CLIENT_PREFIX+t,this.ipc.config.silent=!0,this.event_handlers=r,this.connect()}connect(){this.ipc.connectTo(this.server_name,()=>{this.generateEventHandlers(this.event_handlers)})}addEventHandler(t,r){this.ipc.of[this.server_name].on(t,r)}generateEventHandlers(t){this.ipc.of[this.server_name].on("connect",()=>{br.info(`IPC client ${this.ipc.config.id} connected to ${this.server_name}`)}),this.ipc.of[this.server_name].on("disconnect",()=>{br.info(`IPC client ${this.ipc.config.id} disconnected from ${this.server_name}`)}),this.ipc.of[this.server_name].on("error",r=>{r.code==="ECONNREFUSED"&&br.warn("Error connecting to HDB IPC server. Confirm that the server is running."),br.warn(`Error with IPC client ${this.ipc.config.id}`),br.warn(r)});for(let[r,s]of Object.entries(t))this.addEventHandler(r,s)}emitToServer(t){if(typeof t!="object")throw br.warn(Gn.INVALID_IPC_DATA_TYPE),new Error(Gn.INVALID_IPC_DATA_TYPE);if(xI.isEmpty(t.type))throw br.warn(Gn.MISSING_TYPE),new Error(Gn.MISSING_TYPE);if(xI.isEmpty(t.message))throw br.warn(Gn.MISSING_MSG),new Error(Gn.MISSING_MSG);br.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(x_,"IPCClient");KI.exports=x_});var vd=T(),QI=b(),oa=I(),LQ=Es(),UQ=On(),yQ=kr(),DQ=require("util").promisify,MQ=DQ(LQ.setSchemaDataToGlobal),PQ=$I(),BQ=WI(),JI=require("moment"),ZI=B_(),{cloneDeep:vQ}=require("lodash"),XI=process.env[vd.PROCESS_NAME_ENV_PROP],qs=XI.substring(4);a(async function(){let t={id:qs,request:void 0};try{oa.notify("Starting job:",qs),await MQ(),await yQ.setUsersToGlobal(),global.hdb_ipc=new BQ(process.pid,{});let r=await ZI.getJobById(qs);if(QI.isEmptyOrZeroLength(r))throw new Error(`Unable to find a record in hdb_job for job: ${qs}`);let{request:s}=r[0];if(QI.isEmptyOrZeroLength(s))throw new Error("Did not find job request in hdb_job table, unable to proceed");s=vQ(s);let n=PQ.getOperationFunction(s);oa.trace("Running operation:",s.operation,"for job",qs);let i=await n.job_operation_function(s);oa.trace("Result from job:",qs,i),t.status=vd.JOB_STATUS_ENUM.COMPLETE,t.message=i,t.end_datetime=JI().valueOf(),oa.notify("Successfully completed job:",qs)}catch(r){oa.error(r),t.status=vd.JOB_STATUS_ENUM.ERROR,t.message=r.message?r.message:r,t.end_datetime=JI().valueOf()}finally{await ZI.updateJob(t),await UQ.deleteProcess(XI)}},"job")();
|