harperdb 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  "use strict";var gb=Object.defineProperty;var a=(e,t)=>gb(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=h((UJ,ah)=>{"use strict";var $e=require("path"),Ib=require("fs");function bb(){let e=__dirname;for(;!Ib.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(bb,"getHDBPackageRoot");var Gt=bb(),Wd="js",Qn=Wd,Cb="harperdb-config.yaml",wb="defaultConfig.yaml",Lb="hdb",Jd=`hdbServer.${Qn}`,Zd=`customFunctionsServer.${Qn}`,Xd=`hdbIpcServer.${Qn}`,Ub=`restartHdb.${Qn}`,eu="HarperDB",fa="Custom Functions",Ta="Clustering Hub",ma="Clustering Leaf",tu="Clustering Ingest Service",ru="Clustering Reply Service",yb="foreground.pid",j_={HDB:eu,IPC:"IPC",CLUSTERING_HUB:Ta,CLUSTERING_LEAF:ma,CLUSTERING_INGEST_SERVICE:tu,CLUSTERING_REPLY_SERVICE:ru,CUSTOM_FUNCTIONS:fa,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"},Db={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"},Mb={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Pb={harperdb:eu,ipc:"IPC","clustering hub":Ta,"clustering leaf":ma,"clustering ingest service":tu,"clustering reply service":ru,"custom functions":fa,custom_functions:fa,"pm2-logrotate":j_.PM2_LOGROTATE,logrotate:j_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},Bb={CLUSTERING_HUB_PROC_DESCRIPTOR:Ta,CLUSTERING_LEAF_PROC_DESCRIPTOR:ma,CLUSTERING_INGEST_PROC_DESCRIPTOR:tu,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:ru},Sa={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")},vb={HDB:$e.join(Sa.HDB,Jd),IPC:$e.join(Sa.IPC,Xd),CUSTOM_FUNCTIONS:$e.join(Sa.CUSTOM_FUNCTIONS,Zd)},Hb={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")},qb={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zd="support@harperdb.io",Gb="customer-success@harperdb.io",jd=1,Fb=4141,eh="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Vb="https://www.harperdb.io/product",kb=`For support, please submit a request at ${eh} or contact ${zd}`,th=`For license support, please contact ${Gb}`,xb="None of the specified records were found.",$b="hash attribute not found",Yb=`Your current license only supports ${jd} role. ${th}`,Kb="Your current license only supports 3 connections to a node.",Qb="127.0.0.1",Wb=1,Jb=/^\.$/,Zb=/^\.\.$/,Xb="U+002E",zb=/\//g,jb="U+002F",eC=/U\+002F/g,tC=/^U\+002E$/,rC=/^U\+002EU\+002E$/,sC="d",nC=999999,iC="*",aC="--max-old-space-size=",oC="system",cC="__hdb_hash",_C=".harperdb",uC=".hdb",lC="keys",EC="hdb_boot_properties.file",dC=".updateConfig.json",hC="SIGTSTP",SC=24,fC=6e4,TC=448,mC="blob",RC="trash",AC="schema",pC="transactions",OC=".count",NC="id",gC="install_log.log",IC="run_log.log",bC="PROCESS_NAME",CC={SETTINGS_PATH_KEY:"settings_path"},rh=require("lodash"),wC={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"},LC={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},UC={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},yC={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"},DC={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"},ht="hdb_internal:",MC={CREATE_SCHEMA:ht+"create_schema",CREATE_TABLE:ht+"create_table",CREATE_ATTRIBUTE:ht+"create_attribute",ADD_USER:ht+"add_user",ALTER_USER:ht+"alter_user",DROP_USER:ht+"drop_user",HDB_NODES:ht+"hdb_nodes",HDB_USERS:ht+"hdb_users",HDB_WORKERS:ht+"hdb_workers",CATCHUP:ht+"catchup",SCHEMA_CATCHUP:ht+"schema_catchup",WORKER_ROOM:ht+"cluster_workers"},PC={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},BC="060493.ks",vC=".license",HC={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},I={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"},qC={CSV:".csv",JSON:".json"},GC={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},FC={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},vr={};vr[I.CREATE_SCHEMA]=I.CREATE_SCHEMA;vr[I.CREATE_TABLE]=I.CREATE_TABLE;vr[I.CREATE_ATTRIBUTE]=I.CREATE_ATTRIBUTE;vr[I.INSERT]=I.INSERT;vr[I.UPDATE]=I.UPDATE;vr[I.UPSERT]=I.UPSERT;vr[I.DELETE]=I.DELETE;var J=Object.create(null);J[I.DESCRIBE_ALL]=I.DESCRIBE_ALL;J[I.DESCRIBE_TABLE]=I.DESCRIBE_TABLE;J[I.DESCRIBE_SCHEMA]=I.DESCRIBE_SCHEMA;J[I.READ_LOG]=I.READ_LOG;J[I.ADD_NODE]=I.ADD_NODE;J[I.LIST_USERS]=I.LIST_USERS;J[I.LIST_ROLES]=I.LIST_ROLES;J[I.USER_INFO]=I.USER_INFO;J[I.SQL]=I.SQL;J[I.GET_JOB]=I.GET_JOB;J[I.SEARCH_JOBS_BY_START_DATE]=I.SEARCH_JOBS_BY_START_DATE;J[I.DELETE_FILES_BEFORE]=I.DELETE_FILES_BEFORE;J[I.EXPORT_LOCAL]=I.EXPORT_LOCAL;J[I.EXPORT_TO_S3]=I.EXPORT_TO_S3;J[I.CLUSTER_STATUS]=I.CLUSTER_STATUS;J[I.REMOVE_NODE]=I.REMOVE_NODE;J[I.RESTART]=I.RESTART;J[I.CUSTOM_FUNCTIONS_STATUS]=I.CUSTOM_FUNCTIONS_STATUS;J[I.GET_CUSTOM_FUNCTIONS]=I.GET_CUSTOM_FUNCTIONS;J[I.GET_CUSTOM_FUNCTION]=I.GET_CUSTOM_FUNCTION;J[I.SET_CUSTOM_FUNCTION]=I.SET_CUSTOM_FUNCTION;J[I.DROP_CUSTOM_FUNCTION]=I.DROP_CUSTOM_FUNCTION;J[I.ADD_CUSTOM_FUNCTION_PROJECT]=I.ADD_CUSTOM_FUNCTION_PROJECT;J[I.DROP_CUSTOM_FUNCTION_PROJECT]=I.DROP_CUSTOM_FUNCTION_PROJECT;J[I.PACKAGE_CUSTOM_FUNCTION_PROJECT]=I.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[I.DEPLOY_CUSTOM_FUNCTION_PROJECT]=I.DEPLOY_CUSTOM_FUNCTION_PROJECT;var VC={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},kC={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},sh={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"},xC=rh.invert(sh),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"},$C={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},YC={csv_file_load:"csv_file_load",csv_data_load:I.CSV_DATA_LOAD,csv_url_load:I.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},KC={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},QC={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},WC={FILE_SYSTEM:"fs",LMDB:"lmdb"},JC={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},ZC={DEVELOPMENT:8192,DEFAULT:512},XC={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},zC={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},jC={ENOENT:"ENOENT",EACCES:"EACCES"},nh={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},ew="__clustering__",tw=Object.values(nh),rw=15984864e5,ih={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sw=rh.invert(ih),nw={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"},iw=111,aw=`\r
2
2
  `,ow={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cw=["*","%"],_w="unauthorized_access",uw="func_val",lw={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Ew={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},dw="hdb_ipc_server",hw="hdb_ipc_client_",Sw={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"},fw={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Tw={STOPPED:"stopped",ONLINE:"online"},mw="3.x.x";ah.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:zd,HDB_SUPPORT_URL:eh,HDB_PRICING_URL:Vb,SUPPORT_HELP_MSG:kb,LICENSE_HELP_MSG:th,HDB_PROC_NAME:Jd,HDB_PROC_DESCRIPTOR:eu,CLUSTERING_LEAF_PROC_DESCRIPTOR:ma,CLUSTERING_HUB_PROC_DESCRIPTOR:Ta,SYSTEM_SCHEMA_NAME:oC,HASH_FOLDER_NAME:cC,HDB_HOME_DIR_NAME:_C,UPDATE_FILE_NAME:dC,LICENSE_KEY_DIR_NAME:lC,BOOT_PROPS_FILE_NAME:EC,JOB_TYPE_ENUM:YC,JOB_STATUS_ENUM:HC,SYSTEM_TABLE_NAMES:yC,SYSTEM_TABLE_HASH_ATTRIBUTES:DC,OPERATIONS_ENUM:I,VALID_S3_FILE_TYPES:qC,S3_BUCKET_AUTH_KEYS:GC,VALID_SQL_OPS_ENUM:FC,GEO_CONVERSION_ENUM:kC,HDB_SETTINGS_NAMES:sh,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:xC,SERVICE_ACTIONS_ENUM:VC,CLUSTER_MESSAGE_TYPE_ENUM:KC,CLUSTER_CONNECTION_DIRECTION_ENUM:QC,CLUSTER_EVENTS_DEFS_ENUM:XC,PERIOD_REGEX:Jb,DOUBLE_PERIOD_REGEX:Zb,UNICODE_PERIOD:Xb,FORWARD_SLASH_REGEX:zb,UNICODE_FORWARD_SLASH:jb,ESCAPED_FORWARD_SLASH_REGEX:eC,ESCAPED_PERIOD_REGEX:tC,ESCAPED_DOUBLE_PERIOD_REGEX:rC,REG_KEY_FILE_NAME:BC,RESTART_TIMEOUT_MS:fC,HDB_FILE_PERMISSIONS:TC,SCHEMA_DIR_NAME:AC,TRANSACTIONS_DIR_NAME:pC,LIMIT_COUNT_NAME:OC,ID_ATTRIBUTE_STRING:NC,INSERT_MODULE_ENUM:LC,UPGRADE_JSON_FIELD_NAMES_ENUM:UC,RESTART_CODE:hC,RESTART_CODE_NUM:SC,CLUSTER_OPERATIONS:vr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:PC,HDB_INTERNAL_SC_CHANNEL_PREFIX:ht,INTERNAL_SC_CHANNELS:MC,CLUSTERING_MESSAGE_TYPES:nw,HDB_FILE_SUFFIX:uC,BLOB_FOLDER_NAME:mC,HDB_TRASH_DIR:RC,ORIGINATOR_SET_VALUE:iw,LICENSE_VALUES:JC,RAM_ALLOCATION_ENUM:ZC,STORAGE_TYPES_ENUM:WC,TIME_STAMP_NAMES_ENUM:nh,TIME_STAMP_NAMES:tw,PERMS_UPDATE_RELEASE_TIMESTAMP:rw,SEARCH_NOT_FOUND_MESSAGE:xb,SEARCH_ATTRIBUTE_NOT_FOUND:$b,LICENSE_ROLE_DENIED_RESPONSE:Yb,LICENSE_MAX_CONNS_REACHED:Kb,BASIC_LICENSE_MAX_NON_CU_ROLES:jd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Fb,VALUE_SEARCH_COMPARATORS:ih,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sw,LICENSE_FILE_NAME:vC,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:zC,NEW_LINE:aw,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Wb,MOMENT_DAYS_TAG:sC,API_TURNOVER_SEC:nC,LOOPBACK:Qb,CODE_EXTENSION:Qn,WILDCARD_SEARCH_VALUE:iC,NODE_ERROR_CODES:jC,JAVASCRIPT_EXTENSION:Wd,PERMS_CRUD_ENUM:ow,UNAUTHORIZED_PERMISSION_NAME:_w,SEARCH_WILDCARDS:cw,FUNC_VAL:uw,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:lw,JWT_ENUM:Ew,CLUSTERING_FLAG:ew,RUN_LOG:IC,INSTALL_LOG:gC,IPC_SERVER_MODULE:Xd,HDB_IPC_SERVER:dw,IPC_EVENT_TYPES:Sw,HDB_IPC_CLIENT_PREFIX:hw,CUSTOM_FUNCTION_PROC_NAME:Zd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:fa,SERVICES:fw,MEM_SETTING_KEY:aC,HDB_RESTART_SCRIPT:Ub,PROCESS_DESCRIPTORS:j_,SERVICE_SERVERS:vb,SERVICE_SERVERS_CWD:Sa,PROCESS_DESCRIPTORS_VALIDATE:Pb,LAUNCH_SERVICE_SCRIPTS:Hb,LOG_LEVELS:Mb,PROCESS_NAME_ENV_PROP:bC,PROCESS_LOG_NAMES:Db,PM2_PROCESS_STATUSES:Tw,CONFIG_PARAM_MAP:$C,CONFIG_PARAMS:f,HDB_CONFIG_FILE:Cb,HDB_DEFAULT_CONFIG_FILE:wb,ROLE_TYPES_ENUM:qb,BOOT_PROP_PARAMS:CC,INSTALL_PROMPTS:wC,HDB_ROOT_DIR_NAME:Lb,CLUSTERING_PROCESSES:Bb,FOREGROUND_PID_FILE:yb,PACKAGE_ROOT:Gt,PRE_4_0_0_VERSION:mw}});var su=h((yJ,_h)=>{"use strict";var oh=require("minimist");_h.exports=Rw;function Rw(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=ch(process.env),s=ch(oh(process.argv))):(r=process.env,s=oh(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(Rw,"assignCMDENVVariables");function ch(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(ch,"objKeysToLowerCase")});var g=h((DJ,fh)=>{"use strict";var _s=require("fs-extra"),us=require("path"),lh=require("yaml"),Eh=require("properties-reader"),me=T(),Aw=su(),pw=require("os"),{PACKAGE_ROOT:au}=T(),rt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ra=us.join(au,"logs"),Hr=process.env.pm_id===void 0,Ow=us.join(au,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),ou=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,Qs,zt,hr,tt,nu,Ws;Ws===void 0&&dh();fh.exports={createLogFile:Nw,notify:bw,fatal:Cw,error:iu,warn:ww,info:gw,debug:Iw,trace:Sh,setLogLevel:Uw,log_level:tt};function dh(){try{if(Ws===void 0){let e=Lw();Ws=Eh(e),{level:tt,config_log_path:nu,to_file:zt,to_stream:hr}=yw(Ws.get("settings_path"))}}catch(e){if(Ws=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=Aw(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){tt=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){hr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(zt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=Dw();zt=zt===void 0?s:zt,zt=uh(zt),hr=hr===void 0?n:hr,hr=uh(hr),tt=tt===void 0?r:tt,nu=Ra;return}throw iu("Error initializing log settings"),iu(e),e}}a(dh,"initLogSettings");function Nw(e,t){if(!Hr){Sh("createLogFile should only be used if the process is not being managed by pm2");return}Ws===void 0&&dh(),ou=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=Ra:r=nu,zt&&(Qs=us.join(r,e),_s.ensureFileSync(Qs))}a(Nw,"createLogFile");function ls(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": "${ou}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
3
3
  `}a(ls,"createLogRecord");function hh(e){Qs===void 0&&(ou=me.PROCESS_DESCRIPTORS.INSTALL,_s.ensureDirSync(Ra),Qs=us.join(Ra,me.PROCESS_LOG_NAMES.INSTALL),_s.ensureFileSync(Qs)),_s.appendFileSync(Qs,e)}a(hh,"writeToLogFile");function Aa(e){zt&&hh(e),hr&&process.stdout.write(e)}a(Aa,"nonPm2LogStdOut");function cu(e){zt&&hh(e),hr&&process.stderr.write(e)}a(cu,"nonPm2LogStdErr");function gw(...e){if(rt[tt]<=rt.info){let t=ls("info",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(gw,"info");function Sh(...e){if(rt[tt]<=rt.trace){let t=ls("trace",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(Sh,"trace");function iu(...e){if(rt[tt]<=rt.error){let t=ls("error",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(iu,"error");function Iw(...e){if(rt[tt]<=rt.debug){let t=ls("debug",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(Iw,"debug");function bw(...e){if(rt[tt]<=rt.notify){let t=ls("notify",e);if(Hr){Aa(t);return}process.stdout.write(t)}}a(bw,"notify");function Cw(...e){if(rt[tt]<=rt.fatal){let t=ls("fatal",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(Cw,"fatal");function ww(...e){if(rt[tt]<=rt.warn){let t=ls("warn",e);if(Hr){cu(t);return}process.stderr.write(t)}}a(ww,"warn");function Lw(){let e;try{e=pw.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=us.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return _s.existsSync(t)||(t=us.join(au,"utility/hdb_boot_properties.file")),t}a(Lw,"getPropsFilePath");function Uw(e){tt=e}a(Uw,"setLogLevel");function uh(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(uh,"autoCastBoolean");function yw(e){try{if(e.includes("config/settings.js")){let o=Eh(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:us.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=lh.parseDocument(_s.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(yw,"getLogConfig");function Dw(){try{let e=lh.parseDocument(_s.readFileSync(Ow,"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(Dw,"getDefaultConfig")});var mh=h((MJ,Th)=>{"use strict";var Mw=require("util"),Pw=require("path"),Bw=require("child_process"),vw=Mw.promisify(Bw.execFile),Hw=1e3*1e3*10;Th.exports={findPs:qw};async function qw(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await vw("ps",["wwxo",`pid,${r}`],{maxBuffer:Hw});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:Pw.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(qw,"findPs")});var Ye=h((PJ,Ah)=>{"use strict";var Gw="__dbis__",Fw="__environment_name__",Vw="__dbi_defintion__",kw={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"},xw=["__createdtime__","__updatedtime__"],$w="\uFFFF",Rh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yw=Object.values(Rh);Ah.exports={INTERNAL_DBIS_NAME:Gw,DBI_DEFINITION_NAME:Vw,SEARCH_TYPES:kw,TIMESTAMP_NAMES:xw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Fw,TRANSACTIONS_DBI_NAMES_ENUM:Rh,TRANSACTIONS_DBIS:Yw,OVERFLOW_MARKER:$w}});var Ke=h((BJ,Lh)=>{"use strict";var ph=T(),Oh=Ye(),Nh={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},gh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ih={500:gh("There was an error processing your request."),400:"Invalid request"},Kw=Ih[Nh.INTERNAL_SERVER_ERROR],Qw={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.`},Ww={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Jw={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"},Zw={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 ${Oh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Oh.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"},Xw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ph.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 ${ph.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"},bh={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"},zw={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."},jw={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`},eL={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"},tL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rL={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`},Ch={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.`},wh={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}`},sL={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."},nL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iL={...bh,...Jw,...Qw,...zw,...jw,...eL,...tL,...rL,...Xw,...Ch,...wh,...sL,...nL,...Ww};Lh.exports={CHECK_LOGS_WRAPPER:gh,HDB_ERROR_MSGS:iL,DEFAULT_ERROR_MSGS:Ih,DEFAULT_ERROR_RESP:Kw,HTTP_STATUS_CODES:Nh,LMDB_ERRORS_ENUM:Zw,AUTHENTICATION_ERROR_MSGS:bh,VALIDATION_ERROR_MSGS:Ch,IPC_ERRORS:wh}});var D=h((vJ,Dh)=>{"use strict";var Js=Ke(),aL=g(),oL=T(),Wn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uh),this.http_resp_code=s||Js.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Js.DEFAULT_ERROR_MSGS[s]?Js.DEFAULT_ERROR_MSGS[s]:Js.DEFAULT_ERROR_MSGS[Js.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&&aL[n](i)}};a(Wn,"HdbError");function Uh(e,t,r,s=oL.LOG_LEVELS.ERROR,n=null,i=!1){if(yh(e))return e;let o=new Wn(e,t,r,s,n);return i&&delete o.stack,o}a(Uh,"handleHDBError");function yh(e){return e.__proto__.constructor.name===Wn.name}a(yh,"isHDBError");Dh.exports={isHDBError:yh,handleHDBError:Uh,hdb_errors:Js}});var b=h((qJ,Qh)=>{"use strict";var _u=require("path"),cL=require("fs-extra"),Ie=g(),Mh=require("fs-extra"),_L=require("truncate-utf8-bytes"),Jn=require("os"),uL=require("net"),lL=require("recursive-iterator"),Ue=T(),qh=mh(),Ph=require("papaparse"),pa=require("moment"),{inspect:EL}=require("util"),Bh=require("is-number"),HJ=require("lodash"),{hdb_errors:Oa}=D(),Gh=require("util").promisify(setTimeout),dL=100,hL=5,SL="",fL=4,vh=255,Hh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qh.exports={isEmpty:St,isEmptyOrZeroLength:jt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:Fh,errorizeMessage:TL,stripFileExtension:NL,autoCast:gL,autoCastJSONDeep:uu,removeDir:bL,compareVersions:CL,isCompatibleDataVersion:wL,escapeRawValue:kh,unescapeValue:LL,stringifyProps:UL,valueConverter:yL,timeoutPromise:ML,isClusterOperation:BL,getClusterUser:qL,sendTransactionToSocketCluster:vL,checkGlobalSchemaTable:HL,getHomeDir:xh,getPropsFilePath:DL,promisifyPapaParse:GL,removeBOM:$h,createEventPromise:FL,checkProcessRunning:VL,checkSchemaTableExist:kL,checkSchemaExists:Yh,checkTableExists:Kh,getStartOfTomorrowInSeconds:xL,getLimitKey:$L,isObject:OL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:Vh,backtickASTSchemaItems:YL,isPortTaken:PL,stopProcess:KL,createForkArgs:QL,autoCastBoolean:WL,async_set_timeout:Gh,getTableHashAttribute:JL,doesSchemaExist:ZL,doesTableExist:XL,stringifyObj:zL,ms_to_time:jL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function mL(e){return!St(e)&&(e||e===0||e===""||Fh(e))}a(mL,"isNotEmptyAndHasValue");function jt(e){return St(e)||e.length===0||e.size===0}a(jt,"isEmptyOrZeroLength");function RL(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(jt(e))return!0;for(let t=0;t<e.length;t++)if(jt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(_u.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function Fh(e){return St(e)?!1:e===!0||e===!1}a(Fh,"isBoolean");function OL(e){return St(e)?!1:typeof e=="object"}a(OL,"isObject");function NL(e){return jt(e)?SL:e.slice(0,-fL)}a(NL,"stripFileExtension");function gL(e){return St(e)||e===""||typeof e!="string"?e:Hh[e]!==void 0?Hh[e]:Vh(e)===!0?Number(e):e}a(gL,"autoCast");function IL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(IL,"autoCastJSON");function uu(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=uu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=uu(r);s!==r&&(e[t]=s)}return e}else return IL(e)}a(uu,"autoCastJSONDeep");function Vh(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(Vh,"autoCasterIsNumberCheck");async function bL(e){if(jt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Mh.emptyDir(e),await Mh.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(bL,"removeDir");function CL(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(CL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function kh(e){if(St(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(kh,"escapeRawValue");function LL(e){if(St(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(LL,"unescapeValue");function UL(e,t){if(St(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+Jn.EOL}!jt(s)&&s[0]===";"?r+=" "+s+n+Jn.EOL:jt(s)||(r+=s+"="+n+Jn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UL,"stringifyProps");function yL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(kh(t)),s=Buffer.byteLength(r)>vh?_L(r,vh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(yL,"valueConverter");function xh(){let e;try{e=Jn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xh,"getHomeDir");function DL(){let e=_u.join(xh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return cL.existsSync(e)||(e=_u.join(__dirname,"../","hdb_boot_properties.file")),e}a(DL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function PL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(PL,"isPortTaken");function BL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(BL,"isClusterOperation");function vL(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(vL,"sendTransactionToSocketCluster");function HL(e,t){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(HL,"checkGlobalSchemaTable");function qL(e,t){if(St(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(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(qL,"getClusterUser");function GL(){Ph.parsePromise=function(e,t){return new Promise(function(r,s){Ph.parse(e,{header:!0,transformHeader:$h,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(GL,"promisifyPapaParse");function $h(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($h,"removeBOM");function FL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(FL,"createEventPromise");async function VL(e){let t=!0,r=0;do await Gh(dL*r++),(await qh.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(VL,"checkProcessRunning");function kL(e,t){let r=Yh(e);if(r)return r;let s=Kh(e,t);if(s)return s}a(kL,"checkSchemaTableExist");function Yh(e){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Yh,"checkSchemaExists");function Kh(e,t){if(!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kh,"checkTableExists");function xL(){let e=pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=pa().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function $L(){return pa().utc().format("DD-MM-YYYY")}a($L,"getLimitKey");function YL(e){try{let t=new lL(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(YL,"backtickASTSchemaItems");async function KL(e){let t=Jn.userInfo();(await qh.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(KL,"stopProcess");function QL(e){return[e]}a(QL,"createForkArgs");function WL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WL,"autoCastBoolean");function JL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(JL,"getTableHashAttribute");function ZL(e){return global?.hdb_schema?.[e]!==void 0}a(ZL,"doesSchemaExist");function XL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(XL,"doesTableExist");function zL(e){try{return JSON.stringify(e)}catch{return e}}a(zL,"stringifyObj");function jL(e){let t=pa.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(jL,"ms_to_time")});var Jh=h((GJ,Wh)=>{"use strict";var eU={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))},tU="certificate.pem",rU="privateKey.pem",sU="ca.pem";Wh.exports={CERTIFICATE_VALUES:eU,CERTIFICATE_PEM_NAME:tU,PRIVATEKEY_PEM_NAME:rU,CA_PEM_NAME:sU}});var Ee=h((FJ,Zh)=>{"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("', '")}'`};Zh.exports={validateObject:nU,validateObjectAsync:iU,validateBySchema:aU};function nU(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(nU,"validateObject");async function iU(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(iU,"validateObjectAsync");function aU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(aU,"validateBySchema")});var Eu=h((VJ,zh)=>{"use strict";var oU=require("fs-extra"),F=require("joi"),cU=require("os"),{boolean:ye,string:fr,number:er,array:lu}=F.types(),Ft=require("path"),_U=g(),Na=b(),Tr=Jh(),uU=Ee(),Sr="keys",lU=Tr.CERTIFICATE_PEM_NAME,EU=Tr.PRIVATEKEY_PEM_NAME,dU=Tr.CA_PEM_NAME,hU=Tr.CERTIFICATE_PEM_NAME,SU=Tr.PRIVATEKEY_PEM_NAME,fU=Tr.CA_PEM_NAME,TU=Tr.CERTIFICATE_PEM_NAME,mU=Tr.PRIVATEKEY_PEM_NAME,RU=Tr.CA_PEM_NAME,AU="log",pU="custom_functions",OU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",NU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gU="rootPath config parameter is undefined",IU="clustering.enabled config parameter is undefined",qr=er.min(0).required(),ga=lu.items({host:fr.required(),port:qr}).empty(null),nt;zh.exports={configValidator:bU,routesValidator:yU,route_constraints:ga};function bU(e){if(nt=e.rootPath,Na.isEmpty(nt))throw gU;let t=ye.required(),r=F.valid("production","development").required(),s=er.min(1).max(1e3).empty(null).default(UU),n=fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xh),i=F.custom(wU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Xh),o=fr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(Na.isEmpty(c))throw IU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:qr,routes:ga}).required()}).required(),leafNodes:F.object({network:F.object({port:qr}).required()}).required(),network:F.object({port:qr}).required()}).required(),leafServer:F.object({network:F.object({port:qr,routes:ga}).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:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:qr})}).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:fr.required(),maxSize:fr.custom(LU).required(),retain:er.min(0).required(),rotate:ye.required(),rotateInterval:fr.required(),rotateModule:ye.required(),timezone:fr.required(),workerInterval:er.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:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:fr.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(bU,"configValidator");function CU(e){return oU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(CU,"doesPathExist");function wU(e,t){F.assert(e,fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=CU(e);if(r)return t.message(r)}a(wU,"validatePemFile");function LU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(OU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(NU)}a(LU,"validateRotationMaxSize");function UU(e,t){let r=t.state.path.join("."),s=cU.cpus().length,n=s-1;return n===1&&s===2&&(n=s),_U.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(UU,"setDefaultThreads");function Xh(e,t){if(!Na.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Na.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ft.join(nt,pU);case"logging.root":return Ft.join(nt,AU);case"operationsApi.tls.certificate":return Ft.join(nt,Sr,lU);case"operationsApi.tls.privateKey":return Ft.join(nt,Sr,EU);case"operationsApi.tls.certificateAuthority":return Ft.join(nt,Sr,dU);case"customFunctions.tls.certificate":return Ft.join(nt,Sr,hU);case"customFunctions.tls.privateKey":return Ft.join(nt,Sr,SU);case"customFunctions.tls.certificateAuthority":return Ft.join(nt,Sr,fU);case"clustering.tls.certificate":return Ft.join(nt,Sr,TU);case"clustering.tls.privateKey":return Ft.join(nt,Sr,mU);case"clustering.tls.certificateAuthority":return Ft.join(nt,Sr,RU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xh,"setDefaultRoot");function yU(e){let t=F.object({routes:ga});return uU.validateBySchema({routes:e},t)}a(yU,"routesValidator")});var mr=h((kJ,iS)=>{"use strict";var re=T(),bt=b(),Qe=g(),{configValidator:DU,routesValidator:jh}=Eu(),Vt=require("fs-extra"),MU=require("yaml"),Zs=require("path"),PU=require("is-number"),Ca=require("properties-reader"),BU=require("lodash"),{handleHDBError:vU}=D(),{HTTP_STATUS_CODES:HU,HDB_ERROR_MSGS:Ia}=Ke(),{PACKAGE_ROOT:qU}=T(),GU="Unable to get config value because config is uninitialized",FU="Config successfully initialized",VU="Error backing up config file",kU="Empty parameter sent to getConfigValue",eS=Zs.join(qU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),xU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ba,it;iS.exports={createConfigFile:$U,getDefaultConfig:YU,getConfigValue:tS,initConfig:rS,flattenConfig:Es,updateConfigValue:sS,updateConfigObject:KU,getConfiguration:QU,setConfiguration:WU,readConfigFile:Su,getClusteringRoutes:JU,initOldConfig:nS,getConfigFromFile:ZU};function $U(e){let t=Xs(eS);ba=Es(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=du(o,e[i]);try{t.setIn([...c],_)}catch(u){Qe.error(u)}}}hu(t);let r=t.toJSON();it=Es(r);let s=t.getIn(["rootPath"]),n=Zs.join(s,re.HDB_CONFIG_FILE);Vt.createFileSync(n),Vt.writeFileSync(n,String(t)),Qe.trace(`Config file written to ${n}`)}a($U,"createConfigFile");function YU(e){if(ba===void 0){let r=Xs(eS);ba=Es(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ba[t.toLowerCase()]}a(YU,"getDefaultConfig");function tS(e){if(bt.isEmpty(e)){Qe.error(kU);return}if(it===void 0){Qe.trace(GU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(tS,"getConfigValue");function rS(e=!1){if(it===void 0||e){let t=bt.getPropsFilePath();try{Vt.accessSync(t,Vt.constants.F_OK|Vt.constants.R_OK)}catch(o){throw Qe.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ca(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{nS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Xs(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Qe.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 Qe.error(o),new Error(`Error reading HarperDB config file at ${s}`)}hu(n);let i=n.toJSON();it=Es(i),Qe.trace(FU)}}a(rS,"initConfig");function hu(e){let t=e.toJSON(),r=DU(t);if(r.error)throw Ia.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(hu,"validateConfig");function KU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Qe.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(KU,"updateConfigObject");function sS(e,t,r=void 0,s=!1,n=!1){it===void 0&&rS();let i=tS(re.CONFIG_PARAM_MAP.hdb_root),o=Zs.join(i,re.HDB_CONFIG_FILE),c=Xs(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=du(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("_"),S=du(E,r[l]);try{c.setIn([...d],S)}catch(m){Qe.error(m)}}}hu(c);let _=c.getIn(["rootPath"]),u=Zs.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Zs.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Vt.copySync(o,l),Qe.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Qe.error(VU),Qe.error(l)}Vt.writeFileSync(u,String(c)),n&&(it=Es(c.toJSON())),Qe.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sS,"updateConfigValue");function Es(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Es(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Es,"flattenConfig");function du(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(PU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||bt.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 bt.autoCast(t)}a(du,"castConfigValue");function QU(){let e=bt.getPropsFilePath(),r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(QU,"getConfiguration");async function WU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sS(void 0,void 0,n,!0),xU}catch(i){throw typeof i=="string"||i instanceof String?vU(i,i,HU.BAD_REQUEST,void 0,void 0,!0):i}}a(WU,"setConfiguration");function Su(){let e=bt.getPropsFilePath();try{Vt.accessSync(e,Vt.constants.F_OK|Vt.constants.R_OK)}catch(n){throw Qe.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(Su,"readConfigFile");function Xs(e){return MU.parseDocument(Vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function JU(){let e=Su(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=bt.isEmptyOrZeroLength(t)?[]:t;let r=jh(t);if(r)throw Ia.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=bt.isEmptyOrZeroLength(s)?[]:s;let n=jh(s);if(n)throw Ia.CONFIG_VALIDATION(n.message);if(!bt.isEmptyOrZeroLength(s)&&!bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ia.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JU,"getClusteringRoutes");function nS(e){let t=Ca(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(bt.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]=Zs.dirname(s):it[n]=s}return it}a(nS,"initOldConfig");function ZU(e){let t=Su();return BU.get(t,e.replaceAll("_","."))}a(ZU,"getConfigFromFile")});var Y=h((xJ,oS)=>{"use strict";var fu=require("fs-extra"),tr=require("path"),XU=require("os"),zU=require("properties-reader"),Zn=g(),zs=b(),M=T(),wa=mr(),jU="Error initializing environment manager",La="BOOT_PROPS_FILE_PATH",aS=!1,ey={[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},Rr={};oS.exports={BOOT_PROPS_FILE_PATH:La,getHdbBasePath:ty,setHdbBasePath:ry,get:sy,initSync:iy,setProperty:$,initTestEnvironment:ay};function ty(){return Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ty,"getHdbBasePath");function ry(e){Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ry,"setHdbBasePath");function sy(e){let t=wa.getConfigValue(e);return t===void 0?Rr[e]:t}a(sy,"get");function $(e,t){ey[e]&&(Rr[e]=t),wa.updateConfigObject(e,t)}a($,"setProperty");function ny(){let e;try{e=zs.getPropsFilePath(),fu.accessSync(e,fu.constants.F_OK|fu.constants.R_OK),aS=!0;let t=zU(e);return Rr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),Rr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rr[La]=e,!0}catch{return Zn.trace(`Environment manager found no properties file at ${e}`),!1}}a(ny,"doesPropFileExist");function iy(e=!1){try{(aS||ny())&&(wa.initConfig(e),Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wa.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zn.error(jU),Zn.error(t),console.error(t),process.exit(1)}}a(iy,"initSync");function ay(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,_=tr.join(__dirname,"../../","unitTests");Rr[La]=tr.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tr.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,XU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tr.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,tr.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,zs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,zs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,zs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,zs.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,tr.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,zs.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 ${La}. Please check your boot props and settings files`;Zn.fatal(r),Zn.error(t)}}a(ay,"initTestEnvironment")});var Ua=h(($J,oy)=>{oy.exports={name:"harperdb",version:"4.0.1",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.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.3",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.7.0",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 _S=h((YJ,cS)=>{var cy=require("fastify-plugin");cS.exports=cy(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var ds=h((KJ,_y)=>{_y.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 OS=h((WJ,pS)=>{"use strict";var Tu=require("recursive-iterator"),uy=require("alasql"),mu=require("clone"),uS=b(),{handleHDBError:lS,hdb_errors:ly}=D(),{HDB_ERROR_MSGS:ES,HTTP_STATUS_CODES:dS}=ly,Ey=["DISTINCT_ARRAY"],hS=Symbol("validateTables"),Ru=Symbol("validateTable"),QJ=Symbol("getAllColumns"),SS=Symbol("validateAllColumns"),ya=Symbol("findColumn"),fS=Symbol("validateOrderBy"),Xn=Symbol("validateSegment"),Au=Symbol("validateColumn"),TS=Symbol("setColumnsForTable"),mS=Symbol("checkColumnsForAsterisk"),RS=Symbol("validateGroupBy"),AS=Symbol("hasColumns"),Da=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hS](),this[mS](),this[SS]()}[hS](){if(this[AS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ru](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ru](t.table)})}}[AS](){let t=!1,r=new Tu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ru](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw lS(new Error,ES.SCHEMA_NOT_FOUND(t.databaseid),dS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw lS(new Error,ES.TABLE_NOT_FOUND(t.databaseid,t.tableid),dS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=mu(s);n.table=mu(t),this.attributes.push(n)})}[ya](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)}[mS](){let t=new Tu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[TS](r.tableid)}[TS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new uy.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[SS](){this[Xn](this.statement.columns,!1),this[Xn](this.statement.joins,!1),this[Xn](this.statement.where,!1),this[RS](this.statement.group,!1),this[Xn](this.statement.order,!0)}[Xn](t,r){if(!t)return;let s=new Tu(t),n=[];for(let{node:i,path:o}of s)!uS.isEmpty(i)&&!uS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[fS](i):n.push(this[Au](i)));return n}[RS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ey.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=mu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ya](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[ya](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`}[fS](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[Au](t)}[Au](t){let r=this[ya](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(Da,"SelectValidator");pS.exports=Da});var pu=h((JJ,NS)=>{"use strict";var Ma=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(Ma,"BridgeMethods");NS.exports=Ma});var hs=h((zJ,CS)=>{"use strict";var gS=Ke().LMDB_ERRORS_ENUM,ZJ=require("lmdb"),dy=Ye(),XJ=require("buffer").Buffer,hy=require("microtime"),{OVERFLOW_MARKER:IS,MAX_SEARCH_KEY_LENGTH:Pa}=dy,bS=["number","string","symbol","boolean","bigint"];function Sy(e){if(!e)throw new Error(gS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(gS.INVALID_ENVIRONMENT)}a(Sy,"validateEnv");function fy(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(fy,"stringifyData");function Ty(e){return e instanceof Date?e.valueOf():e}a(Ty,"convertKeyValueToWrite");function my(e){if(e==null)return;if(bS.includes(typeof e))return e.length>Pa?[e.slice(0,Pa)+IS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];bS.includes(typeof n)&&(n.length>Pa?t.push(n.slice(0,Pa)+IS):t.push(n))}}return t}a(my,"getIndexedValues");function Ry(){let e=hy.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(Ry,"getMicroTime");CS.exports={validateEnv:Sy,stringifyData:fy,convertKeyValueToWrite:Ty,getMicroTime:Ry,getIndexedValues:my}});var LS=h((jJ,wS)=>{"use strict";var Ba=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ba,"DBIDefinition");wS.exports=Ba});var yS=h((eZ,US)=>{"use strict";var va=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(va,"OpenDBIObject");US.exports=va});var MS=h((tZ,DS)=>{"use strict";var Ha=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(Ha,"OpenEnvironmentObject");DS.exports=Ha});var Z=h((sZ,YS)=>{"use strict";var Ou=require("lmdb"),Ct=require("fs-extra"),kt=require("path"),Ga=hs(),PS=g(),De=Ke().LMDB_ERRORS_ENUM,Fa=LS(),Nu=yS(),BS=MS(),Gr=Ye(),rZ=T(),zn=Y();zn.initSync();var vS=zn.get("STORAGE_WRITEASYNC")===!0||zn.get("STORAGE_WRITEASYNC")==="true"||zn.get("STORAGE_WRITEASYNC")==="TRUE",HS=zn.get("STORAGE_OVERLAPPINGSYNC"),qS=1024*1024*1024,GS=1e4,FS=1e3,xt=Gr.INTERNAL_DBIS_NAME,VS=Gr.DBI_DEFINITION_NAME,Ay="data.mdb",py="lock.mdb",jn=".mdb",Oy="-lock",qa=class{constructor(t,r,s=!1){this.dbi=wt(t,r),this.key_type=this.dbi[Gr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Gr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ou.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(qa,"TransactionCursor");function gu(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(gu,"pathEnvNameValidation");async function Iu(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=kt.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(kt.join(e,t,Ay),Ct.constants.R_OK|Ct.constants.F_OK),kt.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(Iu,"validateEnvironmentPath");function Va(e,t){if(Ga.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Va,"validateEnvDBIName");async function Ny(e,t,r=!1,s=!1){gu(e,t),t=t.toString();try{return await Iu(e,t,s),bu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=kt.join(e,t);await Ct.mkdirp(s?i:e);let o=new BS(s?i:i+jn,qS,GS,FS,!1,vS,HS),c=Ou.open(o);c.dbis=Object.create(null);let _=new Nu(!1);c.openDB(xt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Cu(e,t,r);return c[Gr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(Ny,"createEnvironment");async function gy(e,t,r,s=!0){let n=await bu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(kt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gy,"copyEnvironment");async function bu(e,t,r=!1){gu(e,t),t=t.toString();let s=Cu(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 Iu(e,t),i=kt.join(e,t+jn),o=n!=i,c=new BS(n,qS,GS,FS,o,vS,HS),_=Ou.open(c);_.dbis=Object.create(null);let u=xS(_);for(let l=0;l<u.length;l++)wt(_,u[l]);return _[Gr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(bu,"openEnvironment");async function Iy(e,t,r=!1){gu(e,t),t=t.toString();let s=kt.join(e,t+jn),n=await Iu(e,t);if(global.lmdb_map!==void 0){let i=Cu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await kS(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+Oy:kt.join(kt.dirname(n),py))}a(Iy,"deleteEnvironment");async function kS(e){Ga.validateEnv(e);let t=e[Gr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(kS,"closeEnvironment");function Cu(e,t,r=!1){let n=`${kt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Cu,"getCachedEnvironmentName");function by(e){Ga.validateEnv(e);let t=Object.create(null),r=wt(e,xt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==xt)try{t[s]=Object.assign(new Fa,n)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(by,"listDBIDefinitions");function xS(e){Ga.validateEnv(e);let t=[],r=wt(e,xt);for(let{key:s}of r.getRange({start:!1}))s!==xt&&t.push(s);return t}a(xS,"listDBIs");function Cy(e,t){let s=wt(e,xt).getEntry(t),n=new Fa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Cy,"getDBIDefinition");function $S(e,t,r,s=!1){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Nu(r,s===!0),o=e.openDB(t,i),c=new Fa(r===!0,s);return o[VS]=c,wt(e,xt).putSync(t,c),e.dbis[t]=o,o}throw n}}a($S,"createDBI");function wt(e,t){if(Va(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==xt?r=Cy(e,t):r=new Fa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Nu(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[VS]=r,e.dbis[t]=s,s}a(wt,"openDBI");function wy(e,t){Va(e,t),t=t.toString();let r=wt(e,t),s=r.getStats();return r[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wy,"statDBI");async function Ly(e,t){try{let r=kt.join(e,t+jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(Ly,"environmentDataSize");function Uy(e,t){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);wt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wt(e,xt).removeSync(t)}a(Uy,"dropDBI");function yy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{wt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)$S(e,n,n!==t,n===t);else throw i}}}a(yy,"initializeDBIs");YS.exports={openDBI:wt,openEnvironment:bu,createEnvironment:Ny,listDBIs:xS,listDBIDefinitions:by,createDBI:$S,dropDBI:Uy,statDBI:wy,deleteEnvironment:Iy,initializeDBIs:yy,TransactionCursor:qa,environmentDataSize:Ly,copyEnvironment:gy,closeEnvironment:kS}});var QS=h((nZ,KS)=>{"use strict";var ka=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(ka,"InsertRecordsResponseObject");KS.exports=ka});var JS=h((iZ,WS)=>{"use strict";var xa=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(xa,"UpdateRecordsResponseObject");WS.exports=xa});var XS=h((aZ,ZS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");ZS.exports=$a});var js=h((uZ,jS)=>{"use strict";var Dy=Z(),My=QS(),Py=JS(),By=XS(),ti=hs(),ei=Ke().LMDB_ERRORS_ENUM,vy=Ye(),Fr=T(),Hy=b(),qy=require("uuid"),oZ=require("lmdb"),{handleHDBError:Gy,hdb_errors:Fy}=D(),{OVERFLOW_MARKER:cZ,MAX_SEARCH_KEY_LENGTH:_Z}=vy,wu=Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ss=Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Vy(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new My,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];zS(u,!0,n);let l=ky(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Uu(o,c,s,i)}a(Vy,"insertRecords");function ky(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][Fr.FUNC_VAL],s[o]=c)}let _=ti.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[Ss])})}a(ky,"insertRecord");function xy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xy,"removeSkippedRecords");function zS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Ss]))&&(e[Ss]=s),t===!0?(r===!0||!Number.isInteger(e[wu]))&&(e[wu]=s):delete e[wu]}a(zS,"setTimestamps");function Lu(e,t,r){r.indexOf(Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Dy.initializeDBIs(e,t,r)}a(Lu,"initializeTransaction");async function $y(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new Py,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Uu(c,_,s,i,o)}a($y,"updateRecords");async function Yy(e,t,r,s,n=!0){try{Du(e,t,r,s)}catch(_){throw Gy(_,_.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST)}Lu(e,t,r);let i=new By,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;Hy.isEmpty(u[t])?(l=qy.v4(),u[t]=l):l=u[t];let E=yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Uu(o,c,s,i)}a(Yy,"upsertRecords");async function Uu(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=ti.getMicroTime(),xy(r,n),s}a(Uu,"finalizeWrite");function yu(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(zS(r,!l,o),Number.isInteger(r[Ss])&&u[Ss]>r[Ss])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][Fr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=ti.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=ti.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Ss])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:yu(e,t,r,s,n,i,o))}a(yu,"updateUpsertRecord");function Ky(e,t,r){if(ti.validateEnv(e),t===void 0)throw new Error(ei.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ei.WRITE_ATTRIBUTES_REQUIRED):new Error(ei.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ky,"validateBasic");function Du(e,t,r,s){if(Ky(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ei.RECORDS_REQUIRED):new Error(ei.RECORDS_MUST_BE_ARRAY)}a(Du,"validateWrite");jS.exports={insertRecords:Vy,updateRecords:$y,upsertRecords:Yy}});var te=h((lZ,tf)=>{"use strict";var Mu=T(),en=Y(),Pu=require("path");en.initSync();var Ya,Ka,Qa;function ef(){if(Ya!==void 0)return Ya;if(en.getHdbBasePath()!==void 0)return Ya=Pu.join(en.getHdbBasePath(),Mu.SCHEMA_DIR_NAME),Ya}a(ef,"getBaseSchemaPath");function Qy(){if(Ka!==void 0)return Ka;if(en.getHdbBasePath()!==void 0)return Ka=Pu.join(ef(),Mu.SYSTEM_SCHEMA_NAME),Ka}a(Qy,"getSystemSchemaPath");function Wy(){if(Qa!==void 0)return Qa;if(en.getHdbBasePath()!==void 0)return Qa=Pu.join(en.getHdbBasePath(),Mu.TRANSACTIONS_DIR_NAME),Qa}a(Wy,"getTransactionAuditStorePath");tf.exports={getBaseSchemaPath:ef,getSystemSchemaPath:Qy,getTransactionAuditStorePath:Wy}});var Ar=h((EZ,nf)=>{"use strict";var sf=b(),rf=T(),Ja=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Bu=require("joi"),Wa={schema_format:{pattern:Ja,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Jy=Bu.alternatives(Bu.string().min(1).max(Wa.schema_length.maximum).pattern(Ja).messages({"string.pattern.base":"{:#label} "+Wa.schema_format.message}),Bu.number()).required();function Zy(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wa.schema_length.maximum?`'${e}' maximum of 250 characters`:Ja.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Zy,"checkValidTable");function Xy(e,t){return sf.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Xy,"validateSchemaExists");function zy(e,t){let r=t.state.ancestors[0].schema;return sf.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(zy,"validateTableExists");function jy(e,t){return e.toLowerCase()===rf.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${rf.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(jy,"validateSchemaName");nf.exports={common_validators:Wa,schema_regex:Ja,hdb_schema_table:Jy,validateSchemaExists:Xy,validateTableExists:zy,validateSchemaName:jy,checkValidTable:Zy}});var Za=h((dZ,af)=>{var{common_validators:Vr}=Ar(),ri=Ee(),$t="is required",X={schema:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},table:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},hash_attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length}};function si(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(si,"makeAttributesStrings");function eD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(eD,"schema_object");function tD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(tD,"table_object");function rD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence={message:$t},ri.validateObject(e,X)}a(rD,"create_table_object");function sD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence={message:$t},X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(sD,"attribute_object");function nD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(nD,"describe_table");function iD(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(iD,"validateTableResidence");af.exports={schema_object:eD,create_table_object:rD,table_object:tD,attribute_object:sD,describe_table:nD,validateTableResidence:iD}});var cf=h((hZ,of)=>{"use strict";var aD=require("uuid"),Xa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||aD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Xa,"CreateAttributeObject");of.exports=Xa});var ja=h((SZ,_f)=>{"use strict";var oD=cf(),za=class extends oD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(za,"LMDBCreateAttributeObject");_f.exports=za});var lf=h((fZ,uf)=>{"use strict";uf.exports=_D;var cD="inserted";function _D(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===cD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(_D,"returnObject")});var eo=h((TZ,df)=>{"use strict";var uD=T(),vu=Z(),lD=js(),{getSystemSchemaPath:ED,getBaseSchemaPath:dD}=te(),hD=require("path"),SD=ds(),fD=Za(),TD=ja(),mD=lf(),{handleHDBError:RD,hdb_errors:AD}=D(),pD=b(),Hu=SD.hdb_attribute,Ef=[];for(let e=0;e<Hu.attributes.length;e++)Ef.push(Hu.attributes[e].attribute);var OD="inserted";df.exports=ND;async function ND(e){let t=fD.attribute_object(e);if(t)throw RD(new Error,t.message,AD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=pD.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 TD(e.schema,e.table,e.attribute,e.id);try{let n=await vu.openEnvironment(hD.join(dD(),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}`);vu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await vu.openEnvironment(ED(),uD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await lD.insertRecords(i,Hu.hash_attribute,Ef,[s]);return mD(OD,o,{records:[s]},c)}catch(n){throw n}}a(ND,"lmdbCreateAttribute")});var Gu=h((mZ,Sf)=>{var{hdb_schema_table:hf}=Ar(),gD=Ee(),qu=require("joi"),ID={undefined:"undefined",null:"null"},bD=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||ID[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"),CD=qu.object({schema:hf,table:hf,records:qu.array().items(qu.object().custom(bD)).required()});Sf.exports=function(e){return gD.validateBySchema(e,CD)}});var to=h((AZ,Tf)=>{"use strict";var pr=b(),ff=g(),RZ=Gu();Tf.exports=wD;function wD(e){if(pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(pr.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(pr.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&&pr.isEmptyOrZeroLength(o[r]))throw ff.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(!pr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ff.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`);!pr.isEmpty(o[r])&&o[r]!==""&&s.has(pr.autoCast(o[r]))&&(o.skip=!0),s.add(pr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ni=h((pZ,mf)=>{"use strict";var LD=T().OPERATIONS_ENUM,ro=class{constructor(t,r,s,n,i=void 0){this.operation=LD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(ro,"InsertObject");mf.exports=ro});var no=h((NZ,Rf)=>{"use strict";var OZ=ni(),so=T(),Vu=b(),Fu=g(),UD=require("uuid"),{handleHDBError:ii,hdb_errors:yD}=D(),{HDB_ERROR_MSGS:ai,HTTP_STATUS_CODES:oi}=yD;Rf.exports=DD;function DD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];PD(i,r,e.operation)}}a(DD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ii(new Error,ai.ATTR_NAME_LENGTH_ERR(e),oi.BAD_REQUEST,void 0,void 0,!0);if(Vu.isEmptyOrZeroLength(e)||Vu.isEmpty(e.trim()))throw ii(new Error,ai.ATTR_NAME_NULLISH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function PD(e,t,r){if(!e.hasOwnProperty(t)||Vu.isEmptyOrZeroLength(e[t])){if(r===so.OPERATIONS_ENUM.INSERT||r===so.OPERATIONS_ENUM.UPSERT){e[t]=UD.v4();return}throw Fu.error("Update transaction aborted due to record with no hash value:",e),ii(new Error,ai.RECORD_MISSING_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Fu.error(e),ii(new Error,ai.HASH_VAL_LENGTH_ERR,oi.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Fu.error(e),ii(new Error,ai.INVALID_FORWARD_SLASH_IN_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(PD,"validateHash")});var pf=h((gZ,Af)=>{"use strict";var io=class{constructor(t,r){this.type=t,this.message=r}};a(io,"IPCEventObject");Af.exports=io});var kr=h((IZ,Of)=>{"use strict";var BD=g(),ku=b(),vD=T(),{IPC_ERRORS:ci}=Ke();Of.exports={sendIpcEvent:HD,validateEvent:qD,SchemaEventMsg:GD,UserEventMsg:FD};function HD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):BD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(HD,"sendIpcEvent");function qD(e){if(typeof e!="object")return ci.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ku.isEmpty(e.type))return ci.MISSING_TYPE;if(!e.hasOwnProperty("message")||ku.isEmpty(e.message))return ci.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ku.isEmpty(e.message.originator))return ci.MISSING_ORIGIN;if(vD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ci.INVALID_EVENT(e.type)}a(qD,"validateEvent");function GD(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(GD,"SchemaEventMsg");function FD(e){this.originator=e}a(FD,"UserEventMsg")});var tn=h((CZ,bf)=>{"use strict";var Nf=T(),bZ=b(),ao=g(),gf=pf(),{sendIpcEvent:If}=kr();function VD(e){try{ao.trace("signalSchemaChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.SCHEMA,e);If(t)}catch(t){ao.error(t)}}a(VD,"signalSchemaChange");function kD(e){try{ao.trace("signalUserChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.USER,e);If(t)}catch(t){ao.error(t)}}a(kD,"signalUserChange");bf.exports={signalSchemaChange:VD,signalUserChange:kD}});var oo=h((wZ,wf)=>{"use strict";var Cf=b(),xD=T(),$D=g(),YD=eo(),KD=ja(),QD=tn(),{SchemaEventMsg:WD}=kr(),JD="already exists in";wf.exports=ZD;async function ZD(e,t,r){try{if(Cf.isEmptyOrZeroLength(r))return r;let s=[];Cf.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 XD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(ZD,"lmdbCheckForNewAttributes");async function XD(e,t,r,s){let n=new KD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await zD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JD))$D.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(XD,"createNewAttribute");async function zD(e){let t;try{return t=await YD(e),QD.signalSchemaChange(new WD(process.pid,xD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(zD,"createAttribute")});var rn=h((LZ,Lf)=>{"use strict";var co=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(co,"LMDBTransactionObject");Lf.exports=co});var yf=h((UZ,Uf)=>{"use strict";var jD=rn(),eM=T().OPERATIONS_ENUM,_o=class extends jD{constructor(t,r,s,n,i=void 0){super(eM.INSERT,r,s,n,i),this.records=t}};a(_o,"LMDBInsertTransactionObject");Uf.exports=_o});var Mf=h((yZ,Df)=>{"use strict";var tM=rn(),rM=T().OPERATIONS_ENUM,uo=class extends tM{constructor(t,r,s,n,i,o=void 0){super(rM.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(uo,"LMDBUpdateTransactionObject");Df.exports=uo});var Bf=h((DZ,Pf)=>{"use strict";var sM=rn(),nM=T().OPERATIONS_ENUM,lo=class extends sM{constructor(t,r,s,n,i,o=void 0){super(nM.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(lo,"LMDBUpsertTransactionObject");Pf.exports=lo});var Hf=h((MZ,vf)=>{"use strict";var iM=rn(),aM=T().OPERATIONS_ENUM,Eo=class extends iM{constructor(t,r,s,n,i=void 0){super(aM.DELETE,s,n,t,i),this.original_records=r}};a(Eo,"LMDBDeleteTransactionObject");vf.exports=Eo});var _i=h((PZ,Vf)=>{"use strict";var oM=require("path"),qf=Z(),cM=yf(),_M=Mf(),uM=Bf(),lM=Hf(),sn=Ye(),Gf=b(),{CONFIG_PARAMS:EM}=T(),Ff=Y();Ff.initSync();var ho=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:dM}=te();Vf.exports=hM;async function hM(e,t){if(Ff.get(EM.LOGGING_AUDITLOG)===!1)return;let r=oM.join(dM(),e.schema.toString()),s=await qf.openEnvironment(r,e.table,!0),n=SM(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){qf.initializeDBIs(s,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Gf.isEmpty(n.user_name)||s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(hM,"writeTransaction");function SM(e,t){let r=Gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ho.INSERT)return new cM(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPDATE)return new _M(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPSERT)return new uM(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.DELETE)return new lM(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SM,"createTransactionObject")});var xu=h((vZ,kf)=>{"use strict";var fM=to(),BZ=ni(),nn=T(),TM=no(),mM=js().insertRecords,RM=Z(),AM=require("path"),pM=g(),OM=oo(),{getBaseSchemaPath:NM}=te(),gM=_i();kf.exports=IM;async function IM(e){try{let{schema_table:t,attributes:r}=fM(e);TM(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 OM(e.hdb_auth_header,t,r),n=AM.join(NM(),e.schema.toString()),i=await RM.openEnvironment(n,e.table),o=await mM(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await gM(e,o)}catch(c){pM.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(IM,"lmdbCreateRecords")});var Yf=h((HZ,$f)=>{"use strict";var xf=T(),bM=xu(),CM=ni(),wM=require("fs-extra"),LM=require("path"),{getBaseSchemaPath:UM}=te();$f.exports=yM;async function yM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CM(xf.SYSTEM_SCHEMA_NAME,xf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bM(r),await wM.mkdirp(LM.join(UM(),e.schema.toString()))}a(yM,"lmdbCreateSchema")});var Qf=h((qZ,Kf)=>{"use strict";var So=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(So,"DeleteRecordsResponseObject");Kf.exports=So});var Ku=h((kZ,Zf)=>{"use strict";var Wf=Z(),$u=hs(),Yu=Ke().LMDB_ERRORS_ENUM,DM=Ye(),Jf=g(),GZ=b(),MM=require("lmdb"),PM=Qf(),{OVERFLOW_MARKER:FZ,MAX_SEARCH_KEY_LENGTH:VZ}=DM;async function BM(e,t,r){if($u.validateEnv(e),t===void 0)throw new Error(Yu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yu.IDS_REQUIRED):new Error(Yu.IDS_MUST_BE_ARRAY);try{let s=Wf.listDBIs(e);Wf.initializeDBIs(e,t,s);let n=new PM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,MM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=$u.getIndexedValues(B);if(z)for(let V=0,W=z.length;V<W;V++)L.remove(z[V],i)}catch{Jf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){Jf.warn(S),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=$u.getMicroTime(),n}catch(s){throw s}}a(BM,"deleteRecords");Zf.exports={deleteRecords:BM}});var ui=h((xZ,zf)=>{"use strict";var an=b(),vM=Ku(),HM=Z(),qM=require("path"),{getBaseSchemaPath:GM}=te(),FM=_i(),VM=g();zf.exports=kM;async function kM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(an.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(an.isEmptyOrZeroLength(e.hash_values)&&!an.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];an.isEmpty(_)||e.hash_values.push(_)}}if(an.isEmptyOrZeroLength(e.hash_values))return Xf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(an.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=qM.join(GM(),e.schema.toString()),i=await HM.openEnvironment(n,e.table),o=await vM.deleteRecords(i,s,e.hash_values);try{t===!0&&await FM(e,o)}catch(c){VM.error(`unable to write transaction due to ${c.message}`)}return Xf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(kM,"lmdbDeleteRecords");function Xf(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(Xf,"createDeleteResponse")});var Wu=h((YZ,jf)=>{"use strict";var xM=T(),$Z=hs();function Qu(e,t){let r=Object.create(null);if(t.length===1&&xM.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 $M(e,t,r,s){let n=Qu(r,e);s.push(n)}a($M,"searchAll");function YM(e,t,r,s){let n=Qu(r,e);s[t]=n}a(YM,"searchAllToMap");function KM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KM,"iterateDBI");function fs(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(fs,"pushResults");function QM(e,t,r,s,n,i){t.toString().endsWith(e)&&fs(t,r,s,n,i)}a(QM,"endsWith");function WM(e,t,r,s,n,i){t.toString().includes(e)&&fs(t,r,s,n,i)}a(WM,"contains");function JM(e,t,r,s,n,i){t>e&&fs(t,r,s,n,i)}a(JM,"greaterThanCompare");function ZM(e,t,r,s,n,i){t>=e&&fs(t,r,s,n,i)}a(ZM,"greaterThanEqualCompare");function XM(e,t,r,s,n,i){t<e&&fs(t,r,s,n,i)}a(XM,"lessThanCompare");function zM(e,t,r,s,n,i){t<=e&&fs(t,r,s,n,i)}a(zM,"lessThanEqualCompare");jf.exports={parseRow:Qu,searchAll:$M,searchAllToMap:YM,iterateDBI:KM,endsWith:QM,contains:WM,greaterThanCompare:JM,greaterThanEqualCompare:ZM,lessThanCompare:XM,lessThanEqualCompare:zM,pushResults:fs}});var on=h((WZ,iT)=>{"use strict";var Lt=Z(),jM=g(),ft=hs(),xr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,KZ=b(),eP=T(),Yt=Wu(),QZ=require("lmdb"),{OVERFLOW_MARKER:eT,MAX_SEARCH_KEY_LENGTH:tP}=xr,li={lazy:!0};function tT(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ju(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(tT,"iterateFullIndex");function Ei(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=Lt.openDBI(e,r),d=Ju(e,t,r);E[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=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:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))Yt.pushResults(d(L,B),B,l,t,r);return l}a(Ei,"iterateRangeBetween");function Ju(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(eT)){if(!s)if(t)s=Lt.openDBI(e,t);else{let c=Lt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=Lt.openDBI(e,c[_]),!s[xr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,li)[r]}return n}}a(Ju,"getOverflowCheck");function rP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);fo(r),r=di(e,r);let o=[],c=Lt.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}))Yt.searchAll(r,_,u,o);return o}a(rP,"searchAll");function sP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return fo(r),r=di(e,r),tT(e,t,t,Yt.searchAllToMap.bind(null,r),s,n,i)}a(sP,"searchAllToMap");function nP(e,t,r=!1,s=void 0,n=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return tT(e,void 0,t,Yt.iterateDBI,r,s,n)}a(nP,"iterateDBI");function iP(e,t){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(iP,"countAll");function aP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=Lt.openDBI(e,r);s=ft.convertKeyValueToWrite(s);let _=[[],[]];if(c[xr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,li);u!==void 0&&Yt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))Yt.pushResults(s,u,_,t,r);return _}a(aP,"equals");function oP(e,t,r){return $r(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(oP,"count");function cP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=[[],[]],_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ft.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))Yt.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))Yt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(cP,"startsWith");function _P(e,t,r,s,n=!1,i=void 0,o=void 0){return rT(e,t,r,s,n,i,o,!0)}a(_P,"endsWith");function rT(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){$r(e,r,s);let _=[[],[]],u=Lt.openDBI(e,r);u[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ju(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 S=d.toString();if(S.endsWith(eT))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?S.endsWith(s):S.includes(s))if(u[xr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(Yt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(rT,"contains");function uP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!0,!1)}a(uP,"greaterThan");function lP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!1,!1)}a(lP,"greaterThanEqual");function EP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!0)}a(EP,"lessThan");function dP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!1)}a(dP,"lessThanEqual");function hP(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ft.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=ft.convertKeyValueToWrite(s),n=ft.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ei(e,t,r,s,n,i,o,c)}a(hP,"between");function SP(e,t,r,s){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(r),r=di(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?li:void 0);return i&&(n=Yt.parseRow(i,r)),n}a(SP,"searchByHash");function fP(e,t,r){if(ft.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,li)===void 0&&(s=!1),s}a(fP,"checkHashExists");function TP(e,t,r,s,n=[]){nT(e,t,r,s,n);let i=sT(e,t,r,s,n);return Object.values(i)}a(TP,"batchSearchByHash");function mP(e,t,r,s,n=[]){return nT(e,t,r,s,n),sT(e,t,r,s,n)}a(mP,"batchSearchByHashToMap");function sT(e,t,r,s,n=[]){r=di(e,r);let i=Object.create(null),o=r.length<3?li: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=Yt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw jM.warn(u),u}}return i}a(sT,"batchHashSearch");function nT(e,t,r,s,n){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(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(nT,"initializeBatchSearchByHash");function fo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(fo,"validateFetchAttributes");function $r(e,t,r){if(ft.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>tP)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a($r,"validateComparisonFunctions");function di(e,t){return t.length===1&&eP.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(di,"setGetWholeRowAttributes");iT.exports={searchAll:rP,searchAllToMap:sP,count:oP,countAll:iP,equals:aP,startsWith:cP,endsWith:_P,contains:rT,searchByHash:SP,setGetWholeRowAttributes:di,batchSearchByHash:TP,batchSearchByHashToMap:mP,checkHashExists:fP,iterateDBI:nP,greaterThan:uP,greaterThanEqual:lP,lessThan:EP,lessThanEqual:dP,between:hP}});var hi=h((ZZ,_T)=>{var aT=require("lodash"),oT=Ee(),Q=require("joi"),RP=b(),{hdb_schema_table:Kt,checkValidTable:cT}=Ar(),{handleHDBError:AP,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:OP}=pP,JZ=Q.object({schema:Kt,table:Kt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Kt).required()}),NP=Q.object({schema:Kt,table:Kt,search_attribute:Kt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Kt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),gP=Q.object({schema:Kt,table:Kt,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(Kt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Kt,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()});_T.exports=function(e,t){let r=null;switch(t){case"value":r=oT.validateBySchema(e,NP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(cT("schema",e.schema)),i(cT("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=oT.validateBySchema(e,gP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=RP.checkGlobalSchemaTable(e.schema,e.table);if(n)return AP(new Error,n,OP.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 _=aT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!aT.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 Zu=h((XZ,uT)=>{"use strict";var IP=Z(),bP=hi(),CP=require("path"),{getBaseSchemaPath:wP}=te();uT.exports=LP;function LP(e){let t=bP(e,"hashes");if(t)throw t;let r=CP.join(wP(),e.schema.toString());return IP.openEnvironment(r,e.table)}a(LP,"initialize")});var Xu=h((zZ,lT)=>{"use strict";var UP=on(),yP=Zu();lT.exports=DP;async function DP(e){try{let t=await yP(e),r=global.hdb_schema[e.schema][e.table];return UP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(DP,"lmdbGetDataByHash")});var Ts=h((jZ,ET)=>{"use strict";var To=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(To,"SearchByHashObject");ET.exports=To});var hT=h((tX,dT)=>{"use strict";var eX=Ts(),MP=on(),PP=Zu();dT.exports=BP;async function BP(e){try{let t=await PP(e),r=global.hdb_schema[e.schema][e.table];return MP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(BP,"lmdbSearchByHash")});var Qt=h((rX,ST)=>{"use strict";var mo=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(mo,"SearchObject");ST.exports=mo});var Ro=h((sX,AT)=>{"use strict";var We=on(),vP=Z(),HP=require("path"),qP=b(),U=Ye(),ms=T(),{getBaseSchemaPath:GP}=te(),FP=ds(),fT=Ke().LMDB_ERRORS_ENUM,{compareKeys:cn}=require("ordered-binary"),Or=ms.SEARCH_WILDCARDS;async function VP(e,t,r){let s;e.schema===ms.SYSTEM_SCHEMA_NAME?s=FP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=RT(e,s.hash_attribute,r,t);return TT(e,n,s.hash_attribute,r)}a(VP,"prepSearch");async function TT(e,t,r,s){let n=HP.join(GP(),e.schema.toString()),i=await vP.openEnvironment(n,e.table),o=mT(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($P(e,r)===!1)return s===!0?xP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(TT,"executeSearch");function mT(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(mT,"searchByType");function kP(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 cn(i,s[0])>=0&&cn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>cn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>cn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>cn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>cn(n[r],s)<=0;default:return Object.create(null)}}a(kP,"filterByType");function xP(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(xP,"createMapFromArrays");function $P(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($P,"checkToFetchMore");function RT(e,t,r,s){if(qP.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),Or.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Or[0])<0&&n.indexOf(Or[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(Or.indexOf(i)>=0&&Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Or.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Or[0])||n.includes(Or[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(fT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ms.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ms.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ms.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ms.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ms.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fT.UNKNOWN_SEARCH_TYPE)}}a(RT,"createSearchTypeFromSearchObject");AT.exports={executeSearch:TT,createSearchTypeFromSearchObject:RT,prepSearch:VP,searchByType:mT,filterByType:kP}});var OT=h((iX,pT)=>{"use strict";var nX=Qt(),YP=hi(),KP=b(),QP=T(),WP=Ro();pT.exports=JP;async function JP(e,t){if(!KP.isEmpty(t)&&QP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YP(e,"value");if(s)throw s;let n=!0;try{return await WP.prepSearch(e,t,n)}catch(i){throw i}}a(JP,"lmdbGetDataByValue")});var _n=h((oX,NT)=>{"use strict";var aX=Qt(),ZP=hi(),XP=b(),zP=T(),jP=Ro();NT.exports=eB;async function eB(e,t){if(!XP.isEmpty(t)&&zP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZP(e,"value");if(s)throw s;let n=!1;try{return await jP.prepSearch(e,t,n)}catch(i){throw i}}a(eB,"lmdbSearchByValue")});var IT=h((_X,gT)=>{"use strict";var cX=Ye(),Ao=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(Ao,"SearchByConditionsObject");var po=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(po,"SearchCondition");var Oo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oo,"SortAttribute");gT.exports={SearchByConditionsObject:Ao,SearchCondition:po,SortAttribute:Oo}});var yT=h((lX,UT)=>{"use strict";var uX=IT().SearchByConditionsObject,tB=Qt(),rB=hi(),zu=on(),No=Ye(),LT=Ro(),sB=Wu(),bT=require("lodash"),{getBaseSchemaPath:nB}=te(),iB=require("path"),aB=Z(),{handleHDBError:CT,hdb_errors:oB}=D(),{HTTP_STATUS_CODES:cB}=oB,_B=1e8,uB={lazy:!0};UT.exports=lB;async function lB(e){try{let t=rB(e,"conditions");if(t)throw CT(t,t.message,cB.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=iB.join(nB(),e.schema.toString()),s=await aB.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=bT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===No.SEARCH_TYPES.EQUALS?o.estimated_count=zu.count(s,o.search_attribute,o.search_value):c===No.SEARCH_TYPES.CONTAINS||c===No.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=_B}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await wT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(LT.filterByType),u=_.length,l=[],E=zu.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,uB);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(sB.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await wT(s,e,_,n.hash_attribute);c.push(u)}if(o=bT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return zu.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw CT(t)}}a(lB,"lmdbSearchByConditions");async function wT(e,t,r,s){let n=new tB(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===No.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,LT.searchByType(e,n,i,s)}a(wT,"executeConditionSearch")});var Si=h((EX,DT)=>{"use strict";var EB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=EB.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(go,"DeleteObject");DT.exports=go});var ju=h((dX,MT)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Io,"DropAttributeObject");MT.exports=Io});var tl=h((SX,PT)=>{"use strict";var dB=Qt(),hB=Si(),hX=ju(),rr=T(),SB=b(),el=Z(),fB=ds(),TB=_n(),mB=ui(),{getBaseSchemaPath:RB}=te(),AB=require("path");PT.exports=pB;async function pB(e,t=!0){let r;e.schema===rr.SYSTEM_SCHEMA_NAME?r=fB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await NB(e),n=AB.join(RB(),e.schema.toString()),i=await el.openEnvironment(n,e.table);return t===!0&&await OB(e,i,r.hash_attribute),el.dropDBI(i,e.attribute),s}a(pB,"lmdbDropAttribute");async function OB(e,t,r){let s=el.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(OB,"removeAttributeFromAllObjects");async function NB(e){let t=new dB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await TB(t)).filter(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(SB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new hB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return mB(i)}a(NB,"dropAttributeFromSystem")});var qT=h((fX,HT)=>{"use strict";var gB=tl(),IB=ju(),BT=b(),vT=g(),bB=Ke().LMDB_ERRORS_ENUM;HT.exports=CB;async function CB(e){if(BT.isEmpty(global.hdb_schema[e.schema])||BT.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 IB(e.schema,e.table,r);try{await gB(n,!1)}catch(i){i.message!==bB.DBI_DOES_NOT_EXIST&&vT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw vT.error(`Error dropping attribute ${r}`),s}}a(CB,"lmdbDropAllAttributes")});var rl=h((mX,QT)=>{"use strict";var xT=Qt(),$T=Si(),YT=_n(),KT=ui(),TX=qT(),at=T(),GT=b(),FT=Z(),{getBaseSchemaPath:wB,getTransactionAuditStorePath:LB}=te(),VT=require("path"),kT=g();QT.exports=UB;async function UB(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 yB(e),await DB(e);let t=VT.join(wB(),e.schema.toString());try{await FT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=VT.join(LB(),e.schema.toString());await FT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UB,"lmdbDropTable");async function yB(e){let t=new xT(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 YT(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 $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await KT(n)}a(yB,"deleteAttributesFromSystem");async function DB(e){let t=new xT(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 YT(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 $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await KT(n)}catch(i){throw i}}a(DB,"dropTableFromSystem")});var JT=h((AX,WT)=>{"use strict";var MB=require("fs-extra"),PB=Qt(),BB=Ts(),vB=Si(),HB=rl(),qB=ui(),GB=Xu(),FB=_n(),Nr=T(),RX=b(),VB=require("path"),{getBaseSchemaPath:kB}=te(),{handleHDBError:xB,hdb_errors:$B}=D(),{HDB_ERROR_MSGS:YB,HTTP_STATUS_CODES:KB}=$B;WT.exports=QB;async function QB(e){let t;try{t=await WB(e.schema);let r=new PB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await FB(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 vB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qB(n);let i=VB.join(kB(),t.toString());await MB.remove(i)}catch(r){throw r}}a(QB,"lmdbDropSchema");async function WB(e){let t=new BB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await GB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw xB(new Error,YB.SCHEMA_NOT_FOUND(e),KB.NOT_FOUND,void 0,void 0,!0);return s}a(WB,"validateDropSchema")});var sl=h((pX,ZT)=>{"use strict";var bo=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(bo,"CreateTableObject");ZT.exports=bo});var zT=h((NX,XT)=>{"use strict";var JB=require("path"),ZB=require("fs-extra"),Co=Z(),{getTransactionAuditStorePath:XB}=te(),nl=Ye(),OX=sl();XT.exports=zB;async function zB(e){let t;try{let r=JB.join(XB(),e.schema.toString());await ZB.mkdirp(r),t=await Co.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{Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Co.createDBI(t,nl.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(zB,"createTransactionsAuditEnvironment")});var rm=h((gX,tm)=>{"use strict";var il=T(),jT=Z(),jB=js(),ev=require("path"),{getSystemSchemaPath:tv,getBaseSchemaPath:rv}=te(),sv=ds(),nv=eo(),al=ja(),iv=g(),av=zT(),cl=sv.hdb_table,em=[];for(let e=0;e<cl.attributes.length;e++)em.push(cl.attributes[e].attribute);tm.exports=ov;async function ov(e,t){let r=ev.join(rv(),t.schema.toString()),s=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new al(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jT.createEnvironment(r,t.table),e!==void 0){let o=await jT.openEnvironment(tv(),il.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jB.insertRecords(o,cl.hash_attribute,em,[e]),await ol(s),await ol(n),await ol(i)}await av(t)}catch(o){throw o}}a(ov,"lmdbCreateTable");async function ol(e){try{await nv(e)}catch(t){iv.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ol,"createAttribute")});var nm=h((IX,sm)=>{"use strict";var cv=to(),_v=no(),uv=oo(),un=T(),lv=js().updateRecords,Ev=Z(),dv=require("path"),{getBaseSchemaPath:hv}=te(),Sv=_i(),fv=g();sm.exports=Tv;async function Tv(e){try{let{schema_table:t,attributes:r}=cv(e);_v(e,r,t.hash_attribute),e.schema!==un.SYSTEM_SCHEMA_NAME&&(r.includes(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await uv(e.hdb_auth_header,t,r),n=dv.join(hv(),e.schema.toString()),i=await Ev.openEnvironment(n,e.table),o=await lv(i,t.hash_attribute,r,e.records,e[un.CLUSTERING_FLAG]!==!0);try{await Sv(e,o)}catch(c){fv.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(Tv,"lmdbUpdateRecords")});var am=h((bX,im)=>{"use strict";var mv=T().OPERATIONS_ENUM,wo=class{constructor(t,r,s,n=void 0){this.operation=mv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(wo,"UpsertObject");im.exports=wo});var cm=h((wX,om)=>{"use strict";var CX=am(),Rv=to(),Av=no(),pv=oo(),ln=T(),Ov=js().upsertRecords,Nv=Z(),gv=require("path"),{getBaseSchemaPath:Iv}=te(),bv=_i(),Cv=g(),{handleHDBError:wv,hdb_errors:Lv}=D();om.exports=Uv;async function Uv(e){let t;try{t=Rv(e)}catch(_){throw wv(_,_.message,Lv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Av(e,s,r.hash_attribute),e.schema!==ln.SYSTEM_SCHEMA_NAME&&(s.includes(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pv(e.hdb_auth_header,r,s),i=gv.join(Iv(),e.schema.toString()),o=await Nv.openEnvironment(i,e.table),c=await Ov(o,r.hash_attribute,s,e.records,e[ln.CLUSTERING_FLAG]!==!0);try{await bv(e,c)}catch(_){Cv.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(Uv,"lmdbUpsertRecords")});var hm=h((LX,dm)=>{"use strict";var yv=Qt(),_m=b(),um=g(),Dv=_n(),lm=T(),Mv=Ku().deleteRecords,Pv=Z(),Bv=require("path"),{getBaseSchemaPath:vv}=te(),{promisify:Hv}=require("util"),qv=Hv(setTimeout),Em=1e4,Gv=10;dm.exports=Fv;async function Fv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(_m.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 yv(e.schema,e.table,lm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Dv(n,lm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw um.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return _m.isEmptyOrZeroLength(s)?(um.trace("No records found to delete"),{message:"No records found to delete"}):await Vv(e,s,t)}a(Fv,"lmdbDeleteRecordsBefore");async function Vv(e,t,r){let s=Bv.join(vv(),e.schema.toString()),n=await Pv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=Em){let _=t.slice(o,o+Em),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Mv(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 qv(Gv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Vv,"chunkDeletes")});var fm=h((UX,Sm)=>{"use strict";var Lo=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Lo,"DeleteBeforeObject");Sm.exports=Lo});var mm=h((yX,Tm)=>{"use strict";var Uo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Uo,"DeleteAuditLogsBeforeResults");Tm.exports=Uo});var pm=h((MX,Am)=>{"use strict";var _l=Z(),{getTransactionAuditStorePath:kv}=te(),DX=fm(),xv=require("path"),fi=Ye(),$v=b(),Rm=mm(),Yv=require("util").promisify,Kv=Yv(setTimeout),Qv=1e4,Wv=100;Am.exports=Jv;async function Jv(e){let t=xv.join(kv(),e.schema),r=await _l.openEnvironment(t,e.table,!0),s=_l.listDBIs(r);_l.initializeDBIs(r,fi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Rm;do n=await Zv(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 Kv(Wv);while(n.transactions_deleted>0);return i}a(Jv,"deleteAuditLogsBefore");async function Zv(e,t){let r=new Rm;try{let s=e.dbis[fi.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[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$v.isEmpty(c)||(n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Qv)break}return await n,r}catch(s){throw s}}a(Zv,"deleteTransactions")});var wm=h((PX,Cm)=>{"use strict";var ul=Z(),En=Ye(),Om=hs(),ll=T(),Nm=b(),{getTransactionAuditStorePath:Xv}=te(),zv=require("path"),jv=on(),yo=rn(),eH=g();Cm.exports=tH;async function tH(e){let t=zv.join(Xv(),e.schema),r=await ul.openEnvironment(t,e.table,!0),s=ul.listDBIs(r);ul.initializeDBIs(r,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gm(r,e.search_values);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,sH(r,e.search_values,n);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rH(r,e.search_values);default:return gm(r)}}a(tH,"readAuditLog");function gm(e,t=[0,Om.getMicroTime()]){Nm.isEmpty(t[0])&&(t[0]=0),Nm.isEmpty(t[1])&&(t[1]=Om.getMicroTime());let r=[];try{let s=e.dbis[En.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 yo,i);r.push(o)}return r}catch(s){throw s}}a(gm,"searchTransactionsByTimestamp");function rH(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[En.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bm(e,i))}return Object.fromEntries(r)}a(rH,"searchTransactionsByUsername");function sH(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=jv.equals(e,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,En.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=bm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Im(_,"records",r,l,o),Im(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(sH,"searchTransactionsByHashValues");function Im(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 yo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new yo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Im,"loopRecords");function bm(e,t){let r=[];try{let s=e.dbis[En.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 yo,i);r.push(o)}}catch(i){eH.warn(i)}return r}catch(s){throw s}}a(bm,"batchSearchTransactions")});var Um=h((BX,Lm)=>{"use strict";var nH=require("path"),{getBaseSchemaPath:iH}=te(),aH=Z();Lm.exports={writeTransaction:oH};async function oH(e,t,r){let s=nH.join(iH(),e);return(await aH.openEnvironment(s,t)).transaction(r)}a(oH,"writeTransaction")});var Dm=h((vX,ym)=>{"use strict";var cH=require("path"),{getBaseSchemaPath:_H}=te(),uH=Z();ym.exports={flush:lH};async function lH(e,t){let r=cH.join(_H(),e.toString());return(await uH.openEnvironment(r,t.toString())).flushed}a(lH,"flush")});var Pm=h((HX,Mm)=>{"use strict";var Re=g(),{handleHDBError:EH}=D(),dH=pu(),hH=eo(),SH=xu(),fH=Yf(),TH=ui(),mH=Xu(),RH=hT(),AH=OT(),pH=_n(),OH=yT(),NH=JT(),gH=rm(),IH=nm(),bH=cm(),CH=hm(),wH=pm(),LH=rl(),UH=tl(),yH=wm(),DH=Um(),MH=Dm(),Do=class extends dH{async searchByConditions(t){try{return OH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await mH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await RH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await AH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await pH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await fH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await NH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await gH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await LH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await IH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await bH(t)}catch(r){throw EH(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await TH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await CH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await UH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await wH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await yH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return DH.writeTransaction(t,r,s)}flush(t,r){return MH.flush(t,r)}};a(Do,"LMDBBridge");Mm.exports=Do});var gr=h((qX,vm)=>{"use strict";var PH=Pm(),BH=pu(),vH=Y();vH.initSync();var Bm;function HH(){return Bm instanceof BH?Bm:new PH}a(HH,"getBridge");vm.exports=HH()});var Fm=h((GX,Gm)=>{"use strict";var Hm=require("lodash"),Ti=require("mathjs"),qH=require("jsonata"),qm=b();Gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hm.uniqWith(e,Hm.isEqual):e,searchJSON:GH,mad:mi.bind(null,Ti.mad),mean:mi.bind(null,Ti.mean),mode:mi.bind(null,Ti.mode),prod:mi.bind(null,Ti.prod),median:mi.bind(null,Ti.median)};function mi(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(mi,"aggregateFunction");function GH(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(qm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qm.isEmpty(this.__ala__.res[r])){let s=qH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(GH,"searchJSON")});var km=h((FX,Vm)=>{"use strict";var de=require("moment"),El="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;Vm.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(El),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(El),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(El)}});var Km=h((VX,Ym)=>{"use strict";var FH=require("@turf/area"),VH=require("@turf/length"),kH=require("@turf/circle"),xH=require("@turf/difference"),$H=require("@turf/distance"),YH=require("@turf/boolean-contains"),KH=require("@turf/boolean-equal"),QH=require("@turf/boolean-disjoint"),WH=require("@turf/helpers"),xm=T(),k=b();Ym.exports={geoArea:JH,geoLength:ZH,geoCircle:XH,geoDifference:zH,geoDistance:$m,geoNear:jH,geoContains:eq,geoEqual:tq,geoCrosses:rq,geoConvert:sq};var dl="geo1 is required",hl="geo2 is required";function JH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),FH.default(e)}a(JH,"geoArea");function ZH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),VH.default(e,{units:t||"kilometers"})}a(ZH,"geoLength");function XH(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)),kH.default(e,t,{units:r||"kilometers"})}a(XH,"geoCircle");function zH(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)),xH(e,t)}a(zH,"geoDifference");function $m(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)),$H.default(e,t,{units:r||"kilometers"})}a($m,"geoDistance");function jH(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 $m(e,t,s)<=r}a(jH,"geoNear");function eq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),YH.default(e,t)}a(eq,"geoContains");function tq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),KH.default(e,t)}a(tq,"geoEqual");function rq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!QH.default(e,t)}a(rq,"geoCrosses");function sq(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(xm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(xm.GEO_CONVERSION_ENUM).join(",")}`);return WH[t](e,r)}a(sq,"geoConvert")});var Mo=h((kX,Qm)=>{var Rs=Fm(),Tt=km(),sr=Km();Qm.exports=e=>{e.aggr.mad=e.aggr.MAD=Rs.mad,e.aggr.mean=e.aggr.MEAN=Rs.mean,e.aggr.mode=e.aggr.MODE=Rs.mode,e.aggr.prod=e.aggr.PROD=Rs.prod,e.aggr.median=e.aggr.MEDIAN=Rs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Rs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Rs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tt.current_time,e.fn.extract=e.fn.EXTRACT=Tt.extract,e.fn.date=e.fn.DATE=Tt.date,e.fn.date_format=e.fn.DATE_FORMAT=Tt.date_format,e.fn.date_add=e.fn.DATE_ADD=Tt.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tt.date_diff,e.fn.now=e.fn.NOW=Tt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tt.get_server_time,e.fn.getdate=e.fn.GETDATE=Tt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=sr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=sr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=sr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=sr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=sr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=sr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=sr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=sr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=sr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=sr.geoNear}});var Zm=h((xX,Jm)=>{"use strict";var Ri=require("lodash"),Me=require("alasql");Me.options.cache=!1;var nq=Mo(),Wm=require("clone"),Po=require("recursive-iterator"),v=g(),q=b(),dn=gr(),iq=T(),{hdb_errors:aq}=D(),oq="IS NULL",Ai="There was a problem performing this search. Please check the logs and try again.";nq(Me);var Bo=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(Ai)}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(Ai)}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(Ai)}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(Ai)}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(Ai)}}_getColumns(){let t=new Po(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(Wm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ri.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 Po(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 Po(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(iq.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&&Ri.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(Wm(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(oq)>-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=Ri.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 dn.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 dn.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}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 S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await dn.getDataByValue(c,S.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 dn.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(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.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(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let 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 S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ri.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.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 Po(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=Ri.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 dn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[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(aq.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 dn.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(Bo,"SQLSearch");Jm.exports=Bo});var mt=h(($X,zm)=>{"use strict";var cq=OS();zm.exports={searchByConditions:Eq,searchByHash:dq,searchByValue:hq,search:Sq};var Sl=gr(),Xm=require("util"),_q=Xm.callbackify(Sl.searchByHash),uq=Xm.callbackify(Sl.searchByValue),lq=Zm();async function Eq(e){return Sl.searchByConditions(e)}a(Eq,"searchByConditions");function dq(e,t){try{_q(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(dq,"searchByHash");function hq(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),uq(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(hq,"searchByValue");function Sq(e,t){try{let r=new cq(e);r.validate(),new lq(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Sq,"search")});var Yr=h((YX,rR)=>{"use strict";var pi=require("crypto"),eR="aes-256-cbc",fq=32,Tq=16,fl=64,tR=32,mq=fl+tR,jm=new Map;rR.exports={encrypt:Rq,decrypt:Aq,createNatsTableStreamName:pq};function Rq(e){let t=pi.randomBytes(fq),r=pi.randomBytes(Tq),s=pi.createCipheriv(eR,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(Rq,"encrypt");function Aq(e){let t=e.substr(0,fl),r=e.substr(fl,tR),s=e.substr(mq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=pi.createDecipheriv(eR,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Aq,"decrypt");function pq(e,t){let r=`${e}.${t}`,s=jm.get(r);return s||(s=pi.createHash("md5").update(`${e}.${t}`).digest("hex"),jm.set(r,s)),s}a(pq,"createNatsTableStreamName")});var As=h((KX,_R)=>{"use strict";var nR=mt(),Kr=g(),iR=Za(),Oq=require("lodash"),Nq=require("path"),gq=Yr(),Tl=b(),{promisify:aR}=require("util"),j=T(),{handleHDBError:vo,hdb_errors:Iq}=D(),{HDB_ERROR_MSGS:Ho,HTTP_STATUS_CODES:oR}=Iq,bq=Y();bq.initSync();var sR=Z(),Cq=te(),Oi=aR(nR.searchByValue),wq=aR(nR.searchByHash),hn="name",cR="hash_attribute",ml="schema",Lq="schema_table",Uq="attribute";_R.exports={describeAll:yq,describeTable:qo,describeSchema:Mq};async function yq(e){try{let t=Tl.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:hn,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[hn]},i=await Oi(n);if(Tl.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:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},u=await Oi(_),l=[];for(let d of u)try{let S;if(t||s)S=await qo({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;S=await qo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){Kr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),vo(new Error,Ho.DESCRIBE_ALL_ERR)}}a(yq,"describeAll");async function qo(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=iR.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:hn,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Oi(c);if(!_||_.length===0)throw vo(new Error,Ho.TABLE_NOT_FOUND(e.schema,e.table),oR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw vo(new Error,Ho.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:Lq,search_value:r+"."+s,get_attributes:[Uq]},E=await Oi(l);E=Oq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Dq(n)),i.attributes=E,i.clustering_stream_name=gq.createNatsTableStreamName(u.schema,u.name);try{let d=Nq.join(Cq.getBaseSchemaPath(),i.schema.toString()),S=await sR.openEnvironment(d,i.name),m=sR.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(qo,"descTable");function Dq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Dq,"getAttrsByPerms");async function Mq(e){let t=iR.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:ml,search_value:s,hash_values:[],get_attributes:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},i=await Oi(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:[hn]},c=await wq(o);if(c&&c.length<1)throw vo(new Error,Ho.SCHEMA_NOT_FOUND(e.schema),oR.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]),Tl.isEmpty(_)||_.describe){let u=await qo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(Mq,"describeSchema")});var Qr=h((JX,hR)=>{var QX=require("async"),Sn=ds(),WX=g(),{callbackify:ER,promisify:Pq}=require("util");hR.exports={setSchemaDataToGlobal:uR,getTableSchema:Hq,getSystemSchema:Gq,setSchemaDataToGlobalAsync:Pq(uR)};var dR=As(),Bq=ER(dR.describeAll),vq=ER(dR.describeTable);function uR(e){Bq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(uR,"setSchemaDataToGlobal");function lR(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lR,"returnSchema");function Hq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?qq(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,lR(e,t))}):r(null,lR(e,t))}a(Hq,"getTableSchema");function qq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}vq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(qq,"setTableDataToGlobal");function Gq(){return Sn}a(Gq,"getSystemSchema")});var yt=h((ZX,TR)=>{"use strict";var Fo=Gu(),Ut=b(),Fq=require("util"),Vo=gr(),Vq=Qr(),Rl=g(),{handleHDBError:Wr,hdb_errors:kq}=D(),{HTTP_STATUS_CODES:ps}=kq,xq=Fq.promisify(Vq.getTableSchema),$q="updated",SR="inserted",fR="upserted";TR.exports={insert:Kq,update:Qq,upsert:Wq,validation:Yq,flush:Jq};async function Yq(e){if(Ut.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ut.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ut.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await xq(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&&Ut.isEmptyOrZeroLength(c[s]))throw Rl.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(!Ut.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw Rl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ut.isEmpty(c[s])&&c[s]!==""&&n.has(Ut.autoCast(c[s]))&&(c.skip=!0),n.add(Ut.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Yq,"validation");async function Kq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.createRecords(e);return Go(SR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Kq,"insertData");async function Qq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Ut.isEmpty(s.existing_rows)?Go($q,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Go(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Qq,"updateData");async function Wq(e){if(e.operation!=="upsert")throw Wr(new Error,"invalid operation, must be upsert",ps.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return Go(fR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Wr(s,null,null,Rl.ERR,n)}}a(Wq,"upsertData");function Go(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===SR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===fR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Go,"returnObject");function Jq(e){return Vo.flush(e.schema,e.table)}a(Jq,"flush")});var pl=h((XX,AR)=>{var Zq=Ee(),Al=require("joi"),{hdb_schema_table:mR}=Ar(),RR={schema:mR,table:mR},Xq={date:Al.date().iso().required()},zq={timestamp:Al.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AR.exports=function(e,t){let r=t==="timestamp"?{...RR,...zq}:{...RR,...Xq},s=Al.object(r);return Zq.validateBySchema(e,s)}});var gR=h((zX,NR)=>{var jq=Ee(),pR=require("joi"),{hdb_schema_table:OR}=Ar(),eG=pR.object({schema:OR,table:OR,hash_values:pR.array().required()});NR.exports=function(e){return jq.validateBySchema(e,eG)}});var bR=h((jX,IR)=>{"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");IR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var Ns=h((e3,yR)=>{"use strict";var wR=pl(),tG=gR(),Yo=b(),CR=require("moment"),LR=g(),{promisify:rG,callbackify:sG}=require("util"),Os=T(),nG=Qr(),Ol=rG(nG.getTableSchema),Nl=gr(),{DeleteResponseObject:iG}=bR(),{handleHDBError:Jr,hdb_errors:aG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:Zr}=aG,oG="records successfully deleted",cG=sG(UR);yR.exports={delete:cG,deleteRecord:UR,deleteFilesBefore:_G,deleteAuditLogsBefore:uG};async function _G(e){let t=wR(e,"date");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(!CR(e.date,CR.ISO_8601).isValid())throw Jr(new Error,Ko.INVALID_DATE,Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Jr(new Error,s,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,s,!0);try{let n=await Nl.deleteRecordsBefore(e);if(await Ol(e.schema,e.table),LR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(_G,"deleteFilesBefore");async function uG(e){let t=wR(e,"timestamp");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Jr(new Error,Ko.INVALID_VALUE("Timestamp"),Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{let s=await Nl.deleteAuditLogsBefore(e);return await Ol(e.schema,e.table),LR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(uG,"deleteAuditLogsBefore");async function UR(e){let t=tG(e);if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{await Ol(e.schema,e.table);let s=await Nl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${oG}`),s}catch(s){if(s.message===Os.SEARCH_NOT_FOUND_MESSAGE){let n=new iG;return n.message=Os.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UR,"deleteRecord")});var Qo=h((t3,PR)=>{var lG=require("crypto"),DR=9;function EG(e){let t=hG(DR),r=MR(e+t);return t+r}a(EG,"createHash");function dG(e,t){let r=e.substr(0,DR),s=r+MR(t+r);return e===s}a(dG,"validateHash");function hG(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(hG,"generateSalt");function MR(e){return lG.createHash("md5").update(e).digest("hex")}a(MR,"md5");PR.exports={hash:EG,validate:dG}});var vR=h((r3,BR)=>{var gl=Ee(),Je={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 SG(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,gl.validateObject(e,Je)}a(SG,"addUserValidation");function fG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(fG,"alterUserValidation");function TG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(TG,"dropUserValidation");BR.exports={addUserValidation:SG,alterUserValidation:fG,dropUserValidation:TG}});var he=h((n3,qR)=>{"use strict";var{platform:s3}=require("os"),mG="nats-server.zip",Il="nats-server",RG=process.platform==="win32"?`${Il}.exe`:Il,bl="HDB",AG=/^[^\s.,*>]+$/,HR="__request__",pG=a(e=>`${e}.${HR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},NG={HUB:"hub.pid",LEAF:"leaf.pid"},gG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},IG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:bl,deliver_subject:"__HDB__.WORKQUEUE"},bG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:bl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:bl,deliver_subject:"HDB.USERQUEUE"},wG={SUCCESS:"success",ERROR:"error"},LG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},UG={TXN:"txn",MSGID:"msgid"};qR.exports={NATS_SERVER_ZIP:mG,NATS_SERVER_NAME:Il,NATS_BINARY_NAME:RG,PID_FILES:NG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:gG,WORK_QUEUE_CONSUMER_NAMES:IG,SCHEMA_QUEUE_CONSUMER_NAMES:bG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:AG,REQUEST_SUFFIX:HR,UPDATE_REMOTE_RESPONSE_STATUSES:wG,CLUSTER_STATUS_STATUSES:LG,REQUEST_SUBJECT:pG,SUBJECT_PREFIXES:UG}});var FR=h((i3,GR)=>{"use strict";var Xr=T(),Ni=class{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.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(Ni,"BaseLicense");var Wo=class extends Ni{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ni,ExtendedLicense:Wo}});var mn=h((a3,KR)=>{"use strict";var Tn=require("fs-extra"),VR=Qo(),kR=require("crypto"),yG=require("moment"),DG=require("uuid").v4,Ze=g(),wl=require("path"),MG=b(),Rt=T(),PG=FR().ExtendedLicense,fn="invalid license key format",BG="061183",vG="mofi25",HG="aes-256-cbc",qG=16,GG=32,xR=Y();xR.initSync();var Cl;KR.exports={validateLicense:$R,generateFingerPrint:VG,licenseSearch:YR,getLicense:$G};function Ll(){return wl.join(xR.getHdbBasePath(),Rt.LICENSE_KEY_DIR_NAME,Rt.LICENSE_FILE_NAME)}a(Ll,"getLicenseDirPath");function FG(){let e=Ll();return wl.join(e,Rt.LICENSE_FILE_NAME)}a(FG,"getLicenseFilePath");function Ul(){let e=Ll();return wl.join(e,Rt.REG_KEY_FILE_NAME)}a(Ul,"getFingerPrintFilePath");async function VG(){let e=Ul();try{return await Tn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await kG();throw Ze.error(`Error writing fingerprint file to ${e}`),Ze.error(t),new Error("There was an error generating the fingerprint")}}a(VG,"generateFingerPrint");async function kG(){let e=DG(),t=VR.hash(e),r=Ul();try{await Tn.mkdirp(Ll()),await Tn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ze.error(`Error writing fingerprint file to ${r}`),Ze.error(s),new Error("There was an error generating the fingerprint")}return t}a(kG,"writeFingerprint");function $R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Rt.STORAGE_TYPES_ENUM.LMDB,api_call:Rt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Rt.RAM_ALLOCATION_ENUM.DEFAULT,version:Rt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ze.error("empty license key passed to validate."),r;let s=Ul(),n=!1;try{n=Tn.statSync(s)}catch(i){Ze.error(i)}if(n){let i;try{i=Tn.readFileSync(s,"utf8")}catch{Ze.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vG),c=o[1];c=Buffer.concat([Buffer.from(c)],qG);let _=Buffer.concat([Buffer.from(i)],GG),u=kR.createDecipheriv(HG,_,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 S=xG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fn),Ze.error(fn),new Error(fn)}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(fn),Ze.error(fn),new Error(fn)}else r.exp_date=l;r.exp_date<yG().valueOf()&&(r.valid_date=!1),VR.validate(o[1],`${BG}${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||Ze.error("Invalid licence"),r}a($R,"validateLicense");function xG(e,t){try{let r=kR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ze.warn("Check old license failed")}}a(xG,"checkOldLicense");function YR(){let e=new PG;e.api_call=0;let t=[];try{t=Tn.readFileSync(FG(),"utf-8").split(Rt.NEW_LINE)}catch(r){r.code==="ENOENT"?Ze.info("no license file found"):Ze.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(MG.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$R(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){Ze.error("There was an error parsing the license string."),Ze.error(n),e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Rt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Rt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT),Cl=e,e}a(YR,"licenseSearch");async function $G(){return Cl||await YR(),Cl}a($G,"getLicense")});var Ir=h((o3,aA)=>{"use strict";var ZR="username is required",XR="nothing to update, must supply active, role or password to update",zR="password cannot be an empty string",jR="If role is specified, it cannot be empty.",eA="active must be true or false";aA.exports={addUser:zG,alterUser:jG,dropUser:tF,userInfo:rF,listUsers:Zo,listUsersExternal:sF,setUsersToGlobal:gi,findAndValidateUser:aF,getClusterUser:oF,USERNAME_REQUIRED:ZR,ALTERUSER_NOTHING_TO_UPDATE:XR,EMPTY_PASSWORD:zR,EMPTY_ROLE:jR,ACTIVE_BOOLEAN:eA};var tA=yt(),YG=Ns(),Dl=Qo(),rA=vR(),sA=mt(),Ml=tn(),be=b(),nA=require("validate.js"),H=g(),{promisify:Pl}=require("util"),Bl=Yr(),gs=T(),QR=he(),KG=mr(),vl=Y(),QG=mn(),WG=ds(),{handleHDBError:nr,hdb_errors:JG}=D(),{HTTP_STATUS_CODES:ir,AUTHENTICATION_ERROR_MSGS:yl,HDB_ERROR_MSGS:Rn}=JG,{UserEventMsg:Hl}=kr(),WR=require("lodash"),iA={username:!0,active:!0,role:!0,password:!0},JR=new Map,Jo=Pl(sA.searchByValue),ZG=Pl(sA.searchByHash),XG=Pl(YG.delete);async function zG(e){let t=nA.cleanAttributes(e,iA),r=rA.addUserValidation(t);if(r)throw nr(new Error,r.message,ir.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 nr(new Error,Rn.ROLE_NAME_NOT_FOUND(t.role),ir.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nr(new Error,Rn.DUP_ROLES_FOUND(t.role),ir.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await gi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw nr(new Error,Rn.USER_ALREADY_EXISTS(t.username),ir.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ADD_USER,_,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${c.username} successfully added`}a(zG,"addUser");async function jG(e){let t=nA.cleanAttributes(e,iA);if(be.isEmptyOrZeroLength(t.username))throw new Error(ZR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(XR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(zR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(eA);let r=eF(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password)),t.role==="")throw new Error(jR);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 _=Rn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),nr(new Error,_,ir.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=Rn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),nr(new Error,_,ir.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 tA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await gi()}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(gs.INTERNAL_SC_CHANNELS.ALTER_USER,i,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),n}a(jG,"alterUser");function eF(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eF,"isClusterUser");async function tF(e){try{let t=rA.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 nr(new Error,Rn.USER_NOT_EXIST(e.username),ir.NOT_FOUND,void 0,void 0,!0);let s;try{s=await XG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await gi()}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(gs.INTERNAL_SC_CHANNELS.DROP_USER,n,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tF,"dropUser");async function rF(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 ZG(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(rF,"userInfo");async function sF(){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(sF,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=WR.cloneDeep(await Jo(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=WR.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],nF(c.role),i.set(c.username,c)}return(await QG.getLicense()).enterprise?i:iF(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Zo,"listUsers");function nF(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(WG)){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(nF,"appendSystemTablesToRole");function iF(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(iF,"nonEnterpriseFilter");async function gi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(gi,"setUsersToGlobal");async function aF(e,t,r=!0){global.hdb_users||await gi();let s=global.hdb_users.get(e);if(!s)throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nr(new Error,yl.USER_INACTIVE,ir.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(JR.get(t)===s.password)return n;if(Dl.validate(s.password,t))JR.set(t,s.password);else throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aF,"findAndValidateUser");async function oF(){let e=await Zo(),t=KG.getConfigFromFile(gs.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+QR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QR.SERVER_SUFFIX.ADMIN,r}a(oF,"getClusterUser")});var _A=h((c3,cA)=>{"use strict";var ql=Z(),cF=g(),oA=Ke().LMDB_ERRORS_ENUM;cA.exports=_F;async function _F(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await ql.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==oA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ql.closeEnvironment(global.lmdb_map[s]),await ql.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==oA.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){cF.error(t)}}a(_F,"cleanLMDBMap")});var hA=h((_3,dA)=>{"use strict";var Is=g(),Xo=T(),uF=_A(),uA=Qr(),lF=As(),EF=Ir(),{validateEvent:EA}=kr(),dF={[Xo.IPC_EVENT_TYPES.SCHEMA]:hF,[Xo.IPC_EVENT_TYPES.USER]:fF};async function hF(e){let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC schemaHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await uF(e.message),await SF(e.message)}a(hF,"schemaHandler");async function SF(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await lF.describeTable({schema:e.schema,table:e.table});break;default:uA.setSchemaDataToGlobal(lA);break}else uA.setSchemaDataToGlobal(lA)}catch(t){Is.error(t)}}a(SF,"syncSchemaMetadata");function lA(e){e&&Is.error(e)}a(lA,"handleErrorCallback");async function fF(e){try{let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC userHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await EF.setUsersToGlobal()}catch(t){Is.error(t)}}a(fF,"userHandler");dA.exports=dF});var mA=h((u3,TA)=>{"use strict";var TF=require("node-ipc").IPC,SA=b(),fA=T(),br=g(),{IPC_ERRORS:An}=Ke(),mF=require("os"),zo=class{constructor(t,r){this.ipc=new TF,this.server_name=fA.HDB_IPC_SERVER,this.ipc.config.retry=mF.platform()=="win32"?6e5:100,this.ipc.config.id=fA.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(An.INVALID_IPC_DATA_TYPE),new Error(An.INVALID_IPC_DATA_TYPE);if(SA.isEmpty(t.type))throw br.warn(An.MISSING_TYPE),new Error(An.MISSING_TYPE);if(SA.isEmpty(t.message))throw br.warn(An.MISSING_MSG),new Error(An.MISSING_MSG);br.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(zo,"IPCClient");TA.exports=zo});var AA=h((l3,RA)=>{var RF=Ee(),AF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RA.exports=function(e){return RF.validateObject(e,AF)}});var Gl=h((E3,pA)=>{"use strict";var pF=T().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=pF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(jo,"UpdateObject");pA.exports=jo});var NA=h((d3,OA)=>{"use strict";var OF={OPERATION:"operation",REFRESH:"refresh"},ec=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(ec,"JWTTokens");var tc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(tc,"JWTRSAKeys");OA.exports={JWTTokens:ec,TOKEN_TYPE_ENUM:OF,JWTRSAKeys:tc}});var ic=h((h3,CA)=>{"use strict";var bi=require("jsonwebtoken"),Fl=require("fs-extra"),Vl=b(),Dt=T(),{handleHDBError:ot,hdb_errors:NF}=D(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:_t}=NF,Ii=g(),gA=Qo(),$l=Ir(),gF=yt().update,IF=Gl(),bF=tn(),{UserEventMsg:CF}=kr(),zr=Y();zr.initSync();var kl=require("path"),{JWTTokens:wF,JWTRSAKeys:LF,TOKEN_TYPE_ENUM:rc}=NA(),UF=zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",yF=zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sc="RS256",xl;CA.exports={createTokens:DF,validateOperationToken:PF,refreshOperationToken:MF,validateRefreshToken:bA};async function DF(e){if(Vl.isEmpty(e)||typeof e!="object")throw ot(new Error,_t.INVALID_AUTH_OBJECT,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.username))throw ot(new Error,_t.USERNAME_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.password))throw ot(new Error,_t.PASSWORD_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await $l.findAndValidateUser(e.username,e.password),!t)throw ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ii.error(d),ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}let r=await nc(),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 IA(i,r.private_key,r.passphrase),c=await bi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:yF,algorithm:sc,subject:rc.REFRESH}),_=gA.hash(c),u=new IF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await gF(u)}catch(d){Ii.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 bF.signalUserChange(new CF(process.pid)),new wF(o,c)}a(DF,"createTokens");async function IA(e,t,r){return await bi.sign(e,{key:t,passphrase:r},{expiresIn:UF,algorithm:sc,subject:rc.OPERATION})}a(IA,"signOperationToken");async function nc(){if(xl===void 0)try{let e=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Fl.readFile(e)).toString(),n=(await Fl.readFile(t)).toString(),i=(await Fl.readFile(r)).toString();xl=new LF(i,n,s)}catch(e){throw Ii.error(e),ot(new Error,_t.NO_ENCRYPTION_KEYS,ct.INTERNAL_SERVER_ERROR)}return xl}a(nc,"getJWTRSAKeys");async function MF(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 bA(e.refresh_token);let t=await nc(),r=await bi.decode(e.refresh_token);return{operation_token:await IA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MF,"refreshOperationToken");async function PF(e){try{let t=await nc(),r=await bi.verify(e,t.public_key,{algorithms:sc,subject:rc.OPERATION});return await $l.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ii.warn(t),t.name&&t.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}}a(PF,"validateOperationToken");async function bA(e){let t;try{let r=await nc(),s=await bi.verify(e,r.public_key,{algorithms:sc,subject:rc.REFRESH});t=await $l.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ii.warn(r),r.name&&r.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}if(!gA.validate(t.refresh_token,e))throw ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED);return t}a(bA,"validateRefreshToken")});var Yl=h((f3,UA)=>{"use strict";var BF=AA(),pn=require("passport"),vF=require("passport-local").Strategy,HF=require("passport-http").BasicStrategy,qF=require("util"),GF=Ir(),LA=qF.callbackify(GF.findAndValidateUser),S3=Ke(),FF=T(),wA=ic();pn.use(new vF(function(e,t,r){LA(e,t,r)}));pn.use(new HF(function(e,t,r){LA(e,t,r)}));pn.serializeUser(function(e,t){t(null,e)});pn.deserializeUser(function(e,t){t(null,e)});function VF(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":pn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):wA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:pn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(VF,"authorize");function kF(e,t){let r=BF(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(kF,"checkPermissions");UA.exports={authorize:VF,checkPermissions:kF}});var ac=h((T3,yA)=>{"use strict";var xF=gr();yA.exports={writeTransaction:$F};function $F(e,t,r){return xF.writeTransaction(e,t,r)}a($F,"writeTransaction")});var At=h((w3,XA)=>{"use strict";var ar=Y();ar.initSync();var YF=require("fs-extra"),KF=require("semver"),yi=require("path"),{monotonicFactory:QF}=require("ulidx"),WF=QF(),MA=require("util"),PA=require("child_process"),JF=MA.promisify(PA.exec),ZF=PA.spawn,ee=he(),se=T(),Xl=b(),Cr=g(),oc=Yr(),XF=ac(),Ci=mr(),{encode:Wl,decode:BA}=require("msgpackr"),{isEmpty:bs}=Xl,vA=Ir(),m3=Ts(),zF=mt(),R3=MA.promisify(zF.searchByHash),{connect:jF,StorageType:HA,RetentionPolicy:qA,AckPolicy:GA,DeliverPolicy:Jl,NatsConnection:A3,JetStreamManager:p3,JetStreamClient:O3,StringCodec:N3,JSONCodec:e0,createInbox:zl,StreamSource:g3,headers:t0,toJsMsg:r0,nuid:I3,JetStreamOptions:b3,ErrorCode:DA,nanos:C3}=require("nats"),{PACKAGE_ROOT:s0}=T(),n0=Ua(),FA=e0(),i0="clustering",a0=n0.engines[ee.NATS_SERVER_NAME],o0=yi.join(s0,"dependencies"),Zl=yi.join(o0,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Kl,Ql,wi,Li,Ui,Wt;XA.exports={runCommand:VA,checkNATSServerInstalled:c0,createConnection:jl,getConnection:cc,getJetStreamManager:On,getJetStream:kA,getNATSReferences:Mt,getServerList:u0,createLocalStream:eE,listStreams:xA,deleteLocalStream:l0,getServerConfig:Di,listRemoteStreams:E0,viewStream:d0,publishToStream:h0,createWorkQueueStream:S0,addSourceToWorkStream:$A,request:f0,removeSourceFromWorkStream:KA,reloadNATS:tE,reloadNATSHub:T0,reloadNATSLeaf:m0,extractServerName:YA,requestErrorHandler:R0,updateWorkStream:A0,createLocalTableStream:WA,createTableStreams:p0,purgeTableStream:JA,purgeSchemaTableStreams:O0,getStreamInfo:N0,updateNodeNameLocalStreams:g0,closeConnection:_0};async function VA(e,t=void 0){let{stdout:r,stderr:s}=await JF(e,{cwd:t});if(s)throw new Error(s.replace(`
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:Pw.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(qw,"findPs")});var Ye=h((PJ,Ah)=>{"use strict";var Gw="__dbis__",Fw="__environment_name__",Vw="__dbi_defintion__",kw={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"},xw=["__createdtime__","__updatedtime__"],$w="\uFFFF",Rh={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yw=Object.values(Rh);Ah.exports={INTERNAL_DBIS_NAME:Gw,DBI_DEFINITION_NAME:Vw,SEARCH_TYPES:kw,TIMESTAMP_NAMES:xw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Fw,TRANSACTIONS_DBI_NAMES_ENUM:Rh,TRANSACTIONS_DBIS:Yw,OVERFLOW_MARKER:$w}});var Ke=h((BJ,Lh)=>{"use strict";var ph=T(),Oh=Ye(),Nh={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},gh=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Ih={500:gh("There was an error processing your request."),400:"Invalid request"},Kw=Ih[Nh.INTERNAL_SERVER_ERROR],Qw={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.`},Ww={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Jw={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"},Zw={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 ${Oh.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Oh.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"},Xw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ph.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 ${ph.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"},bh={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"},zw={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."},jw={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`},eL={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"},tL={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rL={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`},Ch={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.`},wh={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}`},sL={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."},nL={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iL={...bh,...Jw,...Qw,...zw,...jw,...eL,...tL,...rL,...Xw,...Ch,...wh,...sL,...nL,...Ww};Lh.exports={CHECK_LOGS_WRAPPER:gh,HDB_ERROR_MSGS:iL,DEFAULT_ERROR_MSGS:Ih,DEFAULT_ERROR_RESP:Kw,HTTP_STATUS_CODES:Nh,LMDB_ERRORS_ENUM:Zw,AUTHENTICATION_ERROR_MSGS:bh,VALIDATION_ERROR_MSGS:Ch,IPC_ERRORS:wh}});var D=h((vJ,Dh)=>{"use strict";var Js=Ke(),aL=g(),oL=T(),Wn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Uh),this.http_resp_code=s||Js.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Js.DEFAULT_ERROR_MSGS[s]?Js.DEFAULT_ERROR_MSGS[s]:Js.DEFAULT_ERROR_MSGS[Js.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&&aL[n](i)}};a(Wn,"HdbError");function Uh(e,t,r,s=oL.LOG_LEVELS.ERROR,n=null,i=!1){if(yh(e))return e;let o=new Wn(e,t,r,s,n);return i&&delete o.stack,o}a(Uh,"handleHDBError");function yh(e){return e.__proto__.constructor.name===Wn.name}a(yh,"isHDBError");Dh.exports={isHDBError:yh,handleHDBError:Uh,hdb_errors:Js}});var b=h((qJ,Qh)=>{"use strict";var _u=require("path"),cL=require("fs-extra"),Ie=g(),Mh=require("fs-extra"),_L=require("truncate-utf8-bytes"),Jn=require("os"),uL=require("net"),lL=require("recursive-iterator"),Ue=T(),qh=mh(),Ph=require("papaparse"),pa=require("moment"),{inspect:EL}=require("util"),Bh=require("is-number"),HJ=require("lodash"),{hdb_errors:Oa}=D(),Gh=require("util").promisify(setTimeout),dL=100,hL=5,SL="",fL=4,vh=255,Hh={true:!0,false:!1,undefined:null,null:null,NaN:NaN};Qh.exports={isEmpty:St,isEmptyOrZeroLength:jt,arrayHasEmptyValues:RL,arrayHasEmptyOrZeroLengthValues:AL,buildFolderPath:pL,isBoolean:Fh,errorizeMessage:TL,stripFileExtension:NL,autoCast:gL,autoCastJSONDeep:uu,removeDir:bL,compareVersions:CL,isCompatibleDataVersion:wL,escapeRawValue:kh,unescapeValue:LL,stringifyProps:UL,valueConverter:yL,timeoutPromise:ML,isClusterOperation:BL,getClusterUser:qL,sendTransactionToSocketCluster:vL,checkGlobalSchemaTable:HL,getHomeDir:xh,getPropsFilePath:DL,promisifyPapaParse:GL,removeBOM:$h,createEventPromise:FL,checkProcessRunning:VL,checkSchemaTableExist:kL,checkSchemaExists:Yh,checkTableExists:Kh,getStartOfTomorrowInSeconds:xL,getLimitKey:$L,isObject:OL,isNotEmptyAndHasValue:mL,autoCasterIsNumberCheck:Vh,backtickASTSchemaItems:YL,isPortTaken:PL,stopProcess:KL,createForkArgs:QL,autoCastBoolean:WL,async_set_timeout:Gh,getTableHashAttribute:JL,doesSchemaExist:ZL,doesTableExist:XL,stringifyObj:zL,ms_to_time:jL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function TL(e){return e instanceof Error?e:new Error(e)}a(TL,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function mL(e){return!St(e)&&(e||e===0||e===""||Fh(e))}a(mL,"isNotEmptyAndHasValue");function jt(e){return St(e)||e.length===0||e.size===0}a(jt,"isEmptyOrZeroLength");function RL(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(RL,"arrayHasEmptyValues");function AL(e){if(jt(e))return!0;for(let t=0;t<e.length;t++)if(jt(e[t]))return!0;return!1}a(AL,"arrayHasEmptyOrZeroLengthValues");function pL(...e){try{return e.join(_u.sep)}catch{console.error(e)}}a(pL,"buildFolderPath");function Fh(e){return St(e)?!1:e===!0||e===!1}a(Fh,"isBoolean");function OL(e){return St(e)?!1:typeof e=="object"}a(OL,"isObject");function NL(e){return jt(e)?SL:e.slice(0,-fL)}a(NL,"stripFileExtension");function gL(e){return St(e)||e===""||typeof e!="string"?e:Hh[e]!==void 0?Hh[e]:Vh(e)===!0?Number(e):e}a(gL,"autoCast");function IL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(IL,"autoCastJSON");function uu(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=uu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=uu(r);s!==r&&(e[t]=s)}return e}else return IL(e)}a(uu,"autoCastJSONDeep");function Vh(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(Vh,"autoCasterIsNumberCheck");async function bL(e){if(jt(e))throw new Error(`Directory path: ${e} does not exist`);try{await Mh.emptyDir(e),await Mh.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(bL,"removeDir");function CL(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(CL,"compareVersions");function wL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(wL,"isCompatibleDataVersion");function kh(e){if(St(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(kh,"escapeRawValue");function LL(e){if(St(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(LL,"unescapeValue");function UL(e,t){if(St(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+Jn.EOL}!jt(s)&&s[0]===";"?r+=" "+s+n+Jn.EOL:jt(s)||(r+=s+"="+n+Jn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(UL,"stringifyProps");function yL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(kh(t)),s=Buffer.byteLength(r)>vh?_L(r,vh)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(yL,"valueConverter");function xh(){let e;try{e=Jn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xh,"getHomeDir");function DL(){let e=_u.join(xh(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return cL.existsSync(e)||(e=_u.join(__dirname,"../","hdb_boot_properties.file")),e}a(DL,"getPropsFilePath");function ML(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(ML,"timeoutPromise");async function PL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=uL.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(PL,"isPortTaken");function BL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(BL,"isClusterOperation");function vL(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(vL,"sendTransactionToSocketCluster");function HL(e,t){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(HL,"checkGlobalSchemaTable");function qL(e,t){if(St(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(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(qL,"getClusterUser");function GL(){Ph.parsePromise=function(e,t){return new Promise(function(r,s){Ph.parse(e,{header:!0,transformHeader:$h,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(GL,"promisifyPapaParse");function $h(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($h,"removeBOM");function FL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${EL(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(FL,"createEventPromise");async function VL(e){let t=!0,r=0;do await Gh(dL*r++),(await qh.findPs(e)).length>0&&(t=!1);while(t&&r<hL);if(t)throw new Error(`process ${e} was not started`)}a(VL,"checkProcessRunning");function kL(e,t){let r=Yh(e);if(r)return r;let s=Kh(e,t);if(s)return s}a(kL,"checkSchemaTableExist");function Yh(e){if(!global.hdb_schema[e])return Oa.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Yh,"checkSchemaExists");function Kh(e,t){if(!global.hdb_schema[e][t])return Oa.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kh,"checkTableExists");function xL(){let e=pa().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=pa().utc().unix();return e-t}a(xL,"getStartOfTomorrowInSeconds");function $L(){return pa().utc().format("DD-MM-YYYY")}a($L,"getLimitKey");function YL(e){try{let t=new lL(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(YL,"backtickASTSchemaItems");async function KL(e){let t=Jn.userInfo();(await qh.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(KL,"stopProcess");function QL(e){return[e]}a(QL,"createForkArgs");function WL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WL,"autoCastBoolean");function JL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(JL,"getTableHashAttribute");function ZL(e){return global?.hdb_schema?.[e]!==void 0}a(ZL,"doesSchemaExist");function XL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(XL,"doesTableExist");function zL(e){try{return JSON.stringify(e)}catch{return e}}a(zL,"stringifyObj");function jL(e){let t=pa.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(jL,"ms_to_time")});var Jh=h((GJ,Wh)=>{"use strict";var eU={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))},tU="certificate.pem",rU="privateKey.pem",sU="ca.pem";Wh.exports={CERTIFICATE_VALUES:eU,CERTIFICATE_PEM_NAME:tU,PRIVATEKEY_PEM_NAME:rU,CA_PEM_NAME:sU}});var Ee=h((FJ,Zh)=>{"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("', '")}'`};Zh.exports={validateObject:nU,validateObjectAsync:iU,validateBySchema:aU};function nU(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(nU,"validateObject");async function iU(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(iU,"validateObjectAsync");function aU(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(aU,"validateBySchema")});var Eu=h((VJ,zh)=>{"use strict";var oU=require("fs-extra"),F=require("joi"),cU=require("os"),{boolean:ye,string:fr,number:er,array:lu}=F.types(),Ft=require("path"),_U=g(),Na=b(),Tr=Jh(),uU=Ee(),Sr="keys",lU=Tr.CERTIFICATE_PEM_NAME,EU=Tr.PRIVATEKEY_PEM_NAME,dU=Tr.CA_PEM_NAME,hU=Tr.CERTIFICATE_PEM_NAME,SU=Tr.PRIVATEKEY_PEM_NAME,fU=Tr.CA_PEM_NAME,TU=Tr.CERTIFICATE_PEM_NAME,mU=Tr.PRIVATEKEY_PEM_NAME,RU=Tr.CA_PEM_NAME,AU="log",pU="custom_functions",OU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",NU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gU="rootPath config parameter is undefined",IU="clustering.enabled config parameter is undefined",qr=er.min(0).required(),ga=lu.items({host:fr.required(),port:qr}).empty(null),nt;zh.exports={configValidator:bU,routesValidator:yU,route_constraints:ga};function bU(e){if(nt=e.rootPath,Na.isEmpty(nt))throw gU;let t=ye.required(),r=F.valid("production","development").required(),s=er.min(1).max(1e3).empty(null).default(UU),n=fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xh),i=F.custom(wU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Xh),o=fr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(Na.isEmpty(c))throw IU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:qr,routes:ga}).required()}).required(),leafNodes:F.object({network:F.object({port:qr}).required()}).required(),network:F.object({port:qr}).required()}).required(),leafServer:F.object({network:F.object({port:qr,routes:ga}).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:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:qr})}).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:fr.required(),maxSize:fr.custom(LU).required(),retain:er.min(0).required(),rotate:ye.required(),rotateInterval:fr.required(),rotateModule:ye.required(),timezone:fr.required(),workerInterval:er.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:lu.required(),headersTimeout:er.min(1).required(),https:ye.required(),keepAliveTimeout:er.min(1).required(),port:qr,timeout:er.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:fr.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(bU,"configValidator");function CU(e){return oU.existsSync(e)?null:`Specified path ${e} does not exist.`}a(CU,"doesPathExist");function wU(e,t){F.assert(e,fr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=CU(e);if(r)return t.message(r)}a(wU,"validatePemFile");function LU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(OU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(NU)}a(LU,"validateRotationMaxSize");function UU(e,t){let r=t.state.path.join("."),s=cU.cpus().length,n=s-1;return n<=2&&(n=2),_U.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(UU,"setDefaultThreads");function Xh(e,t){if(!Na.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Na.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ft.join(nt,pU);case"logging.root":return Ft.join(nt,AU);case"operationsApi.tls.certificate":return Ft.join(nt,Sr,lU);case"operationsApi.tls.privateKey":return Ft.join(nt,Sr,EU);case"operationsApi.tls.certificateAuthority":return Ft.join(nt,Sr,dU);case"customFunctions.tls.certificate":return Ft.join(nt,Sr,hU);case"customFunctions.tls.privateKey":return Ft.join(nt,Sr,SU);case"customFunctions.tls.certificateAuthority":return Ft.join(nt,Sr,fU);case"clustering.tls.certificate":return Ft.join(nt,Sr,TU);case"clustering.tls.privateKey":return Ft.join(nt,Sr,mU);case"clustering.tls.certificateAuthority":return Ft.join(nt,Sr,RU);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xh,"setDefaultRoot");function yU(e){let t=F.object({routes:ga});return uU.validateBySchema({routes:e},t)}a(yU,"routesValidator")});var mr=h((kJ,iS)=>{"use strict";var re=T(),bt=b(),Qe=g(),{configValidator:DU,routesValidator:jh}=Eu(),Vt=require("fs-extra"),MU=require("yaml"),Zs=require("path"),PU=require("is-number"),Ca=require("properties-reader"),BU=require("lodash"),{handleHDBError:vU}=D(),{HTTP_STATUS_CODES:HU,HDB_ERROR_MSGS:Ia}=Ke(),{PACKAGE_ROOT:qU}=T(),GU="Unable to get config value because config is uninitialized",FU="Config successfully initialized",VU="Error backing up config file",kU="Empty parameter sent to getConfigValue",eS=Zs.join(qU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),xU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ba,it;iS.exports={createConfigFile:$U,getDefaultConfig:YU,getConfigValue:tS,initConfig:rS,flattenConfig:Es,updateConfigValue:sS,updateConfigObject:KU,getConfiguration:QU,setConfiguration:WU,readConfigFile:Su,getClusteringRoutes:JU,initOldConfig:nS,getConfigFromFile:ZU};function $U(e){let t=Xs(eS);ba=Es(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=du(o,e[i]);try{t.setIn([...c],_)}catch(u){Qe.error(u)}}}hu(t);let r=t.toJSON();it=Es(r);let s=t.getIn(["rootPath"]),n=Zs.join(s,re.HDB_CONFIG_FILE);Vt.createFileSync(n),Vt.writeFileSync(n,String(t)),Qe.trace(`Config file written to ${n}`)}a($U,"createConfigFile");function YU(e){if(ba===void 0){let r=Xs(eS);ba=Es(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return ba[t.toLowerCase()]}a(YU,"getDefaultConfig");function tS(e){if(bt.isEmpty(e)){Qe.error(kU);return}if(it===void 0){Qe.trace(GU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(tS,"getConfigValue");function rS(e=!1){if(it===void 0||e){let t=bt.getPropsFilePath();try{Vt.accessSync(t,Vt.constants.F_OK|Vt.constants.R_OK)}catch(o){throw Qe.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Ca(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{nS(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Xs(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Qe.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 Qe.error(o),new Error(`Error reading HarperDB config file at ${s}`)}hu(n);let i=n.toJSON();it=Es(i),Qe.trace(FU)}}a(rS,"initConfig");function hu(e){let t=e.toJSON(),r=DU(t);if(r.error)throw Ia.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(hu,"validateConfig");function KU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Qe.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(KU,"updateConfigObject");function sS(e,t,r=void 0,s=!1,n=!1){it===void 0&&rS();let i=tS(re.CONFIG_PARAM_MAP.hdb_root),o=Zs.join(i,re.HDB_CONFIG_FILE),c=Xs(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=du(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("_"),S=du(E,r[l]);try{c.setIn([...d],S)}catch(m){Qe.error(m)}}}hu(c);let _=c.getIn(["rootPath"]),u=Zs.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Zs.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Vt.copySync(o,l),Qe.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Qe.error(VU),Qe.error(l)}Vt.writeFileSync(u,String(c)),n&&(it=Es(c.toJSON())),Qe.trace(`Config parameter: ${e} updated with value: ${t}`)}a(sS,"updateConfigValue");function Es(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Es(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Es,"flattenConfig");function du(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(PU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||bt.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 bt.autoCast(t)}a(du,"castConfigValue");function QU(){let e=bt.getPropsFilePath(),r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(QU,"getConfiguration");async function WU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return sS(void 0,void 0,n,!0),xU}catch(i){throw typeof i=="string"||i instanceof String?vU(i,i,HU.BAD_REQUEST,void 0,void 0,!0):i}}a(WU,"setConfiguration");function Su(){let e=bt.getPropsFilePath();try{Vt.accessSync(e,Vt.constants.F_OK|Vt.constants.R_OK)}catch(n){throw Qe.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Ca(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Xs(r).toJSON()}a(Su,"readConfigFile");function Xs(e){return MU.parseDocument(Vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Xs,"parseYamlDoc");function JU(){let e=Su(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=bt.isEmptyOrZeroLength(t)?[]:t;let r=jh(t);if(r)throw Ia.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=bt.isEmptyOrZeroLength(s)?[]:s;let n=jh(s);if(n)throw Ia.CONFIG_VALIDATION(n.message);if(!bt.isEmptyOrZeroLength(s)&&!bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Ia.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JU,"getClusteringRoutes");function nS(e){let t=Ca(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(bt.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]=Zs.dirname(s):it[n]=s}return it}a(nS,"initOldConfig");function ZU(e){let t=Su();return BU.get(t,e.replaceAll("_","."))}a(ZU,"getConfigFromFile")});var Y=h((xJ,oS)=>{"use strict";var fu=require("fs-extra"),tr=require("path"),XU=require("os"),zU=require("properties-reader"),Zn=g(),zs=b(),M=T(),wa=mr(),jU="Error initializing environment manager",La="BOOT_PROPS_FILE_PATH",aS=!1,ey={[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},Rr={};oS.exports={BOOT_PROPS_FILE_PATH:La,getHdbBasePath:ty,setHdbBasePath:ry,get:sy,initSync:iy,setProperty:$,initTestEnvironment:ay};function ty(){return Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ty,"getHdbBasePath");function ry(e){Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ry,"setHdbBasePath");function sy(e){let t=wa.getConfigValue(e);return t===void 0?Rr[e]:t}a(sy,"get");function $(e,t){ey[e]&&(Rr[e]=t),wa.updateConfigObject(e,t)}a($,"setProperty");function ny(){let e;try{e=zs.getPropsFilePath(),fu.accessSync(e,fu.constants.F_OK|fu.constants.R_OK),aS=!0;let t=zU(e);return Rr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),Rr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Rr[La]=e,!0}catch{return Zn.trace(`Environment manager found no properties file at ${e}`),!1}}a(ny,"doesPropFileExist");function iy(e=!1){try{(aS||ny())&&(wa.initConfig(e),Rr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wa.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zn.error(jU),Zn.error(t),console.error(t),process.exit(1)}}a(iy,"initSync");function ay(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,_=tr.join(__dirname,"../../","unitTests");Rr[La]=tr.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tr.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,XU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tr.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tr.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tr.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,tr.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,zs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,zs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,zs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,zs.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,tr.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,zs.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 ${La}. Please check your boot props and settings files`;Zn.fatal(r),Zn.error(t)}}a(ay,"initTestEnvironment")});var Ua=h(($J,oy)=>{oy.exports={name:"harperdb",version:"4.0.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.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 _S=h((YJ,cS)=>{var cy=require("fastify-plugin");cS.exports=cy(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n)=>{let i=n.getResponseTime().toFixed(3);n.header("HDB-Response-Time",i),n.header("Server-Timing",`db;dur=${i}`)}),r()},{name:"hdb-request-time"})});var ds=h((KJ,_y)=>{_y.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 OS=h((WJ,pS)=>{"use strict";var Tu=require("recursive-iterator"),uy=require("alasql"),mu=require("clone"),uS=b(),{handleHDBError:lS,hdb_errors:ly}=D(),{HDB_ERROR_MSGS:ES,HTTP_STATUS_CODES:dS}=ly,Ey=["DISTINCT_ARRAY"],hS=Symbol("validateTables"),Ru=Symbol("validateTable"),QJ=Symbol("getAllColumns"),SS=Symbol("validateAllColumns"),ya=Symbol("findColumn"),fS=Symbol("validateOrderBy"),Xn=Symbol("validateSegment"),Au=Symbol("validateColumn"),TS=Symbol("setColumnsForTable"),mS=Symbol("checkColumnsForAsterisk"),RS=Symbol("validateGroupBy"),AS=Symbol("hasColumns"),Da=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[hS](),this[mS](),this[SS]()}[hS](){if(this[AS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ru](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ru](t.table)})}}[AS](){let t=!1,r=new Tu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Ru](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw lS(new Error,ES.SCHEMA_NOT_FOUND(t.databaseid),dS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw lS(new Error,ES.TABLE_NOT_FOUND(t.databaseid,t.tableid),dS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=mu(s);n.table=mu(t),this.attributes.push(n)})}[ya](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)}[mS](){let t=new Tu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[TS](r.tableid)}[TS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new uy.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[SS](){this[Xn](this.statement.columns,!1),this[Xn](this.statement.joins,!1),this[Xn](this.statement.where,!1),this[RS](this.statement.group,!1),this[Xn](this.statement.order,!0)}[Xn](t,r){if(!t)return;let s=new Tu(t),n=[];for(let{node:i,path:o}of s)!uS.isEmpty(i)&&!uS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[fS](i):n.push(this[Au](i)));return n}[RS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Ey.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=mu(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ya](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[ya](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`}[fS](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[Au](t)}[Au](t){let r=this[ya](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(Da,"SelectValidator");pS.exports=Da});var pu=h((JJ,NS)=>{"use strict";var Ma=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(Ma,"BridgeMethods");NS.exports=Ma});var hs=h((zJ,CS)=>{"use strict";var gS=Ke().LMDB_ERRORS_ENUM,ZJ=require("lmdb"),dy=Ye(),XJ=require("buffer").Buffer,hy=require("microtime"),{OVERFLOW_MARKER:IS,MAX_SEARCH_KEY_LENGTH:Pa}=dy,bS=["number","string","symbol","boolean","bigint"];function Sy(e){if(!e)throw new Error(gS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(gS.INVALID_ENVIRONMENT)}a(Sy,"validateEnv");function fy(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(fy,"stringifyData");function Ty(e){return e instanceof Date?e.valueOf():e}a(Ty,"convertKeyValueToWrite");function my(e){if(e==null)return;if(bS.includes(typeof e))return e.length>Pa?[e.slice(0,Pa)+IS]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];bS.includes(typeof n)&&(n.length>Pa?t.push(n.slice(0,Pa)+IS):t.push(n))}}return t}a(my,"getIndexedValues");function Ry(){let e=hy.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(Ry,"getMicroTime");CS.exports={validateEnv:Sy,stringifyData:fy,convertKeyValueToWrite:Ty,getMicroTime:Ry,getIndexedValues:my}});var LS=h((jJ,wS)=>{"use strict";var Ba=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(Ba,"DBIDefinition");wS.exports=Ba});var yS=h((eZ,US)=>{"use strict";var va=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(va,"OpenDBIObject");US.exports=va});var MS=h((tZ,DS)=>{"use strict";var Ha=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(Ha,"OpenEnvironmentObject");DS.exports=Ha});var Z=h((sZ,YS)=>{"use strict";var Ou=require("lmdb"),Ct=require("fs-extra"),kt=require("path"),Ga=hs(),PS=g(),De=Ke().LMDB_ERRORS_ENUM,Fa=LS(),Nu=yS(),BS=MS(),Gr=Ye(),rZ=T(),zn=Y();zn.initSync();var vS=zn.get("STORAGE_WRITEASYNC")===!0||zn.get("STORAGE_WRITEASYNC")==="true"||zn.get("STORAGE_WRITEASYNC")==="TRUE",HS=zn.get("STORAGE_OVERLAPPINGSYNC"),qS=1024*1024*1024,GS=1e4,FS=1e3,xt=Gr.INTERNAL_DBIS_NAME,VS=Gr.DBI_DEFINITION_NAME,Ay="data.mdb",py="lock.mdb",jn=".mdb",Oy="-lock",qa=class{constructor(t,r,s=!1){this.dbi=wt(t,r),this.key_type=this.dbi[Gr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Gr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ou.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(qa,"TransactionCursor");function gu(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(gu,"pathEnvNameValidation");async function Iu(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=kt.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(kt.join(e,t,Ay),Ct.constants.R_OK|Ct.constants.F_OK),kt.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(Iu,"validateEnvironmentPath");function Va(e,t){if(Ga.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Va,"validateEnvDBIName");async function Ny(e,t,r=!1,s=!1){gu(e,t),t=t.toString();try{return await Iu(e,t,s),bu(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=kt.join(e,t);await Ct.mkdirp(s?i:e);let o=new BS(s?i:i+jn,qS,GS,FS,!1,vS,HS),c=Ou.open(o);c.dbis=Object.create(null);let _=new Nu(!1);c.openDB(xt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Cu(e,t,r);return c[Gr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(Ny,"createEnvironment");async function gy(e,t,r,s=!0){let n=await bu(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(kt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(gy,"copyEnvironment");async function bu(e,t,r=!1){gu(e,t),t=t.toString();let s=Cu(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 Iu(e,t),i=kt.join(e,t+jn),o=n!=i,c=new BS(n,qS,GS,FS,o,vS,HS),_=Ou.open(c);_.dbis=Object.create(null);let u=xS(_);for(let l=0;l<u.length;l++)wt(_,u[l]);return _[Gr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(bu,"openEnvironment");async function Iy(e,t,r=!1){gu(e,t),t=t.toString();let s=kt.join(e,t+jn),n=await Iu(e,t);if(global.lmdb_map!==void 0){let i=Cu(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await kS(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+Oy:kt.join(kt.dirname(n),py))}a(Iy,"deleteEnvironment");async function kS(e){Ga.validateEnv(e);let t=e[Gr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(kS,"closeEnvironment");function Cu(e,t,r=!1){let n=`${kt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Cu,"getCachedEnvironmentName");function by(e){Ga.validateEnv(e);let t=Object.create(null),r=wt(e,xt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==xt)try{t[s]=Object.assign(new Fa,n)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(by,"listDBIDefinitions");function xS(e){Ga.validateEnv(e);let t=[],r=wt(e,xt);for(let{key:s}of r.getRange({start:!1}))s!==xt&&t.push(s);return t}a(xS,"listDBIs");function Cy(e,t){let s=wt(e,xt).getEntry(t),n=new Fa;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Cy,"getDBIDefinition");function $S(e,t,r,s=!1){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return wt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Nu(r,s===!0),o=e.openDB(t,i),c=new Fa(r===!0,s);return o[VS]=c,wt(e,xt).putSync(t,c),e.dbis[t]=o,o}throw n}}a($S,"createDBI");function wt(e,t){if(Va(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==xt?r=Cy(e,t):r=new Fa,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Nu(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[VS]=r,e.dbis[t]=s,s}a(wt,"openDBI");function wy(e,t){Va(e,t),t=t.toString();let r=wt(e,t),s=r.getStats();return r[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(wy,"statDBI");async function Ly(e,t){try{let r=kt.join(e,t+jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(Ly,"environmentDataSize");function Uy(e,t){if(Va(e,t),t=t.toString(),t===xt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);wt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],wt(e,xt).removeSync(t)}a(Uy,"dropDBI");function yy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{wt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)$S(e,n,n!==t,n===t);else throw i}}}a(yy,"initializeDBIs");YS.exports={openDBI:wt,openEnvironment:bu,createEnvironment:Ny,listDBIs:xS,listDBIDefinitions:by,createDBI:$S,dropDBI:Uy,statDBI:wy,deleteEnvironment:Iy,initializeDBIs:yy,TransactionCursor:qa,environmentDataSize:Ly,copyEnvironment:gy,closeEnvironment:kS}});var QS=h((nZ,KS)=>{"use strict";var ka=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(ka,"InsertRecordsResponseObject");KS.exports=ka});var JS=h((iZ,WS)=>{"use strict";var xa=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(xa,"UpdateRecordsResponseObject");WS.exports=xa});var XS=h((aZ,ZS)=>{"use strict";var $a=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a($a,"UpsertRecordsResponseObject");ZS.exports=$a});var js=h((uZ,jS)=>{"use strict";var Dy=Z(),My=QS(),Py=JS(),By=XS(),ti=hs(),ei=Ke().LMDB_ERRORS_ENUM,vy=Ye(),Fr=T(),Hy=b(),qy=require("uuid"),oZ=require("lmdb"),{handleHDBError:Gy,hdb_errors:Fy}=D(),{OVERFLOW_MARKER:cZ,MAX_SEARCH_KEY_LENGTH:_Z}=vy,wu=Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ss=Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Vy(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new My,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];zS(u,!0,n);let l=ky(e,t,r,u),E=u[t];o.push(l),c.push(E)}return Uu(o,c,s,i)}a(Vy,"insertRecords");function ky(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][Fr.FUNC_VAL],s[o]=c)}let _=ti.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[Ss])})}a(ky,"insertRecord");function xy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(xy,"removeSkippedRecords");function zS(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[Ss]))&&(e[Ss]=s),t===!0?(r===!0||!Number.isInteger(e[wu]))&&(e[wu]=s):delete e[wu]}a(zS,"setTimestamps");function Lu(e,t,r){r.indexOf(Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Dy.initializeDBIs(e,t,r)}a(Lu,"initializeTransaction");async function $y(e,t,r,s,n=!0){Du(e,t,r,s),Lu(e,t,r);let i=new Py,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=yu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return Uu(c,_,s,i,o)}a($y,"updateRecords");async function Yy(e,t,r,s,n=!0){try{Du(e,t,r,s)}catch(_){throw Gy(_,_.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST)}Lu(e,t,r);let i=new By,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;Hy.isEmpty(u[t])?(l=qy.v4(),u[t]=l):l=u[t];let E=yu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return Uu(o,c,s,i)}a(Yy,"upsertRecords");async function Uu(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=ti.getMicroTime(),xy(r,n),s}a(Uu,"finalizeWrite");function yu(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(zS(r,!l,o),Number.isInteger(r[Ss])&&u[Ss]>r[Ss])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let z=R([[u]]);Array.isArray(z)&&(R=z[0][Fr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=ti.getIndexedValues(L);if(B)for(let z=0,V=B.length;z<V;z++)w.remove(B[z],s);if(B=ti.getIndexedValues(R),B)for(let z=0,V=B.length;z<V;z++)w.put(B[z],s)}let S=Object.assign({},u,r);c.put(s,S,S[Ss])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:yu(e,t,r,s,n,i,o))}a(yu,"updateUpsertRecord");function Ky(e,t,r){if(ti.validateEnv(e),t===void 0)throw new Error(ei.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ei.WRITE_ATTRIBUTES_REQUIRED):new Error(ei.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ky,"validateBasic");function Du(e,t,r,s){if(Ky(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ei.RECORDS_REQUIRED):new Error(ei.RECORDS_MUST_BE_ARRAY)}a(Du,"validateWrite");jS.exports={insertRecords:Vy,updateRecords:$y,upsertRecords:Yy}});var te=h((lZ,tf)=>{"use strict";var Mu=T(),en=Y(),Pu=require("path");en.initSync();var Ya,Ka,Qa;function ef(){if(Ya!==void 0)return Ya;if(en.getHdbBasePath()!==void 0)return Ya=Pu.join(en.getHdbBasePath(),Mu.SCHEMA_DIR_NAME),Ya}a(ef,"getBaseSchemaPath");function Qy(){if(Ka!==void 0)return Ka;if(en.getHdbBasePath()!==void 0)return Ka=Pu.join(ef(),Mu.SYSTEM_SCHEMA_NAME),Ka}a(Qy,"getSystemSchemaPath");function Wy(){if(Qa!==void 0)return Qa;if(en.getHdbBasePath()!==void 0)return Qa=Pu.join(en.getHdbBasePath(),Mu.TRANSACTIONS_DIR_NAME),Qa}a(Wy,"getTransactionAuditStorePath");tf.exports={getBaseSchemaPath:ef,getSystemSchemaPath:Qy,getTransactionAuditStorePath:Wy}});var Ar=h((EZ,nf)=>{"use strict";var sf=b(),rf=T(),Ja=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Bu=require("joi"),Wa={schema_format:{pattern:Ja,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Jy=Bu.alternatives(Bu.string().min(1).max(Wa.schema_length.maximum).pattern(Ja).messages({"string.pattern.base":"{:#label} "+Wa.schema_format.message}),Bu.number()).required();function Zy(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Wa.schema_length.maximum?`'${e}' maximum of 250 characters`:Ja.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Zy,"checkValidTable");function Xy(e,t){return sf.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(Xy,"validateSchemaExists");function zy(e,t){let r=t.state.ancestors[0].schema;return sf.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(zy,"validateTableExists");function jy(e,t){return e.toLowerCase()===rf.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${rf.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(jy,"validateSchemaName");nf.exports={common_validators:Wa,schema_regex:Ja,hdb_schema_table:Jy,validateSchemaExists:Xy,validateTableExists:zy,validateSchemaName:jy,checkValidTable:Zy}});var Za=h((dZ,af)=>{var{common_validators:Vr}=Ar(),ri=Ee(),$t="is required",X={schema:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},table:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length},hash_attribute:{presence:!0,format:Vr.schema_format,length:Vr.schema_length}};function si(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(si,"makeAttributesStrings");function eD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence=!1,X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(eD,"schema_object");function tD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(tD,"table_object");function rD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence={message:$t},ri.validateObject(e,X)}a(rD,"create_table_object");function sD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence={message:$t},X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(sD,"attribute_object");function nD(e){return e=si(e),X.schema.presence={message:$t},X.table.presence={message:$t},X.attribute.presence=!1,X.hash_attribute.presence=!1,ri.validateObject(e,X)}a(nD,"describe_table");function iD(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(iD,"validateTableResidence");af.exports={schema_object:eD,create_table_object:rD,table_object:tD,attribute_object:sD,describe_table:nD,validateTableResidence:iD}});var cf=h((hZ,of)=>{"use strict";var aD=require("uuid"),Xa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||aD.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Xa,"CreateAttributeObject");of.exports=Xa});var ja=h((SZ,_f)=>{"use strict";var oD=cf(),za=class extends oD{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(za,"LMDBCreateAttributeObject");_f.exports=za});var lf=h((fZ,uf)=>{"use strict";uf.exports=_D;var cD="inserted";function _D(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===cD?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(_D,"returnObject")});var eo=h((TZ,df)=>{"use strict";var uD=T(),vu=Z(),lD=js(),{getSystemSchemaPath:ED,getBaseSchemaPath:dD}=te(),hD=require("path"),SD=ds(),fD=Za(),TD=ja(),mD=lf(),{handleHDBError:RD,hdb_errors:AD}=D(),pD=b(),Hu=SD.hdb_attribute,Ef=[];for(let e=0;e<Hu.attributes.length;e++)Ef.push(Hu.attributes[e].attribute);var OD="inserted";df.exports=ND;async function ND(e){let t=fD.attribute_object(e);if(t)throw RD(new Error,t.message,AD.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=pD.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 TD(e.schema,e.table,e.attribute,e.id);try{let n=await vu.openEnvironment(hD.join(dD(),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}`);vu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await vu.openEnvironment(ED(),uD.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await lD.insertRecords(i,Hu.hash_attribute,Ef,[s]);return mD(OD,o,{records:[s]},c)}catch(n){throw n}}a(ND,"lmdbCreateAttribute")});var Gu=h((mZ,Sf)=>{var{hdb_schema_table:hf}=Ar(),gD=Ee(),qu=require("joi"),ID={undefined:"undefined",null:"null"},bD=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||ID[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"),CD=qu.object({schema:hf,table:hf,records:qu.array().items(qu.object().custom(bD)).required()});Sf.exports=function(e){return gD.validateBySchema(e,CD)}});var to=h((AZ,Tf)=>{"use strict";var pr=b(),ff=g(),RZ=Gu();Tf.exports=wD;function wD(e){if(pr.isEmpty(e))throw new Error("invalid update parameters defined.");if(pr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(pr.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(pr.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&&pr.isEmptyOrZeroLength(o[r]))throw ff.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(!pr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw ff.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`);!pr.isEmpty(o[r])&&o[r]!==""&&s.has(pr.autoCast(o[r]))&&(o.skip=!0),s.add(pr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(wD,"insertUpdateValidate")});var ni=h((pZ,mf)=>{"use strict";var LD=T().OPERATIONS_ENUM,ro=class{constructor(t,r,s,n,i=void 0){this.operation=LD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(ro,"InsertObject");mf.exports=ro});var no=h((NZ,Rf)=>{"use strict";var OZ=ni(),so=T(),Vu=b(),Fu=g(),UD=require("uuid"),{handleHDBError:ii,hdb_errors:yD}=D(),{HDB_ERROR_MSGS:ai,HTTP_STATUS_CODES:oi}=yD;Rf.exports=DD;function DD(e,t,r){for(let n=0;n<t.length;n++)MD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];PD(i,r,e.operation)}}a(DD,"processRows");function MD(e){if(Buffer.byteLength(String(e))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ii(new Error,ai.ATTR_NAME_LENGTH_ERR(e),oi.BAD_REQUEST,void 0,void 0,!0);if(Vu.isEmptyOrZeroLength(e)||Vu.isEmpty(e.trim()))throw ii(new Error,ai.ATTR_NAME_NULLISH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(MD,"validateAttribute");function PD(e,t,r){if(!e.hasOwnProperty(t)||Vu.isEmptyOrZeroLength(e[t])){if(r===so.OPERATIONS_ENUM.INSERT||r===so.OPERATIONS_ENUM.UPSERT){e[t]=UD.v4();return}throw Fu.error("Update transaction aborted due to record with no hash value:",e),ii(new Error,ai.RECORD_MISSING_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>so.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Fu.error(e),ii(new Error,ai.HASH_VAL_LENGTH_ERR,oi.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Fu.error(e),ii(new Error,ai.INVALID_FORWARD_SLASH_IN_HASH_ERR,oi.BAD_REQUEST,void 0,void 0,!0)}a(PD,"validateHash")});var pf=h((gZ,Af)=>{"use strict";var io=class{constructor(t,r){this.type=t,this.message=r}};a(io,"IPCEventObject");Af.exports=io});var kr=h((IZ,Of)=>{"use strict";var BD=g(),ku=b(),vD=T(),{IPC_ERRORS:ci}=Ke();Of.exports={sendIpcEvent:HD,validateEvent:qD,SchemaEventMsg:GD,UserEventMsg:FD};function HD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):BD.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(HD,"sendIpcEvent");function qD(e){if(typeof e!="object")return ci.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||ku.isEmpty(e.type))return ci.MISSING_TYPE;if(!e.hasOwnProperty("message")||ku.isEmpty(e.message))return ci.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||ku.isEmpty(e.message.originator))return ci.MISSING_ORIGIN;if(vD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ci.INVALID_EVENT(e.type)}a(qD,"validateEvent");function GD(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(GD,"SchemaEventMsg");function FD(e){this.originator=e}a(FD,"UserEventMsg")});var tn=h((CZ,bf)=>{"use strict";var Nf=T(),bZ=b(),ao=g(),gf=pf(),{sendIpcEvent:If}=kr();function VD(e){try{ao.trace("signalSchemaChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.SCHEMA,e);If(t)}catch(t){ao.error(t)}}a(VD,"signalSchemaChange");function kD(e){try{ao.trace("signalUserChange called with message:",e);let t=new gf(Nf.IPC_EVENT_TYPES.USER,e);If(t)}catch(t){ao.error(t)}}a(kD,"signalUserChange");bf.exports={signalSchemaChange:VD,signalUserChange:kD}});var oo=h((wZ,wf)=>{"use strict";var Cf=b(),xD=T(),$D=g(),YD=eo(),KD=ja(),QD=tn(),{SchemaEventMsg:WD}=kr(),JD="already exists in";wf.exports=ZD;async function ZD(e,t,r){try{if(Cf.isEmptyOrZeroLength(r))return r;let s=[];Cf.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 XD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(ZD,"lmdbCheckForNewAttributes");async function XD(e,t,r,s){let n=new KD(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await zD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(JD))$D.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(XD,"createNewAttribute");async function zD(e){let t;try{return t=await YD(e),QD.signalSchemaChange(new WD(process.pid,xD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(zD,"createAttribute")});var rn=h((LZ,Lf)=>{"use strict";var co=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(co,"LMDBTransactionObject");Lf.exports=co});var yf=h((UZ,Uf)=>{"use strict";var jD=rn(),eM=T().OPERATIONS_ENUM,_o=class extends jD{constructor(t,r,s,n,i=void 0){super(eM.INSERT,r,s,n,i),this.records=t}};a(_o,"LMDBInsertTransactionObject");Uf.exports=_o});var Mf=h((yZ,Df)=>{"use strict";var tM=rn(),rM=T().OPERATIONS_ENUM,uo=class extends tM{constructor(t,r,s,n,i,o=void 0){super(rM.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(uo,"LMDBUpdateTransactionObject");Df.exports=uo});var Bf=h((DZ,Pf)=>{"use strict";var sM=rn(),nM=T().OPERATIONS_ENUM,lo=class extends sM{constructor(t,r,s,n,i,o=void 0){super(nM.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(lo,"LMDBUpsertTransactionObject");Pf.exports=lo});var Hf=h((MZ,vf)=>{"use strict";var iM=rn(),aM=T().OPERATIONS_ENUM,Eo=class extends iM{constructor(t,r,s,n,i=void 0){super(aM.DELETE,s,n,t,i),this.original_records=r}};a(Eo,"LMDBDeleteTransactionObject");vf.exports=Eo});var _i=h((PZ,Vf)=>{"use strict";var oM=require("path"),qf=Z(),cM=yf(),_M=Mf(),uM=Bf(),lM=Hf(),sn=Ye(),Gf=b(),{CONFIG_PARAMS:EM}=T(),Ff=Y();Ff.initSync();var ho=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:dM}=te();Vf.exports=hM;async function hM(e,t){if(Ff.get(EM.LOGGING_AUDITLOG)===!1)return;let r=oM.join(dM(),e.schema.toString()),s=await qf.openEnvironment(r,e.table,!0),n=SM(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){qf.initializeDBIs(s,sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sn.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Gf.isEmpty(n.user_name)||s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[sn.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(hM,"writeTransaction");function SM(e,t){let r=Gf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ho.INSERT)return new cM(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPDATE)return new _M(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.UPSERT)return new uM(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ho.DELETE)return new lM(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SM,"createTransactionObject")});var xu=h((vZ,kf)=>{"use strict";var fM=to(),BZ=ni(),nn=T(),TM=no(),mM=js().insertRecords,RM=Z(),AM=require("path"),pM=g(),OM=oo(),{getBaseSchemaPath:NM}=te(),gM=_i();kf.exports=IM;async function IM(e){try{let{schema_table:t,attributes:r}=fM(e);TM(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 OM(e.hdb_auth_header,t,r),n=AM.join(NM(),e.schema.toString()),i=await RM.openEnvironment(n,e.table),o=await mM(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await gM(e,o)}catch(c){pM.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(IM,"lmdbCreateRecords")});var Yf=h((HZ,$f)=>{"use strict";var xf=T(),bM=xu(),CM=ni(),wM=require("fs-extra"),LM=require("path"),{getBaseSchemaPath:UM}=te();$f.exports=yM;async function yM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CM(xf.SYSTEM_SCHEMA_NAME,xf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await bM(r),await wM.mkdirp(LM.join(UM(),e.schema.toString()))}a(yM,"lmdbCreateSchema")});var Qf=h((qZ,Kf)=>{"use strict";var So=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(So,"DeleteRecordsResponseObject");Kf.exports=So});var Ku=h((kZ,Zf)=>{"use strict";var Wf=Z(),$u=hs(),Yu=Ke().LMDB_ERRORS_ENUM,DM=Ye(),Jf=g(),GZ=b(),MM=require("lmdb"),PM=Qf(),{OVERFLOW_MARKER:FZ,MAX_SEARCH_KEY_LENGTH:VZ}=DM;async function BM(e,t,r){if($u.validateEnv(e),t===void 0)throw new Error(Yu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Yu.IDS_REQUIRED):new Error(Yu.IDS_MUST_BE_ARRAY);try{let s=Wf.listDBIs(e);Wf.initializeDBIs(e,t,s);let n=new PM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,MM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let z=$u.getIndexedValues(B);if(z)for(let V=0,W=z.length;V<W;V++)L.remove(z[V],i)}catch{Jf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){Jf.warn(S),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=$u.getMicroTime(),n}catch(s){throw s}}a(BM,"deleteRecords");Zf.exports={deleteRecords:BM}});var ui=h((xZ,zf)=>{"use strict";var an=b(),vM=Ku(),HM=Z(),qM=require("path"),{getBaseSchemaPath:GM}=te(),FM=_i(),VM=g();zf.exports=kM;async function kM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(an.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(an.isEmptyOrZeroLength(e.hash_values)&&!an.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];an.isEmpty(_)||e.hash_values.push(_)}}if(an.isEmptyOrZeroLength(e.hash_values))return Xf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(an.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=qM.join(GM(),e.schema.toString()),i=await HM.openEnvironment(n,e.table),o=await vM.deleteRecords(i,s,e.hash_values);try{t===!0&&await FM(e,o)}catch(c){VM.error(`unable to write transaction due to ${c.message}`)}return Xf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(kM,"lmdbDeleteRecords");function Xf(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(Xf,"createDeleteResponse")});var Wu=h((YZ,jf)=>{"use strict";var xM=T(),$Z=hs();function Qu(e,t){let r=Object.create(null);if(t.length===1&&xM.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 $M(e,t,r,s){let n=Qu(r,e);s.push(n)}a($M,"searchAll");function YM(e,t,r,s){let n=Qu(r,e);s[t]=n}a(YM,"searchAllToMap");function KM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(KM,"iterateDBI");function fs(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(fs,"pushResults");function QM(e,t,r,s,n,i){t.toString().endsWith(e)&&fs(t,r,s,n,i)}a(QM,"endsWith");function WM(e,t,r,s,n,i){t.toString().includes(e)&&fs(t,r,s,n,i)}a(WM,"contains");function JM(e,t,r,s,n,i){t>e&&fs(t,r,s,n,i)}a(JM,"greaterThanCompare");function ZM(e,t,r,s,n,i){t>=e&&fs(t,r,s,n,i)}a(ZM,"greaterThanEqualCompare");function XM(e,t,r,s,n,i){t<e&&fs(t,r,s,n,i)}a(XM,"lessThanCompare");function zM(e,t,r,s,n,i){t<=e&&fs(t,r,s,n,i)}a(zM,"lessThanEqualCompare");jf.exports={parseRow:Qu,searchAll:$M,searchAllToMap:YM,iterateDBI:KM,endsWith:QM,contains:WM,greaterThanCompare:JM,greaterThanEqualCompare:ZM,lessThanCompare:XM,lessThanEqualCompare:zM,pushResults:fs}});var on=h((WZ,iT)=>{"use strict";var Lt=Z(),jM=g(),ft=hs(),xr=Ye(),ce=Ke().LMDB_ERRORS_ENUM,KZ=b(),eP=T(),Yt=Wu(),QZ=require("lmdb"),{OVERFLOW_MARKER:eT,MAX_SEARCH_KEY_LENGTH:tP}=xr,li={lazy:!0};function tT(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Ju(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(tT,"iterateFullIndex");function Ei(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=Lt.openDBI(e,r),d=Ju(e,t,r);E[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=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:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))Yt.pushResults(d(L,B),B,l,t,r);return l}a(Ei,"iterateRangeBetween");function Ju(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(eT)){if(!s)if(t)s=Lt.openDBI(e,t);else{let c=Lt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=Lt.openDBI(e,c[_]),!s[xr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,li)[r]}return n}}a(Ju,"getOverflowCheck");function rP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);fo(r),r=di(e,r);let o=[],c=Lt.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}))Yt.searchAll(r,_,u,o);return o}a(rP,"searchAll");function sP(e,t,r,s=!1,n=void 0,i=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return fo(r),r=di(e,r),tT(e,t,t,Yt.searchAllToMap.bind(null,r),s,n,i)}a(sP,"searchAllToMap");function nP(e,t,r=!1,s=void 0,n=void 0){if(ft.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return tT(e,void 0,t,Yt.iterateDBI,r,s,n)}a(nP,"iterateDBI");function iP(e,t){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return Lt.statDBI(e,t).entryCount}a(iP,"countAll");function aP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=Lt.openDBI(e,r);s=ft.convertKeyValueToWrite(s);let _=[[],[]];if(c[xr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,li);u!==void 0&&Yt.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))Yt.pushResults(s,u,_,t,r);return _}a(aP,"equals");function oP(e,t,r){return $r(e,t,r),Lt.openDBI(e,t).getValuesCount(r)}a(oP,"count");function cP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=[[],[]],_=Lt.openDBI(e,r);_[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ft.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))Yt.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))Yt.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(cP,"startsWith");function _P(e,t,r,s,n=!1,i=void 0,o=void 0){return rT(e,t,r,s,n,i,o,!0)}a(_P,"endsWith");function rT(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){$r(e,r,s);let _=[[],[]],u=Lt.openDBI(e,r);u[xr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=Ju(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 S=d.toString();if(S.endsWith(eT))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?S.endsWith(s):S.includes(s))if(u[xr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&(Yt.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(rT,"contains");function uP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!0,!1)}a(uP,"greaterThan");function lP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Ei(e,t,r,s,_,n,i,o,!1,!1)}a(lP,"greaterThanEqual");function EP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!0)}a(EP,"lessThan");function dP(e,t,r,s,n=!1,i=void 0,o=void 0){$r(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Ei(e,t,r,_,s,n,i,o,!1,!1)}a(dP,"lessThanEqual");function hP(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ft.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=ft.convertKeyValueToWrite(s),n=ft.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ei(e,t,r,s,n,i,o,c)}a(hP,"between");function SP(e,t,r,s){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(r),r=di(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?li:void 0);return i&&(n=Yt.parseRow(i,r)),n}a(SP,"searchByHash");function fP(e,t,r){if(ft.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,li)===void 0&&(s=!1),s}a(fP,"checkHashExists");function TP(e,t,r,s,n=[]){nT(e,t,r,s,n);let i=sT(e,t,r,s,n);return Object.values(i)}a(TP,"batchSearchByHash");function mP(e,t,r,s,n=[]){return nT(e,t,r,s,n),sT(e,t,r,s,n)}a(mP,"batchSearchByHashToMap");function sT(e,t,r,s,n=[]){r=di(e,r);let i=Object.create(null),o=r.length<3?li: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=Yt.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw jM.warn(u),u}}return i}a(sT,"batchHashSearch");function nT(e,t,r,s,n){if(ft.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(fo(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(nT,"initializeBatchSearchByHash");function fo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(fo,"validateFetchAttributes");function $r(e,t,r){if(ft.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>tP)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a($r,"validateComparisonFunctions");function di(e,t){return t.length===1&&eP.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Lt.listDBIs(e)),t}a(di,"setGetWholeRowAttributes");iT.exports={searchAll:rP,searchAllToMap:sP,count:oP,countAll:iP,equals:aP,startsWith:cP,endsWith:_P,contains:rT,searchByHash:SP,setGetWholeRowAttributes:di,batchSearchByHash:TP,batchSearchByHashToMap:mP,checkHashExists:fP,iterateDBI:nP,greaterThan:uP,greaterThanEqual:lP,lessThan:EP,lessThanEqual:dP,between:hP}});var hi=h((ZZ,_T)=>{var aT=require("lodash"),oT=Ee(),Q=require("joi"),RP=b(),{hdb_schema_table:Kt,checkValidTable:cT}=Ar(),{handleHDBError:AP,hdb_errors:pP}=D(),{HTTP_STATUS_CODES:OP}=pP,JZ=Q.object({schema:Kt,table:Kt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Kt).required()}),NP=Q.object({schema:Kt,table:Kt,search_attribute:Kt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Kt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),gP=Q.object({schema:Kt,table:Kt,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(Kt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Kt,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()});_T.exports=function(e,t){let r=null;switch(t){case"value":r=oT.validateBySchema(e,NP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(cT("schema",e.schema)),i(cT("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=oT.validateBySchema(e,gP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=RP.checkGlobalSchemaTable(e.schema,e.table);if(n)return AP(new Error,n,OP.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 _=aT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!aT.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 Zu=h((XZ,uT)=>{"use strict";var IP=Z(),bP=hi(),CP=require("path"),{getBaseSchemaPath:wP}=te();uT.exports=LP;function LP(e){let t=bP(e,"hashes");if(t)throw t;let r=CP.join(wP(),e.schema.toString());return IP.openEnvironment(r,e.table)}a(LP,"initialize")});var Xu=h((zZ,lT)=>{"use strict";var UP=on(),yP=Zu();lT.exports=DP;async function DP(e){try{let t=await yP(e),r=global.hdb_schema[e.schema][e.table];return UP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(DP,"lmdbGetDataByHash")});var Ts=h((jZ,ET)=>{"use strict";var To=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(To,"SearchByHashObject");ET.exports=To});var hT=h((tX,dT)=>{"use strict";var eX=Ts(),MP=on(),PP=Zu();dT.exports=BP;async function BP(e){try{let t=await PP(e),r=global.hdb_schema[e.schema][e.table];return MP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(BP,"lmdbSearchByHash")});var Qt=h((rX,ST)=>{"use strict";var mo=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(mo,"SearchObject");ST.exports=mo});var Ro=h((sX,AT)=>{"use strict";var We=on(),vP=Z(),HP=require("path"),qP=b(),U=Ye(),ms=T(),{getBaseSchemaPath:GP}=te(),FP=ds(),fT=Ke().LMDB_ERRORS_ENUM,{compareKeys:cn}=require("ordered-binary"),Or=ms.SEARCH_WILDCARDS;async function VP(e,t,r){let s;e.schema===ms.SYSTEM_SCHEMA_NAME?s=FP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=RT(e,s.hash_attribute,r,t);return TT(e,n,s.hash_attribute,r)}a(VP,"prepSearch");async function TT(e,t,r,s){let n=HP.join(GP(),e.schema.toString()),i=await vP.openEnvironment(n,e.table),o=mT(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($P(e,r)===!1)return s===!0?xP(o):o[1];let _=o[0];return s===!0?We.batchSearchByHashToMap(i,r,e.get_attributes,_):We.batchSearchByHash(i,r,e.get_attributes,_)}a(TT,"executeSearch");function mT(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(mT,"searchByType");function kP(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 cn(i,s[0])>=0&&cn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>cn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>cn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>cn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>cn(n[r],s)<=0;default:return Object.create(null)}}a(kP,"filterByType");function xP(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(xP,"createMapFromArrays");function $P(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($P,"checkToFetchMore");function RT(e,t,r,s){if(qP.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),Or.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Or[0])<0&&n.indexOf(Or[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(Or.indexOf(i)>=0&&Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Or.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Or.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Or[0])||n.includes(Or[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(fT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ms.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ms.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ms.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ms.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ms.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(fT.UNKNOWN_SEARCH_TYPE)}}a(RT,"createSearchTypeFromSearchObject");AT.exports={executeSearch:TT,createSearchTypeFromSearchObject:RT,prepSearch:VP,searchByType:mT,filterByType:kP}});var OT=h((iX,pT)=>{"use strict";var nX=Qt(),YP=hi(),KP=b(),QP=T(),WP=Ro();pT.exports=JP;async function JP(e,t){if(!KP.isEmpty(t)&&QP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YP(e,"value");if(s)throw s;let n=!0;try{return await WP.prepSearch(e,t,n)}catch(i){throw i}}a(JP,"lmdbGetDataByValue")});var _n=h((oX,NT)=>{"use strict";var aX=Qt(),ZP=hi(),XP=b(),zP=T(),jP=Ro();NT.exports=eB;async function eB(e,t){if(!XP.isEmpty(t)&&zP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZP(e,"value");if(s)throw s;let n=!1;try{return await jP.prepSearch(e,t,n)}catch(i){throw i}}a(eB,"lmdbSearchByValue")});var IT=h((_X,gT)=>{"use strict";var cX=Ye(),Ao=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(Ao,"SearchByConditionsObject");var po=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(po,"SearchCondition");var Oo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Oo,"SortAttribute");gT.exports={SearchByConditionsObject:Ao,SearchCondition:po,SortAttribute:Oo}});var yT=h((lX,UT)=>{"use strict";var uX=IT().SearchByConditionsObject,tB=Qt(),rB=hi(),zu=on(),No=Ye(),LT=Ro(),sB=Wu(),bT=require("lodash"),{getBaseSchemaPath:nB}=te(),iB=require("path"),aB=Z(),{handleHDBError:CT,hdb_errors:oB}=D(),{HTTP_STATUS_CODES:cB}=oB,_B=1e8,uB={lazy:!0};UT.exports=lB;async function lB(e){try{let t=rB(e,"conditions");if(t)throw CT(t,t.message,cB.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=iB.join(nB(),e.schema.toString()),s=await aB.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=bT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===No.SEARCH_TYPES.EQUALS?o.estimated_count=zu.count(s,o.search_attribute,o.search_value):c===No.SEARCH_TYPES.CONTAINS||c===No.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=_B}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await wT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(LT.filterByType),u=_.length,l=[],E=zu.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,uB);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(sB.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await wT(s,e,_,n.hash_attribute);c.push(u)}if(o=bT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return zu.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw CT(t)}}a(lB,"lmdbSearchByConditions");async function wT(e,t,r,s){let n=new tB(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===No.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,LT.searchByType(e,n,i,s)}a(wT,"executeConditionSearch")});var Si=h((EX,DT)=>{"use strict";var EB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=EB.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(go,"DeleteObject");DT.exports=go});var ju=h((dX,MT)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Io,"DropAttributeObject");MT.exports=Io});var tl=h((SX,PT)=>{"use strict";var dB=Qt(),hB=Si(),hX=ju(),rr=T(),SB=b(),el=Z(),fB=ds(),TB=_n(),mB=ui(),{getBaseSchemaPath:RB}=te(),AB=require("path");PT.exports=pB;async function pB(e,t=!0){let r;e.schema===rr.SYSTEM_SCHEMA_NAME?r=fB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await NB(e),n=AB.join(RB(),e.schema.toString()),i=await el.openEnvironment(n,e.table);return t===!0&&await OB(e,i,r.hash_attribute),el.dropDBI(i,e.attribute),s}a(pB,"lmdbDropAttribute");async function OB(e,t,r){let s=el.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(OB,"removeAttributeFromAllObjects");async function NB(e){let t=new dB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await TB(t)).filter(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(SB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new hB(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return mB(i)}a(NB,"dropAttributeFromSystem")});var qT=h((fX,HT)=>{"use strict";var gB=tl(),IB=ju(),BT=b(),vT=g(),bB=Ke().LMDB_ERRORS_ENUM;HT.exports=CB;async function CB(e){if(BT.isEmpty(global.hdb_schema[e.schema])||BT.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 IB(e.schema,e.table,r);try{await gB(n,!1)}catch(i){i.message!==bB.DBI_DOES_NOT_EXIST&&vT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw vT.error(`Error dropping attribute ${r}`),s}}a(CB,"lmdbDropAllAttributes")});var rl=h((mX,QT)=>{"use strict";var xT=Qt(),$T=Si(),YT=_n(),KT=ui(),TX=qT(),at=T(),GT=b(),FT=Z(),{getBaseSchemaPath:wB,getTransactionAuditStorePath:LB}=te(),VT=require("path"),kT=g();QT.exports=UB;async function UB(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 yB(e),await DB(e);let t=VT.join(wB(),e.schema.toString());try{await FT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=VT.join(LB(),e.schema.toString());await FT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UB,"lmdbDropTable");async function yB(e){let t=new xT(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 YT(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 $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await KT(n)}a(yB,"deleteAttributesFromSystem");async function DB(e){let t=new xT(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 YT(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 $T(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await KT(n)}catch(i){throw i}}a(DB,"dropTableFromSystem")});var JT=h((AX,WT)=>{"use strict";var MB=require("fs-extra"),PB=Qt(),BB=Ts(),vB=Si(),HB=rl(),qB=ui(),GB=Xu(),FB=_n(),Nr=T(),RX=b(),VB=require("path"),{getBaseSchemaPath:kB}=te(),{handleHDBError:xB,hdb_errors:$B}=D(),{HDB_ERROR_MSGS:YB,HTTP_STATUS_CODES:KB}=$B;WT.exports=QB;async function QB(e){let t;try{t=await WB(e.schema);let r=new PB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await FB(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 vB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qB(n);let i=VB.join(kB(),t.toString());await MB.remove(i)}catch(r){throw r}}a(QB,"lmdbDropSchema");async function WB(e){let t=new BB(Nr.SYSTEM_SCHEMA_NAME,Nr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Nr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await GB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw xB(new Error,YB.SCHEMA_NOT_FOUND(e),KB.NOT_FOUND,void 0,void 0,!0);return s}a(WB,"validateDropSchema")});var sl=h((pX,ZT)=>{"use strict";var bo=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(bo,"CreateTableObject");ZT.exports=bo});var zT=h((NX,XT)=>{"use strict";var JB=require("path"),ZB=require("fs-extra"),Co=Z(),{getTransactionAuditStorePath:XB}=te(),nl=Ye(),OX=sl();XT.exports=zB;async function zB(e){let t;try{let r=JB.join(XB(),e.schema.toString());await ZB.mkdirp(r),t=await Co.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{Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Co.createDBI(t,nl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Co.createDBI(t,nl.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(zB,"createTransactionsAuditEnvironment")});var rm=h((gX,tm)=>{"use strict";var il=T(),jT=Z(),jB=js(),ev=require("path"),{getSystemSchemaPath:tv,getBaseSchemaPath:rv}=te(),sv=ds(),nv=eo(),al=ja(),iv=g(),av=zT(),cl=sv.hdb_table,em=[];for(let e=0;e<cl.attributes.length;e++)em.push(cl.attributes[e].attribute);tm.exports=ov;async function ov(e,t){let r=ev.join(rv(),t.schema.toString()),s=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new al(t.schema,t.table,il.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new al(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jT.createEnvironment(r,t.table),e!==void 0){let o=await jT.openEnvironment(tv(),il.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jB.insertRecords(o,cl.hash_attribute,em,[e]),await ol(s),await ol(n),await ol(i)}await av(t)}catch(o){throw o}}a(ov,"lmdbCreateTable");async function ol(e){try{await nv(e)}catch(t){iv.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ol,"createAttribute")});var nm=h((IX,sm)=>{"use strict";var cv=to(),_v=no(),uv=oo(),un=T(),lv=js().updateRecords,Ev=Z(),dv=require("path"),{getBaseSchemaPath:hv}=te(),Sv=_i(),fv=g();sm.exports=Tv;async function Tv(e){try{let{schema_table:t,attributes:r}=cv(e);_v(e,r,t.hash_attribute),e.schema!==un.SYSTEM_SCHEMA_NAME&&(r.includes(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(un.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await uv(e.hdb_auth_header,t,r),n=dv.join(hv(),e.schema.toString()),i=await Ev.openEnvironment(n,e.table),o=await lv(i,t.hash_attribute,r,e.records,e[un.CLUSTERING_FLAG]!==!0);try{await Sv(e,o)}catch(c){fv.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(Tv,"lmdbUpdateRecords")});var am=h((bX,im)=>{"use strict";var mv=T().OPERATIONS_ENUM,wo=class{constructor(t,r,s,n=void 0){this.operation=mv.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(wo,"UpsertObject");im.exports=wo});var cm=h((wX,om)=>{"use strict";var CX=am(),Rv=to(),Av=no(),pv=oo(),ln=T(),Ov=js().upsertRecords,Nv=Z(),gv=require("path"),{getBaseSchemaPath:Iv}=te(),bv=_i(),Cv=g(),{handleHDBError:wv,hdb_errors:Lv}=D();om.exports=Uv;async function Uv(e){let t;try{t=Rv(e)}catch(_){throw wv(_,_.message,Lv.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Av(e,s,r.hash_attribute),e.schema!==ln.SYSTEM_SCHEMA_NAME&&(s.includes(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(ln.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pv(e.hdb_auth_header,r,s),i=gv.join(Iv(),e.schema.toString()),o=await Nv.openEnvironment(i,e.table),c=await Ov(o,r.hash_attribute,s,e.records,e[ln.CLUSTERING_FLAG]!==!0);try{await bv(e,c)}catch(_){Cv.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(Uv,"lmdbUpsertRecords")});var hm=h((LX,dm)=>{"use strict";var yv=Qt(),_m=b(),um=g(),Dv=_n(),lm=T(),Mv=Ku().deleteRecords,Pv=Z(),Bv=require("path"),{getBaseSchemaPath:vv}=te(),{promisify:Hv}=require("util"),qv=Hv(setTimeout),Em=1e4,Gv=10;dm.exports=Fv;async function Fv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(_m.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 yv(e.schema,e.table,lm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await Dv(n,lm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw um.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return _m.isEmptyOrZeroLength(s)?(um.trace("No records found to delete"),{message:"No records found to delete"}):await Vv(e,s,t)}a(Fv,"lmdbDeleteRecordsBefore");async function Vv(e,t,r){let s=Bv.join(vv(),e.schema.toString()),n=await Pv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=Em){let _=t.slice(o,o+Em),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await Mv(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 qv(Gv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(Vv,"chunkDeletes")});var fm=h((UX,Sm)=>{"use strict";var Lo=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Lo,"DeleteBeforeObject");Sm.exports=Lo});var mm=h((yX,Tm)=>{"use strict";var Uo=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Uo,"DeleteAuditLogsBeforeResults");Tm.exports=Uo});var pm=h((MX,Am)=>{"use strict";var _l=Z(),{getTransactionAuditStorePath:kv}=te(),DX=fm(),xv=require("path"),fi=Ye(),$v=b(),Rm=mm(),Yv=require("util").promisify,Kv=Yv(setTimeout),Qv=1e4,Wv=100;Am.exports=Jv;async function Jv(e){let t=xv.join(kv(),e.schema),r=await _l.openEnvironment(t,e.table,!0),s=_l.listDBIs(r);_l.initializeDBIs(r,fi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Rm;do n=await Zv(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 Kv(Wv);while(n.transactions_deleted>0);return i}a(Jv,"deleteAuditLogsBefore");async function Zv(e,t){let r=new Rm;try{let s=e.dbis[fi.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[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$v.isEmpty(c)||(n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[fi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Qv)break}return await n,r}catch(s){throw s}}a(Zv,"deleteTransactions")});var wm=h((PX,Cm)=>{"use strict";var ul=Z(),En=Ye(),Om=hs(),ll=T(),Nm=b(),{getTransactionAuditStorePath:Xv}=te(),zv=require("path"),jv=on(),yo=rn(),eH=g();Cm.exports=tH;async function tH(e){let t=zv.join(Xv(),e.schema),r=await ul.openEnvironment(t,e.table,!0),s=ul.listDBIs(r);ul.initializeDBIs(r,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gm(r,e.search_values);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,sH(r,e.search_values,n);case ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return rH(r,e.search_values);default:return gm(r)}}a(tH,"readAuditLog");function gm(e,t=[0,Om.getMicroTime()]){Nm.isEmpty(t[0])&&(t[0]=0),Nm.isEmpty(t[1])&&(t[1]=Om.getMicroTime());let r=[];try{let s=e.dbis[En.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 yo,i);r.push(o)}return r}catch(s){throw s}}a(gm,"searchTransactionsByTimestamp");function rH(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[En.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,bm(e,i))}return Object.fromEntries(r)}a(rH,"searchTransactionsByUsername");function sH(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=jv.equals(e,En.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,En.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=bm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);Im(_,"records",r,l,o),Im(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(sH,"searchTransactionsByHashValues");function Im(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 yo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new yo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(Im,"loopRecords");function bm(e,t){let r=[];try{let s=e.dbis[En.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 yo,i);r.push(o)}}catch(i){eH.warn(i)}return r}catch(s){throw s}}a(bm,"batchSearchTransactions")});var Um=h((BX,Lm)=>{"use strict";var nH=require("path"),{getBaseSchemaPath:iH}=te(),aH=Z();Lm.exports={writeTransaction:oH};async function oH(e,t,r){let s=nH.join(iH(),e);return(await aH.openEnvironment(s,t)).transaction(r)}a(oH,"writeTransaction")});var Dm=h((vX,ym)=>{"use strict";var cH=require("path"),{getBaseSchemaPath:_H}=te(),uH=Z();ym.exports={flush:lH};async function lH(e,t){let r=cH.join(_H(),e.toString());return(await uH.openEnvironment(r,t.toString())).flushed}a(lH,"flush")});var Pm=h((HX,Mm)=>{"use strict";var Re=g(),{handleHDBError:EH}=D(),dH=pu(),hH=eo(),SH=xu(),fH=Yf(),TH=ui(),mH=Xu(),RH=hT(),AH=OT(),pH=_n(),OH=yT(),NH=JT(),gH=rm(),IH=nm(),bH=cm(),CH=hm(),wH=pm(),LH=rl(),UH=tl(),yH=wm(),DH=Um(),MH=Dm(),Do=class extends dH{async searchByConditions(t){try{return OH(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await mH(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await RH(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await AH(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await pH(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await fH(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await NH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await gH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await LH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await hH(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await SH(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await IH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await bH(t)}catch(r){throw EH(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await TH(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await CH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await UH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await wH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await yH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return DH.writeTransaction(t,r,s)}flush(t,r){return MH.flush(t,r)}};a(Do,"LMDBBridge");Mm.exports=Do});var gr=h((qX,vm)=>{"use strict";var PH=Pm(),BH=pu(),vH=Y();vH.initSync();var Bm;function HH(){return Bm instanceof BH?Bm:new PH}a(HH,"getBridge");vm.exports=HH()});var Fm=h((GX,Gm)=>{"use strict";var Hm=require("lodash"),Ti=require("mathjs"),qH=require("jsonata"),qm=b();Gm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hm.uniqWith(e,Hm.isEqual):e,searchJSON:GH,mad:mi.bind(null,Ti.mad),mean:mi.bind(null,Ti.mean),mode:mi.bind(null,Ti.mode),prod:mi.bind(null,Ti.prod),median:mi.bind(null,Ti.median)};function mi(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(mi,"aggregateFunction");function GH(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(qm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qm.isEmpty(this.__ala__.res[r])){let s=qH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(GH,"searchJSON")});var km=h((FX,Vm)=>{"use strict";var de=require("moment"),El="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;Vm.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(El),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(El),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(El)}});var Km=h((VX,Ym)=>{"use strict";var FH=require("@turf/area"),VH=require("@turf/length"),kH=require("@turf/circle"),xH=require("@turf/difference"),$H=require("@turf/distance"),YH=require("@turf/boolean-contains"),KH=require("@turf/boolean-equal"),QH=require("@turf/boolean-disjoint"),WH=require("@turf/helpers"),xm=T(),k=b();Ym.exports={geoArea:JH,geoLength:ZH,geoCircle:XH,geoDifference:zH,geoDistance:$m,geoNear:jH,geoContains:eq,geoEqual:tq,geoCrosses:rq,geoConvert:sq};var dl="geo1 is required",hl="geo2 is required";function JH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),FH.default(e)}a(JH,"geoArea");function ZH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),VH.default(e,{units:t||"kilometers"})}a(ZH,"geoLength");function XH(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)),kH.default(e,t,{units:r||"kilometers"})}a(XH,"geoCircle");function zH(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)),xH(e,t)}a(zH,"geoDifference");function $m(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)),$H.default(e,t,{units:r||"kilometers"})}a($m,"geoDistance");function jH(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 $m(e,t,s)<=r}a(jH,"geoNear");function eq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),YH.default(e,t)}a(eq,"geoContains");function tq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),KH.default(e,t)}a(tq,"geoEqual");function rq(e,t){if(k.isEmpty(e))throw new Error(dl);if(k.isEmpty(e))throw new Error(hl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!QH.default(e,t)}a(rq,"geoCrosses");function sq(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(xm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(xm.GEO_CONVERSION_ENUM).join(",")}`);return WH[t](e,r)}a(sq,"geoConvert")});var Mo=h((kX,Qm)=>{var Rs=Fm(),Tt=km(),sr=Km();Qm.exports=e=>{e.aggr.mad=e.aggr.MAD=Rs.mad,e.aggr.mean=e.aggr.MEAN=Rs.mean,e.aggr.mode=e.aggr.MODE=Rs.mode,e.aggr.prod=e.aggr.PROD=Rs.prod,e.aggr.median=e.aggr.MEDIAN=Rs.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Rs.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Rs.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Tt.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Tt.current_time,e.fn.extract=e.fn.EXTRACT=Tt.extract,e.fn.date=e.fn.DATE=Tt.date,e.fn.date_format=e.fn.DATE_FORMAT=Tt.date_format,e.fn.date_add=e.fn.DATE_ADD=Tt.date_add,e.fn.date_sub=e.fn.DATE_SUB=Tt.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Tt.date_diff,e.fn.now=e.fn.NOW=Tt.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Tt.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Tt.get_server_time,e.fn.getdate=e.fn.GETDATE=Tt.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Tt.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=sr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=sr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=sr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=sr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=sr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=sr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=sr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=sr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=sr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=sr.geoNear}});var Zm=h((xX,Jm)=>{"use strict";var Ri=require("lodash"),Me=require("alasql");Me.options.cache=!1;var nq=Mo(),Wm=require("clone"),Po=require("recursive-iterator"),v=g(),q=b(),dn=gr(),iq=T(),{hdb_errors:aq}=D(),oq="IS NULL",Ai="There was a problem performing this search. Please check the logs and try again.";nq(Me);var Bo=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(Ai)}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(Ai)}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(Ai)}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(Ai)}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(Ai)}}_getColumns(){let t=new Po(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(Wm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ri.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 Po(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 Po(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(iq.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&&Ri.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(Wm(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(oq)>-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=Ri.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 dn.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 dn.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,q.autoCast(S)))}))}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 S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await dn.getDataByValue(c,S.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 dn.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(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.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(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let 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 S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=Ri.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.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 Po(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=Ri.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 dn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[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(aq.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 dn.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(Bo,"SQLSearch");Jm.exports=Bo});var mt=h(($X,zm)=>{"use strict";var cq=OS();zm.exports={searchByConditions:Eq,searchByHash:dq,searchByValue:hq,search:Sq};var Sl=gr(),Xm=require("util"),_q=Xm.callbackify(Sl.searchByHash),uq=Xm.callbackify(Sl.searchByValue),lq=Zm();async function Eq(e){return Sl.searchByConditions(e)}a(Eq,"searchByConditions");function dq(e,t){try{_q(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(dq,"searchByHash");function hq(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),uq(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(hq,"searchByValue");function Sq(e,t){try{let r=new cq(e);r.validate(),new lq(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Sq,"search")});var Yr=h((YX,rR)=>{"use strict";var pi=require("crypto"),eR="aes-256-cbc",fq=32,Tq=16,fl=64,tR=32,mq=fl+tR,jm=new Map;rR.exports={encrypt:Rq,decrypt:Aq,createNatsTableStreamName:pq};function Rq(e){let t=pi.randomBytes(fq),r=pi.randomBytes(Tq),s=pi.createCipheriv(eR,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(Rq,"encrypt");function Aq(e){let t=e.substr(0,fl),r=e.substr(fl,tR),s=e.substr(mq,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=pi.createDecipheriv(eR,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Aq,"decrypt");function pq(e,t){let r=`${e}.${t}`,s=jm.get(r);return s||(s=pi.createHash("md5").update(`${e}.${t}`).digest("hex"),jm.set(r,s)),s}a(pq,"createNatsTableStreamName")});var As=h((KX,_R)=>{"use strict";var nR=mt(),Kr=g(),iR=Za(),Oq=require("lodash"),Nq=require("path"),gq=Yr(),Tl=b(),{promisify:aR}=require("util"),j=T(),{handleHDBError:vo,hdb_errors:Iq}=D(),{HDB_ERROR_MSGS:Ho,HTTP_STATUS_CODES:oR}=Iq,bq=Y();bq.initSync();var sR=Z(),Cq=te(),Oi=aR(nR.searchByValue),wq=aR(nR.searchByHash),hn="name",cR="hash_attribute",ml="schema",Lq="schema_table",Uq="attribute";_R.exports={describeAll:yq,describeTable:qo,describeSchema:Mq};async function yq(e){try{let t=Tl.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:hn,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[hn]},i=await Oi(n);if(Tl.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:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},u=await Oi(_),l=[];for(let d of u)try{let S;if(t||s)S=await qo({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;S=await qo({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){Kr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Kr.error("Got an error in describeAll"),Kr.error(t),vo(new Error,Ho.DESCRIBE_ALL_ERR)}}a(yq,"describeAll");async function qo(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=iR.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:hn,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await Oi(c);if(!_||_.length===0)throw vo(new Error,Ho.TABLE_NOT_FOUND(e.schema,e.table),oR.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw vo(new Error,Ho.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:Lq,search_value:r+"."+s,get_attributes:[Uq]},E=await Oi(l);E=Oq.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=Dq(n)),i.attributes=E,i.clustering_stream_name=gq.createNatsTableStreamName(u.schema,u.name);try{let d=Nq.join(Cq.getBaseSchemaPath(),i.schema.toString()),S=await sR.openEnvironment(d,i.name),m=sR.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){Kr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Kr.error(`There was an error getting attributes for table '${u.name}'`),Kr.error(l)}return i}a(qo,"descTable");function Dq(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(Dq,"getAttrsByPerms");async function Mq(e){let t=iR.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:ml,search_value:s,hash_values:[],get_attributes:[cR,j.ID_ATTRIBUTE_STRING,hn,ml]},i=await Oi(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:[hn]},c=await wq(o);if(c&&c.length<1)throw vo(new Error,Ho.SCHEMA_NOT_FOUND(e.schema),oR.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]),Tl.isEmpty(_)||_.describe){let u=await qo({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Kr.error(`Error describing schema table '${e.schema}.${c}'`),Kr.error(_)}})),o}}a(Mq,"describeSchema")});var Qr=h((JX,hR)=>{var QX=require("async"),Sn=ds(),WX=g(),{callbackify:ER,promisify:Pq}=require("util");hR.exports={setSchemaDataToGlobal:uR,getTableSchema:Hq,getSystemSchema:Gq,setSchemaDataToGlobalAsync:Pq(uR)};var dR=As(),Bq=ER(dR.describeAll),vq=ER(dR.describeTable);function uR(e){Bq(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=Sn),global.hdb_schema=r,e(null,null)})}a(uR,"setSchemaDataToGlobal");function lR(e,t){return e==="system"?Sn[t]:global.hdb_schema[e][t]}a(lR,"returnSchema");function Hq(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?qq(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,lR(e,t))}):r(null,lR(e,t))}a(Hq,"getTableSchema");function qq(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=Sn:global.hdb_schema={system:Sn},r();return}vq(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:Sn}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(qq,"setTableDataToGlobal");function Gq(){return Sn}a(Gq,"getSystemSchema")});var yt=h((ZX,TR)=>{"use strict";var Fo=Gu(),Ut=b(),Fq=require("util"),Vo=gr(),Vq=Qr(),Rl=g(),{handleHDBError:Wr,hdb_errors:kq}=D(),{HTTP_STATUS_CODES:ps}=kq,xq=Fq.promisify(Vq.getTableSchema),$q="updated",SR="inserted",fR="upserted";TR.exports={insert:Kq,update:Qq,upsert:Wq,validation:Yq,flush:Jq};async function Yq(e){if(Ut.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ut.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Ut.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await xq(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&&Ut.isEmptyOrZeroLength(c[s]))throw Rl.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(!Ut.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw Rl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ut.isEmpty(c[s])&&c[s]!==""&&n.has(Ut.autoCast(c[s]))&&(c.skip=!0),n.add(Ut.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(Yq,"validation");async function Kq(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.createRecords(e);return Go(SR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(Kq,"insertData");async function Qq(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Ut.isEmpty(s.existing_rows)?Go($q,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Go(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(Qq,"updateData");async function Wq(e){if(e.operation!=="upsert")throw Wr(new Error,"invalid operation, must be upsert",ps.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw Wr(new Error,t.message,ps.BAD_REQUEST);let r=Ut.checkSchemaTableExist(e.schema,e.table);if(r)throw Wr(new Error,r,ps.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return Go(fR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Wr(s,null,null,Rl.ERR,n)}}a(Wq,"upsertData");function Go(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===SR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===fR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Go,"returnObject");function Jq(e){return Vo.flush(e.schema,e.table)}a(Jq,"flush")});var pl=h((XX,AR)=>{var Zq=Ee(),Al=require("joi"),{hdb_schema_table:mR}=Ar(),RR={schema:mR,table:mR},Xq={date:Al.date().iso().required()},zq={timestamp:Al.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};AR.exports=function(e,t){let r=t==="timestamp"?{...RR,...zq}:{...RR,...Xq},s=Al.object(r);return Zq.validateBySchema(e,s)}});var gR=h((zX,NR)=>{var jq=Ee(),pR=require("joi"),{hdb_schema_table:OR}=Ar(),eG=pR.object({schema:OR,table:OR,hash_values:pR.array().required()});NR.exports=function(e){return jq.validateBySchema(e,eG)}});var bR=h((jX,IR)=>{"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");IR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var Ns=h((e3,yR)=>{"use strict";var wR=pl(),tG=gR(),Yo=b(),CR=require("moment"),LR=g(),{promisify:rG,callbackify:sG}=require("util"),Os=T(),nG=Qr(),Ol=rG(nG.getTableSchema),Nl=gr(),{DeleteResponseObject:iG}=bR(),{handleHDBError:Jr,hdb_errors:aG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:Zr}=aG,oG="records successfully deleted",cG=sG(UR);yR.exports={delete:cG,deleteRecord:UR,deleteFilesBefore:_G,deleteAuditLogsBefore:uG};async function _G(e){let t=wR(e,"date");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(!CR(e.date,CR.ISO_8601).isValid())throw Jr(new Error,Ko.INVALID_DATE,Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw Jr(new Error,s,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,s,!0);try{let n=await Nl.deleteRecordsBefore(e);if(await Ol(e.schema,e.table),LR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(_G,"deleteFilesBefore");async function uG(e){let t=wR(e,"timestamp");if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Jr(new Error,Ko.INVALID_VALUE("Timestamp"),Zr.BAD_REQUEST,Os.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{let s=await Nl.deleteAuditLogsBefore(e);return await Ol(e.schema,e.table),LR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(uG,"deleteAuditLogsBefore");async function UR(e){let t=tG(e);if(t)throw Jr(t,t.message,Zr.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw Jr(new Error,r,Zr.NOT_FOUND,Os.LOG_LEVELS.ERROR,r,!0);try{await Ol(e.schema,e.table);let s=await Nl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${oG}`),s}catch(s){if(s.message===Os.SEARCH_NOT_FOUND_MESSAGE){let n=new iG;return n.message=Os.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UR,"deleteRecord")});var Qo=h((t3,PR)=>{var lG=require("crypto"),DR=9;function EG(e){let t=hG(DR),r=MR(e+t);return t+r}a(EG,"createHash");function dG(e,t){let r=e.substr(0,DR),s=r+MR(t+r);return e===s}a(dG,"validateHash");function hG(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(hG,"generateSalt");function MR(e){return lG.createHash("md5").update(e).digest("hex")}a(MR,"md5");PR.exports={hash:EG,validate:dG}});var vR=h((r3,BR)=>{var gl=Ee(),Je={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 SG(e){return Je.password.presence=!0,Je.username.presence=!0,Je.role.presence=!0,Je.active.presence=!0,gl.validateObject(e,Je)}a(SG,"addUserValidation");function fG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(fG,"alterUserValidation");function TG(e){return Je.password.presence=!1,Je.username.presence=!0,Je.role.presence=!1,Je.active.presence=!1,gl.validateObject(e,Je)}a(TG,"dropUserValidation");BR.exports={addUserValidation:SG,alterUserValidation:fG,dropUserValidation:TG}});var he=h((n3,qR)=>{"use strict";var{platform:s3}=require("os"),mG="nats-server.zip",Il="nats-server",RG=process.platform==="win32"?`${Il}.exe`:Il,bl="HDB",AG=/^[^\s.,*>]+$/,HR="__request__",pG=a(e=>`${e}.${HR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},NG={HUB:"hub.pid",LEAF:"leaf.pid"},gG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},IG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:bl,deliver_subject:"__HDB__.WORKQUEUE"},bG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:bl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:bl,deliver_subject:"HDB.USERQUEUE"},wG={SUCCESS:"success",ERROR:"error"},LG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},UG={TXN:"txn",MSGID:"msgid"};qR.exports={NATS_SERVER_ZIP:mG,NATS_SERVER_NAME:Il,NATS_BINARY_NAME:RG,PID_FILES:NG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:gG,WORK_QUEUE_CONSUMER_NAMES:IG,SCHEMA_QUEUE_CONSUMER_NAMES:bG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:AG,REQUEST_SUFFIX:HR,UPDATE_REMOTE_RESPONSE_STATUSES:wG,CLUSTER_STATUS_STATUSES:LG,REQUEST_SUBJECT:pG,SUBJECT_PREFIXES:UG}});var FR=h((i3,GR)=>{"use strict";var Xr=T(),Ni=class{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.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(Ni,"BaseLicense");var Wo=class extends Ni{constructor(t=0,r=Xr.STORAGE_TYPES_ENUM.LMDB,s=Xr.LICENSE_VALUES.API_CALL_DEFAULT,n=Xr.RAM_ALLOCATION_ENUM.DEFAULT,i=Xr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ni,ExtendedLicense:Wo}});var mn=h((a3,KR)=>{"use strict";var Tn=require("fs-extra"),VR=Qo(),kR=require("crypto"),yG=require("moment"),DG=require("uuid").v4,Ze=g(),wl=require("path"),MG=b(),Rt=T(),PG=FR().ExtendedLicense,fn="invalid license key format",BG="061183",vG="mofi25",HG="aes-256-cbc",qG=16,GG=32,xR=Y();xR.initSync();var Cl;KR.exports={validateLicense:$R,generateFingerPrint:VG,licenseSearch:YR,getLicense:$G};function Ll(){return wl.join(xR.getHdbBasePath(),Rt.LICENSE_KEY_DIR_NAME,Rt.LICENSE_FILE_NAME)}a(Ll,"getLicenseDirPath");function FG(){let e=Ll();return wl.join(e,Rt.LICENSE_FILE_NAME)}a(FG,"getLicenseFilePath");function Ul(){let e=Ll();return wl.join(e,Rt.REG_KEY_FILE_NAME)}a(Ul,"getFingerPrintFilePath");async function VG(){let e=Ul();try{return await Tn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await kG();throw Ze.error(`Error writing fingerprint file to ${e}`),Ze.error(t),new Error("There was an error generating the fingerprint")}}a(VG,"generateFingerPrint");async function kG(){let e=DG(),t=VR.hash(e),r=Ul();try{await Tn.mkdirp(Ll()),await Tn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ze.error(`Error writing fingerprint file to ${r}`),Ze.error(s),new Error("There was an error generating the fingerprint")}return t}a(kG,"writeFingerprint");function $R(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Rt.STORAGE_TYPES_ENUM.LMDB,api_call:Rt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Rt.RAM_ALLOCATION_ENUM.DEFAULT,version:Rt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ze.error("empty license key passed to validate."),r;let s=Ul(),n=!1;try{n=Tn.statSync(s)}catch(i){Ze.error(i)}if(n){let i;try{i=Tn.readFileSync(s,"utf8")}catch{Ze.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(vG),c=o[1];c=Buffer.concat([Buffer.from(c)],qG);let _=Buffer.concat([Buffer.from(i)],GG),u=kR.createDecipheriv(HG,_,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 S=xG(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fn),Ze.error(fn),new Error(fn)}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(fn),Ze.error(fn),new Error(fn)}else r.exp_date=l;r.exp_date<yG().valueOf()&&(r.valid_date=!1),VR.validate(o[1],`${BG}${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||Ze.error("Invalid licence"),r}a($R,"validateLicense");function xG(e,t){try{let r=kR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ze.warn("Check old license failed")}}a(xG,"checkOldLicense");function YR(){let e=new PG;e.api_call=0;let t=[];try{t=Tn.readFileSync(FG(),"utf-8").split(Rt.NEW_LINE)}catch(r){r.code==="ENOENT"?Ze.info("no license file found"):Ze.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(MG.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$R(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){Ze.error("There was an error parsing the license string."),Ze.error(n),e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Rt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Rt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Rt.LICENSE_VALUES.API_CALL_DEFAULT),Cl=e,e}a(YR,"licenseSearch");async function $G(){return Cl||await YR(),Cl}a($G,"getLicense")});var Ir=h((o3,aA)=>{"use strict";var ZR="username is required",XR="nothing to update, must supply active, role or password to update",zR="password cannot be an empty string",jR="If role is specified, it cannot be empty.",eA="active must be true or false";aA.exports={addUser:zG,alterUser:jG,dropUser:tF,userInfo:rF,listUsers:Zo,listUsersExternal:sF,setUsersToGlobal:gi,findAndValidateUser:aF,getClusterUser:oF,USERNAME_REQUIRED:ZR,ALTERUSER_NOTHING_TO_UPDATE:XR,EMPTY_PASSWORD:zR,EMPTY_ROLE:jR,ACTIVE_BOOLEAN:eA};var tA=yt(),YG=Ns(),Dl=Qo(),rA=vR(),sA=mt(),Ml=tn(),be=b(),nA=require("validate.js"),H=g(),{promisify:Pl}=require("util"),Bl=Yr(),gs=T(),QR=he(),KG=mr(),vl=Y(),QG=mn(),WG=ds(),{handleHDBError:nr,hdb_errors:JG}=D(),{HTTP_STATUS_CODES:ir,AUTHENTICATION_ERROR_MSGS:yl,HDB_ERROR_MSGS:Rn}=JG,{UserEventMsg:Hl}=kr(),WR=require("lodash"),iA={username:!0,active:!0,role:!0,password:!0},JR=new Map,Jo=Pl(sA.searchByValue),ZG=Pl(sA.searchByHash),XG=Pl(YG.delete);async function zG(e){let t=nA.cleanAttributes(e,iA),r=rA.addUserValidation(t);if(r)throw nr(new Error,r.message,ir.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 nr(new Error,Rn.ROLE_NAME_NOT_FOUND(t.role),ir.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nr(new Error,Rn.DUP_ROLES_FOUND(t.role),ir.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await gi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw nr(new Error,Rn.USER_ALREADY_EXISTS(t.username),ir.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,be.sendTransactionToSocketCluster(gs.INTERNAL_SC_CHANNELS.ADD_USER,_,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${c.username} successfully added`}a(zG,"addUser");async function jG(e){let t=nA.cleanAttributes(e,iA);if(be.isEmptyOrZeroLength(t.username))throw new Error(ZR);if(be.isEmptyOrZeroLength(t.password)&&be.isEmptyOrZeroLength(t.role)&&be.isEmptyOrZeroLength(t.active))throw new Error(XR);if(!be.isEmpty(t.password)&&be.isEmptyOrZeroLength(t.password.trim()))throw new Error(zR);if(!be.isEmpty(t.active)&&!be.isBoolean(t.active))throw new Error(eA);let r=eF(t.username);if(!be.isEmpty(t.password)&&!be.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Bl.encrypt(t.password)),t.password=Dl.hash(t.password)),t.role==="")throw new Error(jR);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 _=Rn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),nr(new Error,_,ir.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=Rn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),nr(new Error,_,ir.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 tA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await gi()}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(gs.INTERNAL_SC_CHANNELS.ALTER_USER,i,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),n}a(jG,"alterUser");function eF(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(eF,"isClusterUser");async function tF(e){try{let t=rA.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 nr(new Error,Rn.USER_NOT_EXIST(e.username),ir.NOT_FOUND,void 0,void 0,!0);let s;try{s=await XG(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await gi()}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(gs.INTERNAL_SC_CHANNELS.DROP_USER,n,vl.get(gs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),Ml.signalUserChange(new Hl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(tF,"dropUser");async function rF(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 ZG(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(rF,"userInfo");async function sF(){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(sF,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=WR.cloneDeep(await Jo(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=WR.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],nF(c.role),i.set(c.username,c)}return(await QG.getLicense()).enterprise?i:iF(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),be.errorizeMessage(e)}return null}a(Zo,"listUsers");function nF(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(WG)){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(nF,"appendSystemTablesToRole");function iF(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(iF,"nonEnterpriseFilter");async function gi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(gi,"setUsersToGlobal");async function aF(e,t,r=!0){global.hdb_users||await gi();let s=global.hdb_users.get(e);if(!s)throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nr(new Error,yl.USER_INACTIVE,ir.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(JR.get(t)===s.password)return n;if(Dl.validate(s.password,t))JR.set(t,s.password);else throw nr(new Error,yl.GENERIC_AUTH_FAIL,ir.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aF,"findAndValidateUser");async function oF(){let e=await Zo(),t=KG.getConfigFromFile(gs.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+QR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QR.SERVER_SUFFIX.ADMIN,r}a(oF,"getClusterUser")});var _A=h((c3,cA)=>{"use strict";var ql=Z(),cF=g(),oA=Ke().LMDB_ERRORS_ENUM;cA.exports=_F;async function _F(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await ql.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==oA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await ql.closeEnvironment(global.lmdb_map[s]),await ql.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==oA.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){cF.error(t)}}a(_F,"cleanLMDBMap")});var hA=h((_3,dA)=>{"use strict";var Is=g(),Xo=T(),uF=_A(),uA=Qr(),lF=As(),EF=Ir(),{validateEvent:EA}=kr(),dF={[Xo.IPC_EVENT_TYPES.SCHEMA]:hF,[Xo.IPC_EVENT_TYPES.USER]:fF};async function hF(e){let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC schemaHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received schema event:`,e),await uF(e.message),await SF(e.message)}a(hF,"schemaHandler");async function SF(e){try{if(global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await lF.describeTable({schema:e.schema,table:e.table});break;default:uA.setSchemaDataToGlobal(lA);break}else uA.setSchemaDataToGlobal(lA)}catch(t){Is.error(t)}}a(SF,"syncSchemaMetadata");function lA(e){e&&Is.error(e)}a(lA,"handleErrorCallback");async function fF(e){try{let t=EA(e);if(t){Is.error(t);return}Is.trace(`IPC userHandler ${Xo.HDB_IPC_CLIENT_PREFIX}${process.pid} received user event:`,e),await EF.setUsersToGlobal()}catch(t){Is.error(t)}}a(fF,"userHandler");dA.exports=dF});var mA=h((u3,TA)=>{"use strict";var TF=require("node-ipc").IPC,SA=b(),fA=T(),br=g(),{IPC_ERRORS:An}=Ke(),mF=require("os"),zo=class{constructor(t,r){this.ipc=new TF,this.server_name=fA.HDB_IPC_SERVER,this.ipc.config.retry=mF.platform()=="win32"?6e5:100,this.ipc.config.id=fA.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(An.INVALID_IPC_DATA_TYPE),new Error(An.INVALID_IPC_DATA_TYPE);if(SA.isEmpty(t.type))throw br.warn(An.MISSING_TYPE),new Error(An.MISSING_TYPE);if(SA.isEmpty(t.message))throw br.warn(An.MISSING_MSG),new Error(An.MISSING_MSG);br.trace(`IPC client ${this.ipc.config.id} emitting`,t),this.ipc.of[this.server_name].emit("message",t)}};a(zo,"IPCClient");TA.exports=zo});var AA=h((l3,RA)=>{var RF=Ee(),AF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};RA.exports=function(e){return RF.validateObject(e,AF)}});var Gl=h((E3,pA)=>{"use strict";var pF=T().OPERATIONS_ENUM,jo=class{constructor(t,r,s,n=void 0){this.operation=pF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(jo,"UpdateObject");pA.exports=jo});var NA=h((d3,OA)=>{"use strict";var OF={OPERATION:"operation",REFRESH:"refresh"},ec=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(ec,"JWTTokens");var tc=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(tc,"JWTRSAKeys");OA.exports={JWTTokens:ec,TOKEN_TYPE_ENUM:OF,JWTRSAKeys:tc}});var ic=h((h3,CA)=>{"use strict";var bi=require("jsonwebtoken"),Fl=require("fs-extra"),Vl=b(),Dt=T(),{handleHDBError:ot,hdb_errors:NF}=D(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:_t}=NF,Ii=g(),gA=Qo(),$l=Ir(),gF=yt().update,IF=Gl(),bF=tn(),{UserEventMsg:CF}=kr(),zr=Y();zr.initSync();var kl=require("path"),{JWTTokens:wF,JWTRSAKeys:LF,TOKEN_TYPE_ENUM:rc}=NA(),UF=zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",yF=zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?zr.get(Dt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sc="RS256",xl;CA.exports={createTokens:DF,validateOperationToken:PF,refreshOperationToken:MF,validateRefreshToken:bA};async function DF(e){if(Vl.isEmpty(e)||typeof e!="object")throw ot(new Error,_t.INVALID_AUTH_OBJECT,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.username))throw ot(new Error,_t.USERNAME_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);if(Vl.isEmpty(e.password))throw ot(new Error,_t.PASSWORD_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await $l.findAndValidateUser(e.username,e.password),!t)throw ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw Ii.error(d),ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}let r=await nc(),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 IA(i,r.private_key,r.passphrase),c=await bi.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:yF,algorithm:sc,subject:rc.REFRESH}),_=gA.hash(c),u=new IF(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await gF(u)}catch(d){Ii.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 bF.signalUserChange(new CF(process.pid)),new wF(o,c)}a(DF,"createTokens");async function IA(e,t,r){return await bi.sign(e,{key:t,passphrase:r},{expiresIn:UF,algorithm:sc,subject:rc.OPERATION})}a(IA,"signOperationToken");async function nc(){if(xl===void 0)try{let e=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=kl.join(zr.getHdbBasePath(),Dt.LICENSE_KEY_DIR_NAME,Dt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Fl.readFile(e)).toString(),n=(await Fl.readFile(t)).toString(),i=(await Fl.readFile(r)).toString();xl=new LF(i,n,s)}catch(e){throw Ii.error(e),ot(new Error,_t.NO_ENCRYPTION_KEYS,ct.INTERNAL_SERVER_ERROR)}return xl}a(nc,"getJWTRSAKeys");async function MF(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 bA(e.refresh_token);let t=await nc(),r=await bi.decode(e.refresh_token);return{operation_token:await IA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(MF,"refreshOperationToken");async function PF(e){try{let t=await nc(),r=await bi.verify(e,t.public_key,{algorithms:sc,subject:rc.OPERATION});return await $l.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Ii.warn(t),t.name&&t.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}}a(PF,"validateOperationToken");async function bA(e){let t;try{let r=await nc(),s=await bi.verify(e,r.public_key,{algorithms:sc,subject:rc.REFRESH});t=await $l.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Ii.warn(r),r.name&&r.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}if(!gA.validate(t.refresh_token,e))throw ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED);return t}a(bA,"validateRefreshToken")});var Yl=h((f3,UA)=>{"use strict";var BF=AA(),pn=require("passport"),vF=require("passport-local").Strategy,HF=require("passport-http").BasicStrategy,qF=require("util"),GF=Ir(),LA=qF.callbackify(GF.findAndValidateUser),S3=Ke(),FF=T(),wA=ic();pn.use(new vF(function(e,t,r){LA(e,t,r)}));pn.use(new HF(function(e,t,r){LA(e,t,r)}));pn.serializeUser(function(e,t){t(null,e)});pn.deserializeUser(function(e,t){t(null,e)});function VF(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":pn.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===FF.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?wA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):wA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:pn.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(VF,"authorize");function kF(e,t){let r=BF(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(kF,"checkPermissions");UA.exports={authorize:VF,checkPermissions:kF}});var ac=h((T3,yA)=>{"use strict";var xF=gr();yA.exports={writeTransaction:$F};function $F(e,t,r){return xF.writeTransaction(e,t,r)}a($F,"writeTransaction")});var At=h((w3,XA)=>{"use strict";var ar=Y();ar.initSync();var YF=require("fs-extra"),KF=require("semver"),yi=require("path"),{monotonicFactory:QF}=require("ulidx"),WF=QF(),MA=require("util"),PA=require("child_process"),JF=MA.promisify(PA.exec),ZF=PA.spawn,ee=he(),se=T(),Xl=b(),Cr=g(),oc=Yr(),XF=ac(),Ci=mr(),{encode:Wl,decode:BA}=require("msgpackr"),{isEmpty:bs}=Xl,vA=Ir(),m3=Ts(),zF=mt(),R3=MA.promisify(zF.searchByHash),{connect:jF,StorageType:HA,RetentionPolicy:qA,AckPolicy:GA,DeliverPolicy:Jl,NatsConnection:A3,JetStreamManager:p3,JetStreamClient:O3,StringCodec:N3,JSONCodec:e0,createInbox:zl,StreamSource:g3,headers:t0,toJsMsg:r0,nuid:I3,JetStreamOptions:b3,ErrorCode:DA,nanos:C3}=require("nats"),{PACKAGE_ROOT:s0}=T(),n0=Ua(),FA=e0(),i0="clustering",a0=n0.engines[ee.NATS_SERVER_NAME],o0=yi.join(s0,"dependencies"),Zl=yi.join(o0,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Kl,Ql,wi,Li,Ui,Wt;XA.exports={runCommand:VA,checkNATSServerInstalled:c0,createConnection:jl,getConnection:cc,getJetStreamManager:On,getJetStream:kA,getNATSReferences:Mt,getServerList:u0,createLocalStream:eE,listStreams:xA,deleteLocalStream:l0,getServerConfig:Di,listRemoteStreams:E0,viewStream:d0,publishToStream:h0,createWorkQueueStream:S0,addSourceToWorkStream:$A,request:f0,removeSourceFromWorkStream:KA,reloadNATS:tE,reloadNATSHub:T0,reloadNATSLeaf:m0,extractServerName:YA,requestErrorHandler:R0,updateWorkStream:A0,createLocalTableStream:WA,createTableStreams:p0,purgeTableStream:JA,purgeSchemaTableStreams:O0,getStreamInfo:N0,updateNodeNameLocalStreams:g0,closeConnection:_0};async function VA(e,t=void 0){let{stdout:r,stderr:s}=await JF(e,{cwd:t});if(s)throw new Error(s.replace(`
6
6
  `,""));return r.replace(`
7
7
  `,"")}a(VA,"runCommand");async function c0(){try{await YF.access(Zl)}catch{return!1}let e=await VA(`${Zl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return KF.eq(t,a0)}a(c0,"checkNATSServerInstalled");async function jl(e,t,r,s=!0,n="127.0.0.1"){return jF({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:ar.get(se.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(jl,"createConnection");async function _0(){Wt&&(await Wt.close(),Wt=void 0)}a(_0,"closeConnection");async function cc(){if(!Wt){let e=await vA.getClusterUser();if(bs(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=ar.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Wt=await jl(t,e.username,e.decrypt_hash)}return Wt}a(cc,"getConnection");async function On(){if(Li)return Li;bs(Wt)&&await cc();let{domain:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Li=await Wt.jetstreamManager({domain:e}),Li}a(On,"getJetStreamManager");async function kA(){if(Ui)return Ui;bs(Wt)&&await cc();let{domain:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bs(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ui=Wt.jetstream({domain:e}),Ui}a(kA,"getJetStream");async function Mt(){let e=Wt||await cc(),t=Li||await On(),r=Ui||await kA();return{connection:e,jsm:t,js:r}}a(Mt,"getNATSReferences");async function u0(){let e=ar.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await vA.getClusterUser(),s=await jl(e,t,r),n=zl(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(FA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Xl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(u0,"getServerList");async function eE(e,t){let{jsm:r}=await Mt();await r.streams.add({name:e,storage:HA.File,retention:qA.Limits,subjects:t})}a(eE,"createLocalStream");async function xA(){let{jsm:e}=await Mt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(xA,"listStreams");async function l0(e){let{jsm:t}=await Mt();await t.streams.delete(e)}a(l0,"deleteLocalStream");async function E0(e){let{connection:t}=await Mt(),r=[],s=zl(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(FA.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(E0,"listRemoteStreams");async function d0(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Mt(),i=WF(),o=[],c={ack_policy:GA.None,durable_name:i,deliver_subject:i,deliver_policy:Jl.All};t&&(c.deliver_policy=Jl.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=r0(l),d=BA(E.data),S={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(","),S.originators=m)}o.push(S),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(d0,"viewStream");async function h0(e,t,r=[],s=[]){Cr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Mt(),o=await _c(),c=`${e}.${o}`,_=t0();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{Cr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Wl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")Cr.trace(`publishToStream creating stream: ${t}`),await eE(t,[c]),await i.publish(c,Wl(r[u]),{headers:_});else throw E}}a(h0,"publishToStream");function Di(e){e=e.toLowerCase();let t=yi.join(ar.get(se.CONFIG_PARAMS.ROOTPATH),i0);if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bs(Ql)&&(Ql={port:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yi.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),Ql;if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bs(Kl)&&(Kl={port:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ci.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:yi.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Kl;Cr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Di,"getServerConfig");async function S0(e){let{jsm:t}=await Mt(),r=await _c();try{await t.streams.add({name:e.stream_name,storage:HA.File,retention:qA.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:GA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Jl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(S0,"createWorkQueueStream");async function $A(e,t,r){let{jsm:s}=await Mt(),n=await s.streams.info(t),i=YA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=oc.createNatsTableStreamName(c,_),l=i===e,E,d,S=!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`){S=!0;break}if(S===!0){if(E.opt_start_time===o)return;await QA(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($A,"addSourceToWorkStream");function YA(e){return e.split(".")[1]}a(YA,"extractServerName");async function KA(e,t,r){let{schema:s,table:n}=r,i=oc.createNatsTableStreamName(s,n),{jsm:o}=await Mt(),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 QA(s,n,u,t)}a(KA,"removeSourceFromWorkStream");async function QA(e,t,r,s){let n=await On(),i;try{i=ZA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{Cr.error("Error purging source subject",i,"from work stream",s)}}a(QA,"purgeSourceFromWorkStream");async function f0(e,t,r=2e3,s=zl()){if(!Xl.isObject(t))throw new Error("data param must be an object");let n=Wl(t),{connection:i}=await Mt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return BA(c.data)}a(f0,"request");function tE(e){return new Promise(async(t,r)=>{let s=ZF(Zl,["--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(tE,"reloadNATS");async function T0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await tE(e)}a(T0,"reloadNATSHub");async function m0(){let{pid_file_path:e}=Di(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await tE(e)}a(m0,"reloadNATSLeaf");function R0(e,t,r){let s;switch(e.code){case DA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case DA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(R0,"requestErrorHandler");async function A0(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await XF.writeTransaction(se.SYSTEM_SCHEMA_NAME,se.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await $A(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await KA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(A0,"updateWorkStream");async function WA(e,t){let r=oc.createNatsTableStreamName(e,t),s=await _c(),n=ZA(e,t,s);await eE(r,[n])}a(WA,"createLocalTableStream");async function p0(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await WA(s,n)}}a(p0,"createTableStreams");async function JA(e,t){if(ar.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=oc.createNatsTableStreamName(e,t),{jsm:s}=await Mt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Cr.warn(r);else throw r}}a(JA,"purgeTableStream");async function O0(e,t){if(ar.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await JA(e,t[r])}a(O0,"purgeSchemaTableStreams");async function N0(e){return(await On()).streams.info(e)}a(N0,"getStreamInfo");function ZA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(ZA,"createSubjectName");async function _c(){if(wi)return wi;if(wi=(await On())?.nc?.info?.server_name,wi===void 0)throw new Error("Unable to get jetstream manager server name");return wi}a(_c,"getJsmServerName");async function g0(){let e=await On(),t=await _c(),r=await xA();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}`;Cr.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}`;Cr.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(".");Cr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(g0,"updateNodeNameLocalStreams")});var rE=h((L3,zA)=>{"use strict";var uc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(uc,"ClusteringOriginObject");zA.exports=uc});var In=h((U3,tp)=>{"use strict";var jA=b(),Pi=Y(),_e=T(),sE=he(),Nn=At(),Se=g(),ep=rE(),I0=Yr();Pi.initSync();var gn=sE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Mi=sE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;tp.exports={sendAttributeTransaction:Ec,postOperationHandler:C0};async function Ec(e,t,r=[]){if(!!Pi.get(_e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!jA.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==_e.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Pi.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new ep(e.txn_time,s,n)};Se.trace(`sendAttributeTransaction publishing ${gn}`,o),await Nn.publishToStream(Mi,gn,[o],r)}}}a(Ec,"sendAttributeTransaction");async function lc(e,t,r,s=[]){if(e.schema===_e.SYSTEM_SCHEMA_NAME)return;let n=b0(e,t,r);n&&(Se.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await Nn.publishToStream(`${sE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,I0.createNatsTableStreamName(e.schema,e.table),[n],s))}a(lc,"sendOperationTransaction");function b0(e,t,r){if(jA.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===_e.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(b0,"convertCRUDOperationToTransaction");async function C0(e,t,r=[]){if(!Pi.get(_e.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=Pi.get(_e.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new ep(t.txn_time,s,n);switch(e.operation){case _e.OPERATIONS_ENUM.INSERT:try{await lc(e,t.inserted_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for insert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.DELETE:try{await lc(e,t.deleted_hashes,i,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for delete."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPDATE:try{await lc(e,t.update_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for update."),Se.error(o)}break;case _e.OPERATIONS_ENUM.UPSERT:try{await lc(e,t.upserted_hashes,i,r),await Ec(t,e,r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for upsert."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_schema."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_table."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:_e.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await Nn.publishToStream(Mi,gn,[o],r)}catch(o){Se.error("There was an error calling clustering postOperationHandler for create_attribute."),Se.error(o)}break;case _e.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:_e.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await Nn.publishToStream(Mi,gn,[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(C0,"postOperationHandler")});var ap=h((y3,ip)=>{"use strict";var w0=mt(),L0=Qr(),rp=g(),sp=yt(),U0=ac(),y0=require("clone"),iE=require("alasql"),D0=Mo(),np=require("util"),M0=np.promisify(L0.getTableSchema),P0=np.promisify(w0.search),B0=T(),nE=b(),v0=In();D0(iE);ip.exports={update:q0};var H0="There was a problem performing this update. Please check the logs and try again.";async function q0({statement:e,hdb_user:t}){let r=await M0(e.table.databaseid,e.table.tableid),s=G0(e.columns);nE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=y0(n),c=nE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=iE.parse(_).statements[0],l=await U0.writeTransaction(r.schema,r.name,async()=>{let E=await P0(u),d=F0(s,E);return V0(o,d,t)});return await sp.flush({schema:r.schema,table:r.name}),l}a(q0,"update");function G0(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=iE.compile(`SELECT ${r.expression.toString()} AS [${B0.FUNC_VAL}] FROM ?`)}),t}catch(t){throw rp.error(t),new Error(H0)}}a(G0,"createUpdateRecord");function F0(e,t){return nE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(F0,"buildUpdateRecords");async function V0(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await sp.update(s);await v0.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){rp.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(V0,"updateRecords")});var cp=h((D3,op)=>{var k0=require("alasql"),x0=mt(),$0=g(),Y0=gr(),oE=require("util"),aE=b(),K0=T(),Q0=Qr(),W0=ac(),J0=In(),Z0=yt(),X0="record",z0="successfully deleted",j0=oE.callbackify(sV),eV=oE.promisify(x0.search),tV=oE.promisify(Q0.getTableSchema);op.exports={convertDelete:j0};function rV(e){return`${e.deleted_hashes.length} ${X0}${e.deleted_hashes.length===1?"":"s"} ${z0}`}a(rV,"generateReturnMessage");async function sV({statement:e,hdb_user:t}){let r=await tV(e.table.databaseid,e.table.tableid);aE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=aE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=k0.parse(o).statements[0],_={operation:K0.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await W0.writeTransaction(r.schema,r.name,async()=>(_.records=await eV(c),Y0.deleteRecords(_)));return await Z0.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await J0.postOperationHandler(_,u),aE.isEmptyOrZeroLength(u.message)&&(u.message=rV(u)),delete u.txn_time,u}catch(u){throw $0.error(u),u.hdb_code?u.message:u}}a(sV,"convertDelete")});var lp=h((M3,up)=>{"use strict";var _E=As(),{hdb_errors:cE}=D();up.exports={checkSchemaExists:_p,checkSchemaTableExists:nV,schema_describe:_E};async function _p(e){if(!global.hdb_schema[e])try{let t=await _E.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return cE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(_p,"checkSchemaExists");async function nV(e,t){let r=await _p(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await _E.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return cE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(nV,"checkSchemaTableExists")});var dc=h((B3,fp)=>{"use strict";var bn=Za(),Cs=lp(),Ep=g(),iV=require("uuid").v4,P3=require("clone"),wn=tn(),ws=T(),aV=require("util"),Ls=gr(),{handleHDBError:Pe,hdb_errors:oV}=D(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:Be}=oV,{SchemaEventMsg:Ln}=kr(),dp=At();fp.exports={createSchema:cV,createSchemaStructure:hp,createTable:_V,createTableStructure:Sp,createAttribute:hV,dropSchema:uV,dropTable:lV,dropAttribute:EV};async function cV(e){try{let t=await hp(e);return wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(cV,"createSchema");async function hp(e){let t=bn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);if(!await Cs.checkSchemaExists(e.schema))throw Pe(new Error,Cn.SCHEMA_EXISTS_ERR(e.schema),Be.BAD_REQUEST,ws.LOG_LEVELS.ERROR,Cn.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Ls.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(hp,"createSchemaStructure");async function _V(e){try{let t=await Sp(e);return wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(_V,"createTable");async function Sp(e){let t=bn.create_table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);bn.validateTableResidence(e.residence);let r=await Cs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(!await Cs.checkSchemaTableExists(e.schema,e.table))throw Pe(new Error,Cn.TABLE_EXISTS_ERR(e.schema,e.table),Be.BAD_REQUEST,ws.LOG_LEVELS.ERROR,Cn.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:iV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ls.createTable(n,e);else throw Pe(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Be.BAD_REQUEST);else await Ls.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a(Sp,"createTableStructure");async function uV(e){let t=bn.schema_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaExists(e.schema);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);let s=await Cs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Ls.dropSchema(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await dp.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(uV,"dropSchema");async function lV(e){let t=bn.table_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);return await Ls.dropTable(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table)),await dp.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(lV,"dropTable");async function EV(e){let t=bn.attribute_object(e);if(t)throw Pe(t,t.message,Be.BAD_REQUEST,void 0,void 0,!0);let r=await Cs.checkSchemaTableExists(e.schema,e.table);if(r)throw Pe(new Error,r,Be.NOT_FOUND,ws.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Pe(new Error,"You cannot drop a hash attribute",Be.BAD_REQUEST,void 0,void 0,!0);if(ws.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Pe(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Be.BAD_REQUEST,void 0,void 0,!0);try{return await Ls.dropAttribute(e),dV(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Ep.error(`Got an error deleting attribute ${aV.inspect(e)}.`),s}}a(EV,"dropAttribute");function dV(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(dV,"dropAttributeFromGlobal");async function hV(e){if(!global.hdb_schema[e.schema])throw Pe(new Error,Cn.SCHEMA_NOT_FOUND(e.schema),Be.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw Pe(new Error,Cn.TABLE_NOT_FOUND(e.schema,e.table),Be.NOT_FOUND,void 0,void 0,!0);try{return await Ls.createAttribute(e),wn.signalSchemaChange(new Ln(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw Ep.error(t),t}}a(hV,"createAttribute")});var mp=h((v3,Tp)=>{"use strict";var{OPERATIONS_ENUM:SV}=T(),hc=class{constructor(t,r,s=void 0,n=void 0){this.operation=SV.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(hc,"ReadAuditLogObject");Tp.exports=hc});var uE=h((q3,Np)=>{"use strict";var fV=gr(),H3=mp(),Sc=b(),fc=T(),TV=Y(),{handleHDBError:Rp,hdb_errors:mV}=D(),{HDB_ERROR_MSGS:Ap,HTTP_STATUS_CODES:pp}=mV,RV=Object.values(fc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),Op="To use this operation audit log must be enabled in harperdb-config.yaml";Np.exports=AV;async function AV(e){if(Sc.isEmpty(e.schema))throw new Error(Ap.SCHEMA_REQUIRED_ERR);if(Sc.isEmpty(e.table))throw new Error(Ap.TABLE_REQUIRED_ERR);if(!TV.get(fc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw Rp(new Error,Op,pp.BAD_REQUEST,fc.LOG_LEVELS.ERROR,Op,!0);let t=Sc.checkSchemaTableExist(e.schema,e.table);if(t)throw Rp(new Error,t,pp.NOT_FOUND,fc.LOG_LEVELS.ERROR,t,!0);if(!Sc.isEmpty(e.search_type)&&RV.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await fV.readAuditLog(e)}a(AV,"readAuditLog")});var Lp=h((G3,wp)=>{var jr=require("validate.js"),Ip=Ee(),Un=T(),{handleHDBError:pV,hdb_errors:OV}=D(),{HDB_ERROR_MSGS:ue,HTTP_STATUS_CODES:NV}=OV,lE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),gV={STRUCTURE_USER:"structure_user"},gp=Object.values(Un.ROLE_TYPES_ENUM),IV="attribute_permissions",bV="attribute_name",{PERMS_CRUD_ENUM:yn}=Un,CV=[IV,...Object.values(yn)],bp=[yn.READ,yn.INSERT,yn.UPDATE],wV=[bV,...bp];function LV(e){let t=lE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Cp(e,t)}a(LV,"addRoleValidation");function UV(e){let t=lE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Cp(e,t)}a(UV,"alterRoleValidation");function yV(e){let t=lE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Ip.validateObject(e,t)}a(yV,"dropRoleValidation");var DV=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Cp(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)DV.includes(s[o])||n.push(s[o]);n.length>0&&fe(ue.INVALID_ROLE_JSON_KEYS(n),r);let i=Ip.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=MV(e);o&&fe(o,r),gp.forEach(c=>{e.permission[c]&&!jr.isBoolean(e.permission[c])&&fe(ue.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(gp.indexOf(o)<0){if(o===gV.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(ue.SCHEMA_NOT_FOUND(E),r)}continue}fe(ue.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(ue.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(ue.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{CV.includes(l)||fe(ue.INVALID_PERM_KEY(l),r,o,_)}),Object.values(yn).forEach(l=>{jr.isDefined(u[l])?jr.isBoolean(u[l])||fe(ue.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(ue.TABLE_PERM_MISSING(l),r,o,_)}),jr.isDefined(u.attribute_permissions)){if(!jr.isArray(u.attribute_permissions)){fe(ue.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(ue.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 S=u.attribute_permissions[d];if(Object.keys(S).forEach(R=>{!wV.includes(R)&&R!==yn.DELETE&&fe(ue.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!jr.isDefined(S.attribute_name)){fe(ue.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){fe(ue.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}bp.forEach(R=>{jr.isDefined(S[R])?jr.isBoolean(S[R])||fe(ue.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(ue.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.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(ue.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return PV(r)}a(Cp,"customValidate");wp.exports={addRoleValidation:LV,alterRoleValidation:UV,dropRoleValidation:yV};function MV(e){let{operation:t,permission:r}=e;if(t===Un.OPERATIONS_ENUM.ADD_ROLE||t===Un.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 ue.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Un.ROLE_TYPES_ENUM.SUPER_USER:Un.ROLE_TYPES_ENUM.CLUSTER_USER;return ue.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(MV,"validateNoSUPerms");function PV(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ue.ROLE_PERMS_ERROR,...e};return pV(new Error,s,NV.BAD_REQUEST)}else return null}a(PV,"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 RE=h((F3,Bp)=>{"use strict";var Up=yt(),yp=mt(),BV=Ns(),hE=Lp(),SE=tn(),vV=require("uuid").v4,fE=require("util"),HV=mn(),wr=T(),Dp=b(),TE=fE.promisify(yp.searchByValue),qV=fE.promisify(yp.searchByHash),GV=fE.promisify(BV.delete),FV=Qt(),VV=Ts(),{hdb_errors:kV,handleHDBError:Bi}=D(),{HDB_ERROR_MSGS:Mp,HTTP_STATUS_CODES:EE}=kV,{UserEventMsg:mE}=kr();Bp.exports={addRole:xV,alterRole:YV,dropRole:KV,listRoles:Pp};function dE(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(dE,"scrubRoleDetails");async function xV(e){let t=hE.addRoleValidation(e);if(t)throw t;if(!(await HV.getLicense()).enterprise){let o=await Pp();if($V(e,o))throw new Error(`Your current license only supports ${wr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${wr.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${wr.BASIC_LICENSE_MAX_NON_CU_ROLES+wr.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${wr.SUPPORT_HELP_MSG}`)}e=dE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await TE(s)}catch(o){throw Bi(o)}if(n&&n.length>0)throw Bi(new Error,Mp.ROLE_ALREADY_EXISTS(e.role),EE.CONFLICT,void 0,void 0,!0);e.id||(e.id=vV());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Up.insert(i),SE.signalUserChange(new mE(process.pid)),e=dE(e),e}a(xV,"addRole");function $V(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(!Dp.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a($V,"checkClusterUserRole");async function YV(e){let t=hE.alterRoleValidation(e);if(t)throw t;e=dE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await Up.update(r)}catch(s){throw Bi(s)}return SE.signalUserChange(new mE(process.pid)),e}a(YV,"alterRole");async function KV(e){let t=hE.dropRoleValidation(e);if(t)throw Bi(new Error,t,EE.BAD_REQUEST,void 0,void 0,!0);let r=new VV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await qV(r);if(s.length===0)throw Bi(new Error,Mp.ROLE_NOT_FOUND,EE.NOT_FOUND,void 0,void 0,!0);let n=new FV(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await TE(n),o=!1;if(Dp.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 GV(c),SE.signalUserChange(new mE(process.pid)),`${s[0].role} successfully deleted`}a(KV,"dropRole");async function Pp(){return TE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Pp,"listRoles")});var Gp=h((V3,qp)=>{"use strict";var QV=Y(),es=require("joi"),WV=Ee(),vp=require("moment"),JV=require("fs-extra"),AE=require("path"),ZV=require("lodash"),vi=T(),{LOG_LEVELS:Us}=T(),XV="YYYY-MM-DD hh:mm:ss",zV=AE.resolve(__dirname,"../logs");qp.exports=function(e){return WV.validateBySchema(e,jV)};var jV=es.object({from:es.custom(Hp),until:es.custom(Hp),level:es.valid(Us.NOTIFY,Us.FATAL,Us.ERROR,Us.WARN,Us.INFO,Us.DEBUG,Us.TRACE),order:es.valid("asc","desc"),limit:es.number().min(1),start:es.number().min(0),log_name:es.custom(ek)});function Hp(e,t){if(vp(e,vp.ISO_8601).format(XV)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Hp,"validateDatetime");function ek(e,t){if(ZV.invert(vi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=QV.get(vi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?vi.PROCESS_LOG_NAMES.HDB:e,i=n===vi.PROCESS_LOG_NAMES.INSTALL?AE.join(zV,vi.PROCESS_LOG_NAMES.INSTALL):AE.join(s,n);return JV.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ek,"validateReadLogPath")});var OE=h((k3,Vp)=>{"use strict";var Tc=T(),Fp=g(),tk=Y(),rk=Gp(),pE=require("path"),sk=require("fs-extra"),nk=require("readline"),{once:ik}=require("events"),{handleHDBError:ak,hdb_errors:ok}=D(),{PACKAGE_ROOT:ck}=T(),_k=pE.join(ck,"logs"),uk=1e3;Vp.exports=lk;async function lk(e){let t=rk(e);if(t)throw ak(t,t.message,ok.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=tk.get(Tc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Tc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===Tc.PROCESS_LOG_NAMES.INSTALL?pE.join(_k,Tc.PROCESS_LOG_NAMES.INSTALL):pE.join(r,s),i=sk.createReadStream(n);i.on("error",z=>{Fp.error(z)});let o=nk.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,S=e.limit===void 0?uk:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+S,L=0,B=[];return o.on("line",z=>{let V,W,ke,xe;try{V=JSON.parse(z)}catch(da){Fp.warn(da.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&&(rs(V,m,B),L++,L===w&&ts(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&&(rs(V,m,B),L++,L===w&&ts(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&&(rs(V,m,B),L++,L===w&&ts(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&&(rs(V,m,B),L++,L===w&&ts(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(rs(V,m,B),L++,L===w&&ts(o));break;case u:W=new Date(V.timestamp),ke=new Date(l),W>=ke&&L<R?L++:W>=ke&&L>=R&&(rs(V,m,B),L++,L===w&&ts(o));break;case E:W=new Date(V.timestamp),xe=new Date(d),W<=xe&&L<R?L++:W<=xe&&L>=R&&(rs(V,m,B),L++,L===w&&ts(o));break;default:L<R?L++:(rs(V,m,B),L++,L===w&&ts(o))}}),await ik(o,"close"),B}a(lk,"readLog");function ts(e){e.close(),e.removeAllListeners()}a(ts,"endReadLine");function rs(e,t,r){t==="desc"?Ek(e,r):t==="asc"?dk(e,r):r.push(e)}a(rs,"pushLineToResult");function Ek(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(Ek,"insertDescending");function dk(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(dk,"insertAscending")});var Rc=h((Y3,$p)=>{"use strict";var NE=require("joi"),{string:mc,boolean:kp,date:hk}=NE.types(),Sk=Ee(),{validateSchemaExists:x3,validateTableExists:$3,validateSchemaName:fk}=Ar(),Tk=T(),mk=he(),Rk=Y(),Ak=mc.invalid(Rk.get(Tk.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(mk.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(),xp={operation:mc.valid("add_node","update_node"),node_name:Ak,subscriptions:NE.array().items({table:mc.required(),schema:mc.custom(fk).required(),subscribe:kp.required(),publish:kp.required().custom(Ok),start_time:hk.iso()}).min(1).required()};function pk(e){return Sk.validateBySchema(e,NE.object(xp))}a(pk,"addUpdateNodeValidator");function Ok(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(Ok,"checkForFalsy");$p.exports={addUpdateNodeValidator:pk,validation_schema:xp}});var Dn=h((K3,Yp)=>{"use strict";var Ac=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Ac,"Node");var pc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(pc,"NodeSubscription");Yp.exports={Node:Ac,NodeSubscription:pc}});var Qp=h((Q3,Kp)=>{"use strict";var Nk=T().OPERATIONS_ENUM,Oc=class{constructor(t,r,s,n=void 0){this.operation=Nk.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Oc,"UpsertObject");Kp.exports=Oc});var Hi=h((W3,Wp)=>{"use strict";var Nc=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Nc,"RemotePayloadObject");var gc=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(gc,"RemotePayloadSubscription");Wp.exports={RemotePayloadObject:Nc,RemotePayloadSubscription:gc}});var Zp=h((J3,Jp)=>{"use strict";var Ic=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(Ic,"TableSizeObject");Jp.exports=Ic});var eO=h((Z3,jp)=>{"use strict";var gk=Zp(),Xp=require("path"),zp=te(),Ik=Ye(),Mn=Z(),bk=g();jp.exports=Ck;async function Ck(e){let t=new gk;try{let r=Xp.join(zp.getBaseSchemaPath(),e.schema.toString()),s=await Mn.openEnvironment(r,e.name),n=Mn.statDBI(s,e.hash_attribute),i=Xp.join(zp.getTransactionAuditStorePath(),e.schema.toString()),o=await Mn.openEnvironment(i,e.name,!0),c=Mn.statDBI(o,Ik.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await Mn.environmentDataSize(r,e.name),u=await Mn.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){bk.warn(`unable to stat table dbi due to ${r}`)}return t}a(Ck,"lmdbGetTableSize")});var rO=h((X3,tO)=>{"use strict";var wk=T(),bc=class{constructor(t){this.operator=wk.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(bc,"SystemInformationOperation");tO.exports=bc});var nO=h((z3,sO)=>{"use strict";var Cc=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(Cc,"SystemInformationObject");sO.exports=Cc});var Lc=h((e2,iO)=>{"use strict";var ve=require("systeminformation"),Pn=g(),Lk=T(),Uk=eO(),yk=As(),Dk=Y();Dk.initSync();var j3=rO(),Mk=nO(),wc;iO.exports={getHDBProcessInfo:CE,getNetworkInfo:LE,getDiskInfo:wE,getMemoryInfo:bE,getCPUInfo:IE,getTimeInfo:gE,getSystemInformation:UE,systemInformation:Pk,getTableSize:yE};function gE(){return ve.time()}a(gE,"getTimeInfo");async function IE(){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:S,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(z=>{let{raw_load:V,raw_load_idle:W,raw_load_irq:ke,raw_load_nice:xe,raw_load_system:da,raw_load_user:ha,...Br}=z;B.cpus.push(Br)}),l.current_load=B,l}catch(e){return Pn.error(`error in getCPUInfo: ${e}`),{}}}a(IE,"getCPUInfo");async function bE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return Pn.error(`error in getMemoryInfo: ${e}`),{}}}a(bE,"getMemoryInfo");async function CE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(Lk.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Pn.error(`error in getHDBProcessInfo: ${t}`),e}}a(CE,"getHDBProcessInfo");async function wE(){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 Pn.error(`error in getDiskInfo: ${t}`),e}}a(wE,"getDiskInfo");async function LE(){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 Pn.error(`error in getNetworkInfo: ${t}`),e}}a(LE,"getNetworkInfo");async function UE(){if(wc!==void 0)return wc;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,wc=e,wc}catch(t){return Pn.error(`error in getSystemInformation: ${t}`),e}}a(UE,"getSystemInformation");async function yE(){let e=[],t=await yk.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Uk(s));return e}a(yE,"getTableSize");async function Pk(e){let t=new Mk;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await UE(),t.time=gE(),t.cpu=await IE(),t.memory=await bE(),t.disk=await wE(),t.network=await LE(),t.harperdb_processes=await CE(),t.table_size=await yE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await UE();break;case"time":t.time=gE();break;case"cpu":t.cpu=await IE();break;case"memory":t.memory=await bE();break;case"disk":t.disk=await wE();break;case"network":t.network=await LE();break;case"harperdb_processes":t.harperdb_processes=await CE();break;case"table_size":t.table_size=await yE();break;default:break}return t}a(Pk,"systemInformation")});var DE=h((s2,aO)=>{"use strict";var t2=require("fs-extra"),r2=g();aO.exports={version:Bk,printVersion:Hk,nodeVersion:vk};var ss=Ua();function Bk(){if(ss)return ss.version}a(Bk,"version");function vk(){if(ss&&ss.engines&&ss.engines["preferred-node"])return ss.engines["preferred-node"]}a(vk,"nodeVersion");function Hk(){ss&&console.log(`HarperDB Version ${ss.version}`)}a(Hk,"printVersion")});var Ds=h((a2,uO)=>{"use strict";var qk=yt(),ME=b(),PE=require("util"),ys=T(),oO=Y();oO.initSync();var Gk=Yl(),cO=mt(),{Node:n2,NodeSubscription:i2}=Dn(),Fk=Ts(),Vk=Qp(),{RemotePayloadObject:kk,RemotePayloadSubscription:xk}=Hi(),{handleHDBError:$k,hdb_errors:Yk}=D(),{HTTP_STATUS_CODES:Kk,HDB_ERROR_MSGS:Qk}=Yk,Wk=Qt(),Jk=Lc(),Zk=DE(),Xk=PE.promisify(Gk.authorize),zk=PE.promisify(cO.searchByHash),jk=PE.promisify(cO.searchByValue);uO.exports={authHeaderToUser:ex,isEmpty:tx,getNodeRecord:rx,upsertNodeRecord:sx,buildNodePayloads:nx,checkClusteringEnabled:ix,getAllNodeRecords:ax,getSystemInfo:ox,reverseSubscription:_O};async function ex(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Xk(t,null),e}a(ex,"authHeaderToUser");function tx(e){return e==null}a(tx,"isEmpty");async function rx(e){let t=new Fk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return zk(t)}a(rx,"getNodeRecord");async function sx(e){let t=new Vk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return qk.upsert(t)}a(sx,"upsertNodeRecord");function _O(e){if(ME.isEmpty(e.subscribe)||ME.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 nx(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=ME.getTableHashAttribute(_,u),{subscribe:E,publish:d}=_O(c),S=new xk(_,u,l,d,E,c.start_time);n.push(S)}return new kk(r,t,n,s)}a(nx,"buildNodePayloads");function ix(){if(!oO.get(ys.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $k(new Error,Qk.CLUSTERING_NOT_ENABLED,Kk.BAD_REQUEST,void 0,void 0,!0)}a(ix,"checkClusteringEnabled");async function ax(){let e=new Wk(ys.SYSTEM_SCHEMA_NAME,ys.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return jk(e)}a(ax,"getAllNodeRecords");async function ox(){let e=await Jk.getSystemInformation();return{hdb_version:Zk.version(),node_version:e.node_version,platform:e.platform}}a(ox,"getSystemInfo")});var vE=h((o2,fO)=>{"use strict";var BE=At(),lO=b(),EO=he(),cx=T(),Uc=g(),dO=dc(),_x=sl(),{RemotePayloadObject:ux}=Hi(),{handleHDBError:hO,hdb_errors:lx}=D(),{HTTP_STATUS_CODES:SO}=lx,{NodeSubscription:Ex}=Dn();fO.exports=dx;async function dx(e,t){let r;try{r=await BE.request(`${t}.${EO.REQUEST_SUFFIX}`,new ux(cx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Uc.trace("Response from remote describe all request:",r)}catch(o){Uc.error(`addNode received error from describe all request to remote node: ${o}`);let c=BE.requestErrorHandler(o,"add_node",t);throw hO(new Error,c,SO.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===EO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw hO(new Error,o,SO.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=lO.doesSchemaExist(c),l=s[c]!==void 0,E=lO.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(Uc.trace(`addNode creating schema: ${c}`),await dO.createSchema({operation:"create_schema",schema:c})),!E&&d){Uc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new _x(c,_,s[c][_].hash_attribute);await dO.createTable(m)}await BE.createLocalTableStream(c,_);let S=new Ex(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(dx,"reviewSubscriptions")});var Mc=h((c2,RO)=>{"use strict";var{handleHDBError:yc,hdb_errors:hx}=D(),{HTTP_STATUS_CODES:Dc}=hx,{addUpdateNodeValidator:Sx}=Rc(),qi=g(),mO=T(),TO=he(),fx=b(),HE=At(),Gi=Ds(),Tx=Y(),mx=vE(),{Node:Rx,NodeSubscription:Ax}=Dn(),px="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ox="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Nx=Tx.get(mO.CONFIG_PARAMS.CLUSTERING_NODENAME);RO.exports=gx;async function gx(e,t=!1){qi.trace("addNode called with:",e),Gi.checkClusteringEnabled();let r=Sx(e);if(r)throw yc(r,r.message,Dc.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Gi.getNodeRecord(s);if(!fx.isEmptyOrZeroLength(E))throw yc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Dc.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await mx(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=px,o;let c=Gi.buildNodePayloads(n,Nx,mO.OPERATIONS_ENUM.ADD_NODE,await Gi.getSystemInfo());qi.trace("addNode sending remote payload:",c);let _;try{_=await HE.request(`${s}.${TO.REQUEST_SUFFIX}`,c)}catch(E){qi.error(`addNode received error from request: ${E}`);let d=HE.requestErrorHandler(E,"add_node",s);throw yc(new Error,d,Dc.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===TO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw yc(new Error,E,Dc.INTERNAL_SERVER_ERROR,"error",E)}qi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let S=n[E];qi.trace("Add node updating work stream for node:",s,"subscriptions:",S),await HE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new Ax(S.schema,S.table,S.publish,S.subscribe))}let l=new Rx(s,u,_.system_info);return await Gi.upsertNodeRecord(l),i.length>0?o.message=Ox:o.message=`Successfully added '${s}' to manifest`,o}a(gx,"addNode")});var GE=h((_2,OO)=>{"use strict";var{handleHDBError:Pc,hdb_errors:Ix}=D(),{HTTP_STATUS_CODES:Bc}=Ix,{addUpdateNodeValidator:bx}=Rc(),Fi=g(),pO=T(),AO=he(),Cx=b(),qE=At(),Vi=Ds(),wx=Y(),{cloneDeep:Lx}=require("lodash"),Ux=vE(),{NodeSubscription:yx}=Dn(),Dx="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Mx="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Px=wx.get(pO.CONFIG_PARAMS.CLUSTERING_NODENAME);OO.exports=Bx;async function Bx(e){Fi.trace("updateNode called with:",e),Vi.checkClusteringEnabled();let t=bx(e);if(t)throw Pc(t,t.message,Bc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Lx(await Vi.getNodeRecord(r));if(Cx.isEmptyOrZeroLength(s))throw Pc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Bc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Ux(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Dx,o;let c=Vi.buildNodePayloads(n,Px,pO.OPERATIONS_ENUM.UPDATE_NODE,await Vi.getSystemInfo());Fi.trace("updateNode sending remote payload:",c);let _;try{_=await qE.request(`${r}.${AO.REQUEST_SUFFIX}`,c)}catch(u){Fi.error(`updateNode received error from request: ${u}`);let l=qE.requestErrorHandler(u,"update_node",r);throw Pc(new Error,l,Bc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===AO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Pc(new Error,u,Bc.INTERNAL_SERVER_ERROR,"error",u)}Fi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Fi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await qE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await vx(s[0],n,_.system_info),i.length>0?o.message=Mx:o.message=`Successfully updated '${r}'`,o}a(Bx,"updateNode");async function vx(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 yx(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Vi.upsertNodeRecord(s)}a(vx,"updateNodeTable")});var CO=h((u2,bO)=>{"use strict";var IO=require("joi"),{string:NO}=IO.types(),Hx=Ee(),gO=T(),qx=Y(),Gx=he();bO.exports=Fx;function Fx(e){let t=NO.invalid(qx.get(gO.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gx.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=IO.object({operation:NO.valid(gO.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Hx.validateBySchema(e,r)}a(Fx,"removeNodeValidator")});var Hc=h((l2,MO)=>{"use strict";var{handleHDBError:wO,hdb_errors:Vx}=D(),{HTTP_STATUS_CODES:LO}=Vx,kx=CO(),ki=g(),UO=Ds(),xx=b(),vc=T(),yO=he(),DO=At(),$x=Y(),{RemotePayloadObject:Yx}=Hi(),{NodeSubscription:Kx}=Dn(),Qx=Si(),Wx=Ns(),Jx=$x.get(vc.CONFIG_PARAMS.CLUSTERING_NODENAME);MO.exports=Zx;async function Zx(e){ki.trace("removeNode called with:",e),UO.checkClusteringEnabled();let t=kx(e);if(t)throw wO(t,t.message,LO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await UO.getNodeRecord(r);if(xx.isEmptyOrZeroLength(s))throw wO(new Error,`Node '${r}' was not found.`,LO.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Yx(vc.OPERATIONS_ENUM.REMOVE_NODE,Jx,[]),i,o=!1;try{i=await DO.request(`${r}.${yO.REQUEST_SUFFIX}`,n),ki.trace("Remove node reply from remote node:",r,i)}catch(_){ki.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];ki.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new Kx(l.schema,l.table,!1,!1);await DO.updateWorkStream(E,r)}let c=new Qx(vc.SYSTEM_SCHEMA_NAME,vc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Wx.deleteRecord(c),i?.status===yO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ki.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(Zx,"removeNode")});var vO=h((E2,BO)=>{"use strict";var PO=require("joi"),{string:Xx,array:zx}=PO.types(),jx=Ee(),e$=Rc();BO.exports=t$;function t$(e){let t=PO.object({operation:Xx.valid("configure_cluster").required(),connections:zx.items(e$.validation_schema).required()});return jx.validateBySchema(e,t)}a(t$,"configureClusterValidator")});var FE=h((d2,VO)=>{"use strict";var r$=T(),qc=g(),s$=b(),n$=Hc(),i$=Mc(),HO=Ds(),a$=vO(),{handleHDBError:qO,hdb_errors:o$}=D(),{HTTP_STATUS_CODES:GO}=o$,c$="Configure cluster complete.",_$="Failed to configure the cluster. Check the logs for more details.",u$="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";VO.exports=l$;async function l$(e){qc.trace("configure cluster called with:",e),HO.checkClusteringEnabled();let t=a$(e);if(t)throw qO(t,t.message,GO.BAD_REQUEST,void 0,void 0,!0);let r=await HO.getAllNodeRecords(),s=[];for(let d=0,S=r.length;d<S;d++)s.push(FO(n$,{operation:r$.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 S=e.connections[d];i.push(FO(i$,S,S.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,S=E.length;d<S;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(s$.isEmptyOrZeroLength(_))return{message:c$,connections:u};if(l)return{message:u$,failed_nodes:_,connections:u};throw qO(new Error,_$,GO.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(l$,"configureCluster");async function FO(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(FO,"functionWrapper")});var xE=h((h2,QO)=>{"use strict";var kE=Ds(),E$=At(),$O=Y(),Gc=T(),Ms=he(),d$=b(),VE=g(),{RemotePayloadObject:h$}=Hi(),{ErrorCode:kO}=require("nats"),xO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_ENABLED),YO=$O.get(Gc.CONFIG_PARAMS.CLUSTERING_NODENAME);QO.exports={clusterStatus:S$,buildNodeStatus:KO};async function S$(){let e={node_name:YO,is_enabled:xO,connections:[]};if(!xO)return e;let t=await kE.getAllNodeRecords();if(d$.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(KO(t[s],e.connections));return await Promise.allSettled(r),e}a(S$,"clusterStatus");async function KO(e,t){let r=e.name,s=new h$(Gc.OPERATIONS_ENUM.CLUSTER_STATUS,YO,void 0,await kE.getSystemInfo()),n,i,o=Ms.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await E$.request(Ms.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===Ms.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ms.CLUSTER_STATUS_STATUSES.CLOSED,VE.error(`Error getting node status from ${r} `,n))}catch(_){VE.warn(`Error getting node status from ${r}`,_),_.code===kO.NoResponders?o=Ms.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===kO.Timeout?o=Ms.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ms.CLUSTER_STATUS_STATUSES.CLOSED}let c=new f$(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!==Gc.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(KO,"buildNodeStatus");function f$(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(f$,"NodeStatusObject")});var XO=h((S2,ZO)=>{"use strict";var $E=require("joi"),WO=Ee(),{route_constraints:JO}=Eu();ZO.exports={setRoutesValidator:T$,deleteRoutesValidator:m$};function T$(e){let t=$E.object({server:$E.valid("hub","leaf").required(),routes:JO.required()});return WO.validateBySchema(e,t)}a(T$,"setRoutesValidator");function m$(e){let t=$E.object({routes:JO.required()});return WO.validateBySchema(e,t)}a(m$,"deleteRoutesValidator")});var KE=h((f2,tN)=>{"use strict";var Ps=mr(),YE=b(),Fc=T(),zO=XO(),{handleHDBError:jO,hdb_errors:R$}=D(),{HTTP_STATUS_CODES:eN}=R$,A$="cluster routes successfully set",p$="cluster routes successfully deleted";tN.exports={setRoutes:O$,getRoutes:N$,deleteRoutes:g$};function O$(e){let t=zO.setRoutesValidator(e);if(t)throw jO(t,t.message,eN.BAD_REQUEST,void 0,void 0,!0);let r=Ps.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"?Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:A$,set:o,skipped:i}}a(O$,"setRoutes");function N$(){let e=Ps.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(N$,"getRoutes");function g$(e){let t=zO.deleteRoutesValidator(e);if(t)throw jO(t,t.message,eN.BAD_REQUEST,void 0,void 0,!0);let r=Ps.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 S=0,m=s.length;S<m;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!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,S=!1,i.push(E);break}}S&&o.push(E)}}return c&&(s=YE.isEmptyOrZeroLength(s)?null:s,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=YE.isEmptyOrZeroLength(n)?null:n,Ps.updateConfigValue(Fc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:p$,deleted:i,skipped:o}}a(g$,"deleteRoutes")});var sN=h((T2,rN)=>{"use strict";var xi=require("alasql"),Bs=require("recursive-iterator"),Jt=g(),I$=b(),$i=T(),Vc=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,C$(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=>$i.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=>!$i.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][$i.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=b$(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=>!$i.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new xi.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(Vc,"sql_statement_bucket");function b$(e){return e.filter(t=>t[$i.PERMS_CRUD_ENUM.READ])}a(b$,"filterReadRestrictedAttrs");function C$(e,t,r,s,n){w$(e,t,r,s,n)}a(C$,"interpretAST");function Yi(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(Yi,"addSchemaTableToMap");function w$(e,t,r,s,n){if(!e){Jt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xi.yy.Insert?D$(e,t,r):e instanceof xi.yy.Select?L$(e,t,r,s,n):e instanceof xi.yy.Update?U$(e,t,r):e instanceof xi.yy.Delete?y$(e,t,r):Jt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(w$,"getRecordAttributesAST");function L$(e,t,r,s,n){if(!e){Jt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(I$.isEmptyOrZeroLength(i)){Jt.error("No schema specified");return}e.from.forEach(c=>{Yi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Yi(c.table,t,r,s,n)});let o=new Bs(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{Jt.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 Bs(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{Jt.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 Bs(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{Jt.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 Bs(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{Jt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(L$,"getSelectAttributes");function U$(e,t,r){if(!e){Jt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Bs(e.columns),n=e.table.databaseid;Yi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(U$,"getUpdateAttributes");function y$(e,t,r){if(!e){Jt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Bs(e.where),n=e.table.databaseid;Yi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(y$,"getDeleteAttributes");function D$(e,t,r){if(!e){Jt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Bs(e.columns),n=e.into.databaseid;Yi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.into.tableid,n,i.columnid,t,r)}a(D$,"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");rN.exports=Vc});var aN=h((m2,iN)=>{var M$=require("os"),nN=Y();iN.exports={checkPermission:P$};function P$(){if(M$.userInfo().username!==nN.get("install_user"))throw new Error(`Error: Must execute as ${nN.get("install_user")}`)}a(P$,"checkPermission")});var JE=h((R2,lN)=>{var xc=mn(),oN=require("chalk"),or=g(),cN=aN(),_N=require("prompt"),{promisify:B$}=require("util"),kc=T(),v$=require("fs-extra"),H$=require("path"),q$=b(),G$=DE(),uN=Y();uN.initSync();var F$=require("moment"),V$=B$(_N.get),k$=H$.join(uN.getHdbBasePath(),kc.LICENSE_KEY_DIR_NAME,kc.LICENSE_FILE_NAME,kc.LICENSE_FILE_NAME);lN.exports={getFingerprint:$$,setLicense:x$,parseLicense:WE,register:Y$,getRegistrationInfo:Q$};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 $$(){try{cN.checkPermission()}catch(t){throw or.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await xc.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw or.error(r),or.error(t),new Error(r)}return e}a($$,"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=xc.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 v$.writeFile(k$,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 Y$(){let e=await K$();return WE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Y$,"register");async function K$(){try{cN.checkPermission()}catch(s){return console.error(s.message)}let e=await xc.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:oN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:oN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{_N.start()}catch(s){or.error(s)}let r;try{r=await V$(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(K$,"promptForRegistration");async function Q$(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await xc.getLicense()}catch(r){throw or.error(`There was an error when searching licenses due to: ${r.message}`),r}if(q$.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=G$.version(),e.storage_type=kc.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=F$.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Q$,"getRegistrationInfo")});var dN=h((A2,EN)=>{"use strict";var W$=he(),$c=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,this.server_name=r+W$.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:S}},this.system_account="SYS"}};a($c,"HubConfigObject");EN.exports=$c});var fN=h((p2,SN)=>{"use strict";var hN=he(),Yc=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d){this.port=t,this.server_name=r+hN.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+hN.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(Yc,"LeafConfigObject");SN.exports=Yc});var mN=h((O2,TN)=>{"use strict";var Kc=class{constructor(t,r){this.user=t,this.password=r}};a(Kc,"HdbUserObject");TN.exports=Kc});var AN=h((N2,RN)=>{"use strict";var J$=he(),Qc=class{constructor(t,r){this.user=t+J$.SERVER_SUFFIX.ADMIN,this.password=r}};a(Qc,"SysUserObject");RN.exports=Qc});var zE=h((g2,NN)=>{"use strict";var Bn=require("path"),Xc=require("fs-extra"),Z$=dN(),X$=fN(),z$=mN(),j$=AN(),ZE=Ir(),Hn=b(),Pt=mr(),Zc=T(),Wc=he(),{CONFIG_PARAMS:Ce}=Zc,zc=g(),jc=Y(),pN=Yr(),XE=At(),vn="clustering",eY=1e4,ON=5;NN.exports={generateNatsConfig:tY,removeNatsConfig:rY};async function tY(e=!1,t=void 0){jc.initSync();let r=jc.get(Ce.ROOTPATH),s=Bn.join(r,vn,Wc.PID_FILES.HUB),n=Bn.join(r,vn,Wc.PID_FILES.LEAF),i=Bn.join(r,vn,"leaf"),o=Bn.join(r,vn,Wc.NATS_CONFIG_FILES.HUB_SERVER),c=Bn.join(r,vn,Wc.NATS_CONFIG_FILES.LEAF_SERVER),_=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_CERTIFICATE),u=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_PRIVATEKEY),l=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_CERT_AUTH),E=Pt.getConfigFromFile(Ce.CLUSTERING_TLS_INSECURE),d=Pt.getConfigFromFile(Ce.CLUSTERING_NODENAME),S=Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await XE.checkNATSServerInstalled()||e_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await ZE.listUsers(),R=Pt.getConfigFromFile(Ce.CLUSTERING_USER),w=await ZE.getClusterUser();(Hn.isEmpty(w)||w.active!==!0)&&e_(`invalid cluster user '${R}'`),e||(await Jc(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Jc(Ce.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Jc(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),await Jc(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[ha,Br]of m.entries())Br.role.role===Zc.ROLE_TYPES_ENUM.CLUSTER_USER&&Br.active&&(L.push(new j$(Br.username,pN.decrypt(Br.hash))),B.push(new z$(Br.username,pN.decrypt(Br.hash))));let z=[],{hub_routes:V}=Pt.getClusteringRoutes();if(!Hn.isEmptyOrZeroLength(V))for(let ha of V)z.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${ha.host}:${ha.port}`);let W=new Z$(Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NAME),Pt.getConfigFromFile(Ce.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),z,L,B);t=Hn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Zc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Xc.writeJson(o,W),zc.trace(`Hub server config written to ${o}`));let ke=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,xe=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,da=new X$(Pt.getConfigFromFile(Ce.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[xe],L,B,_,u,l,E);(t===void 0||t===Zc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Xc.writeJson(c,da),zc.trace(`Leaf server config written to ${c}`))}a(tY,"generateNatsConfig");async function Jc(e){let t=jc.get(e);Hn.isEmpty(t)&&e_(`port undefined for '${e}'`),await Hn.isPortTaken(t)&&e_(`'${e}' port '${t}' is unavailable`)}a(Jc,"isPortAvailable");function e_(e){let t=`Error generating clustering config: ${e}`;zc.error(t),console.error(t),process.exit(1)}a(e_,"generateNatsConfigError");async function rY(e){let{port:t,config_file:r}=XE.getServerConfig(e),{username:s,decrypt_hash:n}=await ZE.getClusterUser(),i=0,o=500;for(;i<ON;){try{let u=await XE.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){zc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=ON)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await Hn.async_set_timeout(o*i)}let c="0".repeat(eY),_=Bn.join(jc.get(Ce.ROOTPATH),vn,r);await Xc.writeFile(_,c),await Xc.remove(_)}a(rY,"removeNatsConfig")});var r_=h((I2,UN)=>{"use strict";var ne=Y(),gN=mn(),C=T(),jE=he(),Ae=require("path"),{PACKAGE_ROOT:t_}=T(),le="/dev/null",qn=Ae.join(t_,"launchServiceScripts"),IN=Ae.join(t_,"utility/scripts"),sY=Ae.join(IN,C.HDB_RESTART_SCRIPT),bN=Ae.resolve(t_,"dependencies",`${process.platform}-${process.arch}`,jE.NATS_BINARY_NAME),He,qe;function cr(){(He===void 0||qe===void 0)&&(ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(cr,"initLogConfig");function CN(){cr();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.IPC),t={name:C.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:C.SERVICE_SERVERS_CWD.IPC};return He||(t.out_file=le,t.error_file=le),{...t,script:C.SERVICE_SERVERS.IPC}}a(CN,"generateIPCServerConfig");function wN(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.HDB),t=gN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.HDB,script:C.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:qn};return He||(s.out_file=le,s.error_file=le),s}a(wN,"generateHDBServerConfig");function LN(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=gN.licenseSearch(),r=t.ram_allocation?C.MEM_SETTING_KEY+t.ram_allocation:C.MEM_SETTING_KEY+C.RAM_ALLOCATION_ENUM.DEFAULT,s={name:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:C.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(C.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:qn};return He||(s.out_file=le,s.error_file=le),s}a(LN,"generateCFServerConfig");function nY(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",jE.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:bN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(nY,"generateNatsHubServerConfig");function iY(){cr(),ne.initSync(),He=ne.get(C.HDB_SETTINGS_NAMES.LOG_TO_FILE),qe=ne.get(C.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(C.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",jE.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:bN,args:`-c ${t}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return He||(s.out_file=le,s.error_file=le),s}a(iY,"generateNatsLeafServerConfig");function aY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn};return He||(t.out_file=le,t.error_file=le),t}a(aY,"generateNatsIngestServiceConfig");function oY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:C.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn};return He||(t.out_file=le,t.error_file=le),t}a(oY,"generateNatsReplyServiceConfig");function cY(){cr(),ne.initSync();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:C.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:qn,autorestart:!1};return He||(t.out_file=le,t.error_file=le),t}a(cY,"generateClusteringUpgradeV4ServiceConfig");function _Y(){cr();let e=Ae.join(qe,C.PROCESS_LOG_NAMES.PM2),t={name:C.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:C.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:IN};return He||(t.out_file=le,t.error_file=le),{...t,script:sY}}a(_Y,"generateRestart");function uY(e){cr();let t=Ae.join(qe,C.PROCESS_LOG_NAMES.JOBS),r=Ae.join(t_,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[C.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:qn,autorestart:!1};return He||(s.out_file=le,s.error_file=le),{...s,script:Ae.join(r,"jobProcess.js")}}a(uY,"generateJobConfig");function lY(){return{apps:[CN(),wN(),LN()]}}a(lY,"generateAllServiceConfigs");UN.exports={generateAllServiceConfigs:lY,generateIPCServerConfig:CN,generateHDBServerConfig:wN,generateCFServerConfig:LN,generateRestart:_Y,generateNatsHubServerConfig:nY,generateNatsLeafServerConfig:iY,generateNatsIngestServiceConfig:aY,generateNatsReplyServiceConfig:oY,generateClusteringUpgradeV4ServiceConfig:cY,generateJobConfig:uY}});var Qi=h((b2,VN)=>{"use strict";var P=T(),s_=b(),Ki=zE(),n_=At(),EY=he(),x=require("pm2"),dY=require("fs-extra"),Lr=r_(),ut=Y(),Ur=g(),hY=r_(),SY=Ds(),fY=require("util"),DN=fY.promisify(require("child_process").exec),MN=require("path");VN.exports={start:vs,stop:a_,reload:BN,restart:vN,list:td,describe:o_,connect:_r,kill:qN,startAllServices:bY,startService:i_,getUniqueServicesList:rd,restartAllServices:CY,stopAllServices:wY,isServiceRegistered:GN,reloadStopStart:ed,restartHdb:HN,deleteProcess:gY,configureLogRotate:yY,startClustering:FN,isHdbRestartRunning:IY,isClusteringRunning:MY,stopClustering:DY,reloadClustering:PY};var{PACKAGE_ROOT:TY}=T(),mY="2.7.0",PN=MN.join(TY,"node_modules/pm2/bin/pm2"),RY="Log rotate installed.",AY="Error installing log rotate.",pY="Log rotate updated.",OY="Error updating log rotate.",NY="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 _r(){return new Promise((e,t)=>{x.connect((r,s)=>{r&&t(r),e(s)})})}a(_r,"connect");function vs(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.start(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(vs,"start");function a_(e){return new Promise(async(t,r)=>{try{await _r()}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(a_,"stop");function BN(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.reload(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(BN,"reload");function vN(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.restart(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(vN,"restart");function gY(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.delete(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(gY,"deleteProcess");async function HN(){await vs(hY.generateRestart())}a(HN,"restartHdb");async function IY(){let e=await td();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(IY,"isHdbRestartRunning");function td(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.list((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(td,"list");function o_(e){return new Promise(async(t,r)=>{try{await _r()}catch(s){r(s)}x.describe(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(o_,"describe");function qN(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.killDaemon((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(qN,"kill");async function bY(){try{await FN(),await vs(Lr.generateAllServiceConfigs())}catch(e){throw x.disconnect(),e}}a(bY,"startAllServices");async function i_(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Lr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Lr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Lr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Lr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Lr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Lr.generateNatsHubServerConfig(),await vs(t),await Ki.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Lr.generateNatsLeafServerConfig(),await vs(t),await Ki.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Lr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await vs(t)}catch(t){throw x.disconnect(),t}}a(i_,"startService");async function rd(){try{let e=await td(),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(rd,"getUniqueServicesList");async function CY(e=[]){try{let t=!1,r=await rd();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 ed(o):await vN(o))}t&&await ed(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw x.disconnect(),t}}a(CY,"restartAllServices");async function wY(){try{let e=await rd();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await a_(s.name)}if(await qN(),ut.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dY.readFile(MN.join(ut.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ur.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw x.disconnect(),e}}a(wY,"stopAllServices");async function GN(e){return!s_.isEmptyOrZeroLength(await o_(e))}a(GN,"isServiceRegistered");async function ed(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 o_(e),s=s_.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?Ur.error(NY):(await a_(e),await i_(e)):e===P.PROCESS_DESCRIPTORS.HDB?await HN():await BN(e)}a(ed,"reloadStopStart");function LY(){return new Promise(async(e,t)=>{try{await _r()}catch(r){t(r)}x.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(LY,"stopLogrotate");async function UY(){let{stdout:e,stderr:t}=await DN(`${process.platform==="win32"?"node":""} ${PN} install pm2-logrotate@${mY}`);if(Ur.debug(`loadLogRotate stdout: ${e}`),t)throw Ur.error(AY),t;Ur.info(RY)}a(UY,"installLogRotate");async function yN(){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":""} ${PN} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await DN(t);if(Ur.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ur.error(OY),s;Ur.info(pY)}a(yN,"updateLogRotateConfig");async function yY(){ut.initSync();let e=s_.autoCastBoolean(ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await o_(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(s_.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await UY(),await yN();return}if(e&&s){await vs(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await yN();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await LY()}a(yY,"configureLogRotate");async function FN(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await i_(r)}await n_.createWorkQueueStream(EY.WORK_QUEUE_CONSUMER_NAMES),await n_.updateNodeNameLocalStreams();let e=await SY.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){Ur.info("Starting clustering upgrade 4.0.0 process"),await i_(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(FN,"startClustering");async function DY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await a_(t)}}a(DY,"stopClustering");async function MY(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await GN(t)===!1)return!1}return!0}a(MY,"isClusteringRunning");async function PY(){await Ki.generateNatsConfig(!0),await n_.reloadNATSHub(),await n_.reloadNATSLeaf(),await Ki.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ki.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PY,"reloadClustering")});var od=h((C2,KN)=>{"use strict";var y=T(),K=g(),c_=b(),BY=su(),sd=zE(),ad=At(),vY=he(),xN=require("minimist"),{handleHDBError:nd,hdb_errors:HY}=D(),Wi=mr(),{HTTP_STATUS_CODES:id}=HY,G,kN=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,Hs="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",qY="Invalid service",GY="'service' is required",FY="Restarting all services",VY="Clustering is not enabled so cannot be restarted";KN.exports={stop:xY,restartProcesses:kY,restartService:$N};async function kY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Qi());let e=BY(Object.keys(y.CONFIG_PARAM_MAP),!0);c_.isEmptyOrZeroLength(Object.keys(e))||Wi.updateConfigValue(void 0,void 0,e,!0,!0);let t=Wi.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=Wi.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=xN(process.argv);if(!c_.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(Hs),console.error(Hs);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 Gn(_);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 $N({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(Hs),console.error(Hs),Hs;console.log(kN),t&&await YN();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(FY),await G.restartAllServices(i),kN}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(kY,"restartProcesses");async function $N(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),G===void 0&&(G=Qi()),c_.isEmpty(e.service))throw nd(new Error,GY,id.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nd(new Error,qY,id.BAD_REQUEST,void 0,void 0,!0);let r=Wi.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(Hs),Hs;await G.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await G.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await Gn(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),nd(new Error,o,id.BAD_REQUEST,void 0,void 0,!0)}}else await G.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a($N,"restartService");async function xY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{G===void 0&&(G=Qi());let e=xN(process.argv);if(c_.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(xY,"stop");async function YN(){await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await Gn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await ad.updateNodeNameLocalStreams(),await ad.closeConnection()}a(YN,"restartAllClusteringServices");async function Gn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=Wi.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(VY);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 YN();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 sd.generateNatsConfig(!0,e),await G.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await ad.createWorkQueueStream(vY.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 sd.generateNatsConfig(!0,e),await G.restart(e),await sd.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(Gn,"restartClustering")});var sg=h((L2,rg)=>{"use strict";var w2=require("lodash"),Xe=T(),{handleHDBError:QN,hdb_errors:$Y}=D(),{HDB_ERROR_MSGS:YY,HTTP_STATUS_CODES:KY}=$Y,cd=g();rg.exports={getRolePermissions:WY};var qs=Object.create(null),QY=a(e=>({key:e,perms:{}}),"perms_template_obj"),XN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),zN=a((e=!1,t=!1,r=!1,s=!1)=>({[Xe.PERMS_CRUD_ENUM.READ]:e,[Xe.PERMS_CRUD_ENUM.INSERT]:t,[Xe.PERMS_CRUD_ENUM.UPDATE]:r,[Xe.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),_d=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...zN(t,r,s,n)}),"table_perms_template"),WN=a((e,t=zN())=>({attribute_name:e,describe:tg(t),[Ji]:t[Ji],[ud]:t[ud],[ld]:t[ld]}),"attr_perms_template"),JN=a((e,t=!1)=>({attribute_name:e,describe:t,[Ji]:t}),"timestamp_attr_perms_template"),{READ:Ji,INSERT:ud,UPDATE:ld}=Xe.PERMS_CRUD_ENUM,jN=Object.values(Xe.PERMS_CRUD_ENUM),eg=[Ji,ud,ld];function WY(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[Xe.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(qs[t]&&qs[t].key===s)return qs[t].perms;let n=JY(e,r);return qs[t]?qs[t].key=s:qs[t]=QY(s),qs[t].perms=n,n}catch(r){if(!e[Xe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xe.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xe.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw cd.error(s),cd.debug(r),QN(new Error,YY.OUTDATED_PERMS_TRANSLATION_ERROR,KY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
8
8
  ${r.stack}`;throw cd.error(s),QN(new Error)}}}a(WY,"getRolePermissions");function JY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xe.SYSTEM_SCHEMA_NAME]=s[Xe.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]=ZY(t[i]);return}r[i]=XN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=XY(c,_);r[i].describe||jN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=_d()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=_d()})}),r}a(JY,"translateRolePermissions");function ZY(e){let t=XN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=_d(!0,!0,!0,!0,!0)}),t}a(ZY,"createStructureUserPermissions");function XY(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 Xe.TIME_STAMP_NAMES.includes(E)&&(d=JN(E,l[Ji])),u[E]=d,u},{}),o=t[Xe.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=WN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=tg(l),n.attribute_permissions.push(l),c||zY(l,_)}else if(u!==o){let l;Xe.TIME_STAMP_NAMES.includes(u)?l=JN(u):l=WN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=ZN(n),n}else return e.describe=ZN(e),e}a(XY,"getTableAttrPerms");function ZN(e){return jN.filter(t=>e[t]).length>0}a(ZN,"getSchemaTableDescribePerm");function tg(e){return eg.filter(t=>e[t]).length>0}a(tg,"getAttributeDescribePerm");function zY(e,t){eg.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(zY,"checkForHashPerms")});var ug=h((U2,_g)=>{"use strict";var Te=require("joi"),ng=require("fs-extra"),ig=require("path"),Fn=Ee(),ag=Y(),og=T(),cg=g(),{hdb_errors:jY}=D(),{HDB_ERROR_MSGS:lt}=jY,ns=/^[a-zA-Z0-9-_]+$/;_g.exports={getDropCustomFunctionValidator:tK,setCustomFunctionValidator:rK,addCustomFunctionProjectValidator:sK,dropCustomFunctionProjectValidator:nK,packageCustomFunctionProjectValidator:iK,deployCustomFunctionProjectValidator:aK};function Zi(e,t,r){try{let s=ag.get(og.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=ig.join(s,t);return ng.existsSync(n)?e?t:r.message(lt.PROJECT_EXISTS):e?r.message(lt.NO_PROJECT):t}catch(s){return cg.error(s),r.message(lt.VALIDATION_ERR)}}a(Zi,"checkProjectExists");function eK(e,t,r,s){try{let n=ag.get(og.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=ig.join(n,e,t,r+".js");return ng.existsSync(i)?r:s.message(lt.NO_FILE)}catch(n){return cg.error(n),s.message(lt.VALIDATION_ERR)}}a(eK,"checkFileExists");function tK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ns).custom(eK.bind(null,e.project,e.type)).required().messages({"string.pattern.base":lt.BAD_FILE_NAME})});return Fn.validateBySchema(e,t)}a(tK,"getDropCustomFunctionValidator");function rK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ns).required().messages({"string.pattern.base":lt.BAD_FILE_NAME}),function_content:Te.string().required()});return Fn.validateBySchema(e,t)}a(rK,"setCustomFunctionValidator");function sK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!1)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(sK,"addCustomFunctionProjectValidator");function nK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Fn.validateBySchema(e,t)}a(nK,"dropCustomFunctionProjectValidator");function iK(e){let t=Te.object({project:Te.string().pattern(ns).custom(Zi.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Fn.validateBySchema(e,t)}a(iK,"packageCustomFunctionProjectValidator");function aK(e){let t=Te.object({project:Te.string().pattern(ns).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":lt.BAD_PACKAGE})});return Fn.validateBySchema(e,t)}a(aK,"deployCustomFunctionProjectValidator")});var hd=h((y2,dg)=>{"use strict";var we=require("fs-extra"),__=require("fast-glob"),ie=require("path"),lg=require("tar-fs"),Eg=require("uuid").v4,Xi=require("normalize-path"),Gs=ug(),Le=g(),pt=T(),Ot=Y(),{PACKAGE_ROOT:oK}=T(),{handleHDBError:ze,hdb_errors:cK}=D(),{HDB_ERROR_MSGS:is,HTTP_STATUS_CODES:je}=cK,_K=ie.join(oK,"custom_function_template"),Ed=ie.join(Ot.get(pt.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function dd(){let e=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ze(new Error,is.NOT_ENABLED,je.BAD_REQUEST,void 0,void 0,!0)}a(dd,"isCFEnabled");function uK(){Le.trace("getting custom api status");let e={};try{e={is_enabled:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ze(new Error,is.FUNCTION_STATUS,je.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(uK,"customFunctionsStatus");function lK(){Le.trace("getting custom api endpoints");let e={},t=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{__.sync(Xi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:__.sync(Xi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:__.sync(Xi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Xi(`${s}/static`))&&__.sync(Xi(`${s}/static/**/*`)).length}})}catch(r){throw ze(new Error,is.GET_FUNCTIONS,je.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(lK,"getCustomFunctions");function EK(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=Ot.get(pt.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 ze(new Error,is.GET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(EK,"getCustomFunction");function dK(e){dd(),e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.setCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("setting custom function file content");let r=Ot.get(pt.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 ze(new Error,is.SET_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(dK,"setCustomFunction");function hK(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function file");let r=Ot.get(pt.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 ze(new Error,is.DROP_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(hK,"dropCustomFunction");function SK(e){dd(),e.project&&(e.project=ie.parse(e.project).name);let t=Gs.addCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("adding custom function project");let r=Ot.get(pt.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(_K,n),`Successfully created custom function project: ${s}`}catch(n){throw ze(new Error,is.ADD_FUNCTION,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(SK,"addCustomFunctionProject");function fK(e){e.project&&(e.project=ie.parse(e.project).name);let t=Gs.dropCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("dropping custom function project");let r=Ot.get(pt.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 ze(new Error,is.DROP_FUNCTION_PROJECT,je.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(fK,"dropCustomFunctionProject");async function TK(e){e.project&&(e.project=ie.parse(e.project).name);let t=Gs.packageCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("packaging custom function project");let r=Ot.get(pt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ie.join(r,s),i=Eg();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(Ed);let c=ie.join(Ed,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ie.join(n,"node_modules"))}),lg.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(TK,"packageCustomFunctionProject");async function mK(e){dd(),e.project&&(e.project=ie.parse(e.project).name);let t=Gs.deployCustomFunctionProjectValidator(e);if(t)throw ze(t,t.message,je.BAD_REQUEST);Le.trace("deploying custom function project");let r=Ot.get(pt.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(Ed,Eg()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe(lg.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(mK,"deployCustomFunctionProject");dg.exports={customFunctionsStatus:uK,getCustomFunctions:lK,getCustomFunction:EK,setCustomFunction:dK,dropCustomFunction:hK,addCustomFunctionProject:SK,dropCustomFunctionProject:fK,packageCustomFunctionProject:TK,deployCustomFunctionProject:mK}});var Sd=h((D2,Sg)=>{"use strict";var ur=require("joi"),hg=Ee();Sg.exports={readTransactionLogValidator:RK,deleteTransactionLogsBeforeValidator:AK};function RK(e){let t=ur.object({schema:ur.string().required(),table:ur.string().required(),from:ur.date().timestamp(),to:ur.date().timestamp(),limit:ur.number().min(1)});return hg.validateBySchema(e,t)}a(RK,"readTransactionLogValidator");function AK(e){let t=ur.object({schema:ur.string().required(),table:ur.string().required(),timestamp:ur.date().timestamp().required()});return hg.validateBySchema(e,t)}a(AK,"deleteTransactionLogsBeforeValidator")});var l_=h((M2,Ag)=>{"use strict";var fd=T(),u_=At(),fg=b(),Tg=Y(),mg=Yr(),{handleHDBError:Vn,hdb_errors:pK}=D(),{HTTP_STATUS_CODES:kn}=pK,{readTransactionLogValidator:OK,deleteTransactionLogsBeforeValidator:NK}=Sd(),Rg="This operation relies on clustering and cannot run with it disable.",gK="Logs successfully deleted from transaction log.",IK="All logs successfully deleted from transaction log.";Ag.exports={readTransactionLog:bK,deleteTransactionLogsBefore:CK};async function bK(e){let t=OK(e);if(t)throw Vn(t,t.message,kn.BAD_REQUEST,void 0,void 0,!0);if(!Tg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,Rg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=fg.checkSchemaTableExist(r,s);if(n)throw Vn(new Error,n,kn.NOT_FOUND,void 0,void 0,!0);let i=mg.createNatsTableStreamName(r,s),o=await u_.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===fd.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(bK,"readTransactionLog");async function CK(e){let t=NK(e);if(t)throw Vn(t,t.message,kn.BAD_REQUEST,void 0,void 0,!0);if(!Tg.get(fd.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Vn(new Error,Rg,kn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=fg.checkSchemaTableExist(r,s);if(i)throw Vn(new Error,i,kn.NOT_FOUND,void 0,void 0,!0);let o=mg.createNatsTableStreamName(r,s),{jsm:c}=await u_.getNATSReferences(),_=await u_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=gK,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=IK):E=(await u_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(CK,"deleteTransactionLogsBefore")});var md=h((P2,Ug)=>{"use strict";var E_=require("joi"),d_=require("path"),pg=require("fs-extra"),{exec:wK}=require("child_process"),LK=require("util"),Og=LK.promisify(wK),UK=T(),{handleHDBError:xn,hdb_errors:yK}=D(),{HTTP_STATUS_CODES:$n}=yK,Ng=Y(),DK=Ee(),h_=g();Ng.initSync();var Td=Ng.get(UK.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),gg="npm install --omit=dev --json",MK=`${gg} --dry-run`;Ug.exports={installModules:PK,auditModules:BK};async function Ig(e,t=void 0){let{stdout:r,stderr:s}=await Og(e,{cwd:t});if(s)throw new Error(s.replace(`