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.
- package/README.md +1 -1
- package/bin/harperdb.js +2 -2
- package/launchServiceScripts/launchCustomFunctions.js +2 -2
- package/launchServiceScripts/launchHarperDB.js +2 -2
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +2 -2
- package/package.json +3 -3
- package/server/ipc/hdbIpcServer.js +1 -1
- package/server/jobs/jobProcess.js +2 -2
- package/utility/scripts/restartHdb.js +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";var Ah=Object.defineProperty;var a=(e,t)=>Ah(e,"name",{value:t,configurable:!0});var d=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var A=d((HD,L_)=>{"use strict";var ue=require("path"),mh=require("fs");function Nh(){let e=__dirname;for(;!mh.existsSync(ue.join(e,"package.json"));){let t=ue.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Nh,"getHDBPackageRoot");var Ye=Nh(),h_="js",Br=h_,Oh="harperdb-config.yaml",gh="defaultConfig.yaml",Ih="hdb",f_=`hdbServer.${Br}`,R_=`customFunctionsServer.${Br}`,A_=`hdbIpcServer.${Br}`,ph=`restartHdb.${Br}`,Wi="HarperDB",ws="Custom Functions",ys="Clustering Hub",Us="Clustering Leaf",Qi="Clustering Ingest Service",Ji="Clustering Reply Service",Ch="foreground.pid",$i={HDB:Wi,IPC:"IPC",CLUSTERING_HUB:ys,CLUSTERING_LEAF:Us,CLUSTERING_INGEST_SERVICE:Qi,CLUSTERING_REPLY_SERVICE:Ji,CUSTOM_FUNCTIONS:ws,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},bh={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},Lh={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},wh={harperdb:Wi,ipc:"IPC","clustering hub":ys,"clustering leaf":Us,"clustering ingest service":Qi,"clustering reply service":Ji,"custom functions":ws,custom_functions:ws,"pm2-logrotate":$i.PM2_LOGROTATE,logrotate:$i.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},yh={CLUSTERING_HUB_PROC_DESCRIPTOR:ys,CLUSTERING_LEAF_PROC_DESCRIPTOR:Us,CLUSTERING_INGEST_PROC_DESCRIPTOR:Qi,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Ji},Ls={HDB:ue.join(Ye,"server/harperdb"),IPC:ue.join(Ye,"server/ipc"),CUSTOM_FUNCTIONS:ue.join(Ye,"server/customFunctions"),CLUSTERING_HUB:ue.join(Ye,"server/nats"),CLUSTERING_LEAF:ue.join(Ye,"server/nats")},Uh={HDB:ue.join(Ls.HDB,f_),IPC:ue.join(Ls.IPC,A_),CUSTOM_FUNCTIONS:ue.join(Ls.CUSTOM_FUNCTIONS,R_)},Dh={HDB:ue.join(Ye,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:ue.join(Ye,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:ue.join(Ye,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ue.join(Ye,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ue.resolve(Ye,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Mh={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},m_="support@harperdb.io",Ph="customer-success@harperdb.io",N_=1,Bh=4141,O_="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Hh="https://www.harperdb.io/product",Gh=`For support, please submit a request at ${O_} or contact ${m_}`,g_=`For license support, please contact ${Ph}`,vh="None of the specified records were found.",Fh="hash attribute not found",qh=`Your current license only supports ${N_} role. ${g_}`,Vh="Your current license only supports 3 connections to a node.",xh="127.0.0.1",Yh=1,kh=/^\.$/,Kh=/^\.\.$/,$h="U+002E",Wh=/\//g,Qh="U+002F",Jh=/U\+002F/g,Zh=/^U\+002E$/,Xh=/^U\+002EU\+002E$/,zh="d",jh=999999,ef="*",tf="--max-old-space-size=",rf="system",sf="__hdb_hash",nf=".harperdb",af=".hdb",of="keys",_f="hdb_boot_properties.file",cf=".updateConfig.json",uf="SIGTSTP",Ef=24,lf=6e4,df=448,Sf="blob",Tf="trash",hf="schema",ff="transactions",Rf=".count",Af="id",mf="install_log.log",Nf="run_log.log",Of="PROCESS_NAME",gf={SETTINGS_PATH_KEY:"settings_path"},I_=require("lodash"),If={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},pf={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Cf={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},bf={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},Lf={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Le="hdb_internal:",wf={CREATE_SCHEMA:Le+"create_schema",CREATE_TABLE:Le+"create_table",CREATE_ATTRIBUTE:Le+"create_attribute",ADD_USER:Le+"add_user",ALTER_USER:Le+"alter_user",DROP_USER:Le+"drop_user",HDB_NODES:Le+"hdb_nodes",HDB_USERS:Le+"hdb_users",HDB_WORKERS:Le+"hdb_workers",CATCHUP:Le+"catchup",SCHEMA_CATCHUP:Le+"schema_catchup",WORKER_ROOM:Le+"cluster_workers"},yf={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},Uf="060493.ks",Df=".license",Mf={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},f={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules"},Pf={CSV:".csv",JSON:".json"},Bf={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Hf={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},It={};It[f.CREATE_SCHEMA]=f.CREATE_SCHEMA;It[f.CREATE_TABLE]=f.CREATE_TABLE;It[f.CREATE_ATTRIBUTE]=f.CREATE_ATTRIBUTE;It[f.INSERT]=f.INSERT;It[f.UPDATE]=f.UPDATE;It[f.UPSERT]=f.UPSERT;It[f.DELETE]=f.DELETE;var H=Object.create(null);H[f.DESCRIBE_ALL]=f.DESCRIBE_ALL;H[f.DESCRIBE_TABLE]=f.DESCRIBE_TABLE;H[f.DESCRIBE_SCHEMA]=f.DESCRIBE_SCHEMA;H[f.READ_LOG]=f.READ_LOG;H[f.ADD_NODE]=f.ADD_NODE;H[f.LIST_USERS]=f.LIST_USERS;H[f.LIST_ROLES]=f.LIST_ROLES;H[f.USER_INFO]=f.USER_INFO;H[f.SQL]=f.SQL;H[f.GET_JOB]=f.GET_JOB;H[f.SEARCH_JOBS_BY_START_DATE]=f.SEARCH_JOBS_BY_START_DATE;H[f.DELETE_FILES_BEFORE]=f.DELETE_FILES_BEFORE;H[f.EXPORT_LOCAL]=f.EXPORT_LOCAL;H[f.EXPORT_TO_S3]=f.EXPORT_TO_S3;H[f.CLUSTER_STATUS]=f.CLUSTER_STATUS;H[f.REMOVE_NODE]=f.REMOVE_NODE;H[f.RESTART]=f.RESTART;H[f.CUSTOM_FUNCTIONS_STATUS]=f.CUSTOM_FUNCTIONS_STATUS;H[f.GET_CUSTOM_FUNCTIONS]=f.GET_CUSTOM_FUNCTIONS;H[f.GET_CUSTOM_FUNCTION]=f.GET_CUSTOM_FUNCTION;H[f.SET_CUSTOM_FUNCTION]=f.SET_CUSTOM_FUNCTION;H[f.DROP_CUSTOM_FUNCTION]=f.DROP_CUSTOM_FUNCTION;H[f.ADD_CUSTOM_FUNCTION_PROJECT]=f.ADD_CUSTOM_FUNCTION_PROJECT;H[f.DROP_CUSTOM_FUNCTION_PROJECT]=f.DROP_CUSTOM_FUNCTION_PROJECT;H[f.PACKAGE_CUSTOM_FUNCTION_PROJECT]=f.PACKAGE_CUSTOM_FUNCTION_PROJECT;H[f.DEPLOY_CUSTOM_FUNCTION_PROJECT]=f.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Gf={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},vf={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},p_={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",IPC_SERVER_PORT:"IPC_SERVER_PORT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Ff=I_.invert(p_),T={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_RETAIN:"logging_rotation_retain",LOGGING_ROTATION_ROTATE:"logging_rotation_rotate",LOGGING_ROTATION_ROTATEINTERVAL:"logging_rotation_rotateInterval",LOGGING_ROTATION_ROTATEMODULE:"logging_rotation_rotateModule",LOGGING_ROTATION_TIMEZONE:"logging_rotation_timezone",LOGGING_ROTATION_WORKERINTERVAL:"logging_rotation_workerInterval",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},qf={hdb_root_key:T.ROOTPATH,hdb_root:T.ROOTPATH,server_port_key:T.OPERATIONSAPI_NETWORK_PORT,server_port:T.OPERATIONSAPI_NETWORK_PORT,cert_key:T.OPERATIONSAPI_TLS_CERTIFICATE,certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:T.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:T.OPERATIONSAPI_NETWORK_HTTPS,https_on:T.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:T.OPERATIONSAPI_NETWORK_CORS,cors_on:T.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:T.LOGGING_LEVEL,log_level:T.LOGGING_LEVEL,log_path_key:T.LOGGING_ROOT,log_path:T.LOGGING_ROOT,log_daily_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate:T.LOGGING_ROTATION_ROTATE,log_rotate_max_size:T.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:T.LOGGING_ROTATION_RETAIN,log_rotate_compress:T.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:T.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:T.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:T.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:T.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:T.LOGGING_ROTATION_TIMEZONE,props_env_key:T.OPERATIONSAPI_NODEENV,node_env:T.OPERATIONSAPI_NODEENV,clustering_node_name_key:T.CLUSTERING_NODENAME,node_name:T.CLUSTERING_NODENAME,clustering_enabled_key:T.CLUSTERING_ENABLED,clustering:T.CLUSTERING_ENABLED,max_http_threads:T.HTTP_THREADS,max_hdb_processes:T.HTTP_THREADS,server_timeout_key:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:T.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:T.LOGGING_AUDITLOG,disable_transaction_log:T.LOGGING_AUDITLOG,operation_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:T.IPC_NETWORK_PORT,custom_functions_enabled_key:T.CUSTOMFUNCTIONS_ENABLED,custom_functions:T.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:T.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:T.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:T.HTTP_THREADS,log_to_file:T.LOGGING_FILE,log_to_stdstreams:T.LOGGING_STDSTREAMS,run_in_foreground:T.OPERATIONSAPI_FOREGROUND,local_studio_on:T.LOCALSTUDIO_ENABLED,clustering_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:T.CLUSTERING_USER,clustering_enabled:T.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:T.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:T.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:T.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:T.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:T.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:T.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:T.CLUSTERING_NODENAME,clustering_tls_certificate:T.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:T.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:T.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:T.CLUSTERING_TLS_INSECURE,customfunctions_enabled:T.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:T.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:T.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:T.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:T.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:T.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:T.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:T.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:T.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:T.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:T.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:T.CUSTOMFUNCTIONS_NODEENV,http_threads:T.HTTP_THREADS,customfunctions_processes:T.HTTP_THREADS,customfunctions_root:T.CUSTOMFUNCTIONS_ROOT,ipc_network_port:T.IPC_NETWORK_PORT,localstudio_enabled:T.LOCALSTUDIO_ENABLED,logging_file:T.LOGGING_FILE,logging_level:T.LOGGING_LEVEL,logging_root:T.LOGGING_ROOT,logging_rotation_compress:T.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:T.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:T.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:T.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:T.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:T.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:T.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:T.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:T.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:T.LOGGING_STDSTREAMS,logging_auditlog:T.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:T.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:T.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:T.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:T.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:T.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:T.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:T.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:T.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:T.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:T.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:T.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:T.OPERATIONSAPI_NODEENV,operationsapi_root:T.ROOTPATH,rootpath:T.ROOTPATH,storage_writeasync:T.STORAGE_WRITEASYNC,storage_overlappingsync:T.STORAGE_OVERLAPPINGSYNC},Vf={csv_file_load:"csv_file_load",csv_data_load:f.CSV_DATA_LOAD,csv_url_load:f.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},xf={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Yf={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},kf={FILE_SYSTEM:"fs",LMDB:"lmdb"},Kf={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},$f={DEVELOPMENT:8192,DEFAULT:512},Wf={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Qf={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Jf={ENOENT:"ENOENT",EACCES:"EACCES"},C_={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Zf="__clustering__",Xf=Object.values(C_),zf=15984864e5,b_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},jf=I_.invert(b_),eR={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},tR=111,rR=`\r
|
|
2
2
|
`,sR={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},nR=["*","%"],iR="unauthorized_access",aR="func_val",oR={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},_R={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},cR="hdb_ipc_server",uR="hdb_ipc_client_",ER={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"},lR={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},dR={STOPPED:"stopped",ONLINE:"online"},SR="3.x.x";L_.exports={LOCAL_HARPERDB_OPERATIONS:H,HDB_SUPPORT_ADDRESS:m_,HDB_SUPPORT_URL:O_,HDB_PRICING_URL:Hh,SUPPORT_HELP_MSG:Gh,LICENSE_HELP_MSG:g_,HDB_PROC_NAME:f_,HDB_PROC_DESCRIPTOR:Wi,CLUSTERING_LEAF_PROC_DESCRIPTOR:Us,CLUSTERING_HUB_PROC_DESCRIPTOR:ys,SYSTEM_SCHEMA_NAME:rf,HASH_FOLDER_NAME:sf,HDB_HOME_DIR_NAME:nf,UPDATE_FILE_NAME:cf,LICENSE_KEY_DIR_NAME:of,BOOT_PROPS_FILE_NAME:_f,JOB_TYPE_ENUM:Vf,JOB_STATUS_ENUM:Mf,SYSTEM_TABLE_NAMES:bf,SYSTEM_TABLE_HASH_ATTRIBUTES:Lf,OPERATIONS_ENUM:f,VALID_S3_FILE_TYPES:Pf,S3_BUCKET_AUTH_KEYS:Bf,VALID_SQL_OPS_ENUM:Hf,GEO_CONVERSION_ENUM:vf,HDB_SETTINGS_NAMES:p_,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Ff,SERVICE_ACTIONS_ENUM:Gf,CLUSTER_MESSAGE_TYPE_ENUM:xf,CLUSTER_CONNECTION_DIRECTION_ENUM:Yf,CLUSTER_EVENTS_DEFS_ENUM:Wf,PERIOD_REGEX:kh,DOUBLE_PERIOD_REGEX:Kh,UNICODE_PERIOD:$h,FORWARD_SLASH_REGEX:Wh,UNICODE_FORWARD_SLASH:Qh,ESCAPED_FORWARD_SLASH_REGEX:Jh,ESCAPED_PERIOD_REGEX:Zh,ESCAPED_DOUBLE_PERIOD_REGEX:Xh,REG_KEY_FILE_NAME:Uf,RESTART_TIMEOUT_MS:lf,HDB_FILE_PERMISSIONS:df,SCHEMA_DIR_NAME:hf,TRANSACTIONS_DIR_NAME:ff,LIMIT_COUNT_NAME:Rf,ID_ATTRIBUTE_STRING:Af,INSERT_MODULE_ENUM:pf,UPGRADE_JSON_FIELD_NAMES_ENUM:Cf,RESTART_CODE:uf,RESTART_CODE_NUM:Ef,CLUSTER_OPERATIONS:It,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yf,HDB_INTERNAL_SC_CHANNEL_PREFIX:Le,INTERNAL_SC_CHANNELS:wf,CLUSTERING_MESSAGE_TYPES:eR,HDB_FILE_SUFFIX:af,BLOB_FOLDER_NAME:Sf,HDB_TRASH_DIR:Tf,ORIGINATOR_SET_VALUE:tR,LICENSE_VALUES:Kf,RAM_ALLOCATION_ENUM:$f,STORAGE_TYPES_ENUM:kf,TIME_STAMP_NAMES_ENUM:C_,TIME_STAMP_NAMES:Xf,PERMS_UPDATE_RELEASE_TIMESTAMP:zf,SEARCH_NOT_FOUND_MESSAGE:vh,SEARCH_ATTRIBUTE_NOT_FOUND:Fh,LICENSE_ROLE_DENIED_RESPONSE:qh,LICENSE_MAX_CONNS_REACHED:Vh,BASIC_LICENSE_MAX_NON_CU_ROLES:N_,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Bh,VALUE_SEARCH_COMPARATORS:b_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:jf,LICENSE_FILE_NAME:Df,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Qf,NEW_LINE:rR,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Yh,MOMENT_DAYS_TAG:zh,API_TURNOVER_SEC:jh,LOOPBACK:xh,CODE_EXTENSION:Br,WILDCARD_SEARCH_VALUE:ef,NODE_ERROR_CODES:Jf,JAVASCRIPT_EXTENSION:h_,PERMS_CRUD_ENUM:sR,UNAUTHORIZED_PERMISSION_NAME:iR,SEARCH_WILDCARDS:nR,FUNC_VAL:aR,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:oR,JWT_ENUM:_R,CLUSTERING_FLAG:Zf,RUN_LOG:Nf,INSTALL_LOG:mf,IPC_SERVER_MODULE:A_,HDB_IPC_SERVER:cR,IPC_EVENT_TYPES:ER,HDB_IPC_CLIENT_PREFIX:uR,CUSTOM_FUNCTION_PROC_NAME:R_,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ws,SERVICES:lR,MEM_SETTING_KEY:tf,HDB_RESTART_SCRIPT:ph,PROCESS_DESCRIPTORS:$i,SERVICE_SERVERS:Uh,SERVICE_SERVERS_CWD:Ls,PROCESS_DESCRIPTORS_VALIDATE:wh,LAUNCH_SERVICE_SCRIPTS:Dh,LOG_LEVELS:Lh,PROCESS_NAME_ENV_PROP:Of,PROCESS_LOG_NAMES:bh,PM2_PROCESS_STATUSES:dR,CONFIG_PARAM_MAP:qf,CONFIG_PARAMS:T,HDB_CONFIG_FILE:Oh,HDB_DEFAULT_CONFIG_FILE:gh,ROLE_TYPES_ENUM:Mh,BOOT_PROP_PARAMS:gf,INSTALL_PROMPTS:If,HDB_ROOT_DIR_NAME:Ih,CLUSTERING_PROCESSES:yh,FOREGROUND_PID_FILE:Ch,PACKAGE_ROOT:Ye,PRE_4_0_0_VERSION:SR}});var D_=d((GD,U_)=>{"use strict";var w_=require("minimist");U_.exports=TR;function TR(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=y_(process.env),s=y_(w_(process.argv))):(r=process.env,s=w_(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let _=e[i];s[_]!==void 0?n[_]=s[_].toString().trim():r[_]!==void 0&&(n[_]=r[_].toString().trim())}return n}a(TR,"assignCMDENVVariables");function y_(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(y_,"objKeysToLowerCase")});var w=d((vD,F_)=>{"use strict";var Ft=require("fs-extra"),qt=require("path"),P_=require("yaml"),B_=require("properties-reader"),X=A(),hR=D_(),fR=require("os"),{PACKAGE_ROOT:zi}=A(),Ae={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ds=qt.join(zi,"logs"),pt=process.env.pm_id===void 0,RR=qt.join(zi,"config/yaml/",X.HDB_DEFAULT_CONFIG_FILE),ji=process.env.PROCESS_NAME===void 0?X.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,tr,ze,ct,Re,Zi,rr;rr===void 0&&H_();F_.exports={createLogFile:AR,notify:OR,fatal:gR,error:Xi,warn:IR,info:mR,debug:NR,trace:v_,setLogLevel:CR,log_level:Re};function H_(){try{if(rr===void 0){let e=pR();rr=B_(e),{level:Re,config_log_path:Zi,to_file:ze,to_stream:ct}=bR(rr.get("settings_path"))}}catch(e){if(rr=void 0,e.code===X.NODE_ERROR_CODES.ENOENT){let t=hR(Object.keys(X.CONFIG_PARAM_MAP),!0);for(let i in t){let o=X.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let _=t[i];if(o===X.CONFIG_PARAMS.LOGGING_LEVEL){Re=_;continue}if(o===X.CONFIG_PARAMS.LOGGING_STDSTREAMS){ct=_;continue}o===X.CONFIG_PARAMS.LOGGING_FILE&&(ze=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=LR();ze=ze===void 0?s:ze,ze=M_(ze),ct=ct===void 0?n:ct,ct=M_(ct),Re=Re===void 0?r:Re,Zi=Ds;return}throw Xi("Error initializing log settings"),Xi(e),e}}a(H_,"initLogSettings");function AR(e,t){if(!pt){v_("createLogFile should only be used if the process is not being managed by pm2");return}rr===void 0&&H_(),ji=t;let r;e===X.PROCESS_LOG_NAMES.INSTALL?r=Ds:r=Zi,ze&&(tr=qt.join(r,e),Ft.ensureFileSync(tr))}a(AR,"createLogFile");function Vt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let _=t[o];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,o<i&&(s+=" ")}return`{"process_name": "${ji}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
3
|
`}a(Vt,"createLogRecord");function G_(e){tr===void 0&&(ji=X.PROCESS_DESCRIPTORS.INSTALL,Ft.ensureDirSync(Ds),tr=qt.join(Ds,X.PROCESS_LOG_NAMES.INSTALL),Ft.ensureFileSync(tr)),Ft.appendFileSync(tr,e)}a(G_,"writeToLogFile");function Ms(e){ze&&G_(e),ct&&process.stdout.write(e)}a(Ms,"nonPm2LogStdOut");function ea(e){ze&&G_(e),ct&&process.stderr.write(e)}a(ea,"nonPm2LogStdErr");function mR(...e){if(Ae[Re]<=Ae.info){let t=Vt("info",e);if(pt){Ms(t);return}process.stdout.write(t)}}a(mR,"info");function v_(...e){if(Ae[Re]<=Ae.trace){let t=Vt("trace",e);if(pt){Ms(t);return}process.stdout.write(t)}}a(v_,"trace");function Xi(...e){if(Ae[Re]<=Ae.error){let t=Vt("error",e);if(pt){ea(t);return}process.stderr.write(t)}}a(Xi,"error");function NR(...e){if(Ae[Re]<=Ae.debug){let t=Vt("debug",e);if(pt){Ms(t);return}process.stdout.write(t)}}a(NR,"debug");function OR(...e){if(Ae[Re]<=Ae.notify){let t=Vt("notify",e);if(pt){Ms(t);return}process.stdout.write(t)}}a(OR,"notify");function gR(...e){if(Ae[Re]<=Ae.fatal){let t=Vt("fatal",e);if(pt){ea(t);return}process.stderr.write(t)}}a(gR,"fatal");function IR(...e){if(Ae[Re]<=Ae.warn){let t=Vt("warn",e);if(pt){ea(t);return}process.stderr.write(t)}}a(IR,"warn");function pR(){let e;try{e=fR.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qt.join(e,X.HDB_HOME_DIR_NAME,X.BOOT_PROPS_FILE_NAME);return Ft.existsSync(t)||(t=qt.join(zi,"utility/hdb_boot_properties.file")),t}a(pR,"getPropsFilePath");function CR(e){Re=e}a(CR,"setLogLevel");function M_(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(M_,"autoCastBoolean");function bR(e){try{if(e.includes("config/settings.js")){let o=B_(e);return{level:o.get(X.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qt.dirname(o.get(X.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(X.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(X.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=P_.parseDocument(Ft.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===X.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(bR,"getLogConfig");function LR(){try{let e=P_.parseDocument(Ft.readFileSync(RR,"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(LR,"getDefaultConfig")});var V_=d((FD,q_)=>{"use strict";var wR=require("util"),yR=require("path"),UR=require("child_process"),DR=wR.promisify(UR.execFile),MR=1e3*1e3*10;q_.exports={findPs:PR};async function PR(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await DR("ps",["wwxo",`pid,${r}`],{maxBuffer:MR});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:yR.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(PR,"findPs")});var Ee=d((qD,Y_)=>{"use strict";var BR="__dbis__",HR="__environment_name__",GR="__dbi_defintion__",vR={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},FR=["__createdtime__","__updatedtime__"],qR="\uFFFF",x_={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},VR=Object.values(x_);Y_.exports={INTERNAL_DBIS_NAME:BR,DBI_DEFINITION_NAME:GR,SEARCH_TYPES:vR,TIMESTAMP_NAMES:FR,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HR,TRANSACTIONS_DBI_NAMES_ENUM:x_,TRANSACTIONS_DBIS:VR,OVERFLOW_MARKER:qR}});var Me=d((VD,z_)=>{"use strict";var k_=A(),K_=Ee(),$_={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},W_=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Q_={500:W_("There was an error processing your request."),400:"Invalid request"},xR=Q_[$_.INTERNAL_SERVER_ERROR],YR={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KR={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},$R={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ARRAY:"ids must be an array",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${K_.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${K_.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},WR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${k_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${k_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},J_={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},QR={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},JR={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},ZR={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},XR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zR={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Z_={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},X_={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},jR={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},eA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tA={...J_,...KR,...YR,...QR,...JR,...ZR,...XR,...zR,...WR,...Z_,...X_,...jR,...eA,...kR};z_.exports={CHECK_LOGS_WRAPPER:W_,HDB_ERROR_MSGS:tA,DEFAULT_ERROR_MSGS:Q_,DEFAULT_ERROR_RESP:xR,HTTP_STATUS_CODES:$_,LMDB_ERRORS_ENUM:$R,AUTHENTICATION_ERROR_MSGS:J_,VALIDATION_ERROR_MSGS:Z_,IPC_ERRORS:X_}});var J=d((xD,tc)=>{"use strict";var sr=Me(),rA=w(),sA=A(),Hr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,j_),this.http_resp_code=s||sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(sr.DEFAULT_ERROR_MSGS[s]?sr.DEFAULT_ERROR_MSGS[s]:sr.DEFAULT_ERROR_MSGS[sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&rA[n](i)}};a(Hr,"HdbError");function j_(e,t,r,s=sA.LOG_LEVELS.ERROR,n=null,i=!1){if(ec(e))return e;let o=new Hr(e,t,r,s,n);return i&&delete o.stack,o}a(j_,"handleHDBError");function ec(e){return e.__proto__.constructor.name===Hr.name}a(ec,"isHDBError");tc.exports={isHDBError:ec,handleHDBError:j_,hdb_errors:sr}});var p=d((kD,hc)=>{"use strict";var ta=require("path"),nA=require("fs-extra"),ee=w(),rc=require("fs-extra"),iA=require("truncate-utf8-bytes"),Gr=require("os"),aA=require("net"),oA=require("recursive-iterator"),se=A(),oc=V_(),sc=require("papaparse"),Ps=require("moment"),{inspect:_A}=require("util"),nc=require("is-number"),YD=require("lodash"),{hdb_errors:Bs}=J(),_c=require("util").promisify(setTimeout),cA=100,uA=5,EA="",lA=4,ic=255,ac={true:!0,false:!1,undefined:null,null:null,NaN:NaN};hc.exports={isEmpty:we,isEmptyOrZeroLength:je,arrayHasEmptyValues:TA,arrayHasEmptyOrZeroLengthValues:hA,buildFolderPath:fA,isBoolean:cc,errorizeMessage:dA,stripFileExtension:AA,autoCast:mA,autoCastJSONDeep:ra,removeDir:OA,compareVersions:gA,isCompatibleDataVersion:IA,escapeRawValue:Ec,unescapeValue:pA,stringifyProps:CA,valueConverter:bA,timeoutPromise:wA,isClusterOperation:UA,getClusterUser:PA,sendTransactionToSocketCluster:DA,checkGlobalSchemaTable:MA,getHomeDir:lc,getPropsFilePath:LA,promisifyPapaParse:BA,removeBOM:dc,createEventPromise:HA,checkProcessRunning:GA,checkSchemaTableExist:vA,checkSchemaExists:Sc,checkTableExists:Tc,getStartOfTomorrowInSeconds:FA,getLimitKey:qA,isObject:RA,isNotEmptyAndHasValue:SA,autoCasterIsNumberCheck:uc,backtickASTSchemaItems:VA,isPortTaken:yA,stopProcess:xA,createForkArgs:YA,autoCastBoolean:kA,async_set_timeout:_c,getTableHashAttribute:KA,doesSchemaExist:$A,doesTableExist:WA,stringifyObj:QA,ms_to_time:JA,PACKAGE_ROOT:se.PACKAGE_ROOT};function dA(e){return e instanceof Error?e:new Error(e)}a(dA,"errorizeMessage");function we(e){return e==null}a(we,"isEmpty");function SA(e){return!we(e)&&(e||e===0||e===""||cc(e))}a(SA,"isNotEmptyAndHasValue");function je(e){return we(e)||e.length===0||e.size===0}a(je,"isEmptyOrZeroLength");function TA(e){if(we(e))return!0;for(let t=0;t<e.length;t++)if(we(e[t]))return!0;return!1}a(TA,"arrayHasEmptyValues");function hA(e){if(je(e))return!0;for(let t=0;t<e.length;t++)if(je(e[t]))return!0;return!1}a(hA,"arrayHasEmptyOrZeroLengthValues");function fA(...e){try{return e.join(ta.sep)}catch{console.error(e)}}a(fA,"buildFolderPath");function cc(e){return we(e)?!1:e===!0||e===!1}a(cc,"isBoolean");function RA(e){return we(e)?!1:typeof e=="object"}a(RA,"isObject");function AA(e){return je(e)?EA:e.slice(0,-lA)}a(AA,"stripFileExtension");function mA(e){return we(e)||e===""||typeof e!="string"?e:ac[e]!==void 0?ac[e]:uc(e)===!0?Number(e):e}a(mA,"autoCast");function NA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(NA,"autoCastJSON");function ra(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=ra(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ra(r);s!==r&&(e[t]=s)}return e}else return NA(e)}a(ra,"autoCastJSONDeep");function uc(e){if(e.startsWith("0.")&&nc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&nc(e))}a(uc,"autoCasterIsNumberCheck");async function OA(e){if(je(e))throw new Error(`Directory path: ${e} does not exist`);try{await rc.emptyDir(e),await rc.remove(e)}catch(t){throw ee.error(`Error removing files in ${e} -- ${t}`),t}}a(OA,"removeDir");function gA(e,t){if(je(e)){ee.info("Invalid current version sent as parameter.");return}if(je(t)){ee.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(gA,"compareVersions");function IA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(IA,"isCompatibleDataVersion");function Ec(e){if(we(e))return e;let t=String(e);return t==="."?se.UNICODE_PERIOD:t===".."?se.UNICODE_PERIOD+se.UNICODE_PERIOD:t.replace(se.FORWARD_SLASH_REGEX,se.UNICODE_FORWARD_SLASH)}a(Ec,"escapeRawValue");function pA(e){if(we(e))return e;let t=String(e);return t===se.UNICODE_PERIOD?".":t===se.UNICODE_PERIOD+se.UNICODE_PERIOD?"..":String(e).replace(se.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(pA,"unescapeValue");function CA(e,t){if(we(e))return ee.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Gr.EOL}!je(s)&&s[0]===";"?r+=" "+s+n+Gr.EOL:je(s)||(r+=s+"="+n+Gr.EOL)}catch{ee.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(CA,"stringifyProps");function bA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){ee.error(n),t=e}let r=String(Ec(t)),s=Buffer.byteLength(r)>ic?iA(r,ic)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(bA,"valueConverter");function lc(){let e;try{e=Gr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(lc,"getHomeDir");function LA(){let e=ta.join(lc(),se.HDB_HOME_DIR_NAME,se.BOOT_PROPS_FILE_NAME);return nA.existsSync(e)||(e=ta.join(__dirname,"../","hdb_boot_properties.file")),e}a(LA,"getPropsFilePath");function wA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wA,"timeoutPromise");async function yA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=aA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(yA,"isPortTaken");function UA(e){try{return se.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ee.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UA,"isClusterOperation");function DA(e,t,r){if(global.hdb_socket_client!==void 0){ee.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=se.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(DA,"sendTransactionToSocketCluster");function MA(e,t){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(MA,"checkGlobalSchemaTable");function PA(e,t){if(we(t)){ee.warn("No CLUSTERING_USER defined, clustering disabled");return}if(we(e)||je(e)){ee.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){ee.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ee.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(PA,"getClusterUser");function BA(){sc.parsePromise=function(e,t){return new Promise(function(r,s){sc.parse(e,{header:!0,transformHeader:dc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(BA,"promisifyPapaParse");function dc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dc,"removeBOM");function HA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ee.info(`Got cluster status event response: ${_A(n)}`);try{i.cancel()}catch{ee.error("Error trying to cancel timeout.")}s(n)})})}a(HA,"createEventPromise");async function GA(e){let t=!0,r=0;do await _c(cA*r++),(await oc.findPs(e)).length>0&&(t=!1);while(t&&r<uA);if(t)throw new Error(`process ${e} was not started`)}a(GA,"checkProcessRunning");function vA(e,t){let r=Sc(e);if(r)return r;let s=Tc(e,t);if(s)return s}a(vA,"checkSchemaTableExist");function Sc(e){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Sc,"checkSchemaExists");function Tc(e,t){if(!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tc,"checkTableExists");function FA(){let e=Ps().utc().add(1,se.MOMENT_DAYS_TAG).startOf(se.MOMENT_DAYS_TAG).unix(),t=Ps().utc().unix();return e-t}a(FA,"getStartOfTomorrowInSeconds");function qA(){return Ps().utc().format("DD-MM-YYYY")}a(qA,"getLimitKey");function VA(e){try{let t=new oA(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ee.error("Got an error back ticking items."),ee.error(t)}}a(VA,"backtickASTSchemaItems");async function xA(e){let t=Gr.userInfo();(await oc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ee.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(xA,"stopProcess");function YA(e){return[e]}a(YA,"createForkArgs");function kA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kA,"autoCastBoolean");function KA(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(KA,"getTableHashAttribute");function $A(e){return global?.hdb_schema?.[e]!==void 0}a($A,"doesSchemaExist");function WA(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(WA,"doesTableExist");function QA(e){try{return JSON.stringify(e)}catch{return e}}a(QA,"stringifyObj");function JA(e){let t=Ps.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(JA,"ms_to_time")});var ut=d(($D,Rc)=>{"use strict";var{platform:KD}=require("os"),ZA="nats-server.zip",sa="nats-server",XA=process.platform==="win32"?`${sa}.exe`:sa,na="HDB",zA=/^[^\s.,*>]+$/,fc="__request__",jA=a(e=>`${e}.${fc}`,"REQUEST_SUBJECT"),em={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tm={HUB:"hub.pid",LEAF:"leaf.pid"},rm={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sm={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:na,deliver_subject:"__HDB__.WORKQUEUE"},nm={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:na,deliver_subject:"HDB.SCHEMAQUEUE"},im={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:na,deliver_subject:"HDB.USERQUEUE"},am={SUCCESS:"success",ERROR:"error"},om={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},_m={TXN:"txn",MSGID:"msgid"};Rc.exports={NATS_SERVER_ZIP:ZA,NATS_SERVER_NAME:sa,NATS_BINARY_NAME:XA,PID_FILES:tm,NATS_CONFIG_FILES:em,SERVER_SUFFIX:rm,WORK_QUEUE_CONSUMER_NAMES:sm,SCHEMA_QUEUE_CONSUMER_NAMES:nm,USER_QUEUE_CONSUMER_NAMES:im,NATS_TERM_CONSTRAINTS_RX:zA,REQUEST_SUFFIX:fc,UPDATE_REMOTE_RESPONSE_STATUSES:am,CLUSTER_STATUS_STATUSES:om,REQUEST_SUBJECT:jA,SUBJECT_PREFIXES:_m}});var mc=d((WD,Ac)=>{"use strict";var cm=ut(),Hs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+cm.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(Hs,"HubConfigObject");Ac.exports=Hs});var gc=d((QD,Oc)=>{"use strict";var Nc=ut(),Gs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+Nc.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Nc.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(Gs,"LeafConfigObject");Oc.exports=Gs});var pc=d((JD,Ic)=>{"use strict";var vs=class{constructor(t,r){this.user=t,this.password=r}};a(vs,"HdbUserObject");Ic.exports=vs});var bc=d((ZD,Cc)=>{"use strict";var um=ut(),Fs=class{constructor(t,r){this.user=t+um.SERVER_SUFFIX.ADMIN,this.password=r}};a(Fs,"SysUserObject");Cc.exports=Fs});var nr=d((XD,yc)=>{"use strict";var wc=p(),Lc=A(),Vs=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ia=require("joi"),qs={schema_format:{pattern:Vs,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Em=ia.alternatives(ia.string().min(1).max(qs.schema_length.maximum).pattern(Vs).messages({"string.pattern.base":"{:#label} "+qs.schema_format.message}),ia.number()).required();function lm(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qs.schema_length.maximum?`'${e}' maximum of 250 characters`:Vs.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(lm,"checkValidTable");function dm(e,t){return wc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(dm,"validateSchemaExists");function Sm(e,t){let r=t.state.ancestors[0].schema;return wc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Sm,"validateTableExists");function Tm(e,t){return e.toLowerCase()===Lc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Lc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Tm,"validateSchemaName");yc.exports={common_validators:qs,schema_regex:Vs,hdb_schema_table:Em,validateSchemaExists:dm,validateTableExists:Sm,validateSchemaName:Tm,checkValidTable:lm}});var Et=d((zD,Uc)=>{"use strict";var me=require("validate.js");me.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||me.validators.type.checks[t](e)?null:` must be a '${t}' value`};me.validators.type.checks={Object:function(e){return me.isObject(e)&&!me.isArray(e)},Array:me.isArray,Integer:me.isInteger,Number:me.isNumber,String:me.isString,Date:me.isDate,Boolean:function(e){return typeof e=="boolean"}};me.validators.hasValidFileExt=function(e,t){return!me.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Uc.exports={validateObject:hm,validateObjectAsync:fm,validateBySchema:Rm};function hm(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=me(e,t,{format:"flat"});return r?new Error(r):null}a(hm,"validateObject");async function fm(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await me.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(fm,"validateObjectAsync");function Rm(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Rm,"validateBySchema")});var oa=d((jD,Mc)=>{var{hdb_schema_table:Dc}=nr(),Am=Et(),aa=require("joi"),mm={undefined:"undefined",null:"null"},Nm=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||mm[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),Om=aa.object({schema:Dc,table:Dc,records:aa.array().items(aa.object().custom(Nm)).required()});Mc.exports=function(e){return Am.validateBySchema(e,Om)}});var _a=d((eM,Pc)=>{"use strict";var xs=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(xs,"BridgeMethods");Pc.exports=xs});var xt=d((sM,vc)=>{"use strict";var Bc=Me().LMDB_ERRORS_ENUM,tM=require("lmdb"),gm=Ee(),rM=require("buffer").Buffer,Im=require("microtime"),{OVERFLOW_MARKER:Hc,MAX_SEARCH_KEY_LENGTH:Ys}=gm,Gc=["number","string","symbol","boolean","bigint"];function pm(e){if(!e)throw new Error(Bc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Bc.INVALID_ENVIRONMENT)}a(pm,"validateEnv");function Cm(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(Cm,"stringifyData");function bm(e){return e instanceof Date?e.valueOf():e}a(bm,"convertKeyValueToWrite");function Lm(e){if(e==null)return;if(Gc.includes(typeof e))return e.length>Ys?[e.slice(0,Ys)+Hc]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Gc.includes(typeof n)&&(n.length>Ys?t.push(n.slice(0,Ys)+Hc):t.push(n))}}return t}a(Lm,"getIndexedValues");function wm(){let e=Im.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(wm,"getMicroTime");vc.exports={validateEnv:pm,stringifyData:Cm,convertKeyValueToWrite:bm,getMicroTime:wm,getIndexedValues:Lm}});var qc=d((nM,Fc)=>{"use strict";var ks=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ks,"DBIDefinition");Fc.exports=ks});var xc=d((iM,Vc)=>{"use strict";var Ks=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ks,"OpenDBIObject");Vc.exports=Ks});var kc=d((aM,Yc)=>{"use strict";var $s=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a($s,"OpenEnvironmentObject");Yc.exports=$s});var $c=d((oM,Kc)=>{"use strict";var ym={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},Um="certificate.pem",Dm="privateKey.pem",Mm="ca.pem";Kc.exports={CERTIFICATE_VALUES:ym,CERTIFICATE_PEM_NAME:Um,PRIVATEKEY_PEM_NAME:Dm,CA_PEM_NAME:Mm}});var Jc=d((_M,Qc)=>{"use strict";var Pm=require("fs-extra"),U=require("joi"),Bm=require("os"),{boolean:ne,string:dt,number:et,array:ca}=U.types(),ke=require("path"),Hm=w(),Ws=p(),St=$c(),Gm=Et(),lt="keys",vm=St.CERTIFICATE_PEM_NAME,Fm=St.PRIVATEKEY_PEM_NAME,qm=St.CA_PEM_NAME,Vm=St.CERTIFICATE_PEM_NAME,xm=St.PRIVATEKEY_PEM_NAME,Ym=St.CA_PEM_NAME,km=St.CERTIFICATE_PEM_NAME,Km=St.PRIVATEKEY_PEM_NAME,$m=St.CA_PEM_NAME,Wm="log",Qm="custom_functions",Jm="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Zm="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xm="rootPath config parameter is undefined",zm="clustering.enabled config parameter is undefined",Ct=et.min(0).required(),Qs=ca.items({host:dt.required(),port:Ct}).empty(null),Ne;Qc.exports={configValidator:jm,routesValidator:nN,route_constraints:Qs};function jm(e){if(Ne=e.rootPath,Ws.isEmpty(Ne))throw Xm;let t=ne.required(),r=U.valid("production","development").required(),s=et.min(1).max(1e3).empty(null).default(sN),n=dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=U.custom(tN).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Wc),o=dt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(Ws.isEmpty(_))throw zm;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:Ct,routes:Qs}).required()}).required(),leafNodes:U.object({network:U.object({port:Ct}).required()}).required(),network:U.object({port:Ct}).required()}).required(),leafServer:U.object({network:U.object({port:Ct,routes:Qs}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:Ct})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ne.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ne.required(),dateFormat:dt.required(),maxSize:dt.custom(rN).required(),retain:et.min(0).required(),rotate:ne.required(),rotateInterval:dt.required(),rotateModule:ne.required(),timezone:dt.required(),workerInterval:et.min(1).required()}).required(),root:n,stdStreams:ne.required(),auditLog:ne.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ne.required(),network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ne.required(),overlappingSync:ne.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(jm,"configValidator");function eN(e){return Pm.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eN,"doesPathExist");function tN(e,t){U.assert(e,dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=eN(e);if(r)return t.message(r)}a(tN,"validatePemFile");function rN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jm);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(Zm)}a(rN,"validateRotationMaxSize");function sN(e,t){let r=t.state.path.join("."),s=Bm.cpus().length,n=s-1;return n===1&&s===2&&(n=s),Hm.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(sN,"setDefaultThreads");function Wc(e,t){if(!Ws.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Ws.isEmpty(Ne))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ke.join(Ne,Qm);case"logging.root":return ke.join(Ne,Wm);case"operationsApi.tls.certificate":return ke.join(Ne,lt,vm);case"operationsApi.tls.privateKey":return ke.join(Ne,lt,Fm);case"operationsApi.tls.certificateAuthority":return ke.join(Ne,lt,qm);case"customFunctions.tls.certificate":return ke.join(Ne,lt,Vm);case"customFunctions.tls.privateKey":return ke.join(Ne,lt,xm);case"customFunctions.tls.certificateAuthority":return ke.join(Ne,lt,Ym);case"clustering.tls.certificate":return ke.join(Ne,lt,km);case"clustering.tls.privateKey":return ke.join(Ne,lt,Km);case"clustering.tls.certificateAuthority":return ke.join(Ne,lt,$m);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function nN(e){let t=U.object({routes:Qs});return Gm.validateBySchema({routes:e},t)}a(nN,"routesValidator")});var vr=d((cM,ru)=>{"use strict";var Y=A(),Pe=p(),le=w(),{configValidator:iN,routesValidator:Zc}=Jc(),Ke=require("fs-extra"),aN=require("yaml"),ir=require("path"),oN=require("is-number"),Xs=require("properties-reader"),_N=require("lodash"),{handleHDBError:cN}=J(),{HTTP_STATUS_CODES:uN,HDB_ERROR_MSGS:Js}=Me(),{PACKAGE_ROOT:EN}=A(),lN="Unable to get config value because config is uninitialized",dN="Config successfully initialized",SN="Error backing up config file",TN="Empty parameter sent to getConfigValue",Xc=ir.join(EN,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),hN="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Zs,Oe;ru.exports={createConfigFile:fN,getDefaultConfig:RN,getConfigValue:zc,initConfig:jc,flattenConfig:Yt,updateConfigValue:eu,updateConfigObject:AN,getConfiguration:mN,setConfiguration:NN,readConfigFile:la,getClusteringRoutes:ON,initOldConfig:tu,getConfigFromFile:gN};function fN(e){let t=ar(Xc);Zs=Yt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=ua(o,e[i]);try{t.setIn([..._],c)}catch(u){le.error(u)}}}Ea(t);let r=t.toJSON();Oe=Yt(r);let s=t.getIn(["rootPath"]),n=ir.join(s,Y.HDB_CONFIG_FILE);Ke.createFileSync(n),Ke.writeFileSync(n,String(t)),le.trace(`Config file written to ${n}`)}a(fN,"createConfigFile");function RN(e){if(Zs===void 0){let r=ar(Xc);Zs=Yt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Zs[t.toLowerCase()]}a(RN,"getDefaultConfig");function zc(e){if(Pe.isEmpty(e)){le.error(TN);return}if(Oe===void 0){le.trace(lN);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oe[t.toLowerCase()]}a(zc,"getConfigValue");function jc(e=!1){if(Oe===void 0||e){let t=Pe.getPropsFilePath();try{Ke.accessSync(t,Ke.constants.F_OK|Ke.constants.R_OK)}catch(o){throw le.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Xs(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{tu(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=ar(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){le.trace(`HarperDB config file not found at ${s}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw le.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ea(n);let i=n.toJSON();Oe=Yt(i),le.trace(dN)}}a(jc,"initConfig");function Ea(e){let t=e.toJSON(),r=iN(t);if(r.error)throw Js.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(Ea,"validateConfig");function AN(e,t){Oe===void 0&&(Oe={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Oe[r.toLowerCase()]=t}a(AN,"updateConfigObject");function eu(e,t,r=void 0,s=!1,n=!1){Oe===void 0&&jc();let i=zc(Y.CONFIG_PARAM_MAP.hdb_root),o=ir.join(i,Y.HDB_CONFIG_FILE),_=ar(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=ua(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=ua(l,r[E]);try{_.setIn([...h],S)}catch(m){le.error(m)}}}Ea(_);let c=_.getIn(["rootPath"]),u=ir.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=ir.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Ke.copySync(o,E),le.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){le.error(SN),le.error(E)}Ke.writeFileSync(u,String(_)),n&&(Oe=Yt(_.toJSON())),le.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eu,"updateConfigValue");function Yt(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Yt(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Yt,"flattenConfig");function ua(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(oN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Pe.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Pe.autoCast(t)}a(ua,"castConfigValue");function mN(){let e=Pe.getPropsFilePath(),r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(mN,"getConfiguration");async function NN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return eu(void 0,void 0,n,!0),hN}catch(i){throw typeof i=="string"||i instanceof String?cN(i,i,uN.BAD_REQUEST,void 0,void 0,!0):i}}a(NN,"setConfiguration");function la(){let e=Pe.getPropsFilePath();try{Ke.accessSync(e,Ke.constants.F_OK|Ke.constants.R_OK)}catch(n){throw le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(la,"readConfigFile");function ar(e){return aN.parseDocument(Ke.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ar,"parseYamlDoc");function ON(){let e=la(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Pe.isEmptyOrZeroLength(t)?[]:t;let r=Zc(t);if(r)throw Js.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Pe.isEmptyOrZeroLength(s)?[]:s;let n=Zc(s);if(n)throw Js.CONFIG_VALIDATION(n.message);if(!Pe.isEmptyOrZeroLength(s)&&!Pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Js.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ON,"getClusteringRoutes");function tu(e){let t=Xs(e);Oe={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(Pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Oe[n]=ir.dirname(s):Oe[n]=s}return Oe}a(tu,"initOldConfig");function gN(e){let t=la();return _N.get(t,e.replaceAll("_","."))}a(gN,"getConfigFromFile")});var de=d((uM,nu)=>{"use strict";var da=require("fs-extra"),tt=require("path"),IN=require("os"),pN=require("properties-reader"),Fr=w(),or=p(),g=A(),zs=vr(),CN="Error initializing environment manager",js="BOOT_PROPS_FILE_PATH",su=!1,bN={[g.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Tt={};nu.exports={BOOT_PROPS_FILE_PATH:js,getHdbBasePath:LN,setHdbBasePath:wN,get:yN,initSync:DN,setProperty:P,initTestEnvironment:MN};function LN(){return Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LN,"getHdbBasePath");function wN(e){Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(wN,"setHdbBasePath");function yN(e){let t=zs.getConfigValue(e);return t===void 0?Tt[e]:t}a(yN,"get");function P(e,t){bN[e]&&(Tt[e]=t),zs.updateConfigObject(e,t)}a(P,"setProperty");function UN(){let e;try{e=or.getPropsFilePath(),da.accessSync(e,da.constants.F_OK|da.constants.R_OK),su=!0;let t=pN(e);return Tt[g.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(g.HDB_SETTINGS_NAMES.INSTALL_USER),Tt[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Tt[js]=e,!0}catch{return Fr.trace(`Environment manager found no properties file at ${e}`),!1}}a(UN,"doesPropFileExist");function DN(e=!1){try{(su||UN())&&(zs.initConfig(e),Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zs.getConfigValue(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Fr.error(CN),Fr.error(t),console.error(t),process.exit(1)}}a(DN,"initSync");function MN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=tt.join(__dirname,"../../","unitTests");Tt[js]=tt.join(c,"hdb_boot_properties.file"),P(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tt.join(c,"settings.test")),P(g.HDB_SETTINGS_NAMES.INSTALL_USER,IN.userInfo().username),P(g.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.HDB_SETTINGS_NAMES.CERT_KEY,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tt.join(c,"envDir","log")),P(g.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(g.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,tt.join(c,"envDir")),P(g.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,or.isEmpty(n)?!0:n),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,or.isEmpty(n)?!0:n),P(g.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(g.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,or.isEmpty(i)?!1:i),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,or.isEmpty(i)?!1:i),P(g.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(g.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(g.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,tt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(g.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,or.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(g.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(g.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(g.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${js}. Please check your boot props and settings files`;Fr.fatal(r),Fr.error(t)}}a(MN,"initTestEnvironment")});var F=d((lM,hu)=>{"use strict";var Sa=require("lmdb"),Be=require("fs-extra"),$e=require("path"),tn=xt(),iu=w(),ie=Me().LMDB_ERRORS_ENUM,rn=qc(),Ta=xc(),au=kc(),bt=Ee(),EM=A(),qr=de();qr.initSync();var ou=qr.get("STORAGE_WRITEASYNC")===!0||qr.get("STORAGE_WRITEASYNC")==="true"||qr.get("STORAGE_WRITEASYNC")==="TRUE",_u=qr.get("STORAGE_OVERLAPPINGSYNC"),cu=1024*1024*1024,uu=1e4,Eu=1e3,We=bt.INTERNAL_DBIS_NAME,lu=bt.DBI_DEFINITION_NAME,PN="data.mdb",BN="lock.mdb",Vr=".mdb",HN="-lock",en=class{constructor(t,r,s=!1){this.dbi=He(t,r),this.key_type=this.dbi[bt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[bt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Sa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(en,"TransactionCursor");function ha(e,t){if(e===void 0)throw new Error(ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ie.ENV_NAME_REQUIRED)}a(ha,"pathEnvNameValidation");async function fa(e,t,r=!0){try{await Be.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ie.INVALID_BASE_PATH):s}try{let s=$e.join(e,t+Vr);return await Be.access(s,Be.constants.R_OK|Be.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Be.access($e.join(e,t,PN),Be.constants.R_OK|Be.constants.F_OK),$e.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ie.INVALID_ENVIRONMENT)}else throw new Error(ie.INVALID_ENVIRONMENT);throw s}}a(fa,"validateEnvironmentPath");function sn(e,t){if(tn.validateEnv(e),t===void 0)throw new Error(ie.DBI_NAME_REQUIRED)}a(sn,"validateEnvDBIName");async function GN(e,t,r=!1,s=!1){ha(e,t),t=t.toString();try{return await fa(e,t,s),Ra(e,t,r)}catch(n){if(n.message===ie.INVALID_ENVIRONMENT){let i=$e.join(e,t);await Be.mkdirp(s?i:e);let o=new au(s?i:i+Vr,cu,uu,Eu,!1,ou,_u),_=Sa.open(o);_.dbis=Object.create(null);let c=new Ta(!1);_.openDB(We,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Aa(e,t,r);return _[bt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(GN,"createEnvironment");async function vN(e,t,r,s=!0){let n=await Ra(e,t);if(r===void 0)throw new Error(ie.DESTINATION_PATH_REQUIRED);try{await Be.access($e.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(vN,"copyEnvironment");async function Ra(e,t,r=!1){ha(e,t),t=t.toString();let s=Aa(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fa(e,t),i=$e.join(e,t+Vr),o=n!=i,_=new au(n,cu,uu,Eu,o,ou,_u),c=Sa.open(_);c.dbis=Object.create(null);let u=Su(c);for(let E=0;E<u.length;E++)He(c,u[E]);return c[bt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ra,"openEnvironment");async function FN(e,t,r=!1){ha(e,t),t=t.toString();let s=$e.join(e,t+Vr),n=await fa(e,t);if(global.lmdb_map!==void 0){let i=Aa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await du(o),delete global.lmdb_map[i]}}await Be.remove(n),await Be.remove(n===s?n+HN:$e.join($e.dirname(n),BN))}a(FN,"deleteEnvironment");async function du(e){tn.validateEnv(e);let t=e[bt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(du,"closeEnvironment");function Aa(e,t,r=!1){let n=`${$e.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Aa,"getCachedEnvironmentName");function qN(e){tn.validateEnv(e);let t=Object.create(null),r=He(e,We);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==We)try{t[s]=Object.assign(new rn,n)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(qN,"listDBIDefinitions");function Su(e){tn.validateEnv(e);let t=[],r=He(e,We);for(let{key:s}of r.getRange({start:!1}))s!==We&&t.push(s);return t}a(Su,"listDBIs");function VN(e,t){let s=He(e,We).getEntry(t),n=new rn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(VN,"getDBIDefinition");function Tu(e,t,r,s=!1){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return He(e,t)}catch(n){if(n.message===ie.DBI_DOES_NOT_EXIST){let i=new Ta(r,s===!0),o=e.openDB(t,i),_=new rn(r===!0,s);return o[lu]=_,He(e,We).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Tu,"createDBI");function He(e,t){if(sn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==We?r=VN(e,t):r=new rn,r===void 0)throw new Error(ie.DBI_DOES_NOT_EXIST);let s;try{let n=new Ta(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ie.DBI_DOES_NOT_EXIST):n}return s[lu]=r,e.dbis[t]=s,s}a(He,"openDBI");function xN(e,t){sn(e,t),t=t.toString();let r=He(e,t),s=r.getStats();return r[bt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(xN,"statDBI");async function YN(e,t){try{let r=$e.join(e,t+Vr);return(await Be.stat(r)).size}catch{throw new Error(ie.INVALID_ENVIRONMENT)}}a(YN,"environmentDataSize");function kN(e,t){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_DROP_INTERNAL_DBIS_NAME);He(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],He(e,We).removeSync(t)}a(kN,"dropDBI");function KN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{He(e,n)}catch(i){if(i.message===ie.DBI_DOES_NOT_EXIST)Tu(e,n,n!==t,n===t);else throw i}}}a(KN,"initializeDBIs");hu.exports={openDBI:He,openEnvironment:Ra,createEnvironment:GN,listDBIs:Su,listDBIDefinitions:qN,createDBI:Tu,dropDBI:kN,statDBI:xN,deleteEnvironment:FN,initializeDBIs:KN,TransactionCursor:en,environmentDataSize:YN,copyEnvironment:vN,closeEnvironment:du}});var Ru=d((dM,fu)=>{"use strict";var nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(nn,"InsertRecordsResponseObject");fu.exports=nn});var mu=d((SM,Au)=>{"use strict";var an=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(an,"UpdateRecordsResponseObject");Au.exports=an});var Ou=d((TM,Nu)=>{"use strict";var on=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(on,"UpsertRecordsResponseObject");Nu.exports=on});var _r=d((AM,Iu)=>{"use strict";var $N=F(),WN=Ru(),QN=mu(),JN=Ou(),Yr=xt(),xr=Me().LMDB_ERRORS_ENUM,ZN=Ee(),Lt=A(),XN=p(),zN=require("uuid"),hM=require("lmdb"),{handleHDBError:jN,hdb_errors:eO}=J(),{OVERFLOW_MARKER:fM,MAX_SEARCH_KEY_LENGTH:RM}=ZN,ma=Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,kt=Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new WN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];gu(u,!0,n);let E=rO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Oa(o,_,s,i)}a(tO,"insertRecords");function rO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Lt.FUNC_VAL],s[o]=_)}let c=Yr.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[kt])})}a(rO,"insertRecord");function sO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(sO,"removeSkippedRecords");function gu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[kt]))&&(e[kt]=s),t===!0?(r===!0||!Number.isInteger(e[ma]))&&(e[ma]=s):delete e[ma]}a(gu,"setTimestamps");function Na(e,t,r){r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),$N.initializeDBIs(e,t,r)}a(Na,"initializeTransaction");async function nO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new QN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=ga(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Oa(_,c,s,i,o)}a(nO,"updateRecords");async function iO(e,t,r,s,n=!0){try{Ia(e,t,r,s)}catch(c){throw jN(c,c.message,eO.HTTP_STATUS_CODES.BAD_REQUEST)}Na(e,t,r);let i=new JN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;XN.isEmpty(u[t])?(E=zN.v4(),u[t]=E):E=u[t];let l=ga(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Oa(o,_,s,i)}a(iO,"upsertRecords");async function Oa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Yr.getMicroTime(),sO(r,n),s}a(Oa,"finalizeWrite");function ga(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(gu(r,!E,o),Number.isInteger(r[kt])&&u[kt]>r[kt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let N=r[m],C=e.dbis[m];if(C===void 0)continue;let fe=u[m];if(typeof N=="function"){let $=N([[u]]);Array.isArray($)&&(N=$[0][Lt.FUNC_VAL],r[m]=N)}if(N===fe)continue;let G=Yr.getIndexedValues(fe);if(G)for(let $=0,xe=G.length;$<xe;$++)C.remove(G[$],s);if(G=Yr.getIndexedValues(N),G)for(let $=0,xe=G.length;$<xe;$++)C.put(G[$],s)}let S=Object.assign({},u,r);_.put(s,S,S[kt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:ga(e,t,r,s,n,i,o))}a(ga,"updateUpsertRecord");function aO(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(xr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xr.WRITE_ATTRIBUTES_REQUIRED):new Error(xr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(aO,"validateBasic");function Ia(e,t,r,s){if(aO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(xr.RECORDS_REQUIRED):new Error(xr.RECORDS_MUST_BE_ARRAY)}a(Ia,"validateWrite");Iu.exports={insertRecords:tO,updateRecords:nO,upsertRecords:iO}});var x=d((mM,Cu)=>{"use strict";var pa=A(),cr=de(),Ca=require("path");cr.initSync();var _n,cn,un;function pu(){if(_n!==void 0)return _n;if(cr.getHdbBasePath()!==void 0)return _n=Ca.join(cr.getHdbBasePath(),pa.SCHEMA_DIR_NAME),_n}a(pu,"getBaseSchemaPath");function oO(){if(cn!==void 0)return cn;if(cr.getHdbBasePath()!==void 0)return cn=Ca.join(pu(),pa.SYSTEM_SCHEMA_NAME),cn}a(oO,"getSystemSchemaPath");function _O(){if(un!==void 0)return un;if(cr.getHdbBasePath()!==void 0)return un=Ca.join(cr.getHdbBasePath(),pa.TRANSACTIONS_DIR_NAME),un}a(_O,"getTransactionAuditStorePath");Cu.exports={getBaseSchemaPath:pu,getSystemSchemaPath:oO,getTransactionAuditStorePath:_O}});var Kt=d((NM,cO)=>{cO.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ba=d((OM,bu)=>{var{common_validators:wt}=nr(),kr=Et(),Qe="is required",v={schema:{presence:!0,format:wt.schema_format,length:wt.schema_length},table:{presence:!0,format:wt.schema_format,length:wt.schema_length},attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length},hash_attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length}};function Kr(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Kr,"makeAttributesStrings");function uO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence=!1,v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(uO,"schema_object");function EO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(EO,"table_object");function lO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence={message:Qe},kr.validateObject(e,v)}a(lO,"create_table_object");function dO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence={message:Qe},v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(dO,"attribute_object");function SO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(SO,"describe_table");function TO(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(TO,"validateTableResidence");bu.exports={schema_object:uO,create_table_object:lO,table_object:EO,attribute_object:dO,describe_table:SO,validateTableResidence:TO}});var wu=d((gM,Lu)=>{"use strict";var hO=require("uuid"),En=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(En,"CreateAttributeObject");Lu.exports=En});var dn=d((IM,yu)=>{"use strict";var fO=wu(),ln=class extends fO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(ln,"LMDBCreateAttributeObject");yu.exports=ln});var Du=d((pM,Uu)=>{"use strict";Uu.exports=AO;var RO="inserted";function AO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===RO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(AO,"returnObject")});var Sn=d((CM,Pu)=>{"use strict";var mO=A(),La=F(),NO=_r(),{getSystemSchemaPath:OO,getBaseSchemaPath:gO}=x(),IO=require("path"),pO=Kt(),CO=ba(),bO=dn(),LO=Du(),{handleHDBError:wO,hdb_errors:yO}=J(),UO=p(),wa=pO.hdb_attribute,Mu=[];for(let e=0;e<wa.attributes.length;e++)Mu.push(wa.attributes[e].attribute);var DO="inserted";Pu.exports=MO;async function MO(e){let t=CO.attribute_object(e);if(t)throw wO(new Error,t.message,yO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=UO.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new bO(e.schema,e.table,e.attribute,e.id);try{let n=await La.openEnvironment(IO.join(gO(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);La.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await La.openEnvironment(OO(),mO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await NO.insertRecords(i,wa.hash_attribute,Mu,[s]);return LO(DO,o,{records:[s]},_)}catch(n){throw n}}a(MO,"lmdbCreateAttribute")});var Tn=d((LM,Hu)=>{"use strict";var ht=p(),Bu=w(),bM=oa();Hu.exports=PO;function PO(e){if(ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ht.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(ht.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ht.isEmptyOrZeroLength(o[r]))throw Bu.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!ht.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Bu.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ht.isEmpty(o[r])&&o[r]!==""&&s.has(ht.autoCast(o[r]))&&(o.skip=!0),s.add(ht.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(PO,"insertUpdateValidate")});var fn=d((wM,Gu)=>{"use strict";var BO=A().OPERATIONS_ENUM,hn=class{constructor(t,r,s,n,i=void 0){this.operation=BO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(hn,"InsertObject");Gu.exports=hn});var An=d((UM,vu)=>{"use strict";var yM=fn(),Rn=A(),Ua=p(),ya=w(),HO=require("uuid"),{handleHDBError:$r,hdb_errors:GO}=J(),{HDB_ERROR_MSGS:Wr,HTTP_STATUS_CODES:Qr}=GO;vu.exports=vO;function vO(e,t,r){for(let n=0;n<t.length;n++)FO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qO(i,r,e.operation)}}a(vO,"processRows");function FO(e){if(Buffer.byteLength(String(e))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw $r(new Error,Wr.ATTR_NAME_LENGTH_ERR(e),Qr.BAD_REQUEST,void 0,void 0,!0);if(Ua.isEmptyOrZeroLength(e)||Ua.isEmpty(e.trim()))throw $r(new Error,Wr.ATTR_NAME_NULLISH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(FO,"validateAttribute");function qO(e,t,r){if(!e.hasOwnProperty(t)||Ua.isEmptyOrZeroLength(e[t])){if(r===Rn.OPERATIONS_ENUM.INSERT||r===Rn.OPERATIONS_ENUM.UPSERT){e[t]=HO.v4();return}throw ya.error("Update transaction aborted due to record with no hash value:",e),$r(new Error,Wr.RECORD_MISSING_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ya.error(e),$r(new Error,Wr.HASH_VAL_LENGTH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ya.error(e),$r(new Error,Wr.INVALID_FORWARD_SLASH_IN_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(qO,"validateHash")});var qu=d((DM,Fu)=>{"use strict";var mn=class{constructor(t,r){this.type=t,this.message=r}};a(mn,"IPCEventObject");Fu.exports=mn});var Zr=d((MM,Vu)=>{"use strict";var VO=w(),Da=p(),xO=A(),{IPC_ERRORS:Jr}=Me();Vu.exports={sendIpcEvent:YO,validateEvent:kO,SchemaEventMsg:KO,UserEventMsg:$O};function YO(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):VO.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(YO,"sendIpcEvent");function kO(e){if(typeof e!="object")return Jr.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Da.isEmpty(e.type))return Jr.MISSING_TYPE;if(!e.hasOwnProperty("message")||Da.isEmpty(e.message))return Jr.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Da.isEmpty(e.message.originator))return Jr.MISSING_ORIGIN;if(xO.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Jr.INVALID_EVENT(e.type)}a(kO,"validateEvent");function KO(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(KO,"SchemaEventMsg");function $O(e){this.originator=e}a($O,"UserEventMsg")});var On=d((BM,Ku)=>{"use strict";var xu=A(),PM=p(),Nn=w(),Yu=qu(),{sendIpcEvent:ku}=Zr();function WO(e){try{Nn.trace("signalSchemaChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.SCHEMA,e);ku(t)}catch(t){Nn.error(t)}}a(WO,"signalSchemaChange");function QO(e){try{Nn.trace("signalUserChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.USER,e);ku(t)}catch(t){Nn.error(t)}}a(QO,"signalUserChange");Ku.exports={signalSchemaChange:WO,signalUserChange:QO}});var gn=d((HM,Wu)=>{"use strict";var $u=p(),JO=A(),ZO=w(),XO=Sn(),zO=dn(),jO=On(),{SchemaEventMsg:eg}=Zr(),tg="already exists in";Wu.exports=rg;async function rg(e,t,r){try{if($u.isEmptyOrZeroLength(r))return r;let s=[];$u.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await sg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(rg,"lmdbCheckForNewAttributes");async function sg(e,t,r,s){let n=new zO(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ng(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(tg))ZO.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(sg,"createNewAttribute");async function ng(e){let t;try{return t=await XO(e),jO.signalSchemaChange(new eg(process.pid,JO.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ng,"createAttribute")});var ur=d((GM,Qu)=>{"use strict";var In=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(In,"LMDBTransactionObject");Qu.exports=In});var Zu=d((vM,Ju)=>{"use strict";var ig=ur(),ag=A().OPERATIONS_ENUM,pn=class extends ig{constructor(t,r,s,n,i=void 0){super(ag.INSERT,r,s,n,i),this.records=t}};a(pn,"LMDBInsertTransactionObject");Ju.exports=pn});var zu=d((FM,Xu)=>{"use strict";var og=ur(),_g=A().OPERATIONS_ENUM,Cn=class extends og{constructor(t,r,s,n,i,o=void 0){super(_g.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Cn,"LMDBUpdateTransactionObject");Xu.exports=Cn});var eE=d((qM,ju)=>{"use strict";var cg=ur(),ug=A().OPERATIONS_ENUM,bn=class extends cg{constructor(t,r,s,n,i,o=void 0){super(ug.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(bn,"LMDBUpsertTransactionObject");ju.exports=bn});var rE=d((VM,tE)=>{"use strict";var Eg=ur(),lg=A().OPERATIONS_ENUM,Ln=class extends Eg{constructor(t,r,s,n,i=void 0){super(lg.DELETE,s,n,t,i),this.original_records=r}};a(Ln,"LMDBDeleteTransactionObject");tE.exports=Ln});var Xr=d((xM,aE)=>{"use strict";var dg=require("path"),sE=F(),Sg=Zu(),Tg=zu(),hg=eE(),fg=rE(),Er=Ee(),nE=p(),{CONFIG_PARAMS:Rg}=A(),iE=de();iE.initSync();var wn=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:Ag}=x();aE.exports=mg;async function mg(e,t){if(iE.get(Rg.LOGGING_AUDITLOG)===!1)return;let r=dg.join(Ag(),e.schema.toString()),s=await sE.openEnvironment(r,e.table,!0),n=Ng(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){sE.initializeDBIs(s,Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Er.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),nE.isEmpty(n.user_name)||s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(mg,"writeTransaction");function Ng(e,t){let r=nE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===wn.INSERT)return new Sg(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPDATE)return new Tg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPSERT)return new hg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.DELETE)return new fg(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ng,"createTransactionObject")});var Ma=d((kM,oE)=>{"use strict";var Og=Tn(),YM=fn(),lr=A(),gg=An(),Ig=_r().insertRecords,pg=F(),Cg=require("path"),bg=w(),Lg=gn(),{getBaseSchemaPath:wg}=x(),yg=Xr();oE.exports=Ug;async function Ug(e){try{let{schema_table:t,attributes:r}=Og(e);gg(e,r,t.hash_attribute),e.schema!==lr.SYSTEM_SCHEMA_NAME&&(r.includes(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Lg(e.hdb_auth_header,t,r),n=Cg.join(wg(),e.schema.toString()),i=await pg.openEnvironment(n,e.table),o=await Ig(i,t.hash_attribute,r,e.records,e[lr.CLUSTERING_FLAG]!==!0);try{await yg(e,o)}catch(_){bg.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ug,"lmdbCreateRecords")});var uE=d((KM,cE)=>{"use strict";var _E=A(),Dg=Ma(),Mg=fn(),Pg=require("fs-extra"),Bg=require("path"),{getBaseSchemaPath:Hg}=x();cE.exports=Gg;async function Gg(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Mg(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Dg(r),await Pg.mkdirp(Bg.join(Hg(),e.schema.toString()))}a(Gg,"lmdbCreateSchema")});var lE=d(($M,EE)=>{"use strict";var yn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(yn,"DeleteRecordsResponseObject");EE.exports=yn});var Ha=d((ZM,TE)=>{"use strict";var dE=F(),Pa=xt(),Ba=Me().LMDB_ERRORS_ENUM,vg=Ee(),SE=w(),WM=p(),Fg=require("lmdb"),qg=lE(),{OVERFLOW_MARKER:QM,MAX_SEARCH_KEY_LENGTH:JM}=vg;async function Vg(e,t,r){if(Pa.validateEnv(e),t===void 0)throw new Error(Ba.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ba.IDS_REQUIRED):new Error(Ba.IDS_MUST_BE_ARRAY);try{let s=dE.listDBIs(e);dE.initializeDBIs(e,t,s);let n=new qg,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,Fg.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let C=s[N];if(!S.hasOwnProperty(C)||C===t)continue;let fe=e.dbis[C],G=S[C];if(G!=null)try{let $=Pa.getIndexedValues(G);if($)for(let xe=0,Cs=$.length;xe<Cs;xe++)fe.remove($[xe],i)}catch{SE.warn(`cannot delete from attribute: ${C}, ${G}:${i}`)}}});o.push(m),_.push(i),n.original_records.push(S)}catch(S){SE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=Pa.getMicroTime(),n}catch(s){throw s}}a(Vg,"deleteRecords");TE.exports={deleteRecords:Vg}});var zr=d((XM,fE)=>{"use strict";var dr=p(),xg=Ha(),Yg=F(),kg=require("path"),{getBaseSchemaPath:Kg}=x(),$g=Xr(),Wg=w();fE.exports=Qg;async function Qg(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(dr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(dr.isEmptyOrZeroLength(e.hash_values)&&!dr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];dr.isEmpty(c)||e.hash_values.push(c)}}if(dr.isEmptyOrZeroLength(e.hash_values))return hE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(dr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=kg.join(Kg(),e.schema.toString()),i=await Yg.openEnvironment(n,e.table),o=await xg.deleteRecords(i,s,e.hash_values);try{t===!0&&await $g(e,o)}catch(_){Wg.error(`unable to write transaction due to ${_.message}`)}return hE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Qg,"lmdbDeleteRecords");function hE(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(hE,"createDeleteResponse")});var va=d((jM,RE)=>{"use strict";var Jg=A(),zM=xt();function Ga(e,t){let r=Object.create(null);if(t.length===1&&Jg.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Ga,"parseRow");function Zg(e,t,r,s){let n=Ga(r,e);s.push(n)}a(Zg,"searchAll");function Xg(e,t,r,s){let n=Ga(r,e);s[t]=n}a(Xg,"searchAllToMap");function zg(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zg,"iterateDBI");function $t(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a($t,"pushResults");function jg(e,t,r,s,n,i){t.toString().endsWith(e)&&$t(t,r,s,n,i)}a(jg,"endsWith");function eI(e,t,r,s,n,i){t.toString().includes(e)&&$t(t,r,s,n,i)}a(eI,"contains");function tI(e,t,r,s,n,i){t>e&&$t(t,r,s,n,i)}a(tI,"greaterThanCompare");function rI(e,t,r,s,n,i){t>=e&&$t(t,r,s,n,i)}a(rI,"greaterThanEqualCompare");function sI(e,t,r,s,n,i){t<e&&$t(t,r,s,n,i)}a(sI,"lessThanCompare");function nI(e,t,r,s,n,i){t<=e&&$t(t,r,s,n,i)}a(nI,"lessThanEqualCompare");RE.exports={parseRow:Ga,searchAll:Zg,searchAllToMap:Xg,iterateDBI:zg,endsWith:jg,contains:eI,greaterThanCompare:tI,greaterThanEqualCompare:rI,lessThanCompare:sI,lessThanEqualCompare:nI,pushResults:$t}});var Sr=d((rP,IE)=>{"use strict";var Ge=F(),iI=w(),ye=xt(),yt=Ee(),W=Me().LMDB_ERRORS_ENUM,eP=p(),aI=A(),Je=va(),tP=require("lmdb"),{OVERFLOW_MARKER:AE,MAX_SEARCH_KEY_LENGTH:oI}=yt,jr={lazy:!0};function mE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fa(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(mE,"iterateFullIndex");function es(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Ge.openDBI(e,r),h=Fa(e,t,r);l[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,N=i===!0?!c:!u,C=i===!0?u:c;for(let{key:fe,value:G}of l.getRange({start:m,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:C}))Je.pushResults(h(fe,G),G,E,t,r);return E}a(es,"iterateRangeBetween");function Fa(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(AE)){if(!s)if(t)s=Ge.openDBI(e,t);else{let _=Ge.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Ge.openDBI(e,_[c]),!s[yt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,jr)[r]}return n}}a(Fa,"getOverflowCheck");function _I(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);Un(r),r=ts(e,r);let o=[],_=Ge.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Je.searchAll(r,c,u,o);return o}a(_I,"searchAll");function cI(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Un(r),r=ts(e,r),mE(e,t,t,Je.searchAllToMap.bind(null,r),s,n,i)}a(cI,"searchAllToMap");function uI(e,t,r=!1,s=void 0,n=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);return mE(e,void 0,t,Je.iterateDBI,r,s,n)}a(uI,"iterateDBI");function EI(e,t){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Ge.statDBI(e,t).entryCount}a(EI,"countAll");function lI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=Ge.openDBI(e,r);s=ye.convertKeyValueToWrite(s);let c=[[],[]];if(_[yt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,jr);u!==void 0&&Je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Je.pushResults(s,u,c,t,r);return c}a(lI,"equals");function dI(e,t,r){return Ut(e,t,r),Ge.openDBI(e,t).getValuesCount(r)}a(dI,"count");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=[[],[]],c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ye.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Je.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(SI,"startsWith");function TI(e,t,r,s,n=!1,i=void 0,o=void 0){return NE(e,t,r,s,n,i,o,!0)}a(TI,"endsWith");function NE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Ut(e,r,s);let c=[[],[]],u=Ge.openDBI(e,r);u[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=Fa(e,t,r);o=Number.isInteger(o)?o:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(AE))for(let m of u.getValues(h)){let N=E(h,m);(_?N.endsWith(s):N.includes(s))&&l(N,m)}else if(_?S.endsWith(s):S.includes(s))if(u[yt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let m of u.getValues(h))l(h,m)}function l(h,S){if(o>0){o--;return}i!==0&&(Je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(NE,"contains");function hI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!0,!1)}a(hI,"greaterThan");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!1,!1)}a(fI,"greaterThanEqual");function RI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!0)}a(RI,"lessThan");function AI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!1)}a(AI,"lessThanEqual");function mI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(ye.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=ye.convertKeyValueToWrite(s),n=ye.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return es(e,t,r,s,n,i,o,_)}a(mI,"between");function NI(e,t,r,s){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),r=ts(e,r),s===void 0)throw new Error(W.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?jr:void 0);return i&&(n=Je.parseRow(i,r)),n}a(NI,"searchByHash");function OI(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,jr)===void 0&&(s=!1),s}a(OI,"checkHashExists");function gI(e,t,r,s,n=[]){gE(e,t,r,s,n);let i=OE(e,t,r,s,n);return Object.values(i)}a(gI,"batchSearchByHash");function II(e,t,r,s,n=[]){return gE(e,t,r,s,n),OE(e,t,r,s,n)}a(II,"batchSearchByHashToMap");function OE(e,t,r,s,n=[]){r=ts(e,r);let i=Object.create(null),o=r.length<3?jr:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw iI.warn(u),u}}return i}a(OE,"batchHashSearch");function gE(e,t,r,s,n){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),!Array.isArray(s))throw s===void 0?new Error(W.IDS_REQUIRED):new Error(W.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(gE,"initializeBatchSearchByHash");function Un(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Un,"validateFetchAttributes");function Ut(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>oI)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(Ut,"validateComparisonFunctions");function ts(e,t){return t.length===1&&aI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ge.listDBIs(e)),t}a(ts,"setGetWholeRowAttributes");IE.exports={searchAll:_I,searchAllToMap:cI,count:dI,countAll:EI,equals:lI,startsWith:SI,endsWith:TI,contains:NE,searchByHash:NI,setGetWholeRowAttributes:ts,batchSearchByHash:gI,batchSearchByHashToMap:II,checkHashExists:OI,iterateDBI:uI,greaterThan:hI,greaterThanEqual:fI,lessThan:RI,lessThanEqual:AI,between:mI}});var rs=d((nP,LE)=>{var pE=require("lodash"),CE=Et(),B=require("joi"),pI=p(),{hdb_schema_table:Ze,checkValidTable:bE}=nr(),{handleHDBError:CI,hdb_errors:bI}=J(),{HTTP_STATUS_CODES:LI}=bI,sP=B.object({schema:Ze,table:Ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(Ze).required()}),wI=B.object({schema:Ze,table:Ze,search_attribute:Ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(Ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),yI=B.object({schema:Ze,table:Ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(Ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:Ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});LE.exports=function(e,t){let r=null;switch(t){case"value":r=CE.validateBySchema(e,wI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(bE("schema",e.schema)),i(bE("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=CE.validateBySchema(e,yI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=pI.checkGlobalSchemaTable(e.schema,e.table);if(n)return CI(new Error,n,LI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=pE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!pE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var qa=d((iP,wE)=>{"use strict";var UI=F(),DI=rs(),MI=require("path"),{getBaseSchemaPath:PI}=x();wE.exports=BI;function BI(e){let t=DI(e,"hashes");if(t)throw t;let r=MI.join(PI(),e.schema.toString());return UI.openEnvironment(r,e.table)}a(BI,"initialize")});var Va=d((aP,yE)=>{"use strict";var HI=Sr(),GI=qa();yE.exports=vI;async function vI(e){try{let t=await GI(e),r=global.hdb_schema[e.schema][e.table];return HI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(vI,"lmdbGetDataByHash")});var ss=d((oP,UE)=>{"use strict";var Dn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Dn,"SearchByHashObject");UE.exports=Dn});var ME=d((cP,DE)=>{"use strict";var _P=ss(),FI=Sr(),qI=qa();DE.exports=VI;async function VI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return FI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(VI,"lmdbSearchByHash")});var ft=d((uP,PE)=>{"use strict";var Mn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Mn,"SearchObject");PE.exports=Mn});var Pn=d((EP,FE)=>{"use strict";var Se=Sr(),xI=F(),YI=require("path"),kI=p(),O=Ee(),Wt=A(),{getBaseSchemaPath:KI}=x(),$I=Kt(),BE=Me().LMDB_ERRORS_ENUM,{compareKeys:Tr}=require("ordered-binary"),Rt=Wt.SEARCH_WILDCARDS;async function WI(e,t,r){let s;e.schema===Wt.SYSTEM_SCHEMA_NAME?s=$I[e.table]:s=global.hdb_schema[e.schema][e.table];let n=vE(e,s.hash_attribute,r,t);return HE(e,n,s.hash_attribute,r)}a(WI,"prepSearch");async function HE(e,t,r,s){let n=YI.join(KI(),e.schema.toString()),i=await xI.openEnvironment(n,e.table),o=GE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(ZI(e,r)===!1)return s===!0?JI(o):o[1];let c=o[0];return s===!0?Se.batchSearchByHashToMap(i,r,e.get_attributes,c):Se.batchSearchByHash(i,r,e.get_attributes,c)}a(HE,"executeSearch");function GE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Se.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Se.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Se.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Se.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Se.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Se.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Se.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Se.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Se.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Se.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Se.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Se.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Se.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(GE,"searchByType");function QI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Tr(i,s[0])>=0&&Tr(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Tr(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tr(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Tr(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tr(n[r],s)<=0;default:return Object.create(null)}}a(QI,"filterByType");function JI(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(JI,"createMapFromArrays");function ZI(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(ZI,"checkToFetchMore");function vE(e,t,r,s){if(kI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Rt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rt[0])<0&&n.indexOf(Rt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Rt.indexOf(i)>=0&&Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Rt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rt[0])||n.includes(Rt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(BE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Wt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(BE.UNKNOWN_SEARCH_TYPE)}}a(vE,"createSearchTypeFromSearchObject");FE.exports={executeSearch:HE,createSearchTypeFromSearchObject:vE,prepSearch:WI,searchByType:GE,filterByType:QI}});var VE=d((dP,qE)=>{"use strict";var lP=ft(),XI=rs(),zI=p(),jI=A(),ep=Pn();qE.exports=tp;async function tp(e,t){if(!zI.isEmpty(t)&&jI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=XI(e,"value");if(s)throw s;let n=!0;try{return await ep.prepSearch(e,t,n)}catch(i){throw i}}a(tp,"lmdbGetDataByValue")});var hr=d((TP,xE)=>{"use strict";var SP=ft(),rp=rs(),sp=p(),np=A(),ip=Pn();xE.exports=ap;async function ap(e,t){if(!sp.isEmpty(t)&&np.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rp(e,"value");if(s)throw s;let n=!1;try{return await ip.prepSearch(e,t,n)}catch(i){throw i}}a(ap,"lmdbSearchByValue")});var kE=d((fP,YE)=>{"use strict";var hP=Ee(),Bn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Bn,"SearchByConditionsObject");var Hn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Hn,"SearchCondition");var Gn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Gn,"SortAttribute");YE.exports={SearchByConditionsObject:Bn,SearchCondition:Hn,SortAttribute:Gn}});var ZE=d((AP,JE)=>{"use strict";var RP=kE().SearchByConditionsObject,op=ft(),_p=rs(),xa=Sr(),vn=Ee(),QE=Pn(),cp=va(),KE=require("lodash"),{getBaseSchemaPath:up}=x(),Ep=require("path"),lp=F(),{handleHDBError:$E,hdb_errors:dp}=J(),{HTTP_STATUS_CODES:Sp}=dp,Tp=1e8,hp={lazy:!0};JE.exports=fp;async function fp(e){try{let t=_p(e,"conditions");if(t)throw $E(t,t.message,Sp.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=Ep.join(up(),e.schema.toString()),s=await lp.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=KE.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===vn.SEARCH_TYPES.EQUALS?o.estimated_count=xa.count(s,o.search_attribute,o.search_value):_===vn.SEARCH_TYPES.CONTAINS||_===vn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=Tp}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await WE(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(QE.filterByType),u=c.length,E=[],l=xa.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let N=_.get(m,hp);for(let C=0;C<u;C++)if(!c[C](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(cp.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await WE(s,e,c,n.hash_attribute);_.push(u)}if(o=KE.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return xa.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw $E(t)}}a(fp,"lmdbSearchByConditions");async function WE(e,t,r,s){let n=new op(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===vn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,QE.searchByType(e,n,i,s)}a(WE,"executeConditionSearch")});var qn=d((mP,XE)=>{"use strict";var Rp=A().OPERATIONS_ENUM,Fn=class{constructor(t,r,s,n=void 0){this.operation=Rp.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Fn,"DeleteObject");XE.exports=Fn});var Ya=d((NP,zE)=>{"use strict";var Vn=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Vn,"DropAttributeObject");zE.exports=Vn});var Ka=d((gP,jE)=>{"use strict";var Ap=ft(),mp=qn(),OP=Ya(),rt=A(),Np=p(),ka=F(),Op=Kt(),gp=hr(),Ip=zr(),{getBaseSchemaPath:pp}=x(),Cp=require("path");jE.exports=bp;async function bp(e,t=!0){let r;e.schema===rt.SYSTEM_SCHEMA_NAME?r=Op[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await wp(e),n=Cp.join(pp(),e.schema.toString()),i=await ka.openEnvironment(n,e.table);return t===!0&&await Lp(e,i,r.hash_attribute),ka.dropDBI(i,e.attribute),s}a(bp,"lmdbDropAttribute");async function Lp(e,t,r){let s=ka.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(Lp,"removeAttributeFromAllObjects");async function wp(e){let t=new Ap(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await gp(t)).filter(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Np.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mp(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Ip(i)}a(wp,"dropAttributeFromSystem")});var sl=d((IP,rl)=>{"use strict";var yp=Ka(),Up=Ya(),el=p(),tl=w(),Dp=Me().LMDB_ERRORS_ENUM;rl.exports=Mp;async function Mp(e){if(el.isEmpty(global.hdb_schema[e.schema])||el.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new Up(e.schema,e.table,r);try{await yp(n,!1)}catch(i){i.message!==Dp.DBI_DOES_NOT_EXIST&&tl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw tl.error(`Error dropping attribute ${r}`),s}}a(Mp,"lmdbDropAllAttributes")});var $a=d((CP,ll)=>{"use strict";var _l=ft(),cl=qn(),ul=hr(),El=zr(),pP=sl(),ge=A(),nl=p(),il=F(),{getBaseSchemaPath:Pp,getTransactionAuditStorePath:Bp}=x(),al=require("path"),ol=w();ll.exports=Hp;async function Hp(e){try{if(nl.isEmpty(global.hdb_schema[e.schema])||nl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Gp(e),await vp(e);let t=al.join(Pp(),e.schema.toString());try{await il.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=al.join(Bp(),e.schema.toString());await il.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Hp,"lmdbDropTable");async function Gp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await ul(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await El(n)}a(Gp,"deleteAttributesFromSystem");async function vp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await ul(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await El(n)}catch(i){throw i}}a(vp,"dropTableFromSystem")});var Sl=d((LP,dl)=>{"use strict";var Fp=require("fs-extra"),qp=ft(),Vp=ss(),xp=qn(),Yp=$a(),kp=zr(),Kp=Va(),$p=hr(),At=A(),bP=p(),Wp=require("path"),{getBaseSchemaPath:Qp}=x(),{handleHDBError:Jp,hdb_errors:Zp}=J(),{HDB_ERROR_MSGS:Xp,HTTP_STATUS_CODES:zp}=Zp;dl.exports=jp;async function jp(e){let t;try{t=await eC(e.schema);let r=new qp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await $p(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await Yp(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kp(n);let i=Wp.join(Qp(),t.toString());await Fp.remove(i)}catch(r){throw r}}a(jp,"lmdbDropSchema");async function eC(e){let t=new Vp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await Kp(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Jp(new Error,Xp.SCHEMA_NOT_FOUND(e),zp.NOT_FOUND,void 0,void 0,!0);return s}a(eC,"validateDropSchema")});var hl=d((wP,Tl)=>{"use strict";var xn=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(xn,"CreateTableObject");Tl.exports=xn});var Rl=d((UP,fl)=>{"use strict";var tC=require("path"),rC=require("fs-extra"),Yn=F(),{getTransactionAuditStorePath:sC}=x(),Wa=Ee(),yP=hl();fl.exports=nC;async function nC(e){let t;try{let r=tC.join(sC(),e.schema.toString());await rC.mkdirp(r),t=await Yn.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(nC,"createTransactionsAuditEnvironment")});var Ol=d((DP,Nl)=>{"use strict";var Qa=A(),Al=F(),iC=_r(),aC=require("path"),{getSystemSchemaPath:oC,getBaseSchemaPath:_C}=x(),cC=Kt(),uC=Sn(),Ja=dn(),EC=w(),lC=Rl(),Xa=cC.hdb_table,ml=[];for(let e=0;e<Xa.attributes.length;e++)ml.push(Xa.attributes[e].attribute);Nl.exports=dC;async function dC(e,t){let r=aC.join(_C(),t.schema.toString()),s=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ja(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Al.createEnvironment(r,t.table),e!==void 0){let o=await Al.openEnvironment(oC(),Qa.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await iC.insertRecords(o,Xa.hash_attribute,ml,[e]),await Za(s),await Za(n),await Za(i)}await lC(t)}catch(o){throw o}}a(dC,"lmdbCreateTable");async function Za(e){try{await uC(e)}catch(t){EC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Za,"createAttribute")});var Il=d((MP,gl)=>{"use strict";var SC=Tn(),TC=An(),hC=gn(),fr=A(),fC=_r().updateRecords,RC=F(),AC=require("path"),{getBaseSchemaPath:mC}=x(),NC=Xr(),OC=w();gl.exports=gC;async function gC(e){try{let{schema_table:t,attributes:r}=SC(e);TC(e,r,t.hash_attribute),e.schema!==fr.SYSTEM_SCHEMA_NAME&&(r.includes(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await hC(e.hdb_auth_header,t,r),n=AC.join(mC(),e.schema.toString()),i=await RC.openEnvironment(n,e.table),o=await fC(i,t.hash_attribute,r,e.records,e[fr.CLUSTERING_FLAG]!==!0);try{await NC(e,o)}catch(_){OC.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(gC,"lmdbUpdateRecords")});var Cl=d((PP,pl)=>{"use strict";var IC=A().OPERATIONS_ENUM,kn=class{constructor(t,r,s,n=void 0){this.operation=IC.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kn,"UpsertObject");pl.exports=kn});var Ll=d((HP,bl)=>{"use strict";var BP=Cl(),pC=Tn(),CC=An(),bC=gn(),Rr=A(),LC=_r().upsertRecords,wC=F(),yC=require("path"),{getBaseSchemaPath:UC}=x(),DC=Xr(),MC=w(),{handleHDBError:PC,hdb_errors:BC}=J();bl.exports=HC;async function HC(e){let t;try{t=pC(e)}catch(c){throw PC(c,c.message,BC.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;CC(e,s,r.hash_attribute),e.schema!==Rr.SYSTEM_SCHEMA_NAME&&(s.includes(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bC(e.hdb_auth_header,r,s),i=yC.join(UC(),e.schema.toString()),o=await wC.openEnvironment(i,e.table),_=await LC(o,r.hash_attribute,s,e.records,e[Rr.CLUSTERING_FLAG]!==!0);try{await DC(e,_)}catch(c){MC.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(HC,"lmdbUpsertRecords")});var Pl=d((GP,Ml)=>{"use strict";var GC=ft(),wl=p(),yl=w(),vC=hr(),Ul=A(),FC=Ha().deleteRecords,qC=F(),VC=require("path"),{getBaseSchemaPath:xC}=x(),{promisify:YC}=require("util"),kC=YC(setTimeout),Dl=1e4,KC=10;Ml.exports=$C;async function $C(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(wl.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new GC(e.schema,e.table,Ul.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await vC(n,Ul.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return wl.isEmptyOrZeroLength(s)?(yl.trace("No records found to delete"),{message:"No records found to delete"}):await WC(e,s,t)}a($C,"lmdbDeleteRecordsBefore");async function WC(e,t,r){let s=VC.join(xC(),e.schema.toString()),n=await qC.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Dl){let c=t.slice(o,o+Dl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await FC(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await kC(KC)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(WC,"chunkDeletes")});var Hl=d((vP,Bl)=>{"use strict";var Kn=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Kn,"DeleteBeforeObject");Bl.exports=Kn});var vl=d((FP,Gl)=>{"use strict";var $n=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a($n,"DeleteAuditLogsBeforeResults");Gl.exports=$n});var Vl=d((VP,ql)=>{"use strict";var za=F(),{getTransactionAuditStorePath:QC}=x(),qP=Hl(),JC=require("path"),ns=Ee(),ZC=p(),Fl=vl(),XC=require("util").promisify,zC=XC(setTimeout),jC=1e4,eb=100;ql.exports=tb;async function tb(e){let t=JC.join(QC(),e.schema),r=await za.openEnvironment(t,e.table,!0),s=za.listDBIs(r);za.initializeDBIs(r,ns.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Fl;do n=await rb(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await zC(eb);while(n.transactions_deleted>0);return i}a(tb,"deleteAuditLogsBefore");async function rb(e,t){let r=new Fl;try{let s=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ZC.isEmpty(_)||(n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>jC)break}return await n,r}catch(s){throw s}}a(rb,"deleteTransactions")});var Ql=d((xP,Wl)=>{"use strict";var ja=F(),Ar=Ee(),xl=xt(),eo=A(),Yl=p(),{getTransactionAuditStorePath:sb}=x(),nb=require("path"),ib=Sr(),Wn=ur(),ab=w();Wl.exports=ob;async function ob(e){let t=nb.join(sb(),e.schema),r=await ja.openEnvironment(t,e.table,!0),s=ja.listDBIs(r);ja.initializeDBIs(r,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return kl(r,e.search_values);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,cb(r,e.search_values,n);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _b(r,e.search_values);default:return kl(r)}}a(ob,"readAuditLog");function kl(e,t=[0,xl.getMicroTime()]){Yl.isEmpty(t[0])&&(t[0]=0),Yl.isEmpty(t[1])&&(t[1]=xl.getMicroTime());let r=[];try{let s=e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Wn,i);r.push(o)}return r}catch(s){throw s}}a(kl,"searchTransactionsByTimestamp");function _b(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,$l(e,i))}return Object.fromEntries(r)}a(_b,"searchTransactionsByUsername");function cb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=ib.equals(e,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=$l(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Kl(c,"records",r,E,o),Kl(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(cb,"searchTransactionsByHashValues");function Kl(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Wn(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Wn(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Kl,"loopRecords");function $l(e,t){let r=[];try{let s=e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Wn,i);r.push(o)}}catch(i){ab.warn(i)}return r}catch(s){throw s}}a($l,"batchSearchTransactions")});var Zl=d((YP,Jl)=>{"use strict";var ub=require("path"),{getBaseSchemaPath:Eb}=x(),lb=F();Jl.exports={writeTransaction:db};async function db(e,t,r){let s=ub.join(Eb(),e);return(await lb.openEnvironment(s,t)).transaction(r)}a(db,"writeTransaction")});var zl=d((kP,Xl)=>{"use strict";var Sb=require("path"),{getBaseSchemaPath:Tb}=x(),hb=F();Xl.exports={flush:fb};async function fb(e,t){let r=Sb.join(Tb(),e.toString());return(await hb.openEnvironment(r,t.toString())).flushed}a(fb,"flush")});var ed=d((KP,jl)=>{"use strict";var z=w(),{handleHDBError:Rb}=J(),Ab=_a(),mb=Sn(),Nb=Ma(),Ob=uE(),gb=zr(),Ib=Va(),pb=ME(),Cb=VE(),bb=hr(),Lb=ZE(),wb=Sl(),yb=Ol(),Ub=Il(),Db=Ll(),Mb=Pl(),Pb=Vl(),Bb=$a(),Hb=Ka(),Gb=Ql(),vb=Zl(),Fb=zl(),Qn=class extends Ab{async searchByConditions(t){try{return Lb(t)}catch(r){throw z.error(r),r}}async getDataByHash(t){try{return await Ib(t)}catch(r){throw z.error(r),r}}async searchByHash(t){try{return await pb(t)}catch(r){throw z.error(r),r}}async getDataByValue(t,r){try{return await Cb(t,r)}catch(s){throw z.error(s),s}}async searchByValue(t){try{return await bb(t)}catch(r){throw z.error(r),r}}async createSchema(t){try{return await Ob(t)}catch(r){throw z.error(r),r}}async dropSchema(t){try{return await wb(t)}catch(r){throw z.error(r),r}}async createTable(t,r){try{return await yb(t,r)}catch(s){throw z.error(s),s}}async dropTable(t){try{return await Bb(t)}catch(r){throw z.error(r),r}}async createAttribute(t){try{return await mb(t)}catch(r){throw z.error(r),r}}async createRecords(t){try{return await Nb(t)}catch(r){throw z.error(r),r}}async updateRecords(t){try{return await Ub(t)}catch(r){throw z.error(r),r}}async upsertRecords(t){try{return await Db(t)}catch(r){throw Rb(r,null,null,z.ERR,r)}}async deleteRecords(t){try{return await gb(t)}catch(r){throw z.error(r),r}}async deleteRecordsBefore(t){try{return await Mb(t)}catch(r){throw z.error(r),r}}async dropAttribute(t){try{return await Hb(t)}catch(r){throw z.error(r),r}}async deleteAuditLogsBefore(t){try{return await Pb(t)}catch(r){throw z.error(r),r}}async readAuditLog(t){try{return await Gb(t)}catch(r){throw z.error(r),r}}writeTransaction(t,r,s){return vb.writeTransaction(t,r,s)}flush(t,r){return Fb.flush(t,r)}};a(Qn,"LMDBBridge");jl.exports=Qn});var mr=d(($P,rd)=>{"use strict";var qb=ed(),Vb=_a(),xb=de();xb.initSync();var td;function Yb(){return td instanceof Vb?td:new qb}a(Yb,"getBridge");rd.exports=Yb()});var Td=d((QP,Sd)=>{"use strict";var to=require("recursive-iterator"),kb=require("alasql"),ro=require("clone"),sd=p(),{handleHDBError:nd,hdb_errors:Kb}=J(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:ad}=Kb,$b=["DISTINCT_ARRAY"],od=Symbol("validateTables"),so=Symbol("validateTable"),WP=Symbol("getAllColumns"),_d=Symbol("validateAllColumns"),Jn=Symbol("findColumn"),cd=Symbol("validateOrderBy"),is=Symbol("validateSegment"),no=Symbol("validateColumn"),ud=Symbol("setColumnsForTable"),Ed=Symbol("checkColumnsForAsterisk"),ld=Symbol("validateGroupBy"),dd=Symbol("hasColumns"),Zn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[od](),this[Ed](),this[_d]()}[od](){if(this[dd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[so](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[so](t.table)})}}[dd](){let t=!1,r=new to(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[so](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw nd(new Error,id.SCHEMA_NOT_FOUND(t.databaseid),ad.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw nd(new Error,id.TABLE_NOT_FOUND(t.databaseid,t.tableid),ad.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ro(s);n.table=ro(t),this.attributes.push(n)})}[Jn](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Ed](){let t=new to(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ud](r.tableid)}[ud](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new kb.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_d](){this[is](this.statement.columns,!1),this[is](this.statement.joins,!1),this[is](this.statement.where,!1),this[ld](this.statement.group,!1),this[is](this.statement.order,!0)}[is](t,r){if(!t)return;let s=new to(t),n=[];for(let{node:i,path:o}of s)!sd.isEmpty(i)&&!sd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[cd](i):n.push(this[no](i)));return n}[ld](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$b.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ro(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Jn](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Jn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[cd](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[no](t)}[no](t){let r=this[Jn](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Zn,"SelectValidator");Sd.exports=Zn});var Ad=d((JP,Rd)=>{"use strict";var hd=require("lodash"),as=require("mathjs"),Wb=require("jsonata"),fd=p();Rd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hd.uniqWith(e,hd.isEqual):e,searchJSON:Qb,mad:os.bind(null,as.mad),mean:os.bind(null,as.mean),mode:os.bind(null,as.mode),prod:os.bind(null,as.prod),median:os.bind(null,as.median)};function os(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(os,"aggregateFunction");function Qb(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(fd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fd.isEmpty(this.__ala__.res[r])){let s=Wb(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Qb,"searchJSON")});var Nd=d((ZP,md)=>{"use strict";var Z=require("moment"),io="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;md.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(io),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(io),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(io)}});var pd=d((XP,Id)=>{"use strict";var Jb=require("@turf/area"),Zb=require("@turf/length"),Xb=require("@turf/circle"),zb=require("@turf/difference"),jb=require("@turf/distance"),eL=require("@turf/boolean-contains"),tL=require("@turf/boolean-equal"),rL=require("@turf/boolean-disjoint"),sL=require("@turf/helpers"),Od=A(),D=p();Id.exports={geoArea:nL,geoLength:iL,geoCircle:aL,geoDifference:oL,geoDistance:gd,geoNear:_L,geoContains:cL,geoEqual:uL,geoCrosses:EL,geoConvert:lL};var ao="geo1 is required",oo="geo2 is required";function nL(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Jb.default(e)}a(nL,"geoArea");function iL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Zb.default(e,{units:t||"kilometers"})}a(iL,"geoLength");function aL(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),Xb.default(e,t,{units:r||"kilometers"})}a(aL,"geoCircle");function oL(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),zb(e,t)}a(oL,"geoDifference");function gd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),jb.default(e,t,{units:r||"kilometers"})}a(gd,"geoDistance");function _L(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return gd(e,t,s)<=r}a(_L,"geoNear");function cL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),eL.default(e,t)}a(cL,"geoContains");function uL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),tL.default(e,t)}a(uL,"geoEqual");function EL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!rL.default(e,t)}a(EL,"geoCrosses");function lL(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(Od.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Od.GEO_CONVERSION_ENUM).join(",")}`);return sL[t](e,r)}a(lL,"geoConvert")});var bd=d((zP,Cd)=>{var Qt=Ad(),Ue=Nd(),st=pd();Cd.exports=e=>{e.aggr.mad=e.aggr.MAD=Qt.mad,e.aggr.mean=e.aggr.MEAN=Qt.mean,e.aggr.mode=e.aggr.MODE=Qt.mode,e.aggr.prod=e.aggr.PROD=Qt.prod,e.aggr.median=e.aggr.MEDIAN=Qt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ue.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ue.current_time,e.fn.extract=e.fn.EXTRACT=Ue.extract,e.fn.date=e.fn.DATE=Ue.date,e.fn.date_format=e.fn.DATE_FORMAT=Ue.date_format,e.fn.date_add=e.fn.DATE_ADD=Ue.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ue.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ue.date_diff,e.fn.now=e.fn.NOW=Ue.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ue.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ue.get_server_time,e.fn.getdate=e.fn.GETDATE=Ue.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ue.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=st.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=st.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=st.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=st.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=st.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=st.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=st.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=st.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=st.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=st.geoNear}});var yd=d((jP,wd)=>{"use strict";var _s=require("lodash"),ae=require("alasql");ae.options.cache=!1;var dL=bd(),Ld=require("clone"),Xn=require("recursive-iterator"),b=w(),y=p(),Nr=mr(),SL=A(),{hdb_errors:TL}=J(),hL="IS NULL",cs="There was a problem performing this search. Please check the logs and try again.";dL(ae);var zn=class{constructor(t,r){if(y.isEmpty(t))throw b.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return b.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw b.error("Error thrown from checkEmptySQL in SQLSearch class method search."),b.error(s),new Error(cs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw b.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),b.error(s),new Error(cs)}if(Object.keys(this.data).length===0)return b.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw b.error("Error thrown from processJoins in SQLSearch class method search."),b.error(s),new Error(cs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw b.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),b.error(s),new Error(cs)}try{return t=await this._finalSQL(),t}catch(s){throw b.error("Error thrown from finalSQL in SQLSearch class method search."),b.error(s),new Error(cs)}}_getColumns(){let t=new Xn(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Ld(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_s.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){b.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Xn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ae.yy.LogicValue({value:s}):r.right instanceof ae.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new ae.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ae.yy.LogicValue({value:i}):s instanceof ae.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ae.yy.NumValue({value:i}))});if(t){b.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Xn(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_s.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ae.promise(r)}catch(r){throw b.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),b.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Ld(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(y.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(hL)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_s.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await Nr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){b.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await Nr.getDataByValue(l);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(S)))}))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let m=await Nr.getDataByValue(_,S.operation);if(c)for(let N in m)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in m)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),b.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await Nr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),b.error(E)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof ae.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ae.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ae.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ae.yy.FuncValue:new ae.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${N}.${m}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,m=this._convertColumnsToIndexes(S,n);h=await ae.promise(m,t),t=null}catch(S){throw b.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),b.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,m=h.length;S<m;S++){let N=h[S];o.forEach(C=>{N[C.key]!==null&&N[C.key]!==void 0&&C.keys.add(N[C.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=_s.difference(m,[...S.keys].map(C=>C.toString()));for(let C=0,fe=N.length;C<fe;C++){let G=N[C];delete this.data[`${S.schema}_${S.table}`].__merged_data[G]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Xn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=_s.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){b.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),b.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await Nr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let m=0;m<u;m++){let N=n.columns[m],C=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(C)}}}}catch(r){throw b.error("Error thrown from getDataByHash function in SQLSearch class method getData."),b.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();b.trace(`Final SQL: ${n}`),s=await ae.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),b.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw b.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),b.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return b.error(TL.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),b.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Nr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){b.error("There was an error when processing this SQL operation. Check your logs"),b.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(zn,"SQLSearch");wd.exports=zn});var us=d((eB,Dd)=>{"use strict";var fL=Td();Dd.exports={searchByConditions:NL,searchByHash:OL,searchByValue:gL,search:IL};var _o=mr(),Ud=require("util"),RL=Ud.callbackify(_o.searchByHash),AL=Ud.callbackify(_o.searchByValue),mL=yd();async function NL(e){return _o.searchByConditions(e)}a(NL,"searchByConditions");function OL(e,t){try{RL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OL,"searchByHash");function gL(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),AL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(gL,"searchByValue");function IL(e,t){try{let r=new fL(e);r.validate(),new mL(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(IL,"search")});var ls=d((tB,Hd)=>{"use strict";var Es=require("crypto"),Pd="aes-256-cbc",pL=32,CL=16,co=64,Bd=32,bL=co+Bd,Md=new Map;Hd.exports={encrypt:LL,decrypt:wL,createNatsTableStreamName:yL};function LL(e){let t=Es.randomBytes(pL),r=Es.randomBytes(CL),s=Es.createCipheriv(Pd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(LL,"encrypt");function wL(e){let t=e.substr(0,co),r=e.substr(co,Bd),s=e.substr(bL,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Es.createDecipheriv(Pd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wL,"decrypt");function yL(e,t){let r=`${e}.${t}`,s=Md.get(r);return s||(s=Es.createHash("md5").update(`${e}.${t}`).digest("hex"),Md.set(r,s)),s}a(yL,"createNatsTableStreamName")});var lo=d((rB,Yd)=>{"use strict";var vd=us(),Dt=w(),Fd=ba(),UL=require("lodash"),DL=require("path"),ML=ls(),uo=p(),{promisify:qd}=require("util"),q=A(),{handleHDBError:jn,hdb_errors:PL}=J(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:Vd}=PL,BL=de();BL.initSync();var Gd=F(),HL=x(),ds=qd(vd.searchByValue),GL=qd(vd.searchByHash),Or="name",xd="hash_attribute",Eo="schema",vL="schema_table",FL="attribute";Yd.exports={describeAll:qL,describeTable:ti,describeSchema:xL};async function qL(e){try{let t=uo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Or,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[Or]},i=await ds(n);if(uo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:q.ID_ATTRIBUTE_STRING,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},u=await ds(c),E=[];for(let h of u)try{let S;if(t||s)S=await ti({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let m=r[h.schema].tables[h.name].attribute_permissions;S=await ti({schema:h.schema,table:h.name},m)}S&&E.push(S)}catch(S){Dt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Dt.error("Got an error in describeAll"),Dt.error(t),jn(new Error,ei.DESCRIBE_ALL_ERR)}}a(qL,"describeAll");async function ti(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Fd.describe_table(e);if(o)throw o;if(r===q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[q.SYSTEM_SCHEMA_NAME][s];let _={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Or,search_value:s,hash_values:[],get_attributes:[q.WILDCARD_SEARCH_VALUE]},c=await ds(_);if(!c||c.length===0)throw jn(new Error,ei.TABLE_NOT_FOUND(e.schema,e.table),Vd.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw jn(new Error,ei.INVALID_TABLE_ERR(i));let E={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:vL,search_value:r+"."+s,get_attributes:[FL]},l=await ds(E);l=UL.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=VL(n)),i.attributes=l,i.clustering_stream_name=ML.createNatsTableStreamName(u.schema,u.name);try{let h=DL.join(HL.getBaseSchemaPath(),i.schema.toString()),S=await Gd.openEnvironment(h,i.name),m=Gd.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(h){Dt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Dt.error(`There was an error getting attributes for table '${u.name}'`),Dt.error(E)}return i}a(ti,"descTable");function VL(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(VL,"getAttrsByPerms");async function xL(e){let t=Fd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Eo,search_value:s,hash_values:[],get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},i=await ds(n);if(i&&i.length<1){let o={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Or]},_=await GL(o);if(_&&_.length<1)throw jn(new Error,ei.SCHEMA_NOT_FOUND(e.schema),Vd.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),uo.isEmpty(c)||c.describe){let u=await ti({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Dt.error(`Error describing schema table '${e.schema}.${_}'`),Dt.error(c)}})),o}}a(xL,"describeSchema")});var So=d((iB,Qd)=>{var sB=require("async"),gr=Kt(),nB=w(),{callbackify:$d,promisify:YL}=require("util");Qd.exports={setSchemaDataToGlobal:kd,getTableSchema:$L,getSystemSchema:QL,setSchemaDataToGlobalAsync:YL(kd)};var Wd=lo(),kL=$d(Wd.describeAll),KL=$d(Wd.describeTable);function kd(e){kL(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gr),global.hdb_schema=r,e(null,null)})}a(kd,"setSchemaDataToGlobal");function Kd(e,t){return e==="system"?gr[t]:global.hdb_schema[e][t]}a(Kd,"returnSchema");function $L(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?WL(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Kd(e,t))}):r(null,Kd(e,t))}a($L,"getTableSchema");function WL(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gr:global.hdb_schema={system:gr},r();return}KL(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(WL,"setTableDataToGlobal");function QL(){return gr}a(QL,"getSystemSchema")});var ii=d((aB,Xd)=>{"use strict";var si=oa(),ve=p(),JL=require("util"),ni=mr(),ZL=So(),To=w(),{handleHDBError:Mt,hdb_errors:XL}=J(),{HTTP_STATUS_CODES:Jt}=XL,zL=JL.promisify(ZL.getTableSchema),jL="updated",Jd="inserted",Zd="upserted";Xd.exports={insert:tw,update:rw,upsert:sw,validation:ew,flush:nw};async function ew(e){if(ve.isEmpty(e))throw new Error("invalid update parameters defined.");if(ve.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ve.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await zL(e.schema,e.table),r=si(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&ve.isEmptyOrZeroLength(_[s]))throw To.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ve.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw To.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ve.isEmpty(_[s])&&_[s]!==""&&n.has(ve.autoCast(_[s]))&&(_.skip=!0),n.add(ve.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(ew,"validation");async function tw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.createRecords(e);return ri(Jd,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(tw,"insertData");async function rw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.updateRecords(e);return ve.isEmpty(s.existing_rows)?ri(jL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):ri(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(rw,"updateData");async function sw(e){if(e.operation!=="upsert")throw Mt(new Error,"invalid operation, must be upsert",Jt.INTERNAL_SERVER_ERROR);let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.upsertRecords(e);return ri(Zd,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Mt(s,null,null,To.ERR,n)}}a(sw,"upsertData");function ri(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Jd?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Zd?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(ri,"returnObject");function nw(e){return ni.flush(e.schema,e.table)}a(nw,"flush")});var tS=d((oB,eS)=>{var iw=Et(),ho=require("joi"),{hdb_schema_table:zd}=nr(),jd={schema:zd,table:zd},aw={date:ho.date().iso().required()},ow={timestamp:ho.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eS.exports=function(e,t){let r=t==="timestamp"?{...jd,...ow}:{...jd,...aw},s=ho.object(r);return iw.validateBySchema(e,s)}});var iS=d((_B,nS)=>{var _w=Et(),rS=require("joi"),{hdb_schema_table:sS}=nr(),cw=rS.object({schema:sS,table:sS,hash_values:rS.array().required()});nS.exports=function(e){return _w.validateBySchema(e,cw)}});var oS=d((cB,aS)=>{"use strict";var ai=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ai,"InsertObject");var oi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(oi,"NoSQLSeachObject");var _i=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(_i,"DeleteResponseObject");aS.exports={InsertObject:ai,NoSQLSeachObject:oi,DeleteResponseObject:_i}});var dS=d((uB,lS)=>{"use strict";var cS=tS(),uw=iS(),ci=p(),_S=require("moment"),uS=w(),{promisify:Ew,callbackify:lw}=require("util"),Zt=A(),dw=So(),fo=Ew(dw.getTableSchema),Ro=mr(),{DeleteResponseObject:Sw}=oS(),{handleHDBError:Pt,hdb_errors:Tw}=J(),{HDB_ERROR_MSGS:ui,HTTP_STATUS_CODES:Bt}=Tw,hw="records successfully deleted",fw=lw(ES);lS.exports={delete:fw,deleteRecord:ES,deleteFilesBefore:Rw,deleteAuditLogsBefore:Aw};async function Rw(e){let t=cS(e,"date");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(!_S(e.date,_S.ISO_8601).isValid())throw Pt(new Error,ui.INVALID_DATE,Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_DATE,!0);let s=ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Pt(new Error,s,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,s,!0);try{let n=await Ro.deleteRecordsBefore(e);if(await fo(e.schema,e.table),uS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Rw,"deleteFilesBefore");async function Aw(e){let t=cS(e,"timestamp");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Pt(new Error,ui.INVALID_VALUE("Timestamp"),Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_VALUE("Timestamp"),!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{let s=await Ro.deleteAuditLogsBefore(e);return await fo(e.schema,e.table),uS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Aw,"deleteAuditLogsBefore");async function ES(e){let t=uw(e);if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{await fo(e.schema,e.table);let s=await Ro.deleteRecords(e);return ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hw}`),s}catch(s){if(s.message===Zt.SEARCH_NOT_FOUND_MESSAGE){let n=new Sw;return n.message=Zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(ES,"deleteRecord")});var Ei=d((EB,hS)=>{var mw=require("crypto"),SS=9;function Nw(e){let t=gw(SS),r=TS(e+t);return t+r}a(Nw,"createHash");function Ow(e,t){let r=e.substr(0,SS),s=r+TS(t+r);return e===s}a(Ow,"validateHash");function gw(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(gw,"generateSalt");function TS(e){return mw.createHash("md5").update(e).digest("hex")}a(TS,"md5");hS.exports={hash:Nw,validate:Ow}});var RS=d((lB,fS)=>{var Ao=Et(),Te={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Iw(e){return Te.password.presence=!0,Te.username.presence=!0,Te.role.presence=!0,Te.active.presence=!0,Ao.validateObject(e,Te)}a(Iw,"addUserValidation");function pw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(pw,"alterUserValidation");function Cw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(Cw,"dropUserValidation");fS.exports={addUserValidation:Iw,alterUserValidation:pw,dropUserValidation:Cw}});var mS=d((dB,AS)=>{"use strict";var Ht=A(),Ss=class{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ss,"BaseLicense");var li=class extends Ss{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(li,"ExtendedLicense");AS.exports={BaseLicense:Ss,ExtendedLicense:li}});var Io=d((SB,CS)=>{"use strict";var pr=require("fs-extra"),NS=Ei(),OS=require("crypto"),bw=require("moment"),Lw=require("uuid").v4,he=w(),No=require("path"),ww=p(),De=A(),yw=mS().ExtendedLicense,Ir="invalid license key format",Uw="061183",Dw="mofi25",Mw="aes-256-cbc",Pw=16,Bw=32,gS=de();gS.initSync();var mo;CS.exports={validateLicense:IS,generateFingerPrint:Gw,licenseSearch:pS,getLicense:qw};function Oo(){return No.join(gS.getHdbBasePath(),De.LICENSE_KEY_DIR_NAME,De.LICENSE_FILE_NAME)}a(Oo,"getLicenseDirPath");function Hw(){let e=Oo();return No.join(e,De.LICENSE_FILE_NAME)}a(Hw,"getLicenseFilePath");function go(){let e=Oo();return No.join(e,De.REG_KEY_FILE_NAME)}a(go,"getFingerPrintFilePath");async function Gw(){let e=go();try{return await pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vw();throw he.error(`Error writing fingerprint file to ${e}`),he.error(t),new Error("There was an error generating the fingerprint")}}a(Gw,"generateFingerPrint");async function vw(){let e=Lw(),t=NS.hash(e),r=go();try{await pr.mkdirp(Oo()),await pr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw he.error(`Error writing fingerprint file to ${r}`),he.error(s),new Error("There was an error generating the fingerprint")}return t}a(vw,"writeFingerprint");function IS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:De.STORAGE_TYPES_ENUM.LMDB,api_call:De.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:De.RAM_ALLOCATION_ENUM.DEFAULT,version:De.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return he.error("empty license key passed to validate."),r;let s=go(),n=!1;try{n=pr.statSync(s)}catch(i){he.error(i)}if(n){let i;try{i=pr.readFileSync(s,"utf8")}catch{he.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Dw),_=o[1];_=Buffer.concat([Buffer.from(_)],Pw);let c=Buffer.concat([Buffer.from(i)],Bw),u=OS.createDecipheriv(Mw,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=Fw(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ir),he.error(Ir),new Error(Ir)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Ir),he.error(Ir),new Error(Ir)}else r.exp_date=E;r.exp_date<bw().valueOf()&&(r.valid_date=!1),NS.validate(o[1],`${Uw}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||he.error("Invalid licence"),r}a(IS,"validateLicense");function Fw(e,t){try{let r=OS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{he.warn("Check old license failed")}}a(Fw,"checkOldLicense");function pS(){let e=new yw;e.api_call=0;let t=[];try{t=pr.readFileSync(Hw(),"utf-8").split(De.NEW_LINE)}catch(r){r.code==="ENOENT"?he.info("no license file found"):he.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(ww.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=IS(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){he.error("There was an error parsing the license string."),he.error(n),e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=De.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=De.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT),mo=e,e}a(pS,"licenseSearch");async function qw(){return mo||await pS(),mo}a(qw,"getLicense")});var hs=d((TB,qS)=>{"use strict";var yS="username is required",US="nothing to update, must supply active, role or password to update",DS="password cannot be an empty string",MS="If role is specified, it cannot be empty.",PS="active must be true or false";qS.exports={addUser:Qw,alterUser:Jw,dropUser:Xw,userInfo:zw,listUsers:Si,listUsersExternal:jw,setUsersToGlobal:Ts,findAndValidateUser:ry,getClusterUser:sy,USERNAME_REQUIRED:yS,ALTERUSER_NOTHING_TO_UPDATE:US,EMPTY_PASSWORD:DS,EMPTY_ROLE:MS,ACTIVE_BOOLEAN:PS};var BS=ii(),Vw=dS(),Co=Ei(),HS=RS(),GS=us(),bo=On(),te=p(),vS=require("validate.js"),L=w(),{promisify:Lo}=require("util"),wo=ls(),Xt=A(),bS=ut(),xw=vr(),yo=de(),Yw=Io(),kw=Kt(),{handleHDBError:nt,hdb_errors:Kw}=J(),{HTTP_STATUS_CODES:it,AUTHENTICATION_ERROR_MSGS:po,HDB_ERROR_MSGS:Cr}=Kw,{UserEventMsg:Uo}=Zr(),LS=require("lodash"),FS={username:!0,active:!0,role:!0,password:!0},wS=new Map,di=Lo(GS.searchByValue),$w=Lo(GS.searchByHash),Ww=Lo(Vw.delete);async function Qw(e){let t=vS.cleanAttributes(e,FS),r=HS.addUserValidation(t);if(r)throw nt(new Error,r.message,it.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await di(s)}catch(u){throw L.error("There was an error searching for a role in add user"),L.error(u),u}if(!n||n.length<1)throw nt(new Error,Cr.ROLE_NAME_NOT_FOUND(t.role),it.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nt(new Error,Cr.DUP_ROLES_FOUND(t.role),it.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await BS.insert(i)}catch(u){throw L.error("There was an error searching for a user."),L.error(u),u}L.debug(o);try{await Ts()}catch(u){throw L.error("Got an error setting users to global"),L.error(u),u}if(o.skipped_hashes.length===1)throw nt(new Error,Cr.USER_ALREADY_EXISTS(t.username),it.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ADD_USER,c,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${_.username} successfully added`}a(Qw,"addUser");async function Jw(e){let t=vS.cleanAttributes(e,FS);if(te.isEmptyOrZeroLength(t.username))throw new Error(yS);if(te.isEmptyOrZeroLength(t.password)&&te.isEmptyOrZeroLength(t.role)&&te.isEmptyOrZeroLength(t.active))throw new Error(US);if(!te.isEmpty(t.password)&&te.isEmptyOrZeroLength(t.password.trim()))throw new Error(DS);if(!te.isEmpty(t.active)&&!te.isBoolean(t.active))throw new Error(PS);let r=Zw(t.username);if(!te.isEmpty(t.password)&&!te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password)),t.role==="")throw new Error(MS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await di(o)}catch(c){throw L.error("Got an error searching for a role."),L.error(c),c}if(!_||_.length===0){let c=Cr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw L.error(c),nt(new Error,c,it.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Cr.ALTER_USER_DUP_ROLES(t.role);throw L.error(c),nt(new Error,c,it.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await BS.update(s)}catch(o){throw L.error("Error during update."),L.error(o),o}try{await Ts()}catch(o){throw L.error("Got an error setting users to global"),L.error(o),o}let i={user:null};return i.user=t,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ALTER_USER,i,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),n}a(Jw,"alterUser");function Zw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zw,"isClusterUser");async function Xw(e){try{let t=HS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(te.isEmpty(global.hdb_users.get(e.username)))throw nt(new Error,Cr.USER_NOT_EXIST(e.username),it.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Ww(r)}catch(i){throw L.error("Got an error deleting a user."),L.error(i),i}L.debug(s);try{await Ts()}catch(i){throw L.error("Got an error setting users to global."),L.error(i),i}let n={user:null};return n.user=e,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.DROP_USER,n,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Xw,"dropUser");async function zw(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await $w(r)}catch(n){throw L.error("Got an error searching for a role."),L.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw L.error(r),r}return t}a(zw,"userInfo");async function jw(){let e;try{e=await Si()}catch(t){throw L.error("Got an error listing users."),L.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(jw,"listUsersExternal");async function Si(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=LS.cloneDeep(await di(e))}catch(r){throw L.error("Got an error searching for roles."),L.error(r),r}if(!te.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=LS.cloneDeep(await di(s))}catch(o){throw L.error("Got an error searching for users."),L.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],ey(_.role),i.set(_.username,_)}return(await Yw.getLicense()).enterprise?i:ty(i)}}catch(e){throw L.error("got an error listing users"),L.error(e),te.errorizeMessage(e)}return null}a(Si,"listUsers");function ey(e){try{if(!e){L.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(kw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){L.error("Got an error trying to set system permissions."),L.error(t)}}a(ey,"appendSystemTablesToRole");function ty(e){try{if(L.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(L.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return L.error("error filtering users."),L.error(t),new Map}}a(ty,"nonEnterpriseFilter");async function Ts(){try{let e=await Si();global.hdb_users=e}catch(e){throw L.error(e),e}}a(Ts,"setUsersToGlobal");async function ry(e,t,r=!0){global.hdb_users||await Ts();let s=global.hdb_users.get(e);if(!s)throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nt(new Error,po.USER_INACTIVE,it.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(wS.get(t)===s.password)return n;if(Co.validate(s.password,t))wS.set(t,s.password);else throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ry,"findAndValidateUser");async function sy(){let e=await Si(),t=xw.getConfigFromFile(Xt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!te.isEmpty(r))return r.decrypt_hash=wo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+bS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+bS.SERVER_SUFFIX.ADMIN,r}a(sy,"getClusterUser")});var xS=d((hB,VS)=>{"use strict";var ny=mr();VS.exports={writeTransaction:iy};function iy(e,t,r){return ny.writeTransaction(e,t,r)}a(iy,"writeTransaction")});var Do=d((fB,ay)=>{ay.exports={name:"harperdb",version:"4.0.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 Yo=d((LB,_T)=>{"use strict";var at=de();at.initSync();var oy=require("fs-extra"),_y=require("semver"),Ns=require("path"),{monotonicFactory:cy}=require("ulidx"),uy=cy(),kS=require("util"),KS=require("child_process"),Ey=kS.promisify(KS.exec),ly=KS.spawn,V=ut(),k=A(),vo=p(),mt=w(),Ti=ls(),dy=xS(),fs=vr(),{encode:Bo,decode:$S}=require("msgpackr"),{isEmpty:zt}=vo,WS=hs(),RB=ss(),Sy=us(),AB=kS.promisify(Sy.searchByHash),{connect:Ty,StorageType:QS,RetentionPolicy:JS,AckPolicy:ZS,DeliverPolicy:Ho,NatsConnection:mB,JetStreamManager:NB,JetStreamClient:OB,StringCodec:gB,JSONCodec:hy,createInbox:Fo,StreamSource:IB,headers:fy,toJsMsg:Ry,nuid:pB,JetStreamOptions:CB,ErrorCode:YS,nanos:bB}=require("nats"),{PACKAGE_ROOT:Ay}=A(),my=Do(),XS=hy(),Ny="clustering",Oy=my.engines[V.NATS_SERVER_NAME],gy=Ns.join(Ay,"dependencies"),Go=Ns.join(gy,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),Mo,Po,Rs,As,ms,Xe;_T.exports={runCommand:zS,checkNATSServerInstalled:Iy,createConnection:qo,getConnection:hi,getJetStreamManager:br,getJetStream:jS,getNATSReferences:Fe,getServerList:Cy,createLocalStream:Vo,listStreams:eT,deleteLocalStream:by,getServerConfig:Os,listRemoteStreams:Ly,viewStream:wy,publishToStream:yy,createWorkQueueStream:Uy,addSourceToWorkStream:tT,request:Dy,removeSourceFromWorkStream:sT,reloadNATS:xo,reloadNATSHub:My,reloadNATSLeaf:Py,extractServerName:rT,requestErrorHandler:By,updateWorkStream:Hy,createLocalTableStream:iT,createTableStreams:Gy,purgeTableStream:aT,purgeSchemaTableStreams:vy,getStreamInfo:Fy,updateNodeNameLocalStreams:qy,closeConnection:py};async function zS(e,t=void 0){let{stdout:r,stderr:s}=await Ey(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:yR.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(PR,"findPs")});var Ee=d((qD,Y_)=>{"use strict";var BR="__dbis__",HR="__environment_name__",GR="__dbi_defintion__",vR={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},FR=["__createdtime__","__updatedtime__"],qR="\uFFFF",x_={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},VR=Object.values(x_);Y_.exports={INTERNAL_DBIS_NAME:BR,DBI_DEFINITION_NAME:GR,SEARCH_TYPES:vR,TIMESTAMP_NAMES:FR,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HR,TRANSACTIONS_DBI_NAMES_ENUM:x_,TRANSACTIONS_DBIS:VR,OVERFLOW_MARKER:qR}});var Me=d((VD,z_)=>{"use strict";var k_=A(),K_=Ee(),$_={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},W_=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Q_={500:W_("There was an error processing your request."),400:"Invalid request"},xR=Q_[$_.INTERNAL_SERVER_ERROR],YR={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kR={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KR={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},$R={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ARRAY:"ids must be an array",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${K_.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${K_.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},WR={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${k_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${k_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},J_={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},QR={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},JR={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},ZR={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},XR={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},zR={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Z_={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},X_={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},jR={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},eA={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tA={...J_,...KR,...YR,...QR,...JR,...ZR,...XR,...zR,...WR,...Z_,...X_,...jR,...eA,...kR};z_.exports={CHECK_LOGS_WRAPPER:W_,HDB_ERROR_MSGS:tA,DEFAULT_ERROR_MSGS:Q_,DEFAULT_ERROR_RESP:xR,HTTP_STATUS_CODES:$_,LMDB_ERRORS_ENUM:$R,AUTHENTICATION_ERROR_MSGS:J_,VALIDATION_ERROR_MSGS:Z_,IPC_ERRORS:X_}});var J=d((xD,tc)=>{"use strict";var sr=Me(),rA=w(),sA=A(),Hr=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,j_),this.http_resp_code=s||sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(sr.DEFAULT_ERROR_MSGS[s]?sr.DEFAULT_ERROR_MSGS[s]:sr.DEFAULT_ERROR_MSGS[sr.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&rA[n](i)}};a(Hr,"HdbError");function j_(e,t,r,s=sA.LOG_LEVELS.ERROR,n=null,i=!1){if(ec(e))return e;let o=new Hr(e,t,r,s,n);return i&&delete o.stack,o}a(j_,"handleHDBError");function ec(e){return e.__proto__.constructor.name===Hr.name}a(ec,"isHDBError");tc.exports={isHDBError:ec,handleHDBError:j_,hdb_errors:sr}});var p=d((kD,hc)=>{"use strict";var ta=require("path"),nA=require("fs-extra"),ee=w(),rc=require("fs-extra"),iA=require("truncate-utf8-bytes"),Gr=require("os"),aA=require("net"),oA=require("recursive-iterator"),se=A(),oc=V_(),sc=require("papaparse"),Ps=require("moment"),{inspect:_A}=require("util"),nc=require("is-number"),YD=require("lodash"),{hdb_errors:Bs}=J(),_c=require("util").promisify(setTimeout),cA=100,uA=5,EA="",lA=4,ic=255,ac={true:!0,false:!1,undefined:null,null:null,NaN:NaN};hc.exports={isEmpty:we,isEmptyOrZeroLength:je,arrayHasEmptyValues:TA,arrayHasEmptyOrZeroLengthValues:hA,buildFolderPath:fA,isBoolean:cc,errorizeMessage:dA,stripFileExtension:AA,autoCast:mA,autoCastJSONDeep:ra,removeDir:OA,compareVersions:gA,isCompatibleDataVersion:IA,escapeRawValue:Ec,unescapeValue:pA,stringifyProps:CA,valueConverter:bA,timeoutPromise:wA,isClusterOperation:UA,getClusterUser:PA,sendTransactionToSocketCluster:DA,checkGlobalSchemaTable:MA,getHomeDir:lc,getPropsFilePath:LA,promisifyPapaParse:BA,removeBOM:dc,createEventPromise:HA,checkProcessRunning:GA,checkSchemaTableExist:vA,checkSchemaExists:Sc,checkTableExists:Tc,getStartOfTomorrowInSeconds:FA,getLimitKey:qA,isObject:RA,isNotEmptyAndHasValue:SA,autoCasterIsNumberCheck:uc,backtickASTSchemaItems:VA,isPortTaken:yA,stopProcess:xA,createForkArgs:YA,autoCastBoolean:kA,async_set_timeout:_c,getTableHashAttribute:KA,doesSchemaExist:$A,doesTableExist:WA,stringifyObj:QA,ms_to_time:JA,PACKAGE_ROOT:se.PACKAGE_ROOT};function dA(e){return e instanceof Error?e:new Error(e)}a(dA,"errorizeMessage");function we(e){return e==null}a(we,"isEmpty");function SA(e){return!we(e)&&(e||e===0||e===""||cc(e))}a(SA,"isNotEmptyAndHasValue");function je(e){return we(e)||e.length===0||e.size===0}a(je,"isEmptyOrZeroLength");function TA(e){if(we(e))return!0;for(let t=0;t<e.length;t++)if(we(e[t]))return!0;return!1}a(TA,"arrayHasEmptyValues");function hA(e){if(je(e))return!0;for(let t=0;t<e.length;t++)if(je(e[t]))return!0;return!1}a(hA,"arrayHasEmptyOrZeroLengthValues");function fA(...e){try{return e.join(ta.sep)}catch{console.error(e)}}a(fA,"buildFolderPath");function cc(e){return we(e)?!1:e===!0||e===!1}a(cc,"isBoolean");function RA(e){return we(e)?!1:typeof e=="object"}a(RA,"isObject");function AA(e){return je(e)?EA:e.slice(0,-lA)}a(AA,"stripFileExtension");function mA(e){return we(e)||e===""||typeof e!="string"?e:ac[e]!==void 0?ac[e]:uc(e)===!0?Number(e):e}a(mA,"autoCast");function NA(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(NA,"autoCastJSON");function ra(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=ra(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=ra(r);s!==r&&(e[t]=s)}return e}else return NA(e)}a(ra,"autoCastJSONDeep");function uc(e){if(e.startsWith("0.")&&nc(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&nc(e))}a(uc,"autoCasterIsNumberCheck");async function OA(e){if(je(e))throw new Error(`Directory path: ${e} does not exist`);try{await rc.emptyDir(e),await rc.remove(e)}catch(t){throw ee.error(`Error removing files in ${e} -- ${t}`),t}}a(OA,"removeDir");function gA(e,t){if(je(e)){ee.info("Invalid current version sent as parameter.");return}if(je(t)){ee.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),_=i.replace(s,"").split("."),c=Math.min(o.length,_.length);for(let u=0;u<c;u++)if(r=parseInt(o[u],10)-parseInt(_[u],10),r)return r;return o.length-_.length}a(gA,"compareVersions");function IA(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(IA,"isCompatibleDataVersion");function Ec(e){if(we(e))return e;let t=String(e);return t==="."?se.UNICODE_PERIOD:t===".."?se.UNICODE_PERIOD+se.UNICODE_PERIOD:t.replace(se.FORWARD_SLASH_REGEX,se.UNICODE_FORWARD_SLASH)}a(Ec,"escapeRawValue");function pA(e){if(we(e))return e;let t=String(e);return t===se.UNICODE_PERIOD?".":t===se.UNICODE_PERIOD+se.UNICODE_PERIOD?"..":String(e).replace(se.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(pA,"unescapeValue");function CA(e,t){if(we(e))return ee.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Gr.EOL}!je(s)&&s[0]===";"?r+=" "+s+n+Gr.EOL:je(s)||(r+=s+"="+n+Gr.EOL)}catch{ee.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(CA,"stringifyProps");function bA(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){ee.error(n),t=e}let r=String(Ec(t)),s=Buffer.byteLength(r)>ic?iA(r,ic)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(bA,"valueConverter");function lc(){let e;try{e=Gr.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(lc,"getHomeDir");function LA(){let e=ta.join(lc(),se.HDB_HOME_DIR_NAME,se.BOOT_PROPS_FILE_NAME);return nA.existsSync(e)||(e=ta.join(__dirname,"../","hdb_boot_properties.file")),e}a(LA,"getPropsFilePath");function wA(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wA,"timeoutPromise");async function yA(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=aA.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(yA,"isPortTaken");function UA(e){try{return se.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ee.error(`Error checking operation against cluster ops ${t}`)}return!1}a(UA,"isClusterOperation");function DA(e,t,r){if(global.hdb_socket_client!==void 0){ee.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=se.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(DA,"sendTransactionToSocketCluster");function MA(e,t){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(MA,"checkGlobalSchemaTable");function PA(e,t){if(we(t)){ee.warn("No CLUSTERING_USER defined, clustering disabled");return}if(we(e)||je(e)){ee.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){ee.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ee.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(PA,"getClusterUser");function BA(){sc.parsePromise=function(e,t){return new Promise(function(r,s){sc.parse(e,{header:!0,transformHeader:dc,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(BA,"promisifyPapaParse");function dc(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dc,"removeBOM");function HA(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ee.info(`Got cluster status event response: ${_A(n)}`);try{i.cancel()}catch{ee.error("Error trying to cancel timeout.")}s(n)})})}a(HA,"createEventPromise");async function GA(e){let t=!0,r=0;do await _c(cA*r++),(await oc.findPs(e)).length>0&&(t=!1);while(t&&r<uA);if(t)throw new Error(`process ${e} was not started`)}a(GA,"checkProcessRunning");function vA(e,t){let r=Sc(e);if(r)return r;let s=Tc(e,t);if(s)return s}a(vA,"checkSchemaTableExist");function Sc(e){if(!global.hdb_schema[e])return Bs.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Sc,"checkSchemaExists");function Tc(e,t){if(!global.hdb_schema[e][t])return Bs.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tc,"checkTableExists");function FA(){let e=Ps().utc().add(1,se.MOMENT_DAYS_TAG).startOf(se.MOMENT_DAYS_TAG).unix(),t=Ps().utc().unix();return e-t}a(FA,"getStartOfTomorrowInSeconds");function qA(){return Ps().utc().format("DD-MM-YYYY")}a(qA,"getLimitKey");function VA(e){try{let t=new oA(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ee.error("Got an error back ticking items."),ee.error(t)}}a(VA,"backtickASTSchemaItems");async function xA(e){let t=Gr.userInfo();(await oc.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),ee.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(xA,"stopProcess");function YA(e){return[e]}a(YA,"createForkArgs");function kA(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kA,"autoCastBoolean");function KA(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(KA,"getTableHashAttribute");function $A(e){return global?.hdb_schema?.[e]!==void 0}a($A,"doesSchemaExist");function WA(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(WA,"doesTableExist");function QA(e){try{return JSON.stringify(e)}catch{return e}}a(QA,"stringifyObj");function JA(e){let t=Ps.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(JA,"ms_to_time")});var ut=d(($D,Rc)=>{"use strict";var{platform:KD}=require("os"),ZA="nats-server.zip",sa="nats-server",XA=process.platform==="win32"?`${sa}.exe`:sa,na="HDB",zA=/^[^\s.,*>]+$/,fc="__request__",jA=a(e=>`${e}.${fc}`,"REQUEST_SUBJECT"),em={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},tm={HUB:"hub.pid",LEAF:"leaf.pid"},rm={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},sm={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:na,deliver_subject:"__HDB__.WORKQUEUE"},nm={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:na,deliver_subject:"HDB.SCHEMAQUEUE"},im={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:na,deliver_subject:"HDB.USERQUEUE"},am={SUCCESS:"success",ERROR:"error"},om={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},_m={TXN:"txn",MSGID:"msgid"};Rc.exports={NATS_SERVER_ZIP:ZA,NATS_SERVER_NAME:sa,NATS_BINARY_NAME:XA,PID_FILES:tm,NATS_CONFIG_FILES:em,SERVER_SUFFIX:rm,WORK_QUEUE_CONSUMER_NAMES:sm,SCHEMA_QUEUE_CONSUMER_NAMES:nm,USER_QUEUE_CONSUMER_NAMES:im,NATS_TERM_CONSTRAINTS_RX:zA,REQUEST_SUFFIX:fc,UPDATE_REMOTE_RESPONSE_STATUSES:am,CLUSTER_STATUS_STATUSES:om,REQUEST_SUBJECT:jA,SUBJECT_PREFIXES:_m}});var mc=d((WD,Ac)=>{"use strict";var cm=ut(),Hs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h,S){this.port=t,this.server_name=r+cm.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:_},this.leafnodes={port:c,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.cluster={name:u,port:E,routes:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:_}},this.accounts={SYS:{users:h},HDB:{users:S}},this.system_account="SYS"}};a(Hs,"HubConfigObject");Ac.exports=Hs});var gc=d((QD,Oc)=>{"use strict";var Nc=ut(),Gs=class{constructor(t,r,s,n,i,o,_,c,u,E,l,h){this.port=t,this.server_name=r+Nc.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Nc.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:E,ca_file:l,insecure:h},this.leafnodes={remotes:[{tls:{ca_file:l,insecure:h},urls:i,account:"SYS"},{tls:{ca_file:l,insecure:h},urls:o,account:"HDB"}]},this.accounts={SYS:{users:_},HDB:{users:c,jetstream:"enabled"}},this.system_account="SYS"}};a(Gs,"LeafConfigObject");Oc.exports=Gs});var pc=d((JD,Ic)=>{"use strict";var vs=class{constructor(t,r){this.user=t,this.password=r}};a(vs,"HdbUserObject");Ic.exports=vs});var bc=d((ZD,Cc)=>{"use strict";var um=ut(),Fs=class{constructor(t,r){this.user=t+um.SERVER_SUFFIX.ADMIN,this.password=r}};a(Fs,"SysUserObject");Cc.exports=Fs});var nr=d((XD,yc)=>{"use strict";var wc=p(),Lc=A(),Vs=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ia=require("joi"),qs={schema_format:{pattern:Vs,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Em=ia.alternatives(ia.string().min(1).max(qs.schema_length.maximum).pattern(Vs).messages({"string.pattern.base":"{:#label} "+qs.schema_format.message}),ia.number()).required();function lm(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>qs.schema_length.maximum?`'${e}' maximum of 250 characters`:Vs.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(lm,"checkValidTable");function dm(e,t){return wc.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(dm,"validateSchemaExists");function Sm(e,t){let r=t.state.ancestors[0].schema;return wc.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Sm,"validateTableExists");function Tm(e,t){return e.toLowerCase()===Lc.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Lc.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Tm,"validateSchemaName");yc.exports={common_validators:qs,schema_regex:Vs,hdb_schema_table:Em,validateSchemaExists:dm,validateTableExists:Sm,validateSchemaName:Tm,checkValidTable:lm}});var Et=d((zD,Uc)=>{"use strict";var me=require("validate.js");me.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||me.validators.type.checks[t](e)?null:` must be a '${t}' value`};me.validators.type.checks={Object:function(e){return me.isObject(e)&&!me.isArray(e)},Array:me.isArray,Integer:me.isInteger,Number:me.isNumber,String:me.isString,Date:me.isDate,Boolean:function(e){return typeof e=="boolean"}};me.validators.hasValidFileExt=function(e,t){return!me.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Uc.exports={validateObject:hm,validateObjectAsync:fm,validateBySchema:Rm};function hm(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=me(e,t,{format:"flat"});return r?new Error(r):null}a(hm,"validateObject");async function fm(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await me.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(fm,"validateObjectAsync");function Rm(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Rm,"validateBySchema")});var oa=d((jD,Mc)=>{var{hdb_schema_table:Dc}=nr(),Am=Et(),aa=require("joi"),mm={undefined:"undefined",null:"null"},Nm=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||mm[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),Om=aa.object({schema:Dc,table:Dc,records:aa.array().items(aa.object().custom(Nm)).required()});Mc.exports=function(e){return Am.validateBySchema(e,Om)}});var _a=d((eM,Pc)=>{"use strict";var xs=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(xs,"BridgeMethods");Pc.exports=xs});var xt=d((sM,vc)=>{"use strict";var Bc=Me().LMDB_ERRORS_ENUM,tM=require("lmdb"),gm=Ee(),rM=require("buffer").Buffer,Im=require("microtime"),{OVERFLOW_MARKER:Hc,MAX_SEARCH_KEY_LENGTH:Ys}=gm,Gc=["number","string","symbol","boolean","bigint"];function pm(e){if(!e)throw new Error(Bc.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(Bc.INVALID_ENVIRONMENT)}a(pm,"validateEnv");function Cm(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(Cm,"stringifyData");function bm(e){return e instanceof Date?e.valueOf():e}a(bm,"convertKeyValueToWrite");function Lm(e){if(e==null)return;if(Gc.includes(typeof e))return e.length>Ys?[e.slice(0,Ys)+Hc]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];Gc.includes(typeof n)&&(n.length>Ys?t.push(n.slice(0,Ys)+Hc):t.push(n))}}return t}a(Lm,"getIndexedValues");function wm(){let e=Im.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(wm,"getMicroTime");vc.exports={validateEnv:pm,stringifyData:Cm,convertKeyValueToWrite:bm,getMicroTime:wm,getIndexedValues:Lm}});var qc=d((nM,Fc)=>{"use strict";var ks=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ks,"DBIDefinition");Fc.exports=ks});var xc=d((iM,Vc)=>{"use strict";var Ks=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ks,"OpenDBIObject");Vc.exports=Ks});var kc=d((aM,Yc)=>{"use strict";var $s=class{constructor(t,r,s,n,i=!1,o=!1,_=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,_!==void 0&&(this.overlappingSync=_)}};a($s,"OpenEnvironmentObject");Yc.exports=$s});var $c=d((oM,Kc)=>{"use strict";var ym={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},Um="certificate.pem",Dm="privateKey.pem",Mm="ca.pem";Kc.exports={CERTIFICATE_VALUES:ym,CERTIFICATE_PEM_NAME:Um,PRIVATEKEY_PEM_NAME:Dm,CA_PEM_NAME:Mm}});var Jc=d((_M,Qc)=>{"use strict";var Pm=require("fs-extra"),U=require("joi"),Bm=require("os"),{boolean:ne,string:dt,number:et,array:ca}=U.types(),ke=require("path"),Hm=w(),Ws=p(),St=$c(),Gm=Et(),lt="keys",vm=St.CERTIFICATE_PEM_NAME,Fm=St.PRIVATEKEY_PEM_NAME,qm=St.CA_PEM_NAME,Vm=St.CERTIFICATE_PEM_NAME,xm=St.PRIVATEKEY_PEM_NAME,Ym=St.CA_PEM_NAME,km=St.CERTIFICATE_PEM_NAME,Km=St.PRIVATEKEY_PEM_NAME,$m=St.CA_PEM_NAME,Wm="log",Qm="custom_functions",Jm="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Zm="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xm="rootPath config parameter is undefined",zm="clustering.enabled config parameter is undefined",Ct=et.min(0).required(),Qs=ca.items({host:dt.required(),port:Ct}).empty(null),Ne;Qc.exports={configValidator:jm,routesValidator:nN,route_constraints:Qs};function jm(e){if(Ne=e.rootPath,Ws.isEmpty(Ne))throw Xm;let t=ne.required(),r=U.valid("production","development").required(),s=et.min(1).max(1e3).empty(null).default(sN),n=dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=U.custom(tN).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(Wc),o=dt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),_=e.clustering?.enabled;if(Ws.isEmpty(_))throw zm;let c;return _===!0?c=U.object({enabled:t,hubServer:U.object({cluster:U.object({name:U.required().empty(null),network:U.object({port:Ct,routes:Qs}).required()}).required(),leafNodes:U.object({network:U.object({port:Ct}).required()}).required(),network:U.object({port:Ct}).required()}).required(),leafServer:U.object({network:U.object({port:Ct,routes:Qs}).required()}).required(),nodeName:o,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()}),user:U.string().required()}).required():c=U.object({enabled:t,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ne.required()})}).required(),U.object({clustering:c,customFunctions:U.object({enabled:t,network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}),nodeEnv:r,root:n,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:U.object({network:U.object({port:Ct})}).required(),localStudio:U.object({enabled:t}).required(),logging:U.object({file:ne.required(),level:U.valid("notify","fatal","error","warn","info","debug","trace"),rotation:U.object({compress:ne.required(),dateFormat:dt.required(),maxSize:dt.custom(rN).required(),retain:et.min(0).required(),rotate:ne.required(),rotateInterval:dt.required(),rotateModule:ne.required(),timezone:dt.required(),workerInterval:et.min(1).required()}).required(),root:n,stdStreams:ne.required(),auditLog:ne.required()}).required(),operationsApi:U.object({authentication:U.object({operationTokenTimeout:U.required(),refreshTokenTimeout:U.required()}).required(),foreground:ne.required(),network:U.object({cors:ne.required(),corsAccessList:ca.required(),headersTimeout:et.min(1).required(),https:ne.required(),keepAliveTimeout:et.min(1).required(),port:Ct,timeout:et.min(1).required()}).required(),nodeEnv:r,tls:U.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:U.object({threads:s}).required(),storage:U.object({writeAsync:ne.required(),overlappingSync:ne.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(jm,"configValidator");function eN(e){return Pm.existsSync(e)?null:`Specified path ${e} does not exist.`}a(eN,"doesPathExist");function tN(e,t){U.assert(e,dt.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=eN(e);if(r)return t.message(r)}a(tN,"validatePemFile");function rN(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jm);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(Zm)}a(rN,"validateRotationMaxSize");function sN(e,t){let r=t.state.path.join("."),s=Bm.cpus().length,n=s-1;return n<=2&&(n=2),Hm.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(sN,"setDefaultThreads");function Wc(e,t){if(!Ws.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Ws.isEmpty(Ne))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return ke.join(Ne,Qm);case"logging.root":return ke.join(Ne,Wm);case"operationsApi.tls.certificate":return ke.join(Ne,lt,vm);case"operationsApi.tls.privateKey":return ke.join(Ne,lt,Fm);case"operationsApi.tls.certificateAuthority":return ke.join(Ne,lt,qm);case"customFunctions.tls.certificate":return ke.join(Ne,lt,Vm);case"customFunctions.tls.privateKey":return ke.join(Ne,lt,xm);case"customFunctions.tls.certificateAuthority":return ke.join(Ne,lt,Ym);case"clustering.tls.certificate":return ke.join(Ne,lt,km);case"clustering.tls.privateKey":return ke.join(Ne,lt,Km);case"clustering.tls.certificateAuthority":return ke.join(Ne,lt,$m);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function nN(e){let t=U.object({routes:Qs});return Gm.validateBySchema({routes:e},t)}a(nN,"routesValidator")});var vr=d((cM,ru)=>{"use strict";var Y=A(),Pe=p(),le=w(),{configValidator:iN,routesValidator:Zc}=Jc(),Ke=require("fs-extra"),aN=require("yaml"),ir=require("path"),oN=require("is-number"),Xs=require("properties-reader"),_N=require("lodash"),{handleHDBError:cN}=J(),{HTTP_STATUS_CODES:uN,HDB_ERROR_MSGS:Js}=Me(),{PACKAGE_ROOT:EN}=A(),lN="Unable to get config value because config is uninitialized",dN="Config successfully initialized",SN="Error backing up config file",TN="Empty parameter sent to getConfigValue",Xc=ir.join(EN,"config","yaml",Y.HDB_DEFAULT_CONFIG_FILE),hN="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Zs,Oe;ru.exports={createConfigFile:fN,getDefaultConfig:RN,getConfigValue:zc,initConfig:jc,flattenConfig:Yt,updateConfigValue:eu,updateConfigObject:AN,getConfiguration:mN,setConfiguration:NN,readConfigFile:la,getClusteringRoutes:ON,initOldConfig:tu,getConfigFromFile:gN};function fN(e){let t=ar(Xc);Zs=Yt(t.toJSON());for(let i in e){let o=Y.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let _=o.split("_"),c=ua(o,e[i]);try{t.setIn([..._],c)}catch(u){le.error(u)}}}Ea(t);let r=t.toJSON();Oe=Yt(r);let s=t.getIn(["rootPath"]),n=ir.join(s,Y.HDB_CONFIG_FILE);Ke.createFileSync(n),Ke.writeFileSync(n,String(t)),le.trace(`Config file written to ${n}`)}a(fN,"createConfigFile");function RN(e){if(Zs===void 0){let r=ar(Xc);Zs=Yt(r.toJSON())}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Zs[t.toLowerCase()]}a(RN,"getDefaultConfig");function zc(e){if(Pe.isEmpty(e)){le.error(TN);return}if(Oe===void 0){le.trace(lN);return}let t=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Oe[t.toLowerCase()]}a(zc,"getConfigValue");function jc(e=!1){if(Oe===void 0||e){let t=Pe.getPropsFilePath();try{Ke.accessSync(t,Ke.constants.F_OK|Ke.constants.R_OK)}catch(o){throw le.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=Xs(t).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{tu(s);return}catch(o){if(o.code!==Y.NODE_ERROR_CODES.ENOENT)throw o}try{n=ar(s)}catch(o){if(o.code===Y.NODE_ERROR_CODES.ENOENT){le.trace(`HarperDB config file not found at ${s}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw le.error(o),new Error(`Error reading HarperDB config file at ${s}`)}Ea(n);let i=n.toJSON();Oe=Yt(i),le.trace(dN)}}a(jc,"initConfig");function Ea(e){let t=e.toJSON(),r=iN(t);if(r.error)throw Js.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(Ea,"validateConfig");function AN(e,t){Oe===void 0&&(Oe={});let r=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){le.trace(`Unable to update config object because config param '${e}' does not exist`);return}Oe[r.toLowerCase()]=t}a(AN,"updateConfigObject");function eu(e,t,r=void 0,s=!1,n=!1){Oe===void 0&&jc();let i=zc(Y.CONFIG_PARAM_MAP.hdb_root),o=ir.join(i,Y.HDB_CONFIG_FILE),_=ar(o);if(r===void 0){let E=Y.CONFIG_PARAM_MAP[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let l=E.split("_"),h=ua(E,t);_.setIn([...l],h)}else for(let E in r){let l=Y.CONFIG_PARAM_MAP[E.toLowerCase()];if(l!==void 0){let h=l.split("_"),S=ua(l,r[E]);try{_.setIn([...h],S)}catch(m){le.error(m)}}}Ea(_);let c=_.getIn(["rootPath"]),u=ir.join(c,Y.HDB_CONFIG_FILE);if(s===!0)try{let E=ir.join(c,"backup",`${Y.HDB_CONFIG_FILE}.bak`);Ke.copySync(o,E),le.trace(`Config file: ${o} backed up to: ${E}`)}catch(E){le.error(SN),le.error(E)}Ke.writeFileSync(u,String(_)),n&&(Oe=Yt(_.toJSON())),le.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eu,"updateConfigValue");function Yt(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=Yt(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Yt,"flattenConfig");function ua(e,t){if(e===Y.CONFIG_PARAMS.CLUSTERING_NODENAME||e===Y.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(oN(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Pe.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Pe.autoCast(t)}a(ua,"castConfigValue");function mN(){let e=Pe.getPropsFilePath(),r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(mN,"getConfiguration");async function NN(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return eu(void 0,void 0,n,!0),hN}catch(i){throw typeof i=="string"||i instanceof String?cN(i,i,uN.BAD_REQUEST,void 0,void 0,!0):i}}a(NN,"setConfiguration");function la(){let e=Pe.getPropsFilePath();try{Ke.accessSync(e,Ke.constants.F_OK|Ke.constants.R_OK)}catch(n){throw le.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=Xs(e).get(Y.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return ar(r).toJSON()}a(la,"readConfigFile");function ar(e){return aN.parseDocument(Ke.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ar,"parseYamlDoc");function ON(){let e=la(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Pe.isEmptyOrZeroLength(t)?[]:t;let r=Zc(t);if(r)throw Js.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=Pe.isEmptyOrZeroLength(s)?[]:s;let n=Zc(s);if(n)throw Js.CONFIG_VALIDATION(n.message);if(!Pe.isEmptyOrZeroLength(s)&&!Pe.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(_=>_.host===o.host&&_.port===o.port));if(!Pe.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Js.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ON,"getClusteringRoutes");function tu(e){let t=Xs(e);Oe={};for(let r in Y.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(Pe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Y.CONFIG_PARAM_MAP[r].toLowerCase();n===Y.CONFIG_PARAMS.LOGGING_ROOT?Oe[n]=ir.dirname(s):Oe[n]=s}return Oe}a(tu,"initOldConfig");function gN(e){let t=la();return _N.get(t,e.replaceAll("_","."))}a(gN,"getConfigFromFile")});var de=d((uM,nu)=>{"use strict";var da=require("fs-extra"),tt=require("path"),IN=require("os"),pN=require("properties-reader"),Fr=w(),or=p(),g=A(),zs=vr(),CN="Error initializing environment manager",js="BOOT_PROPS_FILE_PATH",su=!1,bN={[g.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Tt={};nu.exports={BOOT_PROPS_FILE_PATH:js,getHdbBasePath:LN,setHdbBasePath:wN,get:yN,initSync:DN,setProperty:P,initTestEnvironment:MN};function LN(){return Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(LN,"getHdbBasePath");function wN(e){Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(wN,"setHdbBasePath");function yN(e){let t=zs.getConfigValue(e);return t===void 0?Tt[e]:t}a(yN,"get");function P(e,t){bN[e]&&(Tt[e]=t),zs.updateConfigObject(e,t)}a(P,"setProperty");function UN(){let e;try{e=or.getPropsFilePath(),da.accessSync(e,da.constants.F_OK|da.constants.R_OK),su=!0;let t=pN(e);return Tt[g.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(g.HDB_SETTINGS_NAMES.INSTALL_USER),Tt[g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Tt[js]=e,!0}catch{return Fr.trace(`Environment manager found no properties file at ${e}`),!1}}a(UN,"doesPropFileExist");function DN(e=!1){try{(su||UN())&&(zs.initConfig(e),Tt[g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=zs.getConfigValue(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Fr.error(CN),Fr.error(t),console.error(t),process.exit(1)}}a(DN,"initSync");function MN(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:_}=e,c=tt.join(__dirname,"../../","unitTests");Tt[js]=tt.join(c,"hdb_boot_properties.file"),P(g.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,tt.join(c,"settings.test")),P(g.HDB_SETTINGS_NAMES.INSTALL_USER,IN.userInfo().username),P(g.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.HDB_SETTINGS_NAMES.CERT_KEY,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,tt.join(c,"envDir","utility","keys","privateKey.pem")),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,tt.join(c,"envDir","utility","keys","certificate.pem")),P(g.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),P(g.HDB_SETTINGS_NAMES.LOG_PATH_KEY,tt.join(c,"envDir","log")),P(g.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),P(g.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),P(g.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,tt.join(c,"envDir")),P(g.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,or.isEmpty(n)?!0:n),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,or.isEmpty(n)?!0:n),P(g.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),P(g.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,or.isEmpty(i)?!1:i),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,or.isEmpty(i)?!1:i),P(g.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),P(g.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),P(g.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),P(g.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,tt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),P(g.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,or.isEmpty(_)?!1:_),o&&(P("CORS_ACCESSLIST",o),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(P(g.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(P(g.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(P(g.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),P(g.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${js}. Please check your boot props and settings files`;Fr.fatal(r),Fr.error(t)}}a(MN,"initTestEnvironment")});var F=d((lM,hu)=>{"use strict";var Sa=require("lmdb"),Be=require("fs-extra"),$e=require("path"),tn=xt(),iu=w(),ie=Me().LMDB_ERRORS_ENUM,rn=qc(),Ta=xc(),au=kc(),bt=Ee(),EM=A(),qr=de();qr.initSync();var ou=qr.get("STORAGE_WRITEASYNC")===!0||qr.get("STORAGE_WRITEASYNC")==="true"||qr.get("STORAGE_WRITEASYNC")==="TRUE",_u=qr.get("STORAGE_OVERLAPPINGSYNC"),cu=1024*1024*1024,uu=1e4,Eu=1e3,We=bt.INTERNAL_DBIS_NAME,lu=bt.DBI_DEFINITION_NAME,PN="data.mdb",BN="lock.mdb",Vr=".mdb",HN="-lock",en=class{constructor(t,r,s=!1){this.dbi=He(t,r),this.key_type=this.dbi[bt.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[bt.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Sa.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(en,"TransactionCursor");function ha(e,t){if(e===void 0)throw new Error(ie.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ie.ENV_NAME_REQUIRED)}a(ha,"pathEnvNameValidation");async function fa(e,t,r=!0){try{await Be.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ie.INVALID_BASE_PATH):s}try{let s=$e.join(e,t+Vr);return await Be.access(s,Be.constants.R_OK|Be.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Be.access($e.join(e,t,PN),Be.constants.R_OK|Be.constants.F_OK),$e.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ie.INVALID_ENVIRONMENT)}else throw new Error(ie.INVALID_ENVIRONMENT);throw s}}a(fa,"validateEnvironmentPath");function sn(e,t){if(tn.validateEnv(e),t===void 0)throw new Error(ie.DBI_NAME_REQUIRED)}a(sn,"validateEnvDBIName");async function GN(e,t,r=!1,s=!1){ha(e,t),t=t.toString();try{return await fa(e,t,s),Ra(e,t,r)}catch(n){if(n.message===ie.INVALID_ENVIRONMENT){let i=$e.join(e,t);await Be.mkdirp(s?i:e);let o=new au(s?i:i+Vr,cu,uu,Eu,!1,ou,_u),_=Sa.open(o);_.dbis=Object.create(null);let c=new Ta(!1);_.openDB(We,c),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Aa(e,t,r);return _[bt.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=_,_}throw n}}a(GN,"createEnvironment");async function vN(e,t,r,s=!0){let n=await Ra(e,t);if(r===void 0)throw new Error(ie.DESTINATION_PATH_REQUIRED);try{await Be.access($e.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(ie.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(vN,"copyEnvironment");async function Ra(e,t,r=!1){ha(e,t),t=t.toString();let s=Aa(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fa(e,t),i=$e.join(e,t+Vr),o=n!=i,_=new au(n,cu,uu,Eu,o,ou,_u),c=Sa.open(_);c.dbis=Object.create(null);let u=Su(c);for(let E=0;E<u.length;E++)He(c,u[E]);return c[bt.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=c,c}a(Ra,"openEnvironment");async function FN(e,t,r=!1){ha(e,t),t=t.toString();let s=$e.join(e,t+Vr),n=await fa(e,t);if(global.lmdb_map!==void 0){let i=Aa(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await du(o),delete global.lmdb_map[i]}}await Be.remove(n),await Be.remove(n===s?n+HN:$e.join($e.dirname(n),BN))}a(FN,"deleteEnvironment");async function du(e){tn.validateEnv(e);let t=e[bt.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(du,"closeEnvironment");function Aa(e,t,r=!1){let n=`${$e.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Aa,"getCachedEnvironmentName");function qN(e){tn.validateEnv(e);let t=Object.create(null),r=He(e,We);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==We)try{t[s]=Object.assign(new rn,n)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(qN,"listDBIDefinitions");function Su(e){tn.validateEnv(e);let t=[],r=He(e,We);for(let{key:s}of r.getRange({start:!1}))s!==We&&t.push(s);return t}a(Su,"listDBIs");function VN(e,t){let s=He(e,We).getEntry(t),n=new rn;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{iu.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(VN,"getDBIDefinition");function Tu(e,t,r,s=!1){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return He(e,t)}catch(n){if(n.message===ie.DBI_DOES_NOT_EXIST){let i=new Ta(r,s===!0),o=e.openDB(t,i),_=new rn(r===!0,s);return o[lu]=_,He(e,We).putSync(t,_),e.dbis[t]=o,o}throw n}}a(Tu,"createDBI");function He(e,t){if(sn(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==We?r=VN(e,t):r=new rn,r===void 0)throw new Error(ie.DBI_DOES_NOT_EXIST);let s;try{let n=new Ta(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ie.DBI_DOES_NOT_EXIST):n}return s[lu]=r,e.dbis[t]=s,s}a(He,"openDBI");function xN(e,t){sn(e,t),t=t.toString();let r=He(e,t),s=r.getStats();return r[bt.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(xN,"statDBI");async function YN(e,t){try{let r=$e.join(e,t+Vr);return(await Be.stat(r)).size}catch{throw new Error(ie.INVALID_ENVIRONMENT)}}a(YN,"environmentDataSize");function kN(e,t){if(sn(e,t),t=t.toString(),t===We)throw new Error(ie.CANNOT_DROP_INTERNAL_DBIS_NAME);He(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],He(e,We).removeSync(t)}a(kN,"dropDBI");function KN(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{He(e,n)}catch(i){if(i.message===ie.DBI_DOES_NOT_EXIST)Tu(e,n,n!==t,n===t);else throw i}}}a(KN,"initializeDBIs");hu.exports={openDBI:He,openEnvironment:Ra,createEnvironment:GN,listDBIs:Su,listDBIDefinitions:qN,createDBI:Tu,dropDBI:kN,statDBI:xN,deleteEnvironment:FN,initializeDBIs:KN,TransactionCursor:en,environmentDataSize:YN,copyEnvironment:vN,closeEnvironment:du}});var Ru=d((dM,fu)=>{"use strict";var nn=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(nn,"InsertRecordsResponseObject");fu.exports=nn});var mu=d((SM,Au)=>{"use strict";var an=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(an,"UpdateRecordsResponseObject");Au.exports=an});var Ou=d((TM,Nu)=>{"use strict";var on=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(on,"UpsertRecordsResponseObject");Nu.exports=on});var _r=d((AM,Iu)=>{"use strict";var $N=F(),WN=Ru(),QN=mu(),JN=Ou(),Yr=xt(),xr=Me().LMDB_ERRORS_ENUM,ZN=Ee(),Lt=A(),XN=p(),zN=require("uuid"),hM=require("lmdb"),{handleHDBError:jN,hdb_errors:eO}=J(),{OVERFLOW_MARKER:fM,MAX_SEARCH_KEY_LENGTH:RM}=ZN,ma=Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,kt=Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function tO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new WN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c];gu(u,!0,n);let E=rO(e,t,r,u),l=u[t];o.push(E),_.push(l)}return Oa(o,_,s,i)}a(tO,"insertRecords");function rO(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let _=s[o];if(typeof _=="function"){let u=_([[{}]]);Array.isArray(u)&&(_=u[0][Lt.FUNC_VAL],s[o]=_)}let c=Yr.getIndexedValues(_);if(c)for(let u=0,E=c.length;u<E;u++)e.dbis[o].put(c[u],n)}e.dbis[t].put(n,s,s[kt])})}a(rO,"insertRecord");function sO(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(sO,"removeSkippedRecords");function gu(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[kt]))&&(e[kt]=s),t===!0?(r===!0||!Number.isInteger(e[ma]))&&(e[ma]=s):delete e[ma]}a(gu,"setTimestamps");function Na(e,t,r){r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Lt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),$N.initializeDBIs(e,t,r)}a(Na,"initializeTransaction");async function nO(e,t,r,s,n=!0){Ia(e,t,r,s),Na(e,t,r);let i=new QN,o=[],_=[],c=[];for(let u=0;u<s.length;u++){let E=s[u],l=E[t],h;try{h=ga(e,t,E,l,i,!0,n)}catch{i.skipped_hashes.push(l),o.push(u);continue}_.push(h),c.push(l)}return Oa(_,c,s,i,o)}a(nO,"updateRecords");async function iO(e,t,r,s,n=!0){try{Ia(e,t,r,s)}catch(c){throw jN(c,c.message,eO.HTTP_STATUS_CODES.BAD_REQUEST)}Na(e,t,r);let i=new JN,o=[],_=[];for(let c=0;c<s.length;c++){let u=s[c],E;XN.isEmpty(u[t])?(E=zN.v4(),u[t]=E):E=u[t];let l=ga(e,t,u,E,i,!1,n);o.push(l),_.push(E)}return Oa(o,_,s,i)}a(iO,"upsertRecords");async function Oa(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,_=i.length;o<_;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Yr.getMicroTime(),sO(r,n),s}a(Oa,"finalizeWrite");function ga(e,t,r,s,n,i=!1,o=!0){let _=e.dbis[t],c=_.getEntry(s),u=c?.value,E=u;if(!u){if(i)return!1;u={}}if(gu(r,!E,o),Number.isInteger(r[kt])&&u[kt]>r[kt])return!1;E&&n.original_records.push(u);let l,h=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let N=r[m],C=e.dbis[m];if(C===void 0)continue;let fe=u[m];if(typeof N=="function"){let $=N([[u]]);Array.isArray($)&&(N=$[0][Lt.FUNC_VAL],r[m]=N)}if(N===fe)continue;let G=Yr.getIndexedValues(fe);if(G)for(let $=0,xe=G.length;$<xe;$++)C.remove(G[$],s);if(G=Yr.getIndexedValues(N),G)for(let $=0,xe=G.length;$<xe;$++)C.put(G[$],s)}let S=Object.assign({},u,r);_.put(s,S,S[kt])},"do_put");return c?l=_.ifVersion(s,c.version,h):l=_.ifNoExists(s,h),l.then(S=>S?!0:ga(e,t,r,s,n,i,o))}a(ga,"updateUpsertRecord");function aO(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(xr.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xr.WRITE_ATTRIBUTES_REQUIRED):new Error(xr.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(aO,"validateBasic");function Ia(e,t,r,s){if(aO(e,t,r),!Array.isArray(s))throw s===void 0?new Error(xr.RECORDS_REQUIRED):new Error(xr.RECORDS_MUST_BE_ARRAY)}a(Ia,"validateWrite");Iu.exports={insertRecords:tO,updateRecords:nO,upsertRecords:iO}});var x=d((mM,Cu)=>{"use strict";var pa=A(),cr=de(),Ca=require("path");cr.initSync();var _n,cn,un;function pu(){if(_n!==void 0)return _n;if(cr.getHdbBasePath()!==void 0)return _n=Ca.join(cr.getHdbBasePath(),pa.SCHEMA_DIR_NAME),_n}a(pu,"getBaseSchemaPath");function oO(){if(cn!==void 0)return cn;if(cr.getHdbBasePath()!==void 0)return cn=Ca.join(pu(),pa.SYSTEM_SCHEMA_NAME),cn}a(oO,"getSystemSchemaPath");function _O(){if(un!==void 0)return un;if(cr.getHdbBasePath()!==void 0)return un=Ca.join(cr.getHdbBasePath(),pa.TRANSACTIONS_DIR_NAME),un}a(_O,"getTransactionAuditStorePath");Cu.exports={getBaseSchemaPath:pu,getSystemSchemaPath:oO,getTransactionAuditStorePath:_O}});var Kt=d((NM,cO)=>{cO.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ba=d((OM,bu)=>{var{common_validators:wt}=nr(),kr=Et(),Qe="is required",v={schema:{presence:!0,format:wt.schema_format,length:wt.schema_length},table:{presence:!0,format:wt.schema_format,length:wt.schema_length},attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length},hash_attribute:{presence:!0,format:wt.schema_format,length:wt.schema_length}};function Kr(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Kr,"makeAttributesStrings");function uO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence=!1,v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(uO,"schema_object");function EO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(EO,"table_object");function lO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence={message:Qe},kr.validateObject(e,v)}a(lO,"create_table_object");function dO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence={message:Qe},v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(dO,"attribute_object");function SO(e){return e=Kr(e),v.schema.presence={message:Qe},v.table.presence={message:Qe},v.attribute.presence=!1,v.hash_attribute.presence=!1,kr.validateObject(e,v)}a(SO,"describe_table");function TO(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(TO,"validateTableResidence");bu.exports={schema_object:uO,create_table_object:lO,table_object:EO,attribute_object:dO,describe_table:SO,validateTableResidence:TO}});var wu=d((gM,Lu)=>{"use strict";var hO=require("uuid"),En=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hO.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(En,"CreateAttributeObject");Lu.exports=En});var dn=d((IM,yu)=>{"use strict";var fO=wu(),ln=class extends fO{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(ln,"LMDBCreateAttributeObject");yu.exports=ln});var Du=d((pM,Uu)=>{"use strict";Uu.exports=AO;var RO="inserted";function AO(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===RO?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(AO,"returnObject")});var Sn=d((CM,Pu)=>{"use strict";var mO=A(),La=F(),NO=_r(),{getSystemSchemaPath:OO,getBaseSchemaPath:gO}=x(),IO=require("path"),pO=Kt(),CO=ba(),bO=dn(),LO=Du(),{handleHDBError:wO,hdb_errors:yO}=J(),UO=p(),wa=pO.hdb_attribute,Mu=[];for(let e=0;e<wa.attributes.length;e++)Mu.push(wa.attributes[e].attribute);var DO="inserted";Pu.exports=MO;async function MO(e){let t=CO.attribute_object(e);if(t)throw wO(new Error,t.message,yO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=UO.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new bO(e.schema,e.table,e.attribute,e.id);try{let n=await La.openEnvironment(IO.join(gO(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);La.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await La.openEnvironment(OO(),mO.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:_}=await NO.insertRecords(i,wa.hash_attribute,Mu,[s]);return LO(DO,o,{records:[s]},_)}catch(n){throw n}}a(MO,"lmdbCreateAttribute")});var Tn=d((LM,Hu)=>{"use strict";var ht=p(),Bu=w(),bM=oa();Hu.exports=PO;function PO(e){if(ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ht.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(ht.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&ht.isEmptyOrZeroLength(o[r]))throw Bu.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!ht.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Bu.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!ht.isEmpty(o[r])&&o[r]!==""&&s.has(ht.autoCast(o[r]))&&(o.skip=!0),s.add(ht.autoCast(o[r]));for(let _ in o)n[_]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(PO,"insertUpdateValidate")});var fn=d((wM,Gu)=>{"use strict";var BO=A().OPERATIONS_ENUM,hn=class{constructor(t,r,s,n,i=void 0){this.operation=BO.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(hn,"InsertObject");Gu.exports=hn});var An=d((UM,vu)=>{"use strict";var yM=fn(),Rn=A(),Ua=p(),ya=w(),HO=require("uuid"),{handleHDBError:$r,hdb_errors:GO}=J(),{HDB_ERROR_MSGS:Wr,HTTP_STATUS_CODES:Qr}=GO;vu.exports=vO;function vO(e,t,r){for(let n=0;n<t.length;n++)FO(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];qO(i,r,e.operation)}}a(vO,"processRows");function FO(e){if(Buffer.byteLength(String(e))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw $r(new Error,Wr.ATTR_NAME_LENGTH_ERR(e),Qr.BAD_REQUEST,void 0,void 0,!0);if(Ua.isEmptyOrZeroLength(e)||Ua.isEmpty(e.trim()))throw $r(new Error,Wr.ATTR_NAME_NULLISH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(FO,"validateAttribute");function qO(e,t,r){if(!e.hasOwnProperty(t)||Ua.isEmptyOrZeroLength(e[t])){if(r===Rn.OPERATIONS_ENUM.INSERT||r===Rn.OPERATIONS_ENUM.UPSERT){e[t]=HO.v4();return}throw ya.error("Update transaction aborted due to record with no hash value:",e),$r(new Error,Wr.RECORD_MISSING_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Rn.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ya.error(e),$r(new Error,Wr.HASH_VAL_LENGTH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw ya.error(e),$r(new Error,Wr.INVALID_FORWARD_SLASH_IN_HASH_ERR,Qr.BAD_REQUEST,void 0,void 0,!0)}a(qO,"validateHash")});var qu=d((DM,Fu)=>{"use strict";var mn=class{constructor(t,r){this.type=t,this.message=r}};a(mn,"IPCEventObject");Fu.exports=mn});var Zr=d((MM,Vu)=>{"use strict";var VO=w(),Da=p(),xO=A(),{IPC_ERRORS:Jr}=Me();Vu.exports={sendIpcEvent:YO,validateEvent:kO,SchemaEventMsg:KO,UserEventMsg:$O};function YO(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):VO.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(YO,"sendIpcEvent");function kO(e){if(typeof e!="object")return Jr.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||Da.isEmpty(e.type))return Jr.MISSING_TYPE;if(!e.hasOwnProperty("message")||Da.isEmpty(e.message))return Jr.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Da.isEmpty(e.message.originator))return Jr.MISSING_ORIGIN;if(xO.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Jr.INVALID_EVENT(e.type)}a(kO,"validateEvent");function KO(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(KO,"SchemaEventMsg");function $O(e){this.originator=e}a($O,"UserEventMsg")});var On=d((BM,Ku)=>{"use strict";var xu=A(),PM=p(),Nn=w(),Yu=qu(),{sendIpcEvent:ku}=Zr();function WO(e){try{Nn.trace("signalSchemaChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.SCHEMA,e);ku(t)}catch(t){Nn.error(t)}}a(WO,"signalSchemaChange");function QO(e){try{Nn.trace("signalUserChange called with message:",e);let t=new Yu(xu.IPC_EVENT_TYPES.USER,e);ku(t)}catch(t){Nn.error(t)}}a(QO,"signalUserChange");Ku.exports={signalSchemaChange:WO,signalUserChange:QO}});var gn=d((HM,Wu)=>{"use strict";var $u=p(),JO=A(),ZO=w(),XO=Sn(),zO=dn(),jO=On(),{SchemaEventMsg:eg}=Zr(),tg="already exists in";Wu.exports=rg;async function rg(e,t,r){try{if($u.isEmptyOrZeroLength(r))return r;let s=[];$u.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await sg(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(rg,"lmdbCheckForNewAttributes");async function sg(e,t,r,s){let n=new zO(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ng(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(tg))ZO.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(sg,"createNewAttribute");async function ng(e){let t;try{return t=await XO(e),jO.signalSchemaChange(new eg(process.pid,JO.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(ng,"createAttribute")});var ur=d((GM,Qu)=>{"use strict";var In=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(In,"LMDBTransactionObject");Qu.exports=In});var Zu=d((vM,Ju)=>{"use strict";var ig=ur(),ag=A().OPERATIONS_ENUM,pn=class extends ig{constructor(t,r,s,n,i=void 0){super(ag.INSERT,r,s,n,i),this.records=t}};a(pn,"LMDBInsertTransactionObject");Ju.exports=pn});var zu=d((FM,Xu)=>{"use strict";var og=ur(),_g=A().OPERATIONS_ENUM,Cn=class extends og{constructor(t,r,s,n,i,o=void 0){super(_g.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(Cn,"LMDBUpdateTransactionObject");Xu.exports=Cn});var eE=d((qM,ju)=>{"use strict";var cg=ur(),ug=A().OPERATIONS_ENUM,bn=class extends cg{constructor(t,r,s,n,i,o=void 0){super(ug.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(bn,"LMDBUpsertTransactionObject");ju.exports=bn});var rE=d((VM,tE)=>{"use strict";var Eg=ur(),lg=A().OPERATIONS_ENUM,Ln=class extends Eg{constructor(t,r,s,n,i=void 0){super(lg.DELETE,s,n,t,i),this.original_records=r}};a(Ln,"LMDBDeleteTransactionObject");tE.exports=Ln});var Xr=d((xM,aE)=>{"use strict";var dg=require("path"),sE=F(),Sg=Zu(),Tg=zu(),hg=eE(),fg=rE(),Er=Ee(),nE=p(),{CONFIG_PARAMS:Rg}=A(),iE=de();iE.initSync();var wn=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:Ag}=x();aE.exports=mg;async function mg(e,t){if(iE.get(Rg.LOGGING_AUDITLOG)===!1)return;let r=dg.join(Ag(),e.schema.toString()),s=await sE.openEnvironment(r,e.table,!0),n=Ng(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){sE.initializeDBIs(s,Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Er.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),nE.isEmpty(n.user_name)||s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Er.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(mg,"writeTransaction");function Ng(e,t){let r=nE.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===wn.INSERT)return new Sg(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPDATE)return new Tg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.UPSERT)return new hg(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wn.DELETE)return new fg(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(Ng,"createTransactionObject")});var Ma=d((kM,oE)=>{"use strict";var Og=Tn(),YM=fn(),lr=A(),gg=An(),Ig=_r().insertRecords,pg=F(),Cg=require("path"),bg=w(),Lg=gn(),{getBaseSchemaPath:wg}=x(),yg=Xr();oE.exports=Ug;async function Ug(e){try{let{schema_table:t,attributes:r}=Og(e);gg(e,r,t.hash_attribute),e.schema!==lr.SYSTEM_SCHEMA_NAME&&(r.includes(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Lg(e.hdb_auth_header,t,r),n=Cg.join(wg(),e.schema.toString()),i=await pg.openEnvironment(n,e.table),o=await Ig(i,t.hash_attribute,r,e.records,e[lr.CLUSTERING_FLAG]!==!0);try{await yg(e,o)}catch(_){bg.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(Ug,"lmdbCreateRecords")});var uE=d((KM,cE)=>{"use strict";var _E=A(),Dg=Ma(),Mg=fn(),Pg=require("fs-extra"),Bg=require("path"),{getBaseSchemaPath:Hg}=x();cE.exports=Gg;async function Gg(e){let t=[{name:e.schema,createddate:Date.now()}],r=new Mg(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await Dg(r),await Pg.mkdirp(Bg.join(Hg(),e.schema.toString()))}a(Gg,"lmdbCreateSchema")});var lE=d(($M,EE)=>{"use strict";var yn=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(yn,"DeleteRecordsResponseObject");EE.exports=yn});var Ha=d((ZM,TE)=>{"use strict";var dE=F(),Pa=xt(),Ba=Me().LMDB_ERRORS_ENUM,vg=Ee(),SE=w(),WM=p(),Fg=require("lmdb"),qg=lE(),{OVERFLOW_MARKER:QM,MAX_SEARCH_KEY_LENGTH:JM}=vg;async function Vg(e,t,r){if(Pa.validateEnv(e),t===void 0)throw new Error(Ba.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ba.IDS_REQUIRED):new Error(Ba.IDS_MUST_BE_ARRAY);try{let s=dE.listDBIs(e);dE.initializeDBIs(e,t,s);let n=new qg,i,o=[],_=[];for(let l=0,h=r.length;l<h;l++)try{i=r[l];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,Fg.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let N=0;N<s.length;N++){let C=s[N];if(!S.hasOwnProperty(C)||C===t)continue;let fe=e.dbis[C],G=S[C];if(G!=null)try{let $=Pa.getIndexedValues(G);if($)for(let xe=0,Cs=$.length;xe<Cs;xe++)fe.remove($[xe],i)}catch{SE.warn(`cannot delete from attribute: ${C}, ${G}:${i}`)}}});o.push(m),_.push(i),n.original_records.push(S)}catch(S){SE.warn(S),n.skipped.push(i)}let c=[],u=await Promise.all(o);for(let l=0,h=u.length;l<h;l++)u[l]===!0?n.deleted.push(_[l]):(n.skipped.push(_[l]),c.push(l));let E=0;for(let l=0;l<c.length;l++){let h=c[l];n.original_records.splice(h-E,1),E++}return n.txn_time=Pa.getMicroTime(),n}catch(s){throw s}}a(Vg,"deleteRecords");TE.exports={deleteRecords:Vg}});var zr=d((XM,fE)=>{"use strict";var dr=p(),xg=Ha(),Yg=F(),kg=require("path"),{getBaseSchemaPath:Kg}=x(),$g=Xr(),Wg=w();fE.exports=Qg;async function Qg(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(dr.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(dr.isEmptyOrZeroLength(e.hash_values)&&!dr.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let _=0;_<e.records.length;_++){let c=e.records[_][s];dr.isEmpty(c)||e.hash_values.push(c)}}if(dr.isEmptyOrZeroLength(e.hash_values))return hE([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(dr.isEmptyOrZeroLength(e.records)){e.records=[];for(let _=0;_<e.hash_values.length;_++)e.records[_]={[s]:e.hash_values[_]}}let n=kg.join(Kg(),e.schema.toString()),i=await Yg.openEnvironment(n,e.table),o=await xg.deleteRecords(i,s,e.hash_values);try{t===!0&&await $g(e,o)}catch(_){Wg.error(`unable to write transaction due to ${_.message}`)}return hE(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Qg,"lmdbDeleteRecords");function hE(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(hE,"createDeleteResponse")});var va=d((jM,RE)=>{"use strict";var Jg=A(),zM=xt();function Ga(e,t){let r=Object.create(null);if(t.length===1&&Jg.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Ga,"parseRow");function Zg(e,t,r,s){let n=Ga(r,e);s.push(n)}a(Zg,"searchAll");function Xg(e,t,r,s){let n=Ga(r,e);s[t]=n}a(Xg,"searchAllToMap");function zg(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(zg,"iterateDBI");function $t(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a($t,"pushResults");function jg(e,t,r,s,n,i){t.toString().endsWith(e)&&$t(t,r,s,n,i)}a(jg,"endsWith");function eI(e,t,r,s,n,i){t.toString().includes(e)&&$t(t,r,s,n,i)}a(eI,"contains");function tI(e,t,r,s,n,i){t>e&&$t(t,r,s,n,i)}a(tI,"greaterThanCompare");function rI(e,t,r,s,n,i){t>=e&&$t(t,r,s,n,i)}a(rI,"greaterThanEqualCompare");function sI(e,t,r,s,n,i){t<e&&$t(t,r,s,n,i)}a(sI,"lessThanCompare");function nI(e,t,r,s,n,i){t<=e&&$t(t,r,s,n,i)}a(nI,"lessThanEqualCompare");RE.exports={parseRow:Ga,searchAll:Zg,searchAllToMap:Xg,iterateDBI:zg,endsWith:jg,contains:eI,greaterThanCompare:tI,greaterThanEqualCompare:rI,lessThanCompare:sI,lessThanEqualCompare:nI,pushResults:$t}});var Sr=d((rP,IE)=>{"use strict";var Ge=F(),iI=w(),ye=xt(),yt=Ee(),W=Me().LMDB_ERRORS_ENUM,eP=p(),aI=A(),Je=va(),tP=require("lmdb"),{OVERFLOW_MARKER:AE,MAX_SEARCH_KEY_LENGTH:oI}=yt,jr={lazy:!0};function mE(e,t,r,s,n=!1,i=void 0,o=void 0){let _=Object.create(null),c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=Fa(e,t,r);for(let{key:E,value:l}of c.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(E,l),l,_,t,r);return _}a(mE,"iterateFullIndex");function es(e,t,r,s,n,i=!1,o=void 0,_=void 0,c=!1,u=!1){let E=[[],[]],l=Ge.openDBI(e,r),h=Fa(e,t,r);l[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,N=i===!0?!c:!u,C=i===!0?u:c;for(let{key:fe,value:G}of l.getRange({start:m,end:S,reverse:i,limit:o,offset:_,inclusiveEnd:N,exclusiveStart:C}))Je.pushResults(h(fe,G),G,E,t,r);return E}a(es,"iterateRangeBetween");function Fa(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith(AE)){if(!s)if(t)s=Ge.openDBI(e,t);else{let _=Ge.listDBIs(e);for(let c=0,u=_.length;c<u&&(s=Ge.openDBI(e,_[c]),!s[yt.DBI_DEFINITION_NAME].is_hash_attribute);c++);}n=s.get(i,jr)[r]}return n}}a(Fa,"getOverflowCheck");function _I(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);Un(r),r=ts(e,r);let o=[],_=Ge.openDBI(e,t);for(let{key:c,value:u}of _.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))Je.searchAll(r,c,u,o);return o}a(_I,"searchAll");function cI(e,t,r,s=!1,n=void 0,i=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Un(r),r=ts(e,r),mE(e,t,t,Je.searchAllToMap.bind(null,r),s,n,i)}a(cI,"searchAllToMap");function uI(e,t,r=!1,s=void 0,n=void 0){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);return mE(e,void 0,t,Je.iterateDBI,r,s,n)}a(uI,"iterateDBI");function EI(e,t){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);return Ge.statDBI(e,t).entryCount}a(EI,"countAll");function lI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=Ge.openDBI(e,r);s=ye.convertKeyValueToWrite(s);let c=[[],[]];if(_[yt.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=_.get(s,jr);u!==void 0&&Je.pushResults(s,u,c,t,r)}else for(let u of _.getValues(s,{reverse:n,limit:i,offset:o}))Je.pushResults(s,u,c,t,r);return c}a(lI,"equals");function dI(e,t,r){return Ut(e,t,r),Ge.openDBI(e,t).getValuesCount(r)}a(dI,"count");function SI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=[[],[]],c=Ge.openDBI(e,r);c[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ye.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let E;for(let l of c.getKeys({start:s}))if(!l.startsWith(s)){E=l;break}E!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:l,value:h}of c.getRange({start:E,end:void 0,reverse:n,limit:i,offset:o}))if(l!==E){if(l.toString().startsWith(s))Je.pushResults(l,h,_,t,r);else if(u===!0)break}}else for(let{key:E,value:l}of c.getRange({start:s,reverse:n,limit:i,offset:o}))if(E.toString().startsWith(s))Je.pushResults(E,l,_,t,r);else if(u===!0)break;return _}a(SI,"startsWith");function TI(e,t,r,s,n=!1,i=void 0,o=void 0){return NE(e,t,r,s,n,i,o,!0)}a(TI,"endsWith");function NE(e,t,r,s,n=!1,i=void 0,o=void 0,_=!1){Ut(e,r,s);let c=[[],[]],u=Ge.openDBI(e,r);u[yt.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let E=Fa(e,t,r);o=Number.isInteger(o)?o:0;for(let h of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=h.toString();if(S.endsWith(AE))for(let m of u.getValues(h)){let N=E(h,m);(_?N.endsWith(s):N.includes(s))&&l(N,m)}else if(_?S.endsWith(s):S.includes(s))if(u[yt.DBI_DEFINITION_NAME].is_hash_attribute)l(h,h);else for(let m of u.getValues(h))l(h,m)}function l(h,S){if(o>0){o--;return}i!==0&&(Je.pushResults(h,S,c,t,r),i--)}return a(l,"found_match"),c}a(NE,"contains");function hI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!0,!1)}a(hI,"greaterThan");function fI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\uFFFF":_==="number"?c=1/0:_==="boolean"&&(c=!0),es(e,t,r,s,c,n,i,o,!1,!1)}a(fI,"greaterThanEqual");function RI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!0)}a(RI,"lessThan");function AI(e,t,r,s,n=!1,i=void 0,o=void 0){Ut(e,r,s);let _=typeof s,c;return _==="string"?c="\0":_==="number"?c=-1/0:_==="boolean"&&(c=!1),es(e,t,r,c,s,n,i,o,!1,!1)}a(AI,"lessThanEqual");function mI(e,t,r,s,n,i=!1,o=void 0,_=void 0){if(ye.validateEnv(e),r===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(W.START_VALUE_REQUIRED);if(n===void 0)throw new Error(W.END_VALUE_REQUIRED);if(s=ye.convertKeyValueToWrite(s),n=ye.convertKeyValueToWrite(n),s>n)throw new Error(W.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return es(e,t,r,s,n,i,o,_)}a(mI,"between");function NI(e,t,r,s){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),r=ts(e,r),s===void 0)throw new Error(W.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?jr:void 0);return i&&(n=Je.parseRow(i,r)),n}a(NI,"searchByHash");function OI(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,jr)===void 0&&(s=!1),s}a(OI,"checkHashExists");function gI(e,t,r,s,n=[]){gE(e,t,r,s,n);let i=OE(e,t,r,s,n);return Object.values(i)}a(gI,"batchSearchByHash");function II(e,t,r,s,n=[]){return gE(e,t,r,s,n),OE(e,t,r,s,n)}a(II,"batchSearchByHashToMap");function OE(e,t,r,s,n=[]){r=ts(e,r);let i=Object.create(null),o=r.length<3?jr:void 0;for(let _=0;_<s.length;_++){let c=s[_];try{let u=e.dbis[t].get(c,o);if(u){let E=Je.parseRow(u,r);i[c]=E}else n.push(c)}catch(u){throw iI.warn(u),u}}return i}a(OE,"batchHashSearch");function gE(e,t,r,s,n){if(ye.validateEnv(e),t===void 0)throw new Error(W.HASH_ATTRIBUTE_REQUIRED);if(Un(r),!Array.isArray(s))throw s===void 0?new Error(W.IDS_REQUIRED):new Error(W.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(gE,"initializeBatchSearchByHash");function Un(e){if(!Array.isArray(e))throw e===void 0?new Error(W.FETCH_ATTRIBUTES_REQUIRED):new Error(W.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Un,"validateFetchAttributes");function Ut(e,t,r){if(ye.validateEnv(e),t===void 0)throw new Error(W.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(W.SEARCH_VALUE_REQUIRED);if(r?.length>oI)throw new Error(W.SEARCH_VALUE_TOO_LARGE)}a(Ut,"validateComparisonFunctions");function ts(e,t){return t.length===1&&aI.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ge.listDBIs(e)),t}a(ts,"setGetWholeRowAttributes");IE.exports={searchAll:_I,searchAllToMap:cI,count:dI,countAll:EI,equals:lI,startsWith:SI,endsWith:TI,contains:NE,searchByHash:NI,setGetWholeRowAttributes:ts,batchSearchByHash:gI,batchSearchByHashToMap:II,checkHashExists:OI,iterateDBI:uI,greaterThan:hI,greaterThanEqual:fI,lessThan:RI,lessThanEqual:AI,between:mI}});var rs=d((nP,LE)=>{var pE=require("lodash"),CE=Et(),B=require("joi"),pI=p(),{hdb_schema_table:Ze,checkValidTable:bE}=nr(),{handleHDBError:CI,hdb_errors:bI}=J(),{HTTP_STATUS_CODES:LI}=bI,sP=B.object({schema:Ze,table:Ze,hash_values:B.array().min(1).items(B.alternatives(B.string(),B.number())).required(),get_attributes:B.array().min(1).items(Ze).required()}),wI=B.object({schema:Ze,table:Ze,search_attribute:Ze,search_value:B.any().required(),get_attributes:B.array().min(1).items(Ze).required(),desc:B.bool(),limit:B.number().integer().min(1),offset:B.number().integer().min(0)}),yI=B.object({schema:Ze,table:Ze,operator:B.string().valid("and","or").default("and").lowercase(),offset:B.number().integer().min(0),limit:B.number().integer().min(1),get_attributes:B.array().min(1).items(Ze).required(),conditions:B.array().min(1).items(B.object({search_attribute:Ze,search_type:B.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:B.when("search_type",{switch:[{is:"equals",then:B.any()},{is:"between",then:B.array().items(B.alternatives([B.string(),B.number()])).length(2)}],otherwise:B.alternatives(B.string(),B.number())}).required()})).required()});LE.exports=function(e,t){let r=null;switch(t){case"value":r=CE.validateBySchema(e,wI);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(bE("schema",e.schema)),i(bE("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=CE.validateBySchema(e,yI);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=pI.checkGlobalSchemaTable(e.schema,e.table);if(n)return CI(new Error,n,LI.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,_=[...e.get_attributes];if(t==="value"&&_.push(e.search_attribute),t==="conditions")for(let u=0,E=e.conditions.length;u<E;u++){let l=e.conditions[u];_.push(l.search_attribute)}let c=pE.filter(_,u=>u!=="*"&&u.attribute!=="*"&&!pE.some(o,E=>E===u||E.attribute===u||E.attribute===u.attribute));if(c&&c.length>0){let u=c.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var qa=d((iP,wE)=>{"use strict";var UI=F(),DI=rs(),MI=require("path"),{getBaseSchemaPath:PI}=x();wE.exports=BI;function BI(e){let t=DI(e,"hashes");if(t)throw t;let r=MI.join(PI(),e.schema.toString());return UI.openEnvironment(r,e.table)}a(BI,"initialize")});var Va=d((aP,yE)=>{"use strict";var HI=Sr(),GI=qa();yE.exports=vI;async function vI(e){try{let t=await GI(e),r=global.hdb_schema[e.schema][e.table];return HI.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(vI,"lmdbGetDataByHash")});var ss=d((oP,UE)=>{"use strict";var Dn=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Dn,"SearchByHashObject");UE.exports=Dn});var ME=d((cP,DE)=>{"use strict";var _P=ss(),FI=Sr(),qI=qa();DE.exports=VI;async function VI(e){try{let t=await qI(e),r=global.hdb_schema[e.schema][e.table];return FI.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(VI,"lmdbSearchByHash")});var ft=d((uP,PE)=>{"use strict";var Mn=class{constructor(t,r,s,n,i,o,_,c=!1,u=void 0,E=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=_,this.reverse=c,this.limit=u,this.offset=E}};a(Mn,"SearchObject");PE.exports=Mn});var Pn=d((EP,FE)=>{"use strict";var Se=Sr(),xI=F(),YI=require("path"),kI=p(),O=Ee(),Wt=A(),{getBaseSchemaPath:KI}=x(),$I=Kt(),BE=Me().LMDB_ERRORS_ENUM,{compareKeys:Tr}=require("ordered-binary"),Rt=Wt.SEARCH_WILDCARDS;async function WI(e,t,r){let s;e.schema===Wt.SYSTEM_SCHEMA_NAME?s=$I[e.table]:s=global.hdb_schema[e.schema][e.table];let n=vE(e,s.hash_attribute,r,t);return HE(e,n,s.hash_attribute,r)}a(WI,"prepSearch");async function HE(e,t,r,s){let n=YI.join(KI(),e.schema.toString()),i=await xI.openEnvironment(n,e.table),o=GE(i,e,t,r);if([O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,O.SEARCH_TYPES.SEARCH_ALL,O.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(ZI(e,r)===!1)return s===!0?JI(o):o[1];let c=o[0];return s===!0?Se.batchSearchByHashToMap(i,r,e.get_attributes,c):Se.batchSearchByHash(i,r,e.get_attributes,c)}a(HE,"executeSearch");function GE(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:_,offset:c}=t;switch(o=typeof o=="boolean"?o:!1,_=Number.isInteger(_)?_:void 0,c=Number.isInteger(c)?c:void 0,r){case O.SEARCH_TYPES.EQUALS:n=Se.equals(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.CONTAINS:n=Se.contains(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:n=Se.endsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:n=Se.startsWith(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Se.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Se.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case O.SEARCH_TYPES.SEARCH_ALL:return Se.searchAll(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Se.searchAllToMap(e,s,t.get_attributes,o,_,c);case O.SEARCH_TYPES.BETWEEN:n=Se.between(e,i,t.search_attribute,t.search_value,t.end_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:n=Se.greaterThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Se.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:n=Se.lessThan(e,i,t.search_attribute,t.search_value,o,_,c);break;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:n=Se.lessThanEqual(e,i,t.search_attribute,t.search_value,o,_,c);break;default:return Object.create(null)}return n}a(GE,"searchByType");function QI(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case O.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case O.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case O.SEARCH_TYPES.ENDS_WITH:case O.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case O.SEARCH_TYPES.STARTS_WITH:case O.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case O.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Tr(i,s[0])>=0&&Tr(i,s[1])<=0};case O.SEARCH_TYPES.GREATER_THAN:case O.SEARCH_TYPES._GREATER_THAN:return n=>Tr(n[r],s)>0;case O.SEARCH_TYPES.GREATER_THAN_EQUAL:case O.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Tr(n[r],s)>=0;case O.SEARCH_TYPES.LESS_THAN:case O.SEARCH_TYPES._LESS_THAN:return n=>Tr(n[r],s)<0;case O.SEARCH_TYPES.LESS_THAN_EQUAL:case O.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Tr(n[r],s)<=0;default:return Object.create(null)}}a(QI,"filterByType");function JI(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(JI,"createMapFromArrays");function ZI(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(ZI,"checkToFetchMore");function vE(e,t,r,s){if(kI.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),_=!1;if(e.search_attribute===t&&(_=!0),Rt.indexOf(n)>-1)return r===!0?O.SEARCH_TYPES.SEARCH_ALL_TO_MAP:O.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rt[0])<0&&n.indexOf(Rt[1])<0)return _===!0?r===!0?O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:O.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:O.SEARCH_TYPES.EQUALS;if(Rt.indexOf(i)>=0&&Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),O.SEARCH_TYPES.CONTAINS;if(Rt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),O.SEARCH_TYPES.ENDS_WITH;if(Rt.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),O.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rt[0])||n.includes(Rt[1]))return O.SEARCH_TYPES.EQUALS;throw new Error(BE.UNKNOWN_SEARCH_TYPE)}else switch(s){case Wt.VALUE_SEARCH_COMPARATORS.BETWEEN:return O.SEARCH_TYPES.BETWEEN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER:return O.SEARCH_TYPES.GREATER_THAN;case Wt.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return O.SEARCH_TYPES.GREATER_THAN_EQUAL;case Wt.VALUE_SEARCH_COMPARATORS.LESS:return O.SEARCH_TYPES.LESS_THAN;case Wt.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return O.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(BE.UNKNOWN_SEARCH_TYPE)}}a(vE,"createSearchTypeFromSearchObject");FE.exports={executeSearch:HE,createSearchTypeFromSearchObject:vE,prepSearch:WI,searchByType:GE,filterByType:QI}});var VE=d((dP,qE)=>{"use strict";var lP=ft(),XI=rs(),zI=p(),jI=A(),ep=Pn();qE.exports=tp;async function tp(e,t){if(!zI.isEmpty(t)&&jI.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=XI(e,"value");if(s)throw s;let n=!0;try{return await ep.prepSearch(e,t,n)}catch(i){throw i}}a(tp,"lmdbGetDataByValue")});var hr=d((TP,xE)=>{"use strict";var SP=ft(),rp=rs(),sp=p(),np=A(),ip=Pn();xE.exports=ap;async function ap(e,t){if(!sp.isEmpty(t)&&np.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=rp(e,"value");if(s)throw s;let n=!1;try{return await ip.prepSearch(e,t,n)}catch(i){throw i}}a(ap,"lmdbSearchByValue")});var kE=d((fP,YE)=>{"use strict";var hP=Ee(),Bn=class{constructor(t,r,s,n,i=void 0,o=void 0,_="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=_}};a(Bn,"SearchByConditionsObject");var Hn=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(Hn,"SearchCondition");var Gn=class{constructor(t,r){this.attribute=t,this.desc=r}};a(Gn,"SortAttribute");YE.exports={SearchByConditionsObject:Bn,SearchCondition:Hn,SortAttribute:Gn}});var ZE=d((AP,JE)=>{"use strict";var RP=kE().SearchByConditionsObject,op=ft(),_p=rs(),xa=Sr(),vn=Ee(),QE=Pn(),cp=va(),KE=require("lodash"),{getBaseSchemaPath:up}=x(),Ep=require("path"),lp=F(),{handleHDBError:$E,hdb_errors:dp}=J(),{HTTP_STATUS_CODES:Sp}=dp,Tp=1e8,hp={lazy:!0};JE.exports=fp;async function fp(e){try{let t=_p(e,"conditions");if(t)throw $E(t,t.message,Sp.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=Ep.join(up(),e.schema.toString()),s=await lp.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=KE.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let _=o.search_type;_===vn.SEARCH_TYPES.EQUALS?o.estimated_count=xa.count(s,o.search_attribute,o.search_value):_===vn.SEARCH_TYPES.CONTAINS||_===vn.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=Tp}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await WE(s,e,i[0],n.hash_attribute),_=s.dbis[n.hash_attribute],c=i.slice(1).map(QE.filterByType),u=c.length,E=[],l=xa.setGetWholeRowAttributes(s,e.get_attributes),h=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let N=_.get(m,hp);for(let C=0;C<u;C++)if(!c[C](N))continue e;if(h>0){h--;continue}if(S<=0)break;S--,E.push(cp.parseRow(N,l))}return E}else{let o=[],_=[];for(let c of i){let[u]=await WE(s,e,c,n.hash_attribute);_.push(u)}if(o=KE.union(..._),e.limit>0||e.offset>0){let c=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,c)}return xa.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw $E(t)}}a(fp,"lmdbSearchByConditions");async function WE(e,t,r,s){let n=new op(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===vn.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,QE.searchByType(e,n,i,s)}a(WE,"executeConditionSearch")});var qn=d((mP,XE)=>{"use strict";var Rp=A().OPERATIONS_ENUM,Fn=class{constructor(t,r,s,n=void 0){this.operation=Rp.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Fn,"DeleteObject");XE.exports=Fn});var Ya=d((NP,zE)=>{"use strict";var Vn=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Vn,"DropAttributeObject");zE.exports=Vn});var Ka=d((gP,jE)=>{"use strict";var Ap=ft(),mp=qn(),OP=Ya(),rt=A(),Np=p(),ka=F(),Op=Kt(),gp=hr(),Ip=zr(),{getBaseSchemaPath:pp}=x(),Cp=require("path");jE.exports=bp;async function bp(e,t=!0){let r;e.schema===rt.SYSTEM_SCHEMA_NAME?r=Op[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await wp(e),n=Cp.join(pp(),e.schema.toString()),i=await ka.openEnvironment(n,e.table);return t===!0&&await Lp(e,i,r.hash_attribute),ka.dropDBI(i,e.attribute),s}a(bp,"lmdbDropAttribute");async function Lp(e,t,r){let s=ka.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:_,version:c}of s.getRange({start:!1,versions:!0})){let u={};for(let E in _)E!==i&&(u[E]=_[E]);n=t.dbis[r].put(o,u,c)}await n}a(Lp,"removeAttributeFromAllObjects");async function wp(e){let t=new Ap(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await gp(t)).filter(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Np.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[rt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mp(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Ip(i)}a(wp,"dropAttributeFromSystem")});var sl=d((IP,rl)=>{"use strict";var yp=Ka(),Up=Ya(),el=p(),tl=w(),Dp=Me().LMDB_ERRORS_ENUM;rl.exports=Mp;async function Mp(e){if(el.isEmpty(global.hdb_schema[e.schema])||el.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new Up(e.schema,e.table,r);try{await yp(n,!1)}catch(i){i.message!==Dp.DBI_DOES_NOT_EXIST&&tl.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw tl.error(`Error dropping attribute ${r}`),s}}a(Mp,"lmdbDropAllAttributes")});var $a=d((CP,ll)=>{"use strict";var _l=ft(),cl=qn(),ul=hr(),El=zr(),pP=sl(),ge=A(),nl=p(),il=F(),{getBaseSchemaPath:Pp,getTransactionAuditStorePath:Bp}=x(),al=require("path"),ol=w();ll.exports=Hp;async function Hp(e){try{if(nl.isEmpty(global.hdb_schema[e.schema])||nl.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await Gp(e),await vp(e);let t=al.join(Pp(),e.schema.toString());try{await il.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=al.join(Bp(),e.schema.toString());await il.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ol.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(Hp,"lmdbDropTable");async function Gp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await ul(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await El(n)}a(Gp,"deleteAttributesFromSystem");async function vp(e){let t=new _l(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ge.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await ul(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new cl(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await El(n)}catch(i){throw i}}a(vp,"dropTableFromSystem")});var Sl=d((LP,dl)=>{"use strict";var Fp=require("fs-extra"),qp=ft(),Vp=ss(),xp=qn(),Yp=$a(),kp=zr(),Kp=Va(),$p=hr(),At=A(),bP=p(),Wp=require("path"),{getBaseSchemaPath:Qp}=x(),{handleHDBError:Jp,hdb_errors:Zp}=J(),{HDB_ERROR_MSGS:Xp,HTTP_STATUS_CODES:zp}=Zp;dl.exports=jp;async function jp(e){let t;try{t=await eC(e.schema);let r=new qp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await $p(r);for(let o=0;o<s.length;o++){let _={schema:t,table:s[o].name};try{await Yp(_)}catch(c){if(c.message!=="invalid environment")throw c}}let n=new xp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await kp(n);let i=Wp.join(Qp(),t.toString());await Fp.remove(i)}catch(r){throw r}}a(jp,"lmdbDropSchema");async function eC(e){let t=new Vp(At.SYSTEM_SCHEMA_NAME,At.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[At.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await Kp(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw Jp(new Error,Xp.SCHEMA_NOT_FOUND(e),zp.NOT_FOUND,void 0,void 0,!0);return s}a(eC,"validateDropSchema")});var hl=d((wP,Tl)=>{"use strict";var xn=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(xn,"CreateTableObject");Tl.exports=xn});var Rl=d((UP,fl)=>{"use strict";var tC=require("path"),rC=require("fs-extra"),Yn=F(),{getTransactionAuditStorePath:sC}=x(),Wa=Ee(),yP=hl();fl.exports=nC;async function nC(e){let t;try{let r=tC.join(sC(),e.schema.toString());await rC.mkdirp(r),t=await Yn.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Yn.createDBI(t,Wa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(nC,"createTransactionsAuditEnvironment")});var Ol=d((DP,Nl)=>{"use strict";var Qa=A(),Al=F(),iC=_r(),aC=require("path"),{getSystemSchemaPath:oC,getBaseSchemaPath:_C}=x(),cC=Kt(),uC=Sn(),Ja=dn(),EC=w(),lC=Rl(),Xa=cC.hdb_table,ml=[];for(let e=0;e<Xa.attributes.length;e++)ml.push(Xa.attributes[e].attribute);Nl.exports=dC;async function dC(e,t){let r=aC.join(_C(),t.schema.toString()),s=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ja(t.schema,t.table,Qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ja(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Al.createEnvironment(r,t.table),e!==void 0){let o=await Al.openEnvironment(oC(),Qa.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await iC.insertRecords(o,Xa.hash_attribute,ml,[e]),await Za(s),await Za(n),await Za(i)}await lC(t)}catch(o){throw o}}a(dC,"lmdbCreateTable");async function Za(e){try{await uC(e)}catch(t){EC.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Za,"createAttribute")});var Il=d((MP,gl)=>{"use strict";var SC=Tn(),TC=An(),hC=gn(),fr=A(),fC=_r().updateRecords,RC=F(),AC=require("path"),{getBaseSchemaPath:mC}=x(),NC=Xr(),OC=w();gl.exports=gC;async function gC(e){try{let{schema_table:t,attributes:r}=SC(e);TC(e,r,t.hash_attribute),e.schema!==fr.SYSTEM_SCHEMA_NAME&&(r.includes(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await hC(e.hdb_auth_header,t,r),n=AC.join(mC(),e.schema.toString()),i=await RC.openEnvironment(n,e.table),o=await fC(i,t.hash_attribute,r,e.records,e[fr.CLUSTERING_FLAG]!==!0);try{await NC(e,o)}catch(_){OC.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(gC,"lmdbUpdateRecords")});var Cl=d((PP,pl)=>{"use strict";var IC=A().OPERATIONS_ENUM,kn=class{constructor(t,r,s,n=void 0){this.operation=IC.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(kn,"UpsertObject");pl.exports=kn});var Ll=d((HP,bl)=>{"use strict";var BP=Cl(),pC=Tn(),CC=An(),bC=gn(),Rr=A(),LC=_r().upsertRecords,wC=F(),yC=require("path"),{getBaseSchemaPath:UC}=x(),DC=Xr(),MC=w(),{handleHDBError:PC,hdb_errors:BC}=J();bl.exports=HC;async function HC(e){let t;try{t=pC(e)}catch(c){throw PC(c,c.message,BC.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;CC(e,s,r.hash_attribute),e.schema!==Rr.SYSTEM_SCHEMA_NAME&&(s.includes(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Rr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bC(e.hdb_auth_header,r,s),i=yC.join(UC(),e.schema.toString()),o=await wC.openEnvironment(i,e.table),_=await LC(o,r.hash_attribute,s,e.records,e[Rr.CLUSTERING_FLAG]!==!0);try{await DC(e,_)}catch(c){MC.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:_.written_hashes,schema_table:r,new_attributes:n,txn_time:_.txn_time}}a(HC,"lmdbUpsertRecords")});var Pl=d((GP,Ml)=>{"use strict";var GC=ft(),wl=p(),yl=w(),vC=hr(),Ul=A(),FC=Ha().deleteRecords,qC=F(),VC=require("path"),{getBaseSchemaPath:xC}=x(),{promisify:YC}=require("util"),kC=YC(setTimeout),Dl=1e4,KC=10;Ml.exports=$C;async function $C(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(wl.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new GC(e.schema,e.table,Ul.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await vC(n,Ul.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw yl.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return wl.isEmptyOrZeroLength(s)?(yl.trace("No records found to delete"),{message:"No records found to delete"}):await WC(e,s,t)}a($C,"lmdbDeleteRecordsBefore");async function WC(e,t,r){let s=VC.join(xC(),e.schema.toString()),n=await qC.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,_=t.length;o<_;o+=Dl){let c=t.slice(o,o+Dl),u=[];for(let E=0,l=c.length;E<l;E++)u.push(c[E][r]);try{let E=await FC(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(E.deleted),i.skipped_hashes=i.skipped_hashes.concat(E.skipped)}catch(E){throw E}await kC(KC)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(WC,"chunkDeletes")});var Hl=d((vP,Bl)=>{"use strict";var Kn=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Kn,"DeleteBeforeObject");Bl.exports=Kn});var vl=d((FP,Gl)=>{"use strict";var $n=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a($n,"DeleteAuditLogsBeforeResults");Gl.exports=$n});var Vl=d((VP,ql)=>{"use strict";var za=F(),{getTransactionAuditStorePath:QC}=x(),qP=Hl(),JC=require("path"),ns=Ee(),ZC=p(),Fl=vl(),XC=require("util").promisify,zC=XC(setTimeout),jC=1e4,eb=100;ql.exports=tb;async function tb(e){let t=JC.join(QC(),e.schema),r=await za.openEnvironment(t,e.table,!0),s=za.listDBIs(r);za.initializeDBIs(r,ns.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Fl;do n=await rb(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await zC(eb);while(n.transactions_deleted>0);return i}a(tb,"deleteAuditLogsBefore");async function rb(e,t){let r=new Fl;try{let s=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let _=o[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ZC.isEmpty(_)||(n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(_,i));for(let c=0;c<o.hash_values.length;c++)n=e.dbis[ns.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[c],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>jC)break}return await n,r}catch(s){throw s}}a(rb,"deleteTransactions")});var Ql=d((xP,Wl)=>{"use strict";var ja=F(),Ar=Ee(),xl=xt(),eo=A(),Yl=p(),{getTransactionAuditStorePath:sb}=x(),nb=require("path"),ib=Sr(),Wn=ur(),ab=w();Wl.exports=ob;async function ob(e){let t=nb.join(sb(),e.schema),r=await ja.openEnvironment(t,e.table,!0),s=ja.listDBIs(r);ja.initializeDBIs(r,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return kl(r,e.search_values);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,cb(r,e.search_values,n);case eo.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _b(r,e.search_values);default:return kl(r)}}a(ob,"readAuditLog");function kl(e,t=[0,xl.getMicroTime()]){Yl.isEmpty(t[0])&&(t[0]=0),Yl.isEmpty(t[1])&&(t[1]=xl.getMicroTime());let r=[];try{let s=e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new Wn,i);r.push(o)}return r}catch(s){throw s}}a(kl,"searchTransactionsByTimestamp");function _b(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,$l(e,i))}return Object.fromEntries(r)}a(_b,"searchTransactionsByUsername");function cb(e,t,r){let s=new Map;for(let _=0,c=t.length;_<c;_++){let u=t[_],E=ib.equals(e,Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ar.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let l=0,h=E[0].length;l<h;l++){let S=E[0][l],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=$l(e,n),o=new Map;for(let _=0;_<i.length;_++){let c=i[_],u=c.timestamp,E=s.get(u);Kl(c,"records",r,E,o),Kl(c,"original_records",r,E,o)}return Object.fromEntries(o)}a(cb,"searchTransactionsByHashValues");function Kl(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let _=e[t][o],c=_[r].toString();if(s.indexOf(c)>=0)if(n.has(c)){let u=n.get(c),E=u[u.length-1];if(E.timestamp===i)E[t]=[_];else{let l=new Wn(e.operation,e.user_name,i,void 0);l[t]=[_],u.push(l)}}else{let u=new Wn(e.operation,e.user_name,i,void 0);u[t]=[_],n.set(c,[u])}}}a(Kl,"loopRecords");function $l(e,t){let r=[];try{let s=e.dbis[Ar.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Wn,i);r.push(o)}}catch(i){ab.warn(i)}return r}catch(s){throw s}}a($l,"batchSearchTransactions")});var Zl=d((YP,Jl)=>{"use strict";var ub=require("path"),{getBaseSchemaPath:Eb}=x(),lb=F();Jl.exports={writeTransaction:db};async function db(e,t,r){let s=ub.join(Eb(),e);return(await lb.openEnvironment(s,t)).transaction(r)}a(db,"writeTransaction")});var zl=d((kP,Xl)=>{"use strict";var Sb=require("path"),{getBaseSchemaPath:Tb}=x(),hb=F();Xl.exports={flush:fb};async function fb(e,t){let r=Sb.join(Tb(),e.toString());return(await hb.openEnvironment(r,t.toString())).flushed}a(fb,"flush")});var ed=d((KP,jl)=>{"use strict";var z=w(),{handleHDBError:Rb}=J(),Ab=_a(),mb=Sn(),Nb=Ma(),Ob=uE(),gb=zr(),Ib=Va(),pb=ME(),Cb=VE(),bb=hr(),Lb=ZE(),wb=Sl(),yb=Ol(),Ub=Il(),Db=Ll(),Mb=Pl(),Pb=Vl(),Bb=$a(),Hb=Ka(),Gb=Ql(),vb=Zl(),Fb=zl(),Qn=class extends Ab{async searchByConditions(t){try{return Lb(t)}catch(r){throw z.error(r),r}}async getDataByHash(t){try{return await Ib(t)}catch(r){throw z.error(r),r}}async searchByHash(t){try{return await pb(t)}catch(r){throw z.error(r),r}}async getDataByValue(t,r){try{return await Cb(t,r)}catch(s){throw z.error(s),s}}async searchByValue(t){try{return await bb(t)}catch(r){throw z.error(r),r}}async createSchema(t){try{return await Ob(t)}catch(r){throw z.error(r),r}}async dropSchema(t){try{return await wb(t)}catch(r){throw z.error(r),r}}async createTable(t,r){try{return await yb(t,r)}catch(s){throw z.error(s),s}}async dropTable(t){try{return await Bb(t)}catch(r){throw z.error(r),r}}async createAttribute(t){try{return await mb(t)}catch(r){throw z.error(r),r}}async createRecords(t){try{return await Nb(t)}catch(r){throw z.error(r),r}}async updateRecords(t){try{return await Ub(t)}catch(r){throw z.error(r),r}}async upsertRecords(t){try{return await Db(t)}catch(r){throw Rb(r,null,null,z.ERR,r)}}async deleteRecords(t){try{return await gb(t)}catch(r){throw z.error(r),r}}async deleteRecordsBefore(t){try{return await Mb(t)}catch(r){throw z.error(r),r}}async dropAttribute(t){try{return await Hb(t)}catch(r){throw z.error(r),r}}async deleteAuditLogsBefore(t){try{return await Pb(t)}catch(r){throw z.error(r),r}}async readAuditLog(t){try{return await Gb(t)}catch(r){throw z.error(r),r}}writeTransaction(t,r,s){return vb.writeTransaction(t,r,s)}flush(t,r){return Fb.flush(t,r)}};a(Qn,"LMDBBridge");jl.exports=Qn});var mr=d(($P,rd)=>{"use strict";var qb=ed(),Vb=_a(),xb=de();xb.initSync();var td;function Yb(){return td instanceof Vb?td:new qb}a(Yb,"getBridge");rd.exports=Yb()});var Td=d((QP,Sd)=>{"use strict";var to=require("recursive-iterator"),kb=require("alasql"),ro=require("clone"),sd=p(),{handleHDBError:nd,hdb_errors:Kb}=J(),{HDB_ERROR_MSGS:id,HTTP_STATUS_CODES:ad}=Kb,$b=["DISTINCT_ARRAY"],od=Symbol("validateTables"),so=Symbol("validateTable"),WP=Symbol("getAllColumns"),_d=Symbol("validateAllColumns"),Jn=Symbol("findColumn"),cd=Symbol("validateOrderBy"),is=Symbol("validateSegment"),no=Symbol("validateColumn"),ud=Symbol("setColumnsForTable"),Ed=Symbol("checkColumnsForAsterisk"),ld=Symbol("validateGroupBy"),dd=Symbol("hasColumns"),Zn=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[od](),this[Ed](),this[_d]()}[od](){if(this[dd]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[so](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[so](t.table)})}}[dd](){let t=!1,r=new to(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[so](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw nd(new Error,id.SCHEMA_NOT_FOUND(t.databaseid),ad.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw nd(new Error,id.TABLE_NOT_FOUND(t.databaseid,t.tableid),ad.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=ro(s);n.table=ro(t),this.attributes.push(n)})}[Jn](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[Ed](){let t=new to(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[ud](r.tableid)}[ud](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new kb.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_d](){this[is](this.statement.columns,!1),this[is](this.statement.joins,!1),this[is](this.statement.where,!1),this[ld](this.statement.group,!1),this[is](this.statement.order,!0)}[is](t,r){if(!t)return;let s=new to(t),n=[];for(let{node:i,path:o}of s)!sd.isEmpty(i)&&!sd.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[cd](i):n.push(this[no](i)));return n}[ld](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$b.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=ro(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Jn](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Jn](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,_)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(_,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[cd](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[no](t)}[no](t){let r=this[Jn](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Zn,"SelectValidator");Sd.exports=Zn});var Ad=d((JP,Rd)=>{"use strict";var hd=require("lodash"),as=require("mathjs"),Wb=require("jsonata"),fd=p();Rd.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hd.uniqWith(e,hd.isEqual):e,searchJSON:Qb,mad:os.bind(null,as.mad),mean:os.bind(null,as.mean),mode:os.bind(null,as.mode),prod:os.bind(null,as.prod),median:os.bind(null,as.median)};function os(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(os,"aggregateFunction");function Qb(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(fd.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),fd.isEmpty(this.__ala__.res[r])){let s=Wb(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Qb,"searchJSON")});var Nd=d((ZP,md)=>{"use strict";var Z=require("moment"),io="YYYY-MM-DDTHH:mm:ss.SSSZZ";Z.suppressDeprecationWarnings=!0;md.exports={current_date:()=>Z().utc().format("YYYY-MM-DD"),current_time:()=>Z().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Z(e).utc().format("YYYY");case"month":return Z(e).utc().format("MM");case"day":return Z(e).utc().format("DD");case"hour":return Z(e).utc().format("HH");case"minute":return Z(e).utc().format("mm");case"second":return Z(e).utc().format("ss");case"millisecond":return Z(e).utc().format("SSS");default:break}},date:e=>Z(e).utc().format(io),date_format:(e,t)=>Z(e).utc().format(t),date_add:(e,t,r)=>Z(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Z(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Z(e).utc(),n=Z(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Z().utc().valueOf(),get_server_time:()=>Z().format(io),offset_utc:(e,t)=>Z(e).utc().utcOffset(t).format(io)}});var pd=d((XP,Id)=>{"use strict";var Jb=require("@turf/area"),Zb=require("@turf/length"),Xb=require("@turf/circle"),zb=require("@turf/difference"),jb=require("@turf/distance"),eL=require("@turf/boolean-contains"),tL=require("@turf/boolean-equal"),rL=require("@turf/boolean-disjoint"),sL=require("@turf/helpers"),Od=A(),D=p();Id.exports={geoArea:nL,geoLength:iL,geoCircle:aL,geoDifference:oL,geoDistance:gd,geoNear:_L,geoContains:cL,geoEqual:uL,geoCrosses:EL,geoConvert:lL};var ao="geo1 is required",oo="geo2 is required";function nL(e){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Jb.default(e)}a(nL,"geoArea");function iL(e,t){if(D.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=D.autoCast(e)),Zb.default(e,{units:t||"kilometers"})}a(iL,"geoLength");function aL(e,t,r){if(D.isEmpty(e))throw new Error("point is required");if(D.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=D.autoCast(e)),Xb.default(e,t,{units:r||"kilometers"})}a(aL,"geoCircle");function oL(e,t){if(D.isEmpty(e))throw new Error("poly1 is required");if(D.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),zb(e,t)}a(oL,"geoDifference");function gd(e,t,r){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),jb.default(e,t,{units:r||"kilometers"})}a(gd,"geoDistance");function _L(e,t,r,s){if(D.isEmpty(e))throw new Error("point1 is required");if(D.isEmpty(t))throw new Error("point2 is required");if(D.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return gd(e,t,s)<=r}a(_L,"geoNear");function cL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),eL.default(e,t)}a(cL,"geoContains");function uL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),tL.default(e,t)}a(uL,"geoEqual");function EL(e,t){if(D.isEmpty(e))throw new Error(ao);if(D.isEmpty(e))throw new Error(oo);return typeof e=="string"&&(e=D.autoCast(e)),typeof t=="string"&&(t=D.autoCast(t)),!rL.default(e,t)}a(EL,"geoCrosses");function lL(e,t,r){if(D.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(D.isEmpty(t))throw new Error("geo_type is required");if(D.isEmpty(Od.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Od.GEO_CONVERSION_ENUM).join(",")}`);return sL[t](e,r)}a(lL,"geoConvert")});var bd=d((zP,Cd)=>{var Qt=Ad(),Ue=Nd(),st=pd();Cd.exports=e=>{e.aggr.mad=e.aggr.MAD=Qt.mad,e.aggr.mean=e.aggr.MEAN=Qt.mean,e.aggr.mode=e.aggr.MODE=Qt.mode,e.aggr.prod=e.aggr.PROD=Qt.prod,e.aggr.median=e.aggr.MEDIAN=Qt.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Qt.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Qt.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ue.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ue.current_time,e.fn.extract=e.fn.EXTRACT=Ue.extract,e.fn.date=e.fn.DATE=Ue.date,e.fn.date_format=e.fn.DATE_FORMAT=Ue.date_format,e.fn.date_add=e.fn.DATE_ADD=Ue.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ue.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ue.date_diff,e.fn.now=e.fn.NOW=Ue.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ue.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ue.get_server_time,e.fn.getdate=e.fn.GETDATE=Ue.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ue.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=st.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=st.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=st.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=st.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=st.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=st.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=st.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=st.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=st.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=st.geoNear}});var yd=d((jP,wd)=>{"use strict";var _s=require("lodash"),ae=require("alasql");ae.options.cache=!1;var dL=bd(),Ld=require("clone"),Xn=require("recursive-iterator"),b=w(),y=p(),Nr=mr(),SL=A(),{hdb_errors:TL}=J(),hL="IS NULL",cs="There was a problem performing this search. Please check the logs and try again.";dL(ae);var zn=class{constructor(t,r){if(y.isEmpty(t))throw b.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),y.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!y.isEmptyOrZeroLength(s))return b.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw b.error("Error thrown from checkEmptySQL in SQLSearch class method search."),b.error(s),new Error(cs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw b.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),b.error(s),new Error(cs)}if(Object.keys(this.data).length===0)return b.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw b.error("Error thrown from processJoins in SQLSearch class method search."),b.error(s),new Error(cs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw b.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),b.error(s),new Error(cs)}try{return t=await this._finalSQL(),t}catch(s){throw b.error("Error thrown from finalSQL in SQLSearch class method search."),b.error(s),new Error(cs)}}_getColumns(){let t=new Xn(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Ld(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_s.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(y.isEmpty(this.statement.where)){b.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Xn(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!y.isEmpty(r)&&r.right)if(y.isNotEmptyAndHasValue(r.right.value)){let s=y.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new ae.yy.LogicValue({value:s}):r.right instanceof ae.yy.StringValue&&!y.isEmpty(s)&&y.autoCasterIsNumberCheck(s.toString())&&(r.right=new ae.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=y.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new ae.yy.LogicValue({value:i}):s instanceof ae.yy.StringValue&&y.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new ae.yy.NumValue({value:i}))});if(t){b.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Xn(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!y.isEmpty(SL.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(y.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(y.isEmptyOrZeroLength(r.left.columnid)||y.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(y.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let _=!1;switch(r.op){case"=":!y.isEmpty(r.right.value)||!y.isEmpty(r.left.value)?s.add(y.isEmpty(r.right.value)?r.left.value:r.right.value):_=!0;break;case"IN":let c=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<c.length;u++)if(c[u].value)s.add(c[u].value);else{_=!0;break}break;default:_=!0;break}this.exact_search_values[o].ignore=_,_?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from)&&y.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&_s.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(y.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);y.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(y.isEmptyOrZeroLength(this.all_table_attributes)&&!y.isEmptyOrZeroLength(this.columns.columns))return t;if(y.isEmptyOrZeroLength(this.all_table_attributes)&&y.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await ae.promise(r)}catch(r){throw b.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),b.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Ld(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(y.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(hL)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_s.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,_=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,_)),i.attribute!==_&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,_={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},c=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(c=!0),!y.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.exact_search_values[u].values))if(c)try{_.hash_values=Array.from(this.exact_search_values[u].values);let E=await Nr.getDataByHash(_);for(let l of _.hash_values)l in E&&!this.data[i].__merged_data[l]&&(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,l))}catch(E){b.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else try{_.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async E=>{let l=Object.assign({},_);l.search_value=E;let h=await Nr.getDataByValue(l);for(let S in h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,h[S][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(S)))}))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),b.error(E)}else if(!y.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!y.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let E=this.comparator_search_values[u].comparators;for(let l=0,h=E.length;l<h;l++){let S=E[l];_.search_attribute=S.attribute,_.search_value=S.search_value;let m=await Nr.getDataByValue(_,S.operation);if(c)for(let N in m)this.data[i].__merged_data[N]||(this.data[i].__merged_data[N]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(N)));else for(let N in m)this.data[i].__merged_data[N]?this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]):(this.data[i].__merged_data[N]=[...s[i]],this._updateMergedAttribute(i,N,n.attribute,m[N][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(N)))}}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),b.error(E)}else try{_.search_attribute=n.attribute,_.search_value="*";let E=await Nr.getDataByValue(_);if(c)for(let l in E)this.data[i].__merged_data[l]||(this.data[i].__merged_data[l]=[...s[i]],this._setMergedHashAttribute(i,y.autoCast(l)));else for(let l in E)this.data[i].__merged_data[l]?this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]):(this.data[i].__merged_data[l]=[...s[i]],this._updateMergedAttribute(i,l,n.attribute,E[l][n.attribute]),this._setMergedHashAttribute(i,y.autoCast(l)))}catch(E){b.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),b.error(E)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof ae.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new ae.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new ae.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new ae.yy.FuncValue:new ae.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],_={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,N=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${N}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${N}.${m}"`),_[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let c=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let E="",l="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(E=this.statement.limit?"LIMIT "+this.statement.limit:"",l=this.statement.offset?"OFFSET "+this.statement.offset:"");let h=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${c} ${u} ${E} ${l}`,m=this._convertColumnsToIndexes(S,n);h=await ae.promise(m,t),t=null}catch(S){throw b.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),b.error(S),new Error("There was a problem processing the data.")}if(h&&h.length>0){for(let S=0,m=h.length;S<m;S++){let N=h[S];o.forEach(C=>{N[C.key]!==null&&N[C.key]!==void 0&&C.keys.add(N[C.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),N=_s.difference(m,[...S.keys].map(C=>C.toString()));for(let C=0,fe=N.length;C<fe;C++){let G=N[C];delete this.data[`${S.schema}_${S.table}`].__merged_data[G]}})}return{existing_attributes:_,joined_length:h?h.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Xn(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let _=o.table.as?o.table.as:o.table.tableid;(!t[_]||t[_].indexOf(o.attribute)<0)&&s.push(o)}}s=_s.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){b.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),b.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let E in i)o.push(i[E][0]);this.data[s].__merged_attributes.push(...n.columns);let _={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},c=await Nr.getDataByHash(_),u=n.columns.length;for(let E=0,l=o.length;E<l;E++){let h=o[E],S=c[h];for(let m=0;m<u;m++){let N=n.columns[m],C=S[N]===void 0?null:S[N];this.data[s].__merged_data[h].push(C)}}}}catch(r){throw b.error("Error thrown from getDataByHash function in SQLSearch class method getData."),b.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let _=o.aggregatorid?o.expression:o,c=o.aggregatorid?o.as_orig:_.as_orig;return n.expression.tableid?_.columnid_orig===n.expression.columnid_orig&&_.tableid_orig===n.expression.tableid_orig:_.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===c}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();b.trace(`Final SQL: ${n}`),s=await ae.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),b.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw b.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),b.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return b.error(TL.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),b.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=n[i],u=new RegExp(`${c}.\`${o}\``,"g"),E=`${c}.[${_}]`;s=s.replace(u,E)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,_)=>{let c=new RegExp(`\`${o}\``,"g"),u=`[${_}]`;s=s.replace(c,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Nr.getDataByValue(i);for(let _ in o)this.data[n].__merged_data[_]||(this.data[n].__merged_data[_]=Object.assign({},r[n])),this.data[n].__merged_data[_][t[s.attribute]]=o[_][s.attribute]}catch(o){b.error("There was an error when processing this SQL operation. Check your logs"),b.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(zn,"SQLSearch");wd.exports=zn});var us=d((eB,Dd)=>{"use strict";var fL=Td();Dd.exports={searchByConditions:NL,searchByHash:OL,searchByValue:gL,search:IL};var _o=mr(),Ud=require("util"),RL=Ud.callbackify(_o.searchByHash),AL=Ud.callbackify(_o.searchByValue),mL=yd();async function NL(e){return _o.searchByConditions(e)}a(NL,"searchByConditions");function OL(e,t){try{RL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(OL,"searchByHash");function gL(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),AL(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(gL,"searchByValue");function IL(e,t){try{let r=new fL(e);r.validate(),new mL(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(IL,"search")});var ls=d((tB,Hd)=>{"use strict";var Es=require("crypto"),Pd="aes-256-cbc",pL=32,CL=16,co=64,Bd=32,bL=co+Bd,Md=new Map;Hd.exports={encrypt:LL,decrypt:wL,createNatsTableStreamName:yL};function LL(e){let t=Es.randomBytes(pL),r=Es.randomBytes(CL),s=Es.createCipheriv(Pd,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),_=n.toString("hex");return i+o+_}a(LL,"encrypt");function wL(e){let t=e.substr(0,co),r=e.substr(co,Bd),s=e.substr(bL,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Es.createDecipheriv(Pd,Buffer.from(t,"hex"),n),_=o.update(i);return _=Buffer.concat([_,o.final()]),_.toString()}a(wL,"decrypt");function yL(e,t){let r=`${e}.${t}`,s=Md.get(r);return s||(s=Es.createHash("md5").update(`${e}.${t}`).digest("hex"),Md.set(r,s)),s}a(yL,"createNatsTableStreamName")});var lo=d((rB,Yd)=>{"use strict";var vd=us(),Dt=w(),Fd=ba(),UL=require("lodash"),DL=require("path"),ML=ls(),uo=p(),{promisify:qd}=require("util"),q=A(),{handleHDBError:jn,hdb_errors:PL}=J(),{HDB_ERROR_MSGS:ei,HTTP_STATUS_CODES:Vd}=PL,BL=de();BL.initSync();var Gd=F(),HL=x(),ds=qd(vd.searchByValue),GL=qd(vd.searchByHash),Or="name",xd="hash_attribute",Eo="schema",vL="schema_table",FL="attribute";Yd.exports={describeAll:qL,describeTable:ti,describeSchema:xL};async function qL(e){try{let t=uo.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Or,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[Or]},i=await ds(n);if(uo.isEmptyOrZeroLength(i))return{};let o={},_={};for(let h in i)o[i[h].name]=!0,!t&&!s&&(_[i[h].name]=r[i[h].name].describe);let c={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:q.ID_ATTRIBUTE_STRING,search_value:q.WILDCARD_SEARCH_VALUE,get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},u=await ds(c),E=[];for(let h of u)try{let S;if(t||s)S=await ti({schema:h.schema,table:h.name});else if(r&&r[h.schema].describe&&r[h.schema].tables[h.name].describe){let m=r[h.schema].tables[h.name].attribute_permissions;S=await ti({schema:h.schema,table:h.name},m)}S&&E.push(S)}catch(S){Dt.error(S)}let l={};for(let h in E)t||s?(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]):_[E[h].schema]&&(l[E[h].schema]==null&&(l[E[h].schema]={}),l[E[h].schema][E[h].name]=E[h],o[E[h].schema]&&delete o[E[h].schema]);for(let h in o)t||s?l[h]={}:_[h]&&(l[h]={});return l}catch(t){return Dt.error("Got an error in describeAll"),Dt.error(t),jn(new Error,ei.DESCRIBE_ALL_ERR)}}a(qL,"describeAll");async function ti(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Fd.describe_table(e);if(o)throw o;if(r===q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[q.SYSTEM_SCHEMA_NAME][s];let _={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Or,search_value:s,hash_values:[],get_attributes:[q.WILDCARD_SEARCH_VALUE]},c=await ds(_);if(!c||c.length===0)throw jn(new Error,ei.TABLE_NOT_FOUND(e.schema,e.table),Vd.NOT_FOUND);for await(let u of c)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw jn(new Error,ei.INVALID_TABLE_ERR(i));let E={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:vL,search_value:r+"."+s,get_attributes:[FL]},l=await ds(E);l=UL.uniqBy(l,h=>h.attribute),n&&n.length>0&&(l=VL(n)),i.attributes=l,i.clustering_stream_name=ML.createNatsTableStreamName(u.schema,u.name);try{let h=DL.join(HL.getBaseSchemaPath(),i.schema.toString()),S=await Gd.openEnvironment(h,i.name),m=Gd.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(h){Dt.warn(`unable to stat table dbi due to ${h}`)}}catch(E){Dt.error(`There was an error getting attributes for table '${u.name}'`),Dt.error(E)}return i}a(ti,"descTable");function VL(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(VL,"getAttrsByPerms");async function xL(e){let t=Fd.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Eo,search_value:s,hash_values:[],get_attributes:[xd,q.ID_ATTRIBUTE_STRING,Or,Eo]},i=await ds(n);if(i&&i.length<1){let o={schema:q.SYSTEM_SCHEMA_NAME,table:q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Or]},_=await GL(o);if(_&&_.length<1)throw jn(new Error,ei.SCHEMA_NOT_FOUND(e.schema),Vd.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async _=>{try{let c;if(r&&r.tables[_.name]&&(c=r.tables[_.name]),uo.isEmpty(c)||c.describe){let u=await ti({schema:e.schema,table:_.name},c?c.attribute_permissions:null);u&&(o[u.name]=u)}}catch(c){Dt.error(`Error describing schema table '${e.schema}.${_}'`),Dt.error(c)}})),o}}a(xL,"describeSchema")});var So=d((iB,Qd)=>{var sB=require("async"),gr=Kt(),nB=w(),{callbackify:$d,promisify:YL}=require("util");Qd.exports={setSchemaDataToGlobal:kd,getTableSchema:$L,getSystemSchema:QL,setSchemaDataToGlobalAsync:YL(kd)};var Wd=lo(),kL=$d(Wd.describeAll),KL=$d(Wd.describeTable);function kd(e){kL(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=gr),global.hdb_schema=r,e(null,null)})}a(kd,"setSchemaDataToGlobal");function Kd(e,t){return e==="system"?gr[t]:global.hdb_schema[e][t]}a(Kd,"returnSchema");function $L(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?WL(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,Kd(e,t))}):r(null,Kd(e,t))}a($L,"getTableSchema");function WL(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=gr:global.hdb_schema={system:gr},r();return}KL(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:gr}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(WL,"setTableDataToGlobal");function QL(){return gr}a(QL,"getSystemSchema")});var ii=d((aB,Xd)=>{"use strict";var si=oa(),ve=p(),JL=require("util"),ni=mr(),ZL=So(),To=w(),{handleHDBError:Mt,hdb_errors:XL}=J(),{HTTP_STATUS_CODES:Jt}=XL,zL=JL.promisify(ZL.getTableSchema),jL="updated",Jd="inserted",Zd="upserted";Xd.exports={insert:tw,update:rw,upsert:sw,validation:ew,flush:nw};async function ew(e){if(ve.isEmpty(e))throw new Error("invalid update parameters defined.");if(ve.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(ve.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await zL(e.schema,e.table),r=si(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(_=>{if(o&&ve.isEmptyOrZeroLength(_[s]))throw To.error("a valid hash attribute must be provided with update record:",_),new Error("a valid hash attribute must be provided with update record");if(!ve.isEmptyOrZeroLength(_[s])&&(_[s]==="null"||_[s]==="undefined"))throw To.error(`a valid hash value must be provided with ${e.operation} record:`,_),new Error(`"${_[s]}" is not a valid hash attribute value`);!ve.isEmpty(_[s])&&_[s]!==""&&n.has(ve.autoCast(_[s]))&&(_.skip=!0),n.add(ve.autoCast(_[s]));for(let c in _)i[c]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(ew,"validation");async function tw(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.createRecords(e);return ri(Jd,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(tw,"insertData");async function rw(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.updateRecords(e);return ve.isEmpty(s.existing_rows)?ri(jL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):ri(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(rw,"updateData");async function sw(e){if(e.operation!=="upsert")throw Mt(new Error,"invalid operation, must be upsert",Jt.INTERNAL_SERVER_ERROR);let t=si(e);if(t)throw Mt(new Error,t.message,Jt.BAD_REQUEST);let r=ve.checkSchemaTableExist(e.schema,e.table);if(r)throw Mt(new Error,r,Jt.BAD_REQUEST);try{let s=await ni.upsertRecords(e);return ri(Zd,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Mt(s,null,null,To.ERR,n)}}a(sw,"upsertData");function ri(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Jd?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Zd?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(ri,"returnObject");function nw(e){return ni.flush(e.schema,e.table)}a(nw,"flush")});var tS=d((oB,eS)=>{var iw=Et(),ho=require("joi"),{hdb_schema_table:zd}=nr(),jd={schema:zd,table:zd},aw={date:ho.date().iso().required()},ow={timestamp:ho.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};eS.exports=function(e,t){let r=t==="timestamp"?{...jd,...ow}:{...jd,...aw},s=ho.object(r);return iw.validateBySchema(e,s)}});var iS=d((_B,nS)=>{var _w=Et(),rS=require("joi"),{hdb_schema_table:sS}=nr(),cw=rS.object({schema:sS,table:sS,hash_values:rS.array().required()});nS.exports=function(e){return _w.validateBySchema(e,cw)}});var oS=d((cB,aS)=>{"use strict";var ai=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ai,"InsertObject");var oi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(oi,"NoSQLSeachObject");var _i=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a(_i,"DeleteResponseObject");aS.exports={InsertObject:ai,NoSQLSeachObject:oi,DeleteResponseObject:_i}});var dS=d((uB,lS)=>{"use strict";var cS=tS(),uw=iS(),ci=p(),_S=require("moment"),uS=w(),{promisify:Ew,callbackify:lw}=require("util"),Zt=A(),dw=So(),fo=Ew(dw.getTableSchema),Ro=mr(),{DeleteResponseObject:Sw}=oS(),{handleHDBError:Pt,hdb_errors:Tw}=J(),{HDB_ERROR_MSGS:ui,HTTP_STATUS_CODES:Bt}=Tw,hw="records successfully deleted",fw=lw(ES);lS.exports={delete:fw,deleteRecord:ES,deleteFilesBefore:Rw,deleteAuditLogsBefore:Aw};async function Rw(e){let t=cS(e,"date");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(!_S(e.date,_S.ISO_8601).isValid())throw Pt(new Error,ui.INVALID_DATE,Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_DATE,!0);let s=ci.checkSchemaTableExist(e.schema,e.table);if(s)throw Pt(new Error,s,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,s,!0);try{let n=await Ro.deleteRecordsBefore(e);if(await fo(e.schema,e.table),uS.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(Rw,"deleteFilesBefore");async function Aw(e){let t=cS(e,"timestamp");if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Pt(new Error,ui.INVALID_VALUE("Timestamp"),Bt.BAD_REQUEST,Zt.LOG_LEVELS.ERROR,ui.INVALID_VALUE("Timestamp"),!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{let s=await Ro.deleteAuditLogsBefore(e);return await fo(e.schema,e.table),uS.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(Aw,"deleteAuditLogsBefore");async function ES(e){let t=uw(e);if(t)throw Pt(t,t.message,Bt.BAD_REQUEST,void 0,void 0,!0);let r=ci.checkSchemaTableExist(e.schema,e.table);if(r)throw Pt(new Error,r,Bt.NOT_FOUND,Zt.LOG_LEVELS.ERROR,r,!0);try{await fo(e.schema,e.table);let s=await Ro.deleteRecords(e);return ci.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hw}`),s}catch(s){if(s.message===Zt.SEARCH_NOT_FOUND_MESSAGE){let n=new Sw;return n.message=Zt.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(ES,"deleteRecord")});var Ei=d((EB,hS)=>{var mw=require("crypto"),SS=9;function Nw(e){let t=gw(SS),r=TS(e+t);return t+r}a(Nw,"createHash");function Ow(e,t){let r=e.substr(0,SS),s=r+TS(t+r);return e===s}a(Ow,"validateHash");function gw(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(gw,"generateSalt");function TS(e){return mw.createHash("md5").update(e).digest("hex")}a(TS,"md5");hS.exports={hash:Nw,validate:Ow}});var RS=d((lB,fS)=>{var Ao=Et(),Te={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Iw(e){return Te.password.presence=!0,Te.username.presence=!0,Te.role.presence=!0,Te.active.presence=!0,Ao.validateObject(e,Te)}a(Iw,"addUserValidation");function pw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(pw,"alterUserValidation");function Cw(e){return Te.password.presence=!1,Te.username.presence=!0,Te.role.presence=!1,Te.active.presence=!1,Ao.validateObject(e,Te)}a(Cw,"dropUserValidation");fS.exports={addUserValidation:Iw,alterUserValidation:pw,dropUserValidation:Cw}});var mS=d((dB,AS)=>{"use strict";var Ht=A(),Ss=class{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ss,"BaseLicense");var li=class extends Ss{constructor(t=0,r=Ht.STORAGE_TYPES_ENUM.LMDB,s=Ht.LICENSE_VALUES.API_CALL_DEFAULT,n=Ht.RAM_ALLOCATION_ENUM.DEFAULT,i=Ht.LICENSE_VALUES.VERSION_DEFAULT,o,_=!1){super(t,r,s,n,i,o),this.enterprise=_}};a(li,"ExtendedLicense");AS.exports={BaseLicense:Ss,ExtendedLicense:li}});var Io=d((SB,CS)=>{"use strict";var pr=require("fs-extra"),NS=Ei(),OS=require("crypto"),bw=require("moment"),Lw=require("uuid").v4,he=w(),No=require("path"),ww=p(),De=A(),yw=mS().ExtendedLicense,Ir="invalid license key format",Uw="061183",Dw="mofi25",Mw="aes-256-cbc",Pw=16,Bw=32,gS=de();gS.initSync();var mo;CS.exports={validateLicense:IS,generateFingerPrint:Gw,licenseSearch:pS,getLicense:qw};function Oo(){return No.join(gS.getHdbBasePath(),De.LICENSE_KEY_DIR_NAME,De.LICENSE_FILE_NAME)}a(Oo,"getLicenseDirPath");function Hw(){let e=Oo();return No.join(e,De.LICENSE_FILE_NAME)}a(Hw,"getLicenseFilePath");function go(){let e=Oo();return No.join(e,De.REG_KEY_FILE_NAME)}a(go,"getFingerPrintFilePath");async function Gw(){let e=go();try{return await pr.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await vw();throw he.error(`Error writing fingerprint file to ${e}`),he.error(t),new Error("There was an error generating the fingerprint")}}a(Gw,"generateFingerPrint");async function vw(){let e=Lw(),t=NS.hash(e),r=go();try{await pr.mkdirp(Oo()),await pr.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw he.error(`Error writing fingerprint file to ${r}`),he.error(s),new Error("There was an error generating the fingerprint")}return t}a(vw,"writeFingerprint");function IS(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:De.STORAGE_TYPES_ENUM.LMDB,api_call:De.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:De.RAM_ALLOCATION_ENUM.DEFAULT,version:De.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return he.error("empty license key passed to validate."),r;let s=go(),n=!1;try{n=pr.statSync(s)}catch(i){he.error(i)}if(n){let i;try{i=pr.readFileSync(s,"utf8")}catch{he.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Dw),_=o[1];_=Buffer.concat([Buffer.from(_)],Pw);let c=Buffer.concat([Buffer.from(i)],Bw),u=OS.createDecipheriv(Mw,c,_);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let E=null;try{E=u.update(o[0],"hex","utf8"),E.trim(),E+=u.final("utf8")}catch{let S=Fw(o[0],i);if(S)E=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ir),he.error(Ir),new Error(Ir)}let l;if(isNaN(E))try{l=JSON.parse(E),r.api_call=l.api_call,r.version=l.version,r.storage_type=l.storage_type,r.exp_date=l.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),l.ram_allocation&&(r.ram_allocation=l.ram_allocation)}catch{throw console.error(Ir),he.error(Ir),new Error(Ir)}else r.exp_date=E;r.exp_date<bw().valueOf()&&(r.valid_date=!1),NS.validate(o[1],`${Uw}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||he.error("Invalid licence"),r}a(IS,"validateLicense");function Fw(e,t){try{let r=OS.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{he.warn("Check old license failed")}}a(Fw,"checkOldLicense");function pS(){let e=new yw;e.api_call=0;let t=[];try{t=pr.readFileSync(Hw(),"utf-8").split(De.NEW_LINE)}catch(r){r.code==="ENOENT"?he.info("no license file found"):he.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(ww.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=IS(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){he.error("There was an error parsing the license string."),he.error(n),e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=De.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=De.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=De.LICENSE_VALUES.API_CALL_DEFAULT),mo=e,e}a(pS,"licenseSearch");async function qw(){return mo||await pS(),mo}a(qw,"getLicense")});var hs=d((TB,qS)=>{"use strict";var yS="username is required",US="nothing to update, must supply active, role or password to update",DS="password cannot be an empty string",MS="If role is specified, it cannot be empty.",PS="active must be true or false";qS.exports={addUser:Qw,alterUser:Jw,dropUser:Xw,userInfo:zw,listUsers:Si,listUsersExternal:jw,setUsersToGlobal:Ts,findAndValidateUser:ry,getClusterUser:sy,USERNAME_REQUIRED:yS,ALTERUSER_NOTHING_TO_UPDATE:US,EMPTY_PASSWORD:DS,EMPTY_ROLE:MS,ACTIVE_BOOLEAN:PS};var BS=ii(),Vw=dS(),Co=Ei(),HS=RS(),GS=us(),bo=On(),te=p(),vS=require("validate.js"),L=w(),{promisify:Lo}=require("util"),wo=ls(),Xt=A(),bS=ut(),xw=vr(),yo=de(),Yw=Io(),kw=Kt(),{handleHDBError:nt,hdb_errors:Kw}=J(),{HTTP_STATUS_CODES:it,AUTHENTICATION_ERROR_MSGS:po,HDB_ERROR_MSGS:Cr}=Kw,{UserEventMsg:Uo}=Zr(),LS=require("lodash"),FS={username:!0,active:!0,role:!0,password:!0},wS=new Map,di=Lo(GS.searchByValue),$w=Lo(GS.searchByHash),Ww=Lo(Vw.delete);async function Qw(e){let t=vS.cleanAttributes(e,FS),r=HS.addUserValidation(t);if(r)throw nt(new Error,r.message,it.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await di(s)}catch(u){throw L.error("There was an error searching for a role in add user"),L.error(u),u}if(!n||n.length<1)throw nt(new Error,Cr.ROLE_NAME_NOT_FOUND(t.role),it.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw nt(new Error,Cr.DUP_ROLES_FOUND(t.role),it.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await BS.insert(i)}catch(u){throw L.error("There was an error searching for a user."),L.error(u),u}L.debug(o);try{await Ts()}catch(u){throw L.error("Got an error setting users to global"),L.error(u),u}if(o.skipped_hashes.length===1)throw nt(new Error,Cr.USER_ALREADY_EXISTS(t.username),it.CONFLICT,void 0,void 0,!0);let _=Object.assign({},t);_.role=n[0];let c={user:null};return c.user=_,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ADD_USER,c,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${_.username} successfully added`}a(Qw,"addUser");async function Jw(e){let t=vS.cleanAttributes(e,FS);if(te.isEmptyOrZeroLength(t.username))throw new Error(yS);if(te.isEmptyOrZeroLength(t.password)&&te.isEmptyOrZeroLength(t.role)&&te.isEmptyOrZeroLength(t.active))throw new Error(US);if(!te.isEmpty(t.password)&&te.isEmptyOrZeroLength(t.password.trim()))throw new Error(DS);if(!te.isEmpty(t.active)&&!te.isBoolean(t.active))throw new Error(PS);let r=Zw(t.username);if(!te.isEmpty(t.password)&&!te.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=wo.encrypt(t.password)),t.password=Co.hash(t.password)),t.role==="")throw new Error(MS);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},_;try{_=await di(o)}catch(c){throw L.error("Got an error searching for a role."),L.error(c),c}if(!_||_.length===0){let c=Cr.ALTER_USER_ROLE_NOT_FOUND(t.role);throw L.error(c),nt(new Error,c,it.NOT_FOUND,void 0,void 0,!0)}if(_.length>1){let c=Cr.ALTER_USER_DUP_ROLES(t.role);throw L.error(c),nt(new Error,c,it.CONFLICT,void 0,void 0,!0)}t.role=_[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await BS.update(s)}catch(o){throw L.error("Error during update."),L.error(o),o}try{await Ts()}catch(o){throw L.error("Got an error setting users to global"),L.error(o),o}let i={user:null};return i.user=t,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.ALTER_USER,i,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),n}a(Jw,"alterUser");function Zw(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Zw,"isClusterUser");async function Xw(e){try{let t=HS.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(te.isEmpty(global.hdb_users.get(e.username)))throw nt(new Error,Cr.USER_NOT_EXIST(e.username),it.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Ww(r)}catch(i){throw L.error("Got an error deleting a user."),L.error(i),i}L.debug(s);try{await Ts()}catch(i){throw L.error("Got an error setting users to global."),L.error(i),i}let n={user:null};return n.user=e,te.sendTransactionToSocketCluster(Xt.INTERNAL_SC_CHANNELS.DROP_USER,n,yo.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bo.signalUserChange(new Uo(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Xw,"dropUser");async function zw(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await $w(r)}catch(n){throw L.error("Got an error searching for a role."),L.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw L.error(r),r}return t}a(zw,"userInfo");async function jw(){let e;try{e=await Si()}catch(t){throw L.error("Got an error listing users."),L.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(jw,"listUsersExternal");async function Si(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=LS.cloneDeep(await di(e))}catch(r){throw L.error("Got an error searching for roles."),L.error(r),r}if(!te.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=LS.cloneDeep(await di(s))}catch(o){throw L.error("Got an error searching for users."),L.error(o),o}let i=new Map;for(let o in n){let _=n[o];_.role=r[n[o].role],ey(_.role),i.set(_.username,_)}return(await Yw.getLicense()).enterprise?i:ty(i)}}catch(e){throw L.error("got an error listing users"),L.error(e),te.errorizeMessage(e)}return null}a(Si,"listUsers");function ey(e){try{if(!e){L.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(kw)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){L.error("Got an error trying to set system permissions."),L.error(t)}}a(ey,"appendSystemTablesToRole");function ty(e){try{if(L.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(L.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return L.error("error filtering users."),L.error(t),new Map}}a(ty,"nonEnterpriseFilter");async function Ts(){try{let e=await Si();global.hdb_users=e}catch(e){throw L.error(e),e}}a(Ts,"setUsersToGlobal");async function ry(e,t,r=!0){global.hdb_users||await Ts();let s=global.hdb_users.get(e);if(!s)throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw nt(new Error,po.USER_INACTIVE,it.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(wS.get(t)===s.password)return n;if(Co.validate(s.password,t))wS.set(t,s.password);else throw nt(new Error,po.GENERIC_AUTH_FAIL,it.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ry,"findAndValidateUser");async function sy(){let e=await Si(),t=xw.getConfigFromFile(Xt.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!te.isEmpty(r))return r.decrypt_hash=wo.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+bS.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+bS.SERVER_SUFFIX.ADMIN,r}a(sy,"getClusterUser")});var xS=d((hB,VS)=>{"use strict";var ny=mr();VS.exports={writeTransaction:iy};function iy(e,t,r){return ny.writeTransaction(e,t,r)}a(iy,"writeTransaction")});var Do=d((fB,ay)=>{ay.exports={name:"harperdb",version:"4.0.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 Yo=d((LB,_T)=>{"use strict";var at=de();at.initSync();var oy=require("fs-extra"),_y=require("semver"),Ns=require("path"),{monotonicFactory:cy}=require("ulidx"),uy=cy(),kS=require("util"),KS=require("child_process"),Ey=kS.promisify(KS.exec),ly=KS.spawn,V=ut(),k=A(),vo=p(),mt=w(),Ti=ls(),dy=xS(),fs=vr(),{encode:Bo,decode:$S}=require("msgpackr"),{isEmpty:zt}=vo,WS=hs(),RB=ss(),Sy=us(),AB=kS.promisify(Sy.searchByHash),{connect:Ty,StorageType:QS,RetentionPolicy:JS,AckPolicy:ZS,DeliverPolicy:Ho,NatsConnection:mB,JetStreamManager:NB,JetStreamClient:OB,StringCodec:gB,JSONCodec:hy,createInbox:Fo,StreamSource:IB,headers:fy,toJsMsg:Ry,nuid:pB,JetStreamOptions:CB,ErrorCode:YS,nanos:bB}=require("nats"),{PACKAGE_ROOT:Ay}=A(),my=Do(),XS=hy(),Ny="clustering",Oy=my.engines[V.NATS_SERVER_NAME],gy=Ns.join(Ay,"dependencies"),Go=Ns.join(gy,`${process.platform}-${process.arch}`,V.NATS_BINARY_NAME),Mo,Po,Rs,As,ms,Xe;_T.exports={runCommand:zS,checkNATSServerInstalled:Iy,createConnection:qo,getConnection:hi,getJetStreamManager:br,getJetStream:jS,getNATSReferences:Fe,getServerList:Cy,createLocalStream:Vo,listStreams:eT,deleteLocalStream:by,getServerConfig:Os,listRemoteStreams:Ly,viewStream:wy,publishToStream:yy,createWorkQueueStream:Uy,addSourceToWorkStream:tT,request:Dy,removeSourceFromWorkStream:sT,reloadNATS:xo,reloadNATSHub:My,reloadNATSLeaf:Py,extractServerName:rT,requestErrorHandler:By,updateWorkStream:Hy,createLocalTableStream:iT,createTableStreams:Gy,purgeTableStream:aT,purgeSchemaTableStreams:vy,getStreamInfo:Fy,updateNodeNameLocalStreams:qy,closeConnection:py};async function zS(e,t=void 0){let{stdout:r,stderr:s}=await Ey(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(zS,"runCommand");async function Iy(){try{await oy.access(Go)}catch{return!1}let e=await zS(`${Go} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _y.eq(t,Oy)}a(Iy,"checkNATSServerInstalled");async function qo(e,t,r,s=!0,n="127.0.0.1"){return Ty({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:at.get(k.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(qo,"createConnection");async function py(){Xe&&(await Xe.close(),Xe=void 0)}a(py,"closeConnection");async function hi(){if(!Xe){let e=await WS.getClusterUser();if(zt(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=at.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Xe=await qo(t,e.username,e.decrypt_hash)}return Xe}a(hi,"getConnection");async function br(){if(As)return As;zt(Xe)&&await hi();let{domain:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(zt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return As=await Xe.jetstreamManager({domain:e}),As}a(br,"getJetStreamManager");async function jS(){if(ms)return ms;zt(Xe)&&await hi();let{domain:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(zt(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ms=Xe.jetstream({domain:e}),ms}a(jS,"getJetStream");async function Fe(){let e=Xe||await hi(),t=As||await br(),r=ms||await jS();return{connection:e,jsm:t,js:r}}a(Fe,"getNATSReferences");async function Cy(){let e=at.get(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await WS.getClusterUser(),s=await qo(e,t,r),n=Fo(),i=s.subscribe(n),o=[],_=(async()=>{for await(let c of i)o.push(XS.decode(c.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await vo.async_set_timeout(50),await i.drain(),await s.close(),await _,o}a(Cy,"getServerList");async function Vo(e,t){let{jsm:r}=await Fe();await r.streams.add({name:e,storage:QS.File,retention:JS.Limits,subjects:t})}a(Vo,"createLocalStream");async function eT(){let{jsm:e}=await Fe(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eT,"listStreams");async function by(e){let{jsm:t}=await Fe();await t.streams.delete(e)}a(by,"deleteLocalStream");async function Ly(e){let{connection:t}=await Fe(),r=[],s=Fo(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(XS.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(Ly,"listRemoteStreams");async function wy(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await Fe(),i=uy(),o=[],_={ack_policy:ZS.None,durable_name:i,deliver_subject:i,deliver_policy:Ho.All};t&&(_.deliver_policy=Ho.StartTime,_.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,_);let c={timeout:2e3};r&&(c.max=r);let u=await n.subscribe(i,c);for await(let E of u){let l=Ry(E),h=$S(l.data),S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:h,originators:[]},m=[];if(l.headers){let N=l.headers.get("originators");N&&(m=N.split(","),S.originators=m)}o.push(S),u.getPending()===1&&l.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return o;throw c}}a(wy,"viewStream");async function yy(e,t,r=[],s=[]){mt.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await Fe(),o=await fi(),_=`${e}.${o}`,c=fy();s.push(o),c.append("originators",s.join());for(let u=0,E=r.length;u<E;u++)try{mt.trace(`publishToStream publishing to subject: ${_}, data:`,r[u]),await i.publish(_,Bo(r[u]),{headers:c})}catch(l){if(l.code&&l.code.toString()==="503")mt.trace(`publishToStream creating stream: ${t}`),await Vo(t,[_]),await i.publish(_,Bo(r[u]),{headers:c});else throw l}}a(yy,"publishToStream");function Os(e){e=e.toLowerCase();let t=Ns.join(at.get(k.CONFIG_PARAMS.ROOTPATH),Ny);if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return zt(Po)&&(Po={port:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.HUB,config_file:V.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ns.join(t,V.PID_FILES.HUB),hdb_nats_path:t}),Po;if(e===k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return zt(Mo)&&(Mo={port:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,config_file:V.NATS_CONFIG_FILES.LEAF_SERVER,domain:fs.getConfigFromFile(k.CONFIG_PARAMS.CLUSTERING_NODENAME)+V.SERVER_SUFFIX.LEAF,pid_file_path:Ns.join(t,V.PID_FILES.LEAF),hdb_nats_path:t}),Mo;mt.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Os,"getServerConfig");async function Uy(e){let{jsm:t}=await Fe(),r=await fi();try{await t.streams.add({name:e.stream_name,storage:QS.File,retention:JS.Workqueue,subjects:[`${V.SUBJECT_PREFIXES.MSGID}.${r}`,`${V.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:ZS.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:Ho.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(Uy,"createWorkQueueStream");async function tT(e,t,r){let{jsm:s}=await Fe(),n=await s.streams.info(t),i=rT(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:_,table:c}=r,u=Ti.createNatsTableStreamName(_,c),E=i===e,l,h,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let N=0,C=n.config.sources.length;N<C;N++)if(l=n.config.sources[N],h=N,E&&l.name===u||!E&&l.name===u&&l.external&&l.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(l.opt_start_time===o)return;await nT(_,c,l,t),n.config.sources.splice(h,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${V.SUBJECT_PREFIXES.TXN}.>`};E||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(tT,"addSourceToWorkStream");function rT(e){return e.split(".")[1]}a(rT,"extractServerName");async function sT(e,t,r){let{schema:s,table:n}=r,i=Ti.createNatsTableStreamName(s,n),{jsm:o}=await Fe(),_=await o.streams.info(t);if(!Array.isArray(_.config.sources)||_.config.sources.length===0)return;let c=_.config.sources.length,u;for(;c--;)if(u=_.config.sources[c],u.name===i&&u.external.api===`$JS.${e}.API`){_.config.sources.splice(c,1);break}await o.streams.update(t,_.config),await nT(s,n,u,t)}a(sT,"removeSourceFromWorkStream");async function nT(e,t,r,s){let n=await br(),i;try{i=oT(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{mt.error("Error purging source subject",i,"from work stream",s)}}a(nT,"purgeSourceFromWorkStream");async function Dy(e,t,r=2e3,s=Fo()){if(!vo.isObject(t))throw new Error("data param must be an object");let n=Bo(t),{connection:i}=await Fe(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let _=await i.request(e,n,o);return $S(_.data)}a(Dy,"request");function xo(e){return new Promise(async(t,r)=>{let s=ly(Go,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(xo,"reloadNATS");async function My(){let{pid_file_path:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await xo(e)}a(My,"reloadNATSHub");async function Py(){let{pid_file_path:e}=Os(k.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await xo(e)}a(Py,"reloadNATSLeaf");function By(e,t,r){let s;switch(e.code){case YS.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case YS.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(By,"requestErrorHandler");async function Hy(e,t){let r=t+V.SERVER_SUFFIX.LEAF;await dy.writeTransaction(k.SYSTEM_SCHEMA_NAME,k.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await tT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await sT(r,V.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Hy,"updateWorkStream");async function iT(e,t){let r=Ti.createNatsTableStreamName(e,t),s=await fi(),n=oT(e,t,s);await Vo(r,[n])}a(iT,"createLocalTableStream");async function Gy(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await iT(s,n)}}a(Gy,"createTableStreams");async function aT(e,t){if(at.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ti.createNatsTableStreamName(e,t),{jsm:s}=await Fe();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")mt.warn(r);else throw r}}a(aT,"purgeTableStream");async function vy(e,t){if(at.get(k.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await aT(e,t[r])}a(vy,"purgeSchemaTableStreams");async function Fy(e){return(await br()).streams.info(e)}a(Fy,"getStreamInfo");function oT(e,t,r){return`${V.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(oT,"createSubjectName");async function fi(){if(Rs)return Rs;if(Rs=(await br())?.nc?.info?.server_name,Rs===void 0)throw new Error("Unable to get jetstream manager server name");return Rs}a(fi,"getJsmServerName");async function qy(){let e=await br(),t=await fi(),r=await eT();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===V.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c}else if(n.name===V.WORK_QUEUE_CONSUMER_NAMES.stream_name){let c=`${V.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;mt.trace(`Updating stream subject name from: ${i} to: ${c}`),n.subjects[0]=c,await e.consumers.update(V.WORK_QUEUE_CONSUMER_NAMES.stream_name,V.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${V.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let c=i.split(".");c[c.length-1]=t;let u=c.join(".");mt.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(qy,"updateNodeNameLocalStreams")});var lT=d((wB,ET)=>{"use strict";var Lr=require("path"),Ni=require("fs-extra"),Vy=mc(),xy=gc(),Yy=pc(),ky=bc(),ko=hs(),yr=p(),qe=vr(),mi=A(),Ri=ut(),{CONFIG_PARAMS:re}=mi,Oi=w(),gi=de(),cT=ls(),Ko=Yo(),wr="clustering",Ky=1e4,uT=5;ET.exports={generateNatsConfig:$y,removeNatsConfig:Wy};async function $y(e=!1,t=void 0){gi.initSync();let r=gi.get(re.ROOTPATH),s=Lr.join(r,wr,Ri.PID_FILES.HUB),n=Lr.join(r,wr,Ri.PID_FILES.LEAF),i=Lr.join(r,wr,"leaf"),o=Lr.join(r,wr,Ri.NATS_CONFIG_FILES.HUB_SERVER),_=Lr.join(r,wr,Ri.NATS_CONFIG_FILES.LEAF_SERVER),c=qe.getConfigFromFile(re.CLUSTERING_TLS_CERTIFICATE),u=qe.getConfigFromFile(re.CLUSTERING_TLS_PRIVATEKEY),E=qe.getConfigFromFile(re.CLUSTERING_TLS_CERT_AUTH),l=qe.getConfigFromFile(re.CLUSTERING_TLS_INSECURE),h=qe.getConfigFromFile(re.CLUSTERING_NODENAME),S=qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Ko.checkNATSServerInstalled()||Ii("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await ko.listUsers(),N=qe.getConfigFromFile(re.CLUSTERING_USER),C=await ko.getClusterUser();(yr.isEmpty(C)||C.active!==!0)&&Ii(`invalid cluster user '${N}'`),e||(await Ai(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ai(re.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ai(re.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ai(re.CLUSTERING_LEAFSERVER_NETWORK_PORT));let fe=[],G=[];for(let[bs,gt]of m.entries())gt.role.role===mi.ROLE_TYPES_ENUM.CLUSTER_USER&>.active&&(fe.push(new ky(gt.username,cT.decrypt(gt.hash))),G.push(new Yy(gt.username,cT.decrypt(gt.hash))));let $=[],{hub_routes:xe}=qe.getClusteringRoutes();if(!yr.isEmptyOrZeroLength(xe))for(let bs of xe)$.push(`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@${bs.host}:${bs.port}`);let Cs=new Vy(qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_NETWORK_PORT),h,s,c,u,E,l,S,qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NAME),qe.getConfigFromFile(re.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,fe,G);t=yr.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mi.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ni.writeJson(o,Cs),Oi.trace(`Hub server config written to ${o}`));let d_=`tls://${C.sys_name_encoded}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,S_=`tls://${C.uri_encoded_name}:${C.uri_encoded_d_hash}@0.0.0.0:${S}`,T_=new xy(qe.getConfigFromFile(re.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,n,i,[d_],[S_],fe,G,c,u,E,l);(t===void 0||t===mi.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ni.writeJson(_,T_),Oi.trace(`Leaf server config written to ${_}`))}a($y,"generateNatsConfig");async function Ai(e){let t=gi.get(e);yr.isEmpty(t)&&Ii(`port undefined for '${e}'`),await yr.isPortTaken(t)&&Ii(`'${e}' port '${t}' is unavailable`)}a(Ai,"isPortAvailable");function Ii(e){let t=`Error generating clustering config: ${e}`;Oi.error(t),console.error(t),process.exit(1)}a(Ii,"generateNatsConfigError");async function Wy(e){let{port:t,config_file:r}=Ko.getServerConfig(e),{username:s,decrypt_hash:n}=await ko.getClusterUser(),i=0,o=500;for(;i<uT;){try{let u=await Ko.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Oi.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=uT)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await yr.async_set_timeout(o*i)}let _="0".repeat(Ky),c=Lr.join(gi.get(re.ROOTPATH),wr,r);await Ni.writeFile(c,_),await Ni.remove(c)}a(Wy,"removeNatsConfig")});var Wo=d((yB,AT)=>{"use strict";var K=de(),dT=Io(),R=A(),$o=ut(),j=require("path"),{PACKAGE_ROOT:pi}=A(),Q="/dev/null",Ur=j.join(pi,"launchServiceScripts"),ST=j.join(pi,"utility/scripts"),Qy=j.join(ST,R.HDB_RESTART_SCRIPT),TT=j.resolve(pi,"dependencies",`${process.platform}-${process.arch}`,$o.NATS_BINARY_NAME),oe,_e;function ot(){(oe===void 0||_e===void 0)&&(K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ot,"initLogConfig");function hT(){ot();let e=j.join(_e,R.PROCESS_LOG_NAMES.IPC),t={name:R.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:R.SERVICE_SERVERS_CWD.IPC};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:R.SERVICE_SERVERS.IPC}}a(hT,"generateIPCServerConfig");function fT(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.HDB),t=dT.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.HDB,script:R.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:K.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Ur};return oe||(s.out_file=Q,s.error_file=Q),s}a(fT,"generateHDBServerConfig");function RT(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=j.join(_e,R.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=dT.licenseSearch(),r=t.ram_allocation?R.MEM_SETTING_KEY+t.ram_allocation:R.MEM_SETTING_KEY+R.RAM_ALLOCATION_ENUM.DEFAULT,s={name:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:R.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:K.get(R.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Ur};return oe||(s.out_file=Q,s.error_file=Q),s}a(RT,"generateCFServerConfig");function Jy(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",$o.NATS_CONFIG_FILES.HUB_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:TT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Jy,"generateNatsHubServerConfig");function Zy(){ot(),K.initSync(),oe=K.get(R.HDB_SETTINGS_NAMES.LOG_TO_FILE),_e=K.get(R.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=K.get(R.CONFIG_PARAMS.ROOTPATH),t=j.join(e,"clustering",$o.NATS_CONFIG_FILES.LEAF_SERVER),r=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:TT,args:`-c ${t}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return oe||(s.out_file=Q,s.error_file=Q),s}a(Zy,"generateNatsLeafServerConfig");function Xy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur};return oe||(t.out_file=Q,t.error_file=Q),t}a(Xy,"generateNatsIngestServiceConfig");function zy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:R.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur};return oe||(t.out_file=Q,t.error_file=Q),t}a(zy,"generateNatsReplyServiceConfig");function jy(){ot(),K.initSync();let e=j.join(_e,R.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:R.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ur,autorestart:!1};return oe||(t.out_file=Q,t.error_file=Q),t}a(jy,"generateClusteringUpgradeV4ServiceConfig");function eU(){ot();let e=j.join(_e,R.PROCESS_LOG_NAMES.PM2),t={name:R.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:R.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:ST};return oe||(t.out_file=Q,t.error_file=Q),{...t,script:Qy}}a(eU,"generateRestart");function tU(e){ot();let t=j.join(_e,R.PROCESS_LOG_NAMES.JOBS),r=j.join(pi,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[R.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Ur,autorestart:!1};return oe||(s.out_file=Q,s.error_file=Q),{...s,script:j.join(r,"jobProcess.js")}}a(tU,"generateJobConfig");function rU(){return{apps:[hT(),fT(),RT()]}}a(rU,"generateAllServiceConfigs");AT.exports={generateAllServiceConfigs:rU,generateIPCServerConfig:hT,generateHDBServerConfig:fT,generateCFServerConfig:RT,generateRestart:eU,generateNatsHubServerConfig:Jy,generateNatsLeafServerConfig:Zy,generateNatsIngestServiceConfig:Xy,generateNatsReplyServiceConfig:zy,generateClusteringUpgradeV4ServiceConfig:jy,generateJobConfig:tU}});var NT=d((UB,mT)=>{var sU=Et(),nU={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};mT.exports=function(e){return sU.validateObject(e,nU)}});var gT=d((DB,OT)=>{"use strict";var iU=A().OPERATIONS_ENUM,Ci=class{constructor(t,r,s,n=void 0){this.operation=iU.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Ci,"UpdateObject");OT.exports=Ci});var pT=d((MB,IT)=>{"use strict";var aU={OPERATION:"operation",REFRESH:"refresh"},bi=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(bi,"JWTTokens");var Li=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Li,"JWTRSAKeys");IT.exports={JWTTokens:bi,TOKEN_TYPE_ENUM:aU,JWTRSAKeys:Li}});var yT=d((PB,wT)=>{"use strict";var Is=require("jsonwebtoken"),Qo=require("fs-extra"),Jo=p(),Ve=A(),{handleHDBError:Ie,hdb_errors:oU}=J(),{HTTP_STATUS_CODES:pe,AUTHENTICATION_ERROR_MSGS:Ce}=oU,gs=w(),CT=Ei(),zo=hs(),_U=ii().update,cU=gT(),uU=On(),{UserEventMsg:EU}=Zr(),Gt=de();Gt.initSync();var Zo=require("path"),{JWTTokens:lU,JWTRSAKeys:dU,TOKEN_TYPE_ENUM:wi}=pT(),SU=Gt.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Gt.get(Ve.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",TU=Gt.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Gt.get(Ve.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",yi="RS256",Xo;wT.exports={createTokens:hU,validateOperationToken:RU,refreshOperationToken:fU,validateRefreshToken:LT};async function hU(e){if(Jo.isEmpty(e)||typeof e!="object")throw Ie(new Error,Ce.INVALID_AUTH_OBJECT,pe.BAD_REQUEST,void 0,void 0,!0);if(Jo.isEmpty(e.username))throw Ie(new Error,Ce.USERNAME_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);if(Jo.isEmpty(e.password))throw Ie(new Error,Ce.PASSWORD_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await zo.findAndValidateUser(e.username,e.password),!t)throw Ie(new Error,Ce.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}catch(h){throw gs.error(h),Ie(new Error,Ce.INVALID_CREDENTIALS,pe.UNAUTHORIZED,void 0,void 0,!0)}let r=await Ui(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await bT(i,r.private_key,r.passphrase),_=await Is.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:TU,algorithm:yi,subject:wi.REFRESH}),c=CT.hash(_),u=new cU(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:c}]),E,l;try{E=await _U(u)}catch(h){gs.error(h),l=h}if(l!==void 0||E.skipped_hashes.length>0)throw Ie(new Error,Ce.REFRESH_TOKEN_SAVE_FAILED,pe.INTERNAL_SERVER_ERROR);return uU.signalUserChange(new EU(process.pid)),new lU(o,_)}a(hU,"createTokens");async function bT(e,t,r){return await Is.sign(e,{key:t,passphrase:r},{expiresIn:SU,algorithm:yi,subject:wi.OPERATION})}a(bT,"signOperationToken");async function Ui(){if(Xo===void 0)try{let e=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Zo.join(Gt.getHdbBasePath(),Ve.LICENSE_KEY_DIR_NAME,Ve.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Qo.readFile(e)).toString(),n=(await Qo.readFile(t)).toString(),i=(await Qo.readFile(r)).toString();Xo=new dU(i,n,s)}catch(e){throw gs.error(e),Ie(new Error,Ce.NO_ENCRYPTION_KEYS,pe.INTERNAL_SERVER_ERROR)}return Xo}a(Ui,"getJWTRSAKeys");async function fU(e){if(!e)throw Ie(new Error,Ce.INVALID_BODY,pe.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ie(new Error,Ce.REFRESH_TOKEN_REQUIRED,pe.BAD_REQUEST,void 0,void 0,!0);await LT(e.refresh_token);let t=await Ui(),r=await Is.decode(e.refresh_token);return{operation_token:await bT({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(fU,"refreshOperationToken");async function RU(e){try{let t=await Ui(),r=await Is.verify(e,t.public_key,{algorithms:yi,subject:wi.OPERATION});return await zo.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gs.warn(t),t.name&&t.name==="TokenExpiredError"?Ie(new Error,Ce.TOKEN_EXPIRED,pe.FORBIDDEN):Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED)}}a(RU,"validateOperationToken");async function LT(e){let t;try{let r=await Ui(),s=await Is.verify(e,r.public_key,{algorithms:yi,subject:wi.REFRESH});t=await zo.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gs.warn(r),r.name&&r.name==="TokenExpiredError"?Ie(new Error,Ce.TOKEN_EXPIRED,pe.FORBIDDEN):Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED)}if(!CT.validate(t.refresh_token,e))throw Ie(new Error,Ce.INVALID_TOKEN,pe.UNAUTHORIZED);return t}a(LT,"validateRefreshToken")});var PT=d((HB,MT)=>{"use strict";var AU=NT(),Dr=require("passport"),mU=require("passport-local").Strategy,NU=require("passport-http").BasicStrategy,OU=require("util"),gU=hs(),DT=OU.callbackify(gU.findAndValidateUser),BB=Me(),IU=A(),UT=yT();Dr.use(new mU(function(e,t,r){DT(e,t,r)}));Dr.use(new NU(function(e,t,r){DT(e,t,r)}));Dr.serializeUser(function(e,t){t(null,e)});Dr.deserializeUser(function(e,t){t(null,e)});function pU(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,_){return o?r(o):_?r(null,_):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":Dr.authenticate("basic",{session:!1},(o,_)=>{i(o,_)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===IU.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?UT.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):UT.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Dr.authenticate("local",{session:!1},function(o,_){i(o,_)})(e,t,r);break}}a(pU,"authorize");function CU(e,t){let r=AU(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let _ in o)e.attributes.indexOf(o[_].attribute_name)>-1&&!o[_][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[_].attribute_name} `))}return t(null,s)}a(CU,"checkPermissions");MT.exports={authorize:pU,checkPermissions:CU}});var HT=d((GB,BT)=>{"use strict";var Di=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Di,"Node");var Mi=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(Mi,"NodeSubscription");BT.exports={Node:Di,NodeSubscription:Mi}});var vT=d((vB,GT)=>{"use strict";var bU=A().OPERATIONS_ENUM,Pi=class{constructor(t,r,s,n=void 0){this.operation=bU.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Pi,"UpsertObject");GT.exports=Pi});var qT=d((FB,FT)=>{"use strict";var Bi=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Bi,"RemotePayloadObject");var Hi=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Hi,"RemotePayloadSubscription");FT.exports={RemotePayloadObject:Bi,RemotePayloadSubscription:Hi}});var xT=d((qB,VT)=>{"use strict";var Gi=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(Gi,"TableSizeObject");VT.exports=Gi});var $T=d((VB,KT)=>{"use strict";var LU=xT(),YT=require("path"),kT=x(),wU=Ee(),Mr=F(),yU=w();KT.exports=UU;async function UU(e){let t=new LU;try{let r=YT.join(kT.getBaseSchemaPath(),e.schema.toString()),s=await Mr.openEnvironment(r,e.name),n=Mr.statDBI(s,e.hash_attribute),i=YT.join(kT.getTransactionAuditStorePath(),e.schema.toString()),o=await Mr.openEnvironment(i,e.name,!0),_=Mr.statDBI(o,wU.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),c=await Mr.environmentDataSize(r,e.name),u=await Mr.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=c,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=_.entryCount}catch(r){yU.warn(`unable to stat table dbi due to ${r}`)}return t}a(UU,"lmdbGetTableSize")});var QT=d((xB,WT)=>{"use strict";var DU=A(),vi=class{constructor(t){this.operator=DU.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(vi,"SystemInformationOperation");WT.exports=vi});var ZT=d((YB,JT)=>{"use strict";var Fi=class{constructor(t,r,s,n,i,o,_){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=_}};a(Fi,"SystemInformationObject");JT.exports=Fi});var zT=d((KB,XT)=>{"use strict";var ce=require("systeminformation"),Pr=w(),MU=A(),PU=$T(),BU=lo(),HU=de();HU.initSync();var kB=QT(),GU=ZT(),qi;XT.exports={getHDBProcessInfo:r_,getNetworkInfo:n_,getDiskInfo:s_,getMemoryInfo:t_,getCPUInfo:e_,getTimeInfo:jo,getSystemInformation:i_,systemInformation:vU,getTableSize:a_};function jo(){return ce.time()}a(jo,"getTimeInfo");async function e_(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:_,socket:c,cache:u,...E}=await ce.cpu();E.cpu_speed=await ce.cpuCurrentSpeed();let{raw_currentload:l,raw_currentload_idle:h,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:N,raw_currentload_user:C,cpus:fe,...G}=await ce.currentLoad();return G.cpus=[],fe.forEach($=>{let{raw_load:xe,raw_load_idle:Cs,raw_load_irq:d_,raw_load_nice:S_,raw_load_system:T_,raw_load_user:bs,...gt}=$;G.cpus.push(gt)}),E.current_load=G,E}catch(e){return Pr.error(`error in getCPUInfo: ${e}`),{}}}a(e_,"getCPUInfo");async function t_(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ce.mem();return n}catch(e){return Pr.error(`error in getMemoryInfo: ${e}`),{}}}a(t_,"getMemoryInfo");async function r_(){let e={core:[],clustering:[]};try{return(await ce.processes()).list.forEach(r=>{r.params.includes(MU.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Pr.error(`error in getHDBProcessInfo: ${t}`),e}}a(r_,"getHDBProcessInfo");async function s_(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ce.disksIO();e.io=i;let{rx_sec:o,tx_sec:_,wx_sec:c,...u}=await ce.fsStats();return e.read_write=u,e.size=await ce.fsSize(),e}catch(t){return Pr.error(`error in getDiskInfo: ${t}`),e}}a(s_,"getDiskInfo");async function n_(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ce.networkInterfaceDefault(),e.latency=await ce.inetChecksite("google.com"),(await ce.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:_,dnsSuffix:c,ieee8021xAuth:u,ieee8021xState:E,carrier_changes:l,...h}=s;e.interfaces.push(h)}),(await ce.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,..._}=s;e.stats.push(_)}),e.connections=await ce.networkConnections(),e}catch(t){return Pr.error(`error in getNetworkInfo: ${t}`),e}}a(n_,"getNetworkInfo");async function i_(){if(qi!==void 0)return qi;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,..._}=await ce.osInfo();e=_;let c=await ce.versions("node, npm");return e.node_version=c.node,e.npm_version=c.npm,qi=e,qi}catch(t){return Pr.error(`error in getSystemInformation: ${t}`),e}}a(i_,"getSystemInformation");async function a_(){let e=[],t=await BU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await PU(s));return e}a(a_,"getTableSize");async function vU(e){let t=new GU;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await i_(),t.time=jo(),t.cpu=await e_(),t.memory=await t_(),t.disk=await s_(),t.network=await n_(),t.harperdb_processes=await r_(),t.table_size=await a_(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await i_();break;case"time":t.time=jo();break;case"cpu":t.cpu=await e_();break;case"memory":t.memory=await t_();break;case"disk":t.disk=await s_();break;case"network":t.network=await n_();break;case"harperdb_processes":t.harperdb_processes=await r_();break;case"table_size":t.table_size=await a_();break;default:break}return t}a(vU,"systemInformation")});var eh=d((QB,jT)=>{"use strict";var $B=require("fs-extra"),WB=w();jT.exports={version:FU,printVersion:VU,nodeVersion:qU};var vt=Do();function FU(){if(vt)return vt.version}a(FU,"version");function qU(){if(vt&&vt.engines&&vt.engines["preferred-node"])return vt.engines["preferred-node"]}a(qU,"nodeVersion");function VU(){vt&&console.log(`HarperDB Version ${vt.version}`)}a(VU,"printVersion")});var ih=d((XB,nh)=>{"use strict";var xU=ii(),o_=p(),__=require("util"),jt=A(),th=de();th.initSync();var YU=PT(),rh=us(),{Node:JB,NodeSubscription:ZB}=HT(),kU=ss(),KU=vT(),{RemotePayloadObject:$U,RemotePayloadSubscription:WU}=qT(),{handleHDBError:QU,hdb_errors:JU}=J(),{HTTP_STATUS_CODES:ZU,HDB_ERROR_MSGS:XU}=JU,zU=ft(),jU=zT(),eD=eh(),tD=__.promisify(YU.authorize),rD=__.promisify(rh.searchByHash),sD=__.promisify(rh.searchByValue);nh.exports={authHeaderToUser:nD,isEmpty:iD,getNodeRecord:aD,upsertNodeRecord:oD,buildNodePayloads:_D,checkClusteringEnabled:cD,getAllNodeRecords:uD,getSystemInfo:ED,reverseSubscription:sh};async function nD(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await tD(t,null),e}a(nD,"authHeaderToUser");function iD(e){return e==null}a(iD,"isEmpty");async function aD(e){let t=new kU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return rD(t)}a(aD,"getNodeRecord");async function oD(e){let t=new KU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return xU.upsert(t)}a(oD,"upsertNodeRecord");function sh(e){if(o_.isEmpty(e.subscribe)||o_.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(sh,"reverseSubscription");function _D(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let _=e[i],{schema:c,table:u}=_,E=o_.getTableHashAttribute(c,u),{subscribe:l,publish:h}=sh(_),S=new WU(c,u,E,h,l,_.start_time);n.push(S)}return new $U(r,t,n,s)}a(_D,"buildNodePayloads");function cD(){if(!th.get(jt.CONFIG_PARAMS.CLUSTERING_ENABLED))throw QU(new Error,XU.CLUSTERING_NOT_ENABLED,ZU.BAD_REQUEST,void 0,void 0,!0)}a(cD,"checkClusteringEnabled");async function uD(){let e=new zU(jt.SYSTEM_SCHEMA_NAME,jt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return sD(e)}a(uD,"getAllNodeRecords");async function ED(){let e=await jU.getSystemInformation();return{hdb_version:eD.version(),node_version:e.node_version,platform:e.platform}}a(ED,"getSystemInfo")});var fh=d((zB,hh)=>{"use strict";var I=A(),Vi=p(),ps=lT(),xi=Yo(),lD=ut(),M=require("pm2"),dD=require("fs-extra"),Nt=Wo(),be=de(),Ot=w(),SD=Wo(),TD=ih(),hD=require("util"),oh=hD.promisify(require("child_process").exec),_h=require("path");hh.exports={start:er,stop:ki,reload:uh,restart:Eh,list:u_,describe:Ki,connect:_t,kill:dh,startAllServices:CD,startService:Yi,getUniqueServicesList:E_,restartAllServices:bD,stopAllServices:LD,isServiceRegistered:Sh,reloadStopStart:c_,restartHdb:lh,deleteProcess:ID,configureLogRotate:UD,startClustering:Th,isHdbRestartRunning:pD,isClusteringRunning:MD,stopClustering:DD,reloadClustering:PD};var{PACKAGE_ROOT:fD}=A(),RD="2.7.0",ch=_h.join(fD,"node_modules/pm2/bin/pm2"),AD="Log rotate installed.",mD="Error installing log rotate.",ND="Log rotate updated.",OD="Error updating log rotate.",gD="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function _t(){return new Promise((e,t)=>{M.connect((r,s)=>{r&&t(r),e(s)})})}a(_t,"connect");function er(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.start(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(er,"start");function ki(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.stop(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.delete(e,(i,o)=>{i&&(M.disconnect(),r(s)),M.disconnect(),t(o)})})})}a(ki,"stop");function uh(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.reload(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(uh,"reload");function Eh(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.restart(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Eh,"restart");function ID(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.delete(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(ID,"deleteProcess");async function lh(){await er(SD.generateRestart())}a(lh,"restartHdb");async function pD(){let e=await u_();for(let t in e)if(e[t].name===I.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(pD,"isHdbRestartRunning");function u_(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.list((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(u_,"list");function Ki(e){return new Promise(async(t,r)=>{try{await _t()}catch(s){r(s)}M.describe(e,(s,n)=>{s&&(M.disconnect(),r(s)),M.disconnect(),t(n)})})}a(Ki,"describe");function dh(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.killDaemon((r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(dh,"kill");async function CD(){try{await Th(),await er(Nt.generateAllServiceConfigs())}catch(e){throw M.disconnect(),e}}a(CD,"startAllServices");async function Yi(e){try{let t;switch(e=e.toLowerCase(),e){case I.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Nt.generateIPCServerConfig();break;case I.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Nt.generateHDBServerConfig();break;case I.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Nt.generateCFServerConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Nt.generateNatsIngestServiceConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Nt.generateNatsReplyServiceConfig();break;case I.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Nt.generateNatsHubServerConfig(),await er(t),await ps.removeNatsConfig(e);return;case I.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Nt.generateNatsLeafServerConfig(),await er(t),await ps.removeNatsConfig(e);return;case I.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Nt.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await er(t)}catch(t){throw M.disconnect(),t}}a(Yi,"startService");async function E_(){try{let e=await u_(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw M.disconnect(),e}}a(E_,"getUniqueServicesList");async function bD(e=[]){try{let t=!1,r=await E_();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===I.PROCESS_DESCRIPTORS.HDB?t=!0:await c_(o):await Eh(o))}t&&await c_(I.PROCESS_DESCRIPTORS.HDB)}catch(t){throw M.disconnect(),t}}a(bD,"restartAllServices");async function LD(){try{let e=await E_();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await ki(s.name)}if(await dh(),be.get(I.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await dD.readFile(_h.join(be.get(I.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),I.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){Ot.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw M.disconnect(),e}}a(LD,"stopAllServices");async function Sh(e){return!Vi.isEmptyOrZeroLength(await Ki(e))}a(Sh,"isServiceRegistered");async function c_(e){let t=e===I.PROCESS_DESCRIPTORS.HDB?be.get(I.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):be.get(I.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Ki(e),s=Vi.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===I.PROCESS_DESCRIPTORS.HDB?Ot.error(gD):(await ki(e),await Yi(e)):e===I.PROCESS_DESCRIPTORS.HDB?await lh():await uh(e)}a(c_,"reloadStopStart");function wD(){return new Promise(async(e,t)=>{try{await _t()}catch(r){t(r)}M.stop(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(M.disconnect(),t(r)),M.disconnect(),e(s)})})}a(wD,"stopLogrotate");async function yD(){let{stdout:e,stderr:t}=await oh(`${process.platform==="win32"?"node":""} ${ch} install pm2-logrotate@${RD}`);if(Ot.debug(`loadLogRotate stdout: ${e}`),t)throw Ot.error(mD),t;Ot.info(AD)}a(yD,"installLogRotate");async function ah(){let e={max_size:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${ch} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await oh(t);if(Ot.debug(`updateLogRotateConfig stdout: ${r}`),s)throw Ot.error(OD),s;Ot.info(ND)}a(ah,"updateLogRotateConfig");async function UD(){be.initSync();let e=Vi.autoCastBoolean(be.get(I.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await Ki(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(Vi.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await yD(),await ah();return}if(e&&s){await er(I.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await ah();return}!e&&r===I.PM2_PROCESS_STATUSES.ONLINE&&await wD()}a(UD,"configureLogRotate");async function Th(){for(let t in I.CLUSTERING_PROCESSES){let r=I.CLUSTERING_PROCESSES[t];await Yi(r)}await xi.createWorkQueueStream(lD.WORK_QUEUE_CONSUMER_NAMES),await xi.updateNodeNameLocalStreams();let e=await TD.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===I.PRE_4_0_0_VERSION){Ot.info("Starting clustering upgrade 4.0.0 process"),await Yi(I.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(Th,"startClustering");async function DD(){for(let e in I.CLUSTERING_PROCESSES){let t=I.CLUSTERING_PROCESSES[e];await ki(t)}}a(DD,"stopClustering");async function MD(){for(let e in I.CLUSTERING_PROCESSES){let t=I.CLUSTERING_PROCESSES[e];if(await Sh(t)===!1)return!1}return!0}a(MD,"isClusteringRunning");async function PD(){await ps.generateNatsConfig(!0),await xi.reloadNATSHub(),await xi.reloadNATSLeaf(),await ps.removeNatsConfig(I.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ps.removeNatsConfig(I.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(PD,"reloadClustering")});var l_=fh(),Rh=A();a(async function(){try{let t=await l_.describe(Rh.PROCESS_DESCRIPTORS.HDB);for(let r of t)await l_.reload(r.pm_id);await l_.deleteProcess(Rh.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|