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,8 +1,8 @@
|
|
|
1
1
|
"use strict";var sC=Object.defineProperty;var a=(e,t)=>sC(e,"name",{value:t,configurable:!0});var h=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=h((e1,zd)=>{"use strict";var $e=require("path"),nC=require("fs");function iC(){let e=__dirname;for(;!nC.existsSync($e.join(e,"package.json"));){let t=$e.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(iC,"getHDBPackageRoot");var Gt=iC(),Fd="js",xn=Fd,aC="harperdb-config.yaml",oC="defaultConfig.yaml",cC="hdb",Vd=`hdbServer.${xn}`,kd=`customFunctionsServer.${xn}`,xd=`hdbIpcServer.${xn}`,_C=`restartHdb.${xn}`,W_="HarperDB",da="Custom Functions",Sa="Clustering Hub",ha="Clustering Leaf",J_="Clustering Ingest Service",Z_="Clustering Reply Service",uC="foreground.pid",Q_={HDB:W_,IPC:"IPC",CLUSTERING_HUB:Sa,CLUSTERING_LEAF:ha,CLUSTERING_INGEST_SERVICE:J_,CLUSTERING_REPLY_SERVICE:Z_,CUSTOM_FUNCTIONS:da,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",PM2_LOGROTATE:"pm2-logrotate",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},lC={HDB:"hdb.log",IPC:"ipc.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log",CLUSTERING_INGEST_SERVICE:"clustering_ingest_service.log",CLUSTERING_REPLY_SERVICE:"clustering_reply_service.log",CUSTOM_FUNCTIONS:"custom_functions.log",INSTALL:"install.log",CLI:"cli.log",PM2:"pm2.log",CLUSTERING_UPGRADE:"clustering_upgrade.log",JOBS:"jobs.log"},EC={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},dC={harperdb:W_,ipc:"IPC","clustering hub":Sa,"clustering leaf":ha,"clustering ingest service":J_,"clustering reply service":Z_,"custom functions":da,custom_functions:da,"pm2-logrotate":Q_.PM2_LOGROTATE,logrotate:Q_.PM2_LOGROTATE,clustering:"clustering","clustering config":"clustering config"},SC={CLUSTERING_HUB_PROC_DESCRIPTOR:Sa,CLUSTERING_LEAF_PROC_DESCRIPTOR:ha,CLUSTERING_INGEST_PROC_DESCRIPTOR:J_,CLUSTERING_REPLY_SERVICE_DESCRIPTOR:Z_},Ea={HDB:$e.join(Gt,"server/harperdb"),IPC:$e.join(Gt,"server/ipc"),CUSTOM_FUNCTIONS:$e.join(Gt,"server/customFunctions"),CLUSTERING_HUB:$e.join(Gt,"server/nats"),CLUSTERING_LEAF:$e.join(Gt,"server/nats")},hC={HDB:$e.join(Ea.HDB,Vd),IPC:$e.join(Ea.IPC,xd),CUSTOM_FUNCTIONS:$e.join(Ea.CUSTOM_FUNCTIONS,kd)},fC={HDB:$e.join(Gt,"launchServiceScripts/launchHarperDB.js"),CUSTOM_FUNCTIONS:$e.join(Gt,"launchServiceScripts/launchCustomFunctions.js"),NATS_INGEST_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:$e.join(Gt,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:$e.resolve(Gt,"launchServiceScripts/launchUpdateNodes4-0-0.js")},TC={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},$d="support@harperdb.io",mC="customer-success@harperdb.io",Yd=1,RC=4141,Kd="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",AC="https://www.harperdb.io/product",OC=`For support, please submit a request at ${Kd} or contact ${$d}`,Qd=`For license support, please contact ${mC}`,pC="None of the specified records were found.",NC="hash attribute not found",gC=`Your current license only supports ${Yd} role. ${Qd}`,IC="Your current license only supports 3 connections to a node.",CC="127.0.0.1",bC=1,wC=/^\.$/,LC=/^\.\.$/,UC="U+002E",yC=/\//g,DC="U+002F",MC=/U\+002F/g,PC=/^U\+002E$/,BC=/^U\+002EU\+002E$/,vC="d",HC=999999,GC="*",qC="--max-old-space-size=",FC="system",VC="__hdb_hash",kC=".harperdb",xC=".hdb",$C="keys",YC="hdb_boot_properties.file",KC=".updateConfig.json",QC="SIGTSTP",WC=24,JC=6e4,ZC=448,XC="blob",zC="trash",jC="schema",eb="transactions",tb=".count",rb="id",sb="install_log.log",nb="run_log.log",ib="PROCESS_NAME",ab={SETTINGS_PATH_KEY:"settings_path"},Wd=require("lodash"),ob={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},cb={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},_b={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ub={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},lb={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},dt="hdb_internal:",Eb={CREATE_SCHEMA:dt+"create_schema",CREATE_TABLE:dt+"create_table",CREATE_ATTRIBUTE:dt+"create_attribute",ADD_USER:dt+"add_user",ALTER_USER:dt+"alter_user",DROP_USER:dt+"drop_user",HDB_NODES:dt+"hdb_nodes",HDB_USERS:dt+"hdb_users",HDB_WORKERS:dt+"hdb_workers",CATCHUP:dt+"catchup",SCHEMA_CATCHUP:dt+"schema_catchup",WORKER_ROOM:dt+"cluster_workers"},db={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},Sb="060493.ks",hb=".license",fb={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},g={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules"},Tb={CSV:".csv",JSON:".json"},mb={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key"},Rb={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Dr={};Dr[g.CREATE_SCHEMA]=g.CREATE_SCHEMA;Dr[g.CREATE_TABLE]=g.CREATE_TABLE;Dr[g.CREATE_ATTRIBUTE]=g.CREATE_ATTRIBUTE;Dr[g.INSERT]=g.INSERT;Dr[g.UPDATE]=g.UPDATE;Dr[g.UPSERT]=g.UPSERT;Dr[g.DELETE]=g.DELETE;var J=Object.create(null);J[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;J[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;J[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;J[g.READ_LOG]=g.READ_LOG;J[g.ADD_NODE]=g.ADD_NODE;J[g.LIST_USERS]=g.LIST_USERS;J[g.LIST_ROLES]=g.LIST_ROLES;J[g.USER_INFO]=g.USER_INFO;J[g.SQL]=g.SQL;J[g.GET_JOB]=g.GET_JOB;J[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;J[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;J[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;J[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;J[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;J[g.REMOVE_NODE]=g.REMOVE_NODE;J[g.RESTART]=g.RESTART;J[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;J[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;J[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;J[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;J[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;J[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;J[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;J[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;J[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Ab={RUN:"run",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade"},Ob={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Jd={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",IPC_SERVER_PORT:"IPC_SERVER_PORT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},pb=Wd.invert(Jd),f={CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root",HTTP_THREADS:"http_threads",IPC_NETWORK_PORT:"ipc_network_port",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_DATEFORMAT:"logging_rotation_dateFormat",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_RETAIN:"logging_rotation_retain",LOGGING_ROTATION_ROTATE:"logging_rotation_rotate",LOGGING_ROTATION_ROTATEINTERVAL:"logging_rotation_rotateInterval",LOGGING_ROTATION_ROTATEMODULE:"logging_rotation_rotateModule",LOGGING_ROTATION_TIMEZONE:"logging_rotation_timezone",LOGGING_ROTATION_WORKERINTERVAL:"logging_rotation_workerInterval",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync"},Nb={hdb_root_key:f.ROOTPATH,hdb_root:f.ROOTPATH,server_port_key:f.OPERATIONSAPI_NETWORK_PORT,server_port:f.OPERATIONSAPI_NETWORK_PORT,cert_key:f.OPERATIONSAPI_TLS_CERTIFICATE,certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:f.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:f.OPERATIONSAPI_NETWORK_HTTPS,https_on:f.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:f.OPERATIONSAPI_NETWORK_CORS,cors_on:f.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:f.LOGGING_LEVEL,log_level:f.LOGGING_LEVEL,log_path_key:f.LOGGING_ROOT,log_path:f.LOGGING_ROOT,log_daily_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate:f.LOGGING_ROTATION_ROTATE,log_rotate_max_size:f.LOGGING_ROTATION_MAXSIZE,log_rotate_retain:f.LOGGING_ROTATION_RETAIN,log_rotate_compress:f.LOGGING_ROTATION_COMPRESS,log_rotate_date_format:f.LOGGING_ROTATION_DATEFORMAT,log_rotate_rotate_module:f.LOGGING_ROTATION_ROTATEMODULE,log_rotate_worker_interval:f.LOGGING_ROTATION_WORKERINTERVAL,log_rotate_rotate_interval:f.LOGGING_ROTATION_ROTATEINTERVAL,log_rotate_timezone:f.LOGGING_ROTATION_TIMEZONE,props_env_key:f.OPERATIONSAPI_NODEENV,node_env:f.OPERATIONSAPI_NODEENV,clustering_node_name_key:f.CLUSTERING_NODENAME,node_name:f.CLUSTERING_NODENAME,clustering_enabled_key:f.CLUSTERING_ENABLED,clustering:f.CLUSTERING_ENABLED,max_http_threads:f.HTTP_THREADS,max_hdb_processes:f.HTTP_THREADS,server_timeout_key:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:f.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:f.LOGGING_AUDITLOG,disable_transaction_log:f.LOGGING_AUDITLOG,operation_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,ipc_server_port:f.IPC_NETWORK_PORT,custom_functions_enabled_key:f.CUSTOMFUNCTIONS_ENABLED,custom_functions:f.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:f.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:f.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:f.HTTP_THREADS,log_to_file:f.LOGGING_FILE,log_to_stdstreams:f.LOGGING_STDSTREAMS,run_in_foreground:f.OPERATIONSAPI_FOREGROUND,local_studio_on:f.LOCALSTUDIO_ENABLED,clustering_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:f.CLUSTERING_USER,clustering_enabled:f.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:f.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:f.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:f.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:f.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:f.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:f.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_nodename:f.CLUSTERING_NODENAME,clustering_tls_certificate:f.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:f.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:f.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:f.CLUSTERING_TLS_INSECURE,customfunctions_enabled:f.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:f.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:f.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:f.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:f.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:f.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:f.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:f.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:f.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:f.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:f.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:f.CUSTOMFUNCTIONS_NODEENV,http_threads:f.HTTP_THREADS,customfunctions_processes:f.HTTP_THREADS,customfunctions_root:f.CUSTOMFUNCTIONS_ROOT,ipc_network_port:f.IPC_NETWORK_PORT,localstudio_enabled:f.LOCALSTUDIO_ENABLED,logging_file:f.LOGGING_FILE,logging_level:f.LOGGING_LEVEL,logging_root:f.LOGGING_ROOT,logging_rotation_compress:f.LOGGING_ROTATION_COMPRESS,logging_rotation_dateformat:f.LOGGING_ROTATION_DATEFORMAT,logging_rotation_maxsize:f.LOGGING_ROTATION_MAXSIZE,logging_rotation_retain:f.LOGGING_ROTATION_RETAIN,logging_rotation_rotate:f.LOGGING_ROTATION_ROTATE,logging_rotation_rotateinterval:f.LOGGING_ROTATION_ROTATEINTERVAL,logging_rotation_rotatemodule:f.LOGGING_ROTATION_ROTATEMODULE,logging_rotation_timezone:f.LOGGING_ROTATION_TIMEZONE,logging_rotation_workerinterval:f.LOGGING_ROTATION_WORKERINTERVAL,logging_stdstreams:f.LOGGING_STDSTREAMS,logging_auditlog:f.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:f.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:f.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:f.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:f.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:f.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:f.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:f.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:f.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:f.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:f.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_network_timeout:f.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:f.OPERATIONSAPI_NODEENV,operationsapi_root:f.ROOTPATH,rootpath:f.ROOTPATH,storage_writeasync:f.STORAGE_WRITEASYNC,storage_overlappingsync:f.STORAGE_OVERLAPPINGSYNC},gb={csv_file_load:"csv_file_load",csv_data_load:g.CSV_DATA_LOAD,csv_url_load:g.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Ib={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},Cb={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},bb={FILE_SYSTEM:"fs",LMDB:"lmdb"},wb={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},Lb={DEVELOPMENT:8192,DEFAULT:512},Ub={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},yb={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Db={ENOENT:"ENOENT",EACCES:"EACCES"},Zd={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Mb="__clustering__",Pb=Object.values(Zd),Bb=15984864e5,Xd={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},vb=Wd.invert(Xd),Hb={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Gb=111,qb=`\r
|
|
2
2
|
`,Fb={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Vb=["*","%"],kb="unauthorized_access",xb="func_val",$b={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Yb={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Kb="hdb_ipc_server",Qb="hdb_ipc_client_",Wb={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"},Jb={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Zb={STOPPED:"stopped",ONLINE:"online"},Xb="3.x.x";zd.exports={LOCAL_HARPERDB_OPERATIONS:J,HDB_SUPPORT_ADDRESS:$d,HDB_SUPPORT_URL:Kd,HDB_PRICING_URL:AC,SUPPORT_HELP_MSG:OC,LICENSE_HELP_MSG:Qd,HDB_PROC_NAME:Vd,HDB_PROC_DESCRIPTOR:W_,CLUSTERING_LEAF_PROC_DESCRIPTOR:ha,CLUSTERING_HUB_PROC_DESCRIPTOR:Sa,SYSTEM_SCHEMA_NAME:FC,HASH_FOLDER_NAME:VC,HDB_HOME_DIR_NAME:kC,UPDATE_FILE_NAME:KC,LICENSE_KEY_DIR_NAME:$C,BOOT_PROPS_FILE_NAME:YC,JOB_TYPE_ENUM:gb,JOB_STATUS_ENUM:fb,SYSTEM_TABLE_NAMES:ub,SYSTEM_TABLE_HASH_ATTRIBUTES:lb,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:Tb,S3_BUCKET_AUTH_KEYS:mb,VALID_SQL_OPS_ENUM:Rb,GEO_CONVERSION_ENUM:Ob,HDB_SETTINGS_NAMES:Jd,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:pb,SERVICE_ACTIONS_ENUM:Ab,CLUSTER_MESSAGE_TYPE_ENUM:Ib,CLUSTER_CONNECTION_DIRECTION_ENUM:Cb,CLUSTER_EVENTS_DEFS_ENUM:Ub,PERIOD_REGEX:wC,DOUBLE_PERIOD_REGEX:LC,UNICODE_PERIOD:UC,FORWARD_SLASH_REGEX:yC,UNICODE_FORWARD_SLASH:DC,ESCAPED_FORWARD_SLASH_REGEX:MC,ESCAPED_PERIOD_REGEX:PC,ESCAPED_DOUBLE_PERIOD_REGEX:BC,REG_KEY_FILE_NAME:Sb,RESTART_TIMEOUT_MS:JC,HDB_FILE_PERMISSIONS:ZC,SCHEMA_DIR_NAME:jC,TRANSACTIONS_DIR_NAME:eb,LIMIT_COUNT_NAME:tb,ID_ATTRIBUTE_STRING:rb,INSERT_MODULE_ENUM:cb,UPGRADE_JSON_FIELD_NAMES_ENUM:_b,RESTART_CODE:QC,RESTART_CODE_NUM:WC,CLUSTER_OPERATIONS:Dr,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:db,HDB_INTERNAL_SC_CHANNEL_PREFIX:dt,INTERNAL_SC_CHANNELS:Eb,CLUSTERING_MESSAGE_TYPES:Hb,HDB_FILE_SUFFIX:xC,BLOB_FOLDER_NAME:XC,HDB_TRASH_DIR:zC,ORIGINATOR_SET_VALUE:Gb,LICENSE_VALUES:wb,RAM_ALLOCATION_ENUM:Lb,STORAGE_TYPES_ENUM:bb,TIME_STAMP_NAMES_ENUM:Zd,TIME_STAMP_NAMES:Pb,PERMS_UPDATE_RELEASE_TIMESTAMP:Bb,SEARCH_NOT_FOUND_MESSAGE:pC,SEARCH_ATTRIBUTE_NOT_FOUND:NC,LICENSE_ROLE_DENIED_RESPONSE:gC,LICENSE_MAX_CONNS_REACHED:IC,BASIC_LICENSE_MAX_NON_CU_ROLES:Yd,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:RC,VALUE_SEARCH_COMPARATORS:Xd,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:vb,LICENSE_FILE_NAME:hb,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:yb,NEW_LINE:qb,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:bC,MOMENT_DAYS_TAG:vC,API_TURNOVER_SEC:HC,LOOPBACK:CC,CODE_EXTENSION:xn,WILDCARD_SEARCH_VALUE:GC,NODE_ERROR_CODES:Db,JAVASCRIPT_EXTENSION:Fd,PERMS_CRUD_ENUM:Fb,UNAUTHORIZED_PERMISSION_NAME:kb,SEARCH_WILDCARDS:Vb,FUNC_VAL:xb,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:$b,JWT_ENUM:Yb,CLUSTERING_FLAG:Mb,RUN_LOG:nb,INSTALL_LOG:sb,IPC_SERVER_MODULE:xd,HDB_IPC_SERVER:Kb,IPC_EVENT_TYPES:Wb,HDB_IPC_CLIENT_PREFIX:Qb,CUSTOM_FUNCTION_PROC_NAME:kd,CUSTOM_FUNCTION_PROC_DESCRIPTOR:da,SERVICES:Jb,MEM_SETTING_KEY:qC,HDB_RESTART_SCRIPT:_C,PROCESS_DESCRIPTORS:Q_,SERVICE_SERVERS:hC,SERVICE_SERVERS_CWD:Ea,PROCESS_DESCRIPTORS_VALIDATE:dC,LAUNCH_SERVICE_SCRIPTS:fC,LOG_LEVELS:EC,PROCESS_NAME_ENV_PROP:ib,PROCESS_LOG_NAMES:lC,PM2_PROCESS_STATUSES:Zb,CONFIG_PARAM_MAP:Nb,CONFIG_PARAMS:f,HDB_CONFIG_FILE:aC,HDB_DEFAULT_CONFIG_FILE:oC,ROLE_TYPES_ENUM:TC,BOOT_PROP_PARAMS:ab,INSTALL_PROMPTS:ob,HDB_ROOT_DIR_NAME:cC,CLUSTERING_PROCESSES:SC,FOREGROUND_PID_FILE:uC,PACKAGE_ROOT:Gt,PRE_4_0_0_VERSION:Xb}});var X_=h((t1,tS)=>{"use strict";var jd=require("minimist");tS.exports=zb;function zb(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=eS(process.env),s=eS(jd(process.argv))):(r=process.env,s=jd(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(zb,"assignCMDENVVariables");function eS(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(eS,"objKeysToLowerCase")});var I=h((r1,cS)=>{"use strict";var ss=require("fs-extra"),ns=require("path"),sS=require("yaml"),nS=require("properties-reader"),me=T(),jb=X_(),ew=require("os"),{PACKAGE_ROOT:eu}=T(),tt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},fa=ns.join(eu,"logs"),Mr=process.env.pm_id===void 0,tw=ns.join(eu,"config/yaml/",me.HDB_DEFAULT_CONFIG_FILE),tu=process.env.PROCESS_NAME===void 0?me.PROCESS_DESCRIPTORS.INSTALL:process.env.PROCESS_NAME,ks,Zt,lr,et,z_,xs;xs===void 0&&iS();cS.exports={createLogFile:rw,notify:iw,fatal:aw,error:j_,warn:ow,info:sw,debug:nw,trace:oS,setLogLevel:_w,log_level:et};function iS(){try{if(xs===void 0){let e=cw();xs=nS(e),{level:et,config_log_path:z_,to_file:Zt,to_stream:lr}=uw(xs.get("settings_path"))}}catch(e){if(xs=void 0,e.code===me.NODE_ERROR_CODES.ENOENT){let t=jb(Object.keys(me.CONFIG_PARAM_MAP),!0);for(let i in t){let o=me.CONFIG_PARAM_MAP[i];o&&o.toLowerCase();let c=t[i];if(o===me.CONFIG_PARAMS.LOGGING_LEVEL){et=c;continue}if(o===me.CONFIG_PARAMS.LOGGING_STDSTREAMS){lr=c;continue}o===me.CONFIG_PARAMS.LOGGING_FILE&&(Zt=o)}let{default_level:r,default_to_file:s,default_to_stream:n}=lw();Zt=Zt===void 0?s:Zt,Zt=rS(Zt),lr=lr===void 0?n:lr,lr=rS(lr),et=et===void 0?r:et,z_=fa;return}throw j_("Error initializing log settings"),j_(e),e}}a(iS,"initLogSettings");function rw(e,t){if(!Mr){oS("createLogFile should only be used if the process is not being managed by pm2");return}xs===void 0&&iS(),tu=t;let r;e===me.PROCESS_LOG_NAMES.INSTALL?r=fa:r=z_,Zt&&(ks=ns.join(r,e),ss.ensureFileSync(ks))}a(rw,"createLogFile");function is(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1;for(let o=0;o<n;o++){let c=t[o];c instanceof Error&&c.stack?s+=c.stack:typeof c=="object"?s+=JSON.stringify(c):s+=c,o<i&&(s+=" ")}return`{"process_name": "${tu}", "level": "${e}", "timestamp": "${r}", "message": "${s}"}
|
|
3
3
|
`}a(is,"createLogRecord");function aS(e){ks===void 0&&(tu=me.PROCESS_DESCRIPTORS.INSTALL,ss.ensureDirSync(fa),ks=ns.join(fa,me.PROCESS_LOG_NAMES.INSTALL),ss.ensureFileSync(ks)),ss.appendFileSync(ks,e)}a(aS,"writeToLogFile");function Ta(e){Zt&&aS(e),lr&&process.stdout.write(e)}a(Ta,"nonPm2LogStdOut");function ru(e){Zt&&aS(e),lr&&process.stderr.write(e)}a(ru,"nonPm2LogStdErr");function sw(...e){if(tt[et]<=tt.info){let t=is("info",e);if(Mr){Ta(t);return}process.stdout.write(t)}}a(sw,"info");function oS(...e){if(tt[et]<=tt.trace){let t=is("trace",e);if(Mr){Ta(t);return}process.stdout.write(t)}}a(oS,"trace");function j_(...e){if(tt[et]<=tt.error){let t=is("error",e);if(Mr){ru(t);return}process.stderr.write(t)}}a(j_,"error");function nw(...e){if(tt[et]<=tt.debug){let t=is("debug",e);if(Mr){Ta(t);return}process.stdout.write(t)}}a(nw,"debug");function iw(...e){if(tt[et]<=tt.notify){let t=is("notify",e);if(Mr){Ta(t);return}process.stdout.write(t)}}a(iw,"notify");function aw(...e){if(tt[et]<=tt.fatal){let t=is("fatal",e);if(Mr){ru(t);return}process.stderr.write(t)}}a(aw,"fatal");function ow(...e){if(tt[et]<=tt.warn){let t=is("warn",e);if(Mr){ru(t);return}process.stderr.write(t)}}a(ow,"warn");function cw(){let e;try{e=ew.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ns.join(e,me.HDB_HOME_DIR_NAME,me.BOOT_PROPS_FILE_NAME);return ss.existsSync(t)||(t=ns.join(eu,"utility/hdb_boot_properties.file")),t}a(cw,"getPropsFilePath");function _w(e){et=e}a(_w,"setLogLevel");function rS(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(rS,"autoCastBoolean");function uw(e){try{if(e.includes("config/settings.js")){let o=nS(e);return{level:o.get(me.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ns.dirname(o.get(me.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(me.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=sS.parseDocument(ss.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===me.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(uw,"getLogConfig");function lw(){try{let e=sS.parseDocument(ss.readFileSync(tw,"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(lw,"getDefaultConfig")});var uS=h((s1,_S)=>{"use strict";var Ew=require("util"),dw=require("path"),Sw=require("child_process"),hw=Ew.promisify(Sw.execFile),fw=1e3*1e3*10;_S.exports={findPs:Tw};async function Tw(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await hw("ps",["wwxo",`pid,${r}`],{maxBuffer:fw});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:dw.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Tw,"findPs")});var Ye=h((n1,ES)=>{"use strict";var mw="__dbis__",Rw="__environment_name__",Aw="__dbi_defintion__",Ow={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},pw=["__createdtime__","__updatedtime__"],Nw="\uFFFF",lS={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},gw=Object.values(lS);ES.exports={INTERNAL_DBIS_NAME:mw,DBI_DEFINITION_NAME:Aw,SEARCH_TYPES:Ow,TIMESTAMP_NAMES:pw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Rw,TRANSACTIONS_DBI_NAMES_ENUM:lS,TRANSACTIONS_DBIS:gw,OVERFLOW_MARKER:Nw}});var rt=h((i1,OS)=>{"use strict";var dS=T(),SS=Ye(),hS={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},fS=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),TS={500:fS("There was an error processing your request."),400:"Invalid request"},Iw=TS[hS.INTERNAL_SERVER_ERROR],Cw={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},bw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ww={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Lw={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ARRAY:"ids must be an array",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${SS.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${SS.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Uw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dS.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 ${dS.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"},mS={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},yw={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},Dw={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},Mw={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},Pw={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Bw={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},RS={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.`},AS={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},vw={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},Hw={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Gw={...mS,...ww,...Cw,...yw,...Dw,...Mw,...Pw,...Bw,...Uw,...RS,...AS,...vw,...Hw,...bw};OS.exports={CHECK_LOGS_WRAPPER:fS,HDB_ERROR_MSGS:Gw,DEFAULT_ERROR_MSGS:TS,DEFAULT_ERROR_RESP:Iw,HTTP_STATUS_CODES:hS,LMDB_ERRORS_ENUM:Lw,AUTHENTICATION_ERROR_MSGS:mS,VALIDATION_ERROR_MSGS:RS,IPC_ERRORS:AS}});var D=h((a1,gS)=>{"use strict";var $s=rt(),qw=I(),Fw=T(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,pS),this.http_resp_code=s||$s.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($s.DEFAULT_ERROR_MSGS[s]?$s.DEFAULT_ERROR_MSGS[s]:$s.DEFAULT_ERROR_MSGS[$s.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&qw[n](i)}};a($n,"HdbError");function pS(e,t,r,s=Fw.LOG_LEVELS.ERROR,n=null,i=!1){if(NS(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(pS,"handleHDBError");function NS(e){return e.__proto__.constructor.name===$n.name}a(NS,"isHDBError");gS.exports={isHDBError:NS,handleHDBError:pS,hdb_errors:$s}});var C=h((c1,qS)=>{"use strict";var su=require("path"),Vw=require("fs-extra"),Ie=I(),IS=require("fs-extra"),kw=require("truncate-utf8-bytes"),Yn=require("os"),xw=require("net"),$w=require("recursive-iterator"),Ue=T(),US=uS(),CS=require("papaparse"),ma=require("moment"),{inspect:Yw}=require("util"),bS=require("is-number"),o1=require("lodash"),{hdb_errors:Ra}=D(),yS=require("util").promisify(setTimeout),Kw=100,Qw=5,Ww="",Jw=4,wS=255,LS={true:!0,false:!1,undefined:null,null:null,NaN:NaN};qS.exports={isEmpty:St,isEmptyOrZeroLength:Xt,arrayHasEmptyValues:zw,arrayHasEmptyOrZeroLengthValues:jw,buildFolderPath:eL,isBoolean:DS,errorizeMessage:Zw,stripFileExtension:rL,autoCast:sL,autoCastJSONDeep:nu,removeDir:iL,compareVersions:aL,isCompatibleDataVersion:oL,escapeRawValue:PS,unescapeValue:cL,stringifyProps:_L,valueConverter:uL,timeoutPromise:EL,isClusterOperation:SL,getClusterUser:TL,sendTransactionToSocketCluster:hL,checkGlobalSchemaTable:fL,getHomeDir:BS,getPropsFilePath:lL,promisifyPapaParse:mL,removeBOM:vS,createEventPromise:RL,checkProcessRunning:AL,checkSchemaTableExist:OL,checkSchemaExists:HS,checkTableExists:GS,getStartOfTomorrowInSeconds:pL,getLimitKey:NL,isObject:tL,isNotEmptyAndHasValue:Xw,autoCasterIsNumberCheck:MS,backtickASTSchemaItems:gL,isPortTaken:dL,stopProcess:IL,createForkArgs:CL,autoCastBoolean:bL,async_set_timeout:yS,getTableHashAttribute:wL,doesSchemaExist:LL,doesTableExist:UL,stringifyObj:yL,ms_to_time:DL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function Zw(e){return e instanceof Error?e:new Error(e)}a(Zw,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function Xw(e){return!St(e)&&(e||e===0||e===""||DS(e))}a(Xw,"isNotEmptyAndHasValue");function Xt(e){return St(e)||e.length===0||e.size===0}a(Xt,"isEmptyOrZeroLength");function zw(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(zw,"arrayHasEmptyValues");function jw(e){if(Xt(e))return!0;for(let t=0;t<e.length;t++)if(Xt(e[t]))return!0;return!1}a(jw,"arrayHasEmptyOrZeroLengthValues");function eL(...e){try{return e.join(su.sep)}catch{console.error(e)}}a(eL,"buildFolderPath");function DS(e){return St(e)?!1:e===!0||e===!1}a(DS,"isBoolean");function tL(e){return St(e)?!1:typeof e=="object"}a(tL,"isObject");function rL(e){return Xt(e)?Ww:e.slice(0,-Jw)}a(rL,"stripFileExtension");function sL(e){return St(e)||e===""||typeof e!="string"?e:LS[e]!==void 0?LS[e]:MS(e)===!0?Number(e):e}a(sL,"autoCast");function nL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(nL,"autoCastJSON");function nu(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=nu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=nu(r);s!==r&&(e[t]=s)}return e}else return nL(e)}a(nu,"autoCastJSONDeep");function MS(e){if(e.startsWith("0.")&&bS(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&bS(e))}a(MS,"autoCasterIsNumberCheck");async function iL(e){if(Xt(e))throw new Error(`Directory path: ${e} does not exist`);try{await IS.emptyDir(e),await IS.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(iL,"removeDir");function aL(e,t){if(Xt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Xt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(aL,"compareVersions");function oL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(oL,"isCompatibleDataVersion");function PS(e){if(St(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(PS,"escapeRawValue");function cL(e){if(St(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(cL,"unescapeValue");function _L(e,t){if(St(e))return Ie.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Yn.EOL}!Xt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:Xt(s)||(r+=s+"="+n+Yn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(_L,"stringifyProps");function uL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(PS(t)),s=Buffer.byteLength(r)>wS?kw(r,wS)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(uL,"valueConverter");function BS(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(BS,"getHomeDir");function lL(){let e=su.join(BS(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return Vw.existsSync(e)||(e=su.join(__dirname,"../","hdb_boot_properties.file")),e}a(lL,"getPropsFilePath");function EL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(EL,"timeoutPromise");async function dL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=xw.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(dL,"isPortTaken");function SL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(SL,"isClusterOperation");function hL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(hL,"sendTransactionToSocketCluster");function fL(e,t){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(fL,"checkGlobalSchemaTable");function TL(e,t){if(St(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(e)||Xt(e)){Ie.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(TL,"getClusterUser");function mL(){CS.parsePromise=function(e,t){return new Promise(function(r,s){CS.parse(e,{header:!0,transformHeader:vS,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(mL,"promisifyPapaParse");function vS(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vS,"removeBOM");function RL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${Yw(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(RL,"createEventPromise");async function AL(e){let t=!0,r=0;do await yS(Kw*r++),(await US.findPs(e)).length>0&&(t=!1);while(t&&r<Qw);if(t)throw new Error(`process ${e} was not started`)}a(AL,"checkProcessRunning");function OL(e,t){let r=HS(e);if(r)return r;let s=GS(e,t);if(s)return s}a(OL,"checkSchemaTableExist");function HS(e){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HS,"checkSchemaExists");function GS(e,t){if(!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GS,"checkTableExists");function pL(){let e=ma().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=ma().utc().unix();return e-t}a(pL,"getStartOfTomorrowInSeconds");function NL(){return ma().utc().format("DD-MM-YYYY")}a(NL,"getLimitKey");function gL(e){try{let t=new $w(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(gL,"backtickASTSchemaItems");async function IL(e){let t=Yn.userInfo();(await US.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(IL,"stopProcess");function CL(e){return[e]}a(CL,"createForkArgs");function bL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(bL,"autoCastBoolean");function wL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(wL,"getTableHashAttribute");function LL(e){return global?.hdb_schema?.[e]!==void 0}a(LL,"doesSchemaExist");function UL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(UL,"doesTableExist");function yL(e){try{return JSON.stringify(e)}catch{return e}}a(yL,"stringifyObj");function DL(e){let t=ma.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(DL,"ms_to_time")});var as=h((_1,ML)=>{ML.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var zS=h((l1,XS)=>{"use strict";var iu=require("recursive-iterator"),PL=require("alasql"),au=require("clone"),FS=C(),{handleHDBError:VS,hdb_errors:BL}=D(),{HDB_ERROR_MSGS:kS,HTTP_STATUS_CODES:xS}=BL,vL=["DISTINCT_ARRAY"],$S=Symbol("validateTables"),ou=Symbol("validateTable"),u1=Symbol("getAllColumns"),YS=Symbol("validateAllColumns"),Aa=Symbol("findColumn"),KS=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),cu=Symbol("validateColumn"),QS=Symbol("setColumnsForTable"),WS=Symbol("checkColumnsForAsterisk"),JS=Symbol("validateGroupBy"),ZS=Symbol("hasColumns"),Oa=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$S](),this[WS](),this[YS]()}[$S](){if(this[ZS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ou](t.table)})}}[ZS](){let t=!1,r=new iu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw VS(new Error,kS.SCHEMA_NOT_FOUND(t.databaseid),xS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw VS(new Error,kS.TABLE_NOT_FOUND(t.databaseid,t.tableid),xS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=au(s);n.table=au(t),this.attributes.push(n)})}[Aa](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[WS](){let t=new iu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[QS](r.tableid)}[QS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new PL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YS](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[JS](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new iu(t),n=[];for(let{node:i,path:o}of s)!FS.isEmpty(i)&&!FS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KS](i):n.push(this[cu](i)));return n}[JS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&vL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=au(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Aa](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Aa](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KS](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[cu](t)}[cu](t){let r=this[Aa](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Oa,"SelectValidator");XS.exports=Oa});var _u=h((E1,jS)=>{"use strict";var pa=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(pa,"BridgeMethods");jS.exports=pa});var os=h((h1,sh)=>{"use strict";var eh=rt().LMDB_ERRORS_ENUM,d1=require("lmdb"),HL=Ye(),S1=require("buffer").Buffer,GL=require("microtime"),{OVERFLOW_MARKER:th,MAX_SEARCH_KEY_LENGTH:Na}=HL,rh=["number","string","symbol","boolean","bigint"];function qL(e){if(!e)throw new Error(eh.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(eh.INVALID_ENVIRONMENT)}a(qL,"validateEnv");function FL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(FL,"stringifyData");function VL(e){return e instanceof Date?e.valueOf():e}a(VL,"convertKeyValueToWrite");function kL(e){if(e==null)return;if(rh.includes(typeof e))return e.length>Na?[e.slice(0,Na)+th]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];rh.includes(typeof n)&&(n.length>Na?t.push(n.slice(0,Na)+th):t.push(n))}}return t}a(kL,"getIndexedValues");function xL(){let e=GL.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(xL,"getMicroTime");sh.exports={validateEnv:qL,stringifyData:FL,convertKeyValueToWrite:VL,getMicroTime:xL,getIndexedValues:kL}});var ih=h((f1,nh)=>{"use strict";var ga=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ga,"DBIDefinition");nh.exports=ga});var oh=h((T1,ah)=>{"use strict";var Ia=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ia,"OpenDBIObject");ah.exports=Ia});var _h=h((m1,ch)=>{"use strict";var Ca=class{constructor(t,r,s,n,i=!1,o=!1,c=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,c!==void 0&&(this.overlappingSync=c)}};a(Ca,"OpenEnvironmentObject");ch.exports=Ca});var lh=h((R1,uh)=>{"use strict";var $L={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},YL="certificate.pem",KL="privateKey.pem",QL="ca.pem";uh.exports={CERTIFICATE_VALUES:$L,CERTIFICATE_PEM_NAME:YL,PRIVATEKEY_PEM_NAME:KL,CA_PEM_NAME:QL}});var Ee=h((A1,Eh)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Eh.exports={validateObject:WL,validateObjectAsync:JL,validateBySchema:ZL};function WL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(WL,"validateObject");async function JL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(JL,"validateObjectAsync");function ZL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ZL,"validateBySchema")});var lu=h((O1,Sh)=>{"use strict";var XL=require("fs-extra"),F=require("joi"),zL=require("os"),{boolean:ye,string:dr,number:zt,array:uu}=F.types(),qt=require("path"),jL=I(),ba=C(),Sr=lh(),eU=Ee(),Er="keys",tU=Sr.CERTIFICATE_PEM_NAME,rU=Sr.PRIVATEKEY_PEM_NAME,sU=Sr.CA_PEM_NAME,nU=Sr.CERTIFICATE_PEM_NAME,iU=Sr.PRIVATEKEY_PEM_NAME,aU=Sr.CA_PEM_NAME,oU=Sr.CERTIFICATE_PEM_NAME,cU=Sr.PRIVATEKEY_PEM_NAME,_U=Sr.CA_PEM_NAME,uU="log",lU="custom_functions",EU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SU="rootPath config parameter is undefined",hU="clustering.enabled config parameter is undefined",Pr=zt.min(0).required(),wa=uu.items({host:dr.required(),port:Pr}).empty(null),nt;Sh.exports={configValidator:fU,routesValidator:OU,route_constraints:wa};function fU(e){if(nt=e.rootPath,ba.isEmpty(nt))throw SU;let t=ye.required(),r=F.valid("production","development").required(),s=zt.min(1).max(1e3).empty(null).default(AU),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dh),i=F.custom(mU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(dh),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(ba.isEmpty(c))throw hU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Pr,routes:wa}).required()}).required(),leafNodes:F.object({network:F.object({port:Pr}).required()}).required(),network:F.object({port:Pr}).required()}).required(),leafServer:F.object({network:F.object({port:Pr,routes:wa}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Pr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:dr.required(),maxSize:dr.custom(RU).required(),retain:zt.min(0).required(),rotate:ye.required(),rotateInterval:dr.required(),rotateModule:ye.required(),timezone:dr.required(),workerInterval:zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fU,"configValidator");function TU(e){return XL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(TU,"doesPathExist");function mU(e,t){F.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=TU(e);if(r)return t.message(r)}a(mU,"validatePemFile");function RU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(dU)}a(RU,"validateRotationMaxSize");function AU(e,t){let r=t.state.path.join("."),s=zL.cpus().length,n=s-1;return n===1&&s===2&&(n=s),jL.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(AU,"setDefaultThreads");function dh(e,t){if(!ba.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ba.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return qt.join(nt,lU);case"logging.root":return qt.join(nt,uU);case"operationsApi.tls.certificate":return qt.join(nt,Er,tU);case"operationsApi.tls.privateKey":return qt.join(nt,Er,rU);case"operationsApi.tls.certificateAuthority":return qt.join(nt,Er,sU);case"customFunctions.tls.certificate":return qt.join(nt,Er,nU);case"customFunctions.tls.privateKey":return qt.join(nt,Er,iU);case"customFunctions.tls.certificateAuthority":return qt.join(nt,Er,aU);case"clustering.tls.certificate":return qt.join(nt,Er,oU);case"clustering.tls.privateKey":return qt.join(nt,Er,cU);case"clustering.tls.certificateAuthority":return qt.join(nt,Er,_U);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(dh,"setDefaultRoot");function OU(e){let t=F.object({routes:wa});return eU.validateBySchema({routes:e},t)}a(OU,"routesValidator")});var hr=h((p1,Oh)=>{"use strict";var re=T(),It=C(),Ke=I(),{configValidator:pU,routesValidator:hh}=lu(),Ft=require("fs-extra"),NU=require("yaml"),Ys=require("path"),gU=require("is-number"),ya=require("properties-reader"),IU=require("lodash"),{handleHDBError:CU}=D(),{HTTP_STATUS_CODES:bU,HDB_ERROR_MSGS:La}=rt(),{PACKAGE_ROOT:wU}=T(),LU="Unable to get config value because config is uninitialized",UU="Config successfully initialized",yU="Error backing up config file",DU="Empty parameter sent to getConfigValue",fh=Ys.join(wU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),MU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ua,it;Oh.exports={createConfigFile:PU,getDefaultConfig:BU,getConfigValue:Th,initConfig:mh,flattenConfig:cs,updateConfigValue:Rh,updateConfigObject:vU,getConfiguration:HU,setConfiguration:GU,readConfigFile:Su,getClusteringRoutes:qU,initOldConfig:Ah,getConfigFromFile:FU};function PU(e){let t=Ks(fh);Ua=cs(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=Eu(o,e[i]);try{t.setIn([...c],_)}catch(u){Ke.error(u)}}}du(t);let r=t.toJSON();it=cs(r);let s=t.getIn(["rootPath"]),n=Ys.join(s,re.HDB_CONFIG_FILE);Ft.createFileSync(n),Ft.writeFileSync(n,String(t)),Ke.trace(`Config file written to ${n}`)}a(PU,"createConfigFile");function BU(e){if(Ua===void 0){let r=Ks(fh);Ua=cs(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ua[t.toLowerCase()]}a(BU,"getDefaultConfig");function Th(e){if(It.isEmpty(e)){Ke.error(DU);return}if(it===void 0){Ke.trace(LU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(Th,"getConfigValue");function mh(e=!1){if(it===void 0||e){let t=It.getPropsFilePath();try{Ft.accessSync(t,Ft.constants.F_OK|Ft.constants.R_OK)}catch(o){throw Ke.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ya(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Ah(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Ks(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Ke.trace(`HarperDB config file not found at ${s}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}du(n);let i=n.toJSON();it=cs(i),Ke.trace(UU)}}a(mh,"initConfig");function du(e){let t=e.toJSON(),r=pU(t);if(r.error)throw La.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(du,"validateConfig");function vU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(vU,"updateConfigObject");function Rh(e,t,r=void 0,s=!1,n=!1){it===void 0&&mh();let i=Th(re.CONFIG_PARAM_MAP.hdb_root),o=Ys.join(i,re.HDB_CONFIG_FILE),c=Ks(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=Eu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=Eu(E,r[l]);try{c.setIn([...d],S)}catch(m){Ke.error(m)}}}du(c);let _=c.getIn(["rootPath"]),u=Ys.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ys.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Ft.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(yU),Ke.error(l)}Ft.writeFileSync(u,String(c)),n&&(it=cs(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Rh,"updateConfigValue");function cs(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=cs(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(cs,"flattenConfig");function Eu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(gU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return It.autoCast(t)}a(Eu,"castConfigValue");function HU(){let e=It.getPropsFilePath(),r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(HU,"getConfiguration");async function GU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Rh(void 0,void 0,n,!0),MU}catch(i){throw typeof i=="string"||i instanceof String?CU(i,i,bU.BAD_REQUEST,void 0,void 0,!0):i}}a(GU,"setConfiguration");function Su(){let e=It.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(Su,"readConfigFile");function Ks(e){return NU.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ks,"parseYamlDoc");function qU(){let e=Su(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=hh(t);if(r)throw La.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=hh(s);if(n)throw La.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw La.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(qU,"getClusteringRoutes");function Ah(e){let t=ya(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?it[n]=Ys.dirname(s):it[n]=s}return it}a(Ah,"initOldConfig");function FU(e){let t=Su();return IU.get(t,e.replaceAll("_","."))}a(FU,"getConfigFromFile")});var Y=h((N1,Nh)=>{"use strict";var hu=require("fs-extra"),jt=require("path"),VU=require("os"),kU=require("properties-reader"),Qn=I(),Qs=C(),M=T(),Da=hr(),xU="Error initializing environment manager",Ma="BOOT_PROPS_FILE_PATH",ph=!1,$U={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},fr={};Nh.exports={BOOT_PROPS_FILE_PATH:Ma,getHdbBasePath:YU,setHdbBasePath:KU,get:QU,initSync:JU,setProperty:$,initTestEnvironment:ZU};function YU(){return fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(YU,"getHdbBasePath");function KU(e){fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(KU,"setHdbBasePath");function QU(e){let t=Da.getConfigValue(e);return t===void 0?fr[e]:t}a(QU,"get");function $(e,t){$U[e]&&(fr[e]=t),Da.updateConfigObject(e,t)}a($,"setProperty");function WU(){let e;try{e=Qs.getPropsFilePath(),hu.accessSync(e,hu.constants.F_OK|hu.constants.R_OK),ph=!0;let t=kU(e);return fr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),fr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),fr[Ma]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(WU,"doesPropFileExist");function JU(e=!1){try{(ph||WU())&&(Da.initConfig(e),fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Da.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(xU),Qn.error(t),console.error(t),process.exit(1)}}a(JU,"initSync");function ZU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");fr[Ma]=jt.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,VU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),$(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),$(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),$(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Qs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Qs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Qs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Qs.isEmpty(i)?!1:i),$(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),$(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),$(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Qs.isEmpty(c)?!1:c),o&&($("CORS_ACCESSLIST",o),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&($(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&($(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&($(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ma}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(ZU,"initTestEnvironment")});var z=h((I1,Bh)=>{"use strict";var fu=require("lmdb"),Ct=require("fs-extra"),Vt=require("path"),Ba=os(),gh=I(),De=rt().LMDB_ERRORS_ENUM,va=ih(),Tu=oh(),Ih=_h(),Br=Ye(),g1=T(),Wn=Y();Wn.initSync();var Ch=Wn.get("STORAGE_WRITEASYNC")===!0||Wn.get("STORAGE_WRITEASYNC")==="true"||Wn.get("STORAGE_WRITEASYNC")==="TRUE",bh=Wn.get("STORAGE_OVERLAPPINGSYNC"),wh=1024*1024*1024,Lh=1e4,Uh=1e3,kt=Br.INTERNAL_DBIS_NAME,yh=Br.DBI_DEFINITION_NAME,XU="data.mdb",zU="lock.mdb",Jn=".mdb",jU="-lock",Pa=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new fu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Pa,"TransactionCursor");function mu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(mu,"pathEnvNameValidation");async function Ru(e,t,r=!0){try{await Ct.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Vt.join(e,t+Jn);return await Ct.access(s,Ct.constants.R_OK|Ct.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ct.access(Vt.join(e,t,XU),Ct.constants.R_OK|Ct.constants.F_OK),Vt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ru,"validateEnvironmentPath");function Ha(e,t){if(Ba.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ha,"validateEnvDBIName");async function ey(e,t,r=!1,s=!1){mu(e,t),t=t.toString();try{return await Ru(e,t,s),Au(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Vt.join(e,t);await Ct.mkdirp(s?i:e);let o=new Ih(s?i:i+Jn,wh,Lh,Uh,!1,Ch,bh),c=fu.open(o);c.dbis=Object.create(null);let _=new Tu(!1);c.openDB(kt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ou(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ey,"createEnvironment");async function ty(e,t,r,s=!0){let n=await Au(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(Vt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(ty,"copyEnvironment");async function Au(e,t,r=!1){mu(e,t),t=t.toString();let s=Ou(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Ru(e,t),i=Vt.join(e,t+Jn),o=n!=i,c=new Ih(n,wh,Lh,Uh,o,Ch,bh),_=fu.open(c);_.dbis=Object.create(null);let u=Mh(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Au,"openEnvironment");async function ry(e,t,r=!1){mu(e,t),t=t.toString();let s=Vt.join(e,t+Jn),n=await Ru(e,t);if(global.lmdb_map!==void 0){let i=Ou(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Dh(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+jU:Vt.join(Vt.dirname(n),zU))}a(ry,"deleteEnvironment");async function Dh(e){Ba.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Dh,"closeEnvironment");function Ou(e,t,r=!1){let n=`${Vt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ou,"getCachedEnvironmentName");function sy(e){Ba.validateEnv(e);let t=Object.create(null),r=bt(e,kt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==kt)try{t[s]=Object.assign(new va,n)}catch{gh.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(sy,"listDBIDefinitions");function Mh(e){Ba.validateEnv(e);let t=[],r=bt(e,kt);for(let{key:s}of r.getRange({start:!1}))s!==kt&&t.push(s);return t}a(Mh,"listDBIs");function ny(e,t){let s=bt(e,kt).getEntry(t),n=new va;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{gh.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ny,"getDBIDefinition");function Ph(e,t,r,s=!1){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Tu(r,s===!0),o=e.openDB(t,i),c=new va(r===!0,s);return o[yh]=c,bt(e,kt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Ph,"createDBI");function bt(e,t){if(Ha(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==kt?r=ny(e,t):r=new va,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Tu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(De.DBI_DOES_NOT_EXIST):n}return s[yh]=r,e.dbis[t]=s,s}a(bt,"openDBI");function iy(e,t){Ha(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(iy,"statDBI");async function ay(e,t){try{let r=Vt.join(e,t+Jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(ay,"environmentDataSize");function oy(e,t){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,kt).removeSync(t)}a(oy,"dropDBI");function cy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)Ph(e,n,n!==t,n===t);else throw i}}}a(cy,"initializeDBIs");Bh.exports={openDBI:bt,openEnvironment:Au,createEnvironment:ey,listDBIs:Mh,listDBIDefinitions:sy,createDBI:Ph,dropDBI:oy,statDBI:iy,deleteEnvironment:ry,initializeDBIs:cy,TransactionCursor:Pa,environmentDataSize:ay,copyEnvironment:ty,closeEnvironment:Dh}});var Hh=h((C1,vh)=>{"use strict";var Ga=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Ga,"InsertRecordsResponseObject");vh.exports=Ga});var qh=h((b1,Gh)=>{"use strict";var qa=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(qa,"UpdateRecordsResponseObject");Gh.exports=qa});var Vh=h((w1,Fh)=>{"use strict";var Fa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Fa,"UpsertRecordsResponseObject");Fh.exports=Fa});var Ws=h((D1,xh)=>{"use strict";var _y=z(),uy=Hh(),ly=qh(),Ey=Vh(),Xn=os(),Zn=rt().LMDB_ERRORS_ENUM,dy=Ye(),vr=T(),Sy=C(),hy=require("uuid"),L1=require("lmdb"),{handleHDBError:fy,hdb_errors:Ty}=D(),{OVERFLOW_MARKER:U1,MAX_SEARCH_KEY_LENGTH:y1}=dy,pu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,_s=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function my(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new uy,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];kh(u,!0,n);let l=Ry(e,t,r,u),E=u[t];o.push(l),c.push(E)}return gu(o,c,s,i)}a(my,"insertRecords");function Ry(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=Xn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[_s])})}a(Ry,"insertRecord");function Ay(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ay,"removeSkippedRecords");function kh(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[_s]))&&(e[_s]=s),t===!0?(r===!0||!Number.isInteger(e[pu]))&&(e[pu]=s):delete e[pu]}a(kh,"setTimestamps");function Nu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),_y.initializeDBIs(e,t,r)}a(Nu,"initializeTransaction");async function Oy(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new ly,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Iu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return gu(c,_,s,i,o)}a(Oy,"updateRecords");async function py(e,t,r,s,n=!0){try{Cu(e,t,r,s)}catch(_){throw fy(_,_.message,Ty.HTTP_STATUS_CODES.BAD_REQUEST)}Nu(e,t,r);let i=new Ey,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;Sy.isEmpty(u[t])?(l=hy.v4(),u[t]=l):l=u[t];let E=Iu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return gu(o,c,s,i)}a(py,"upsertRecords");async function gu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Xn.getMicroTime(),Ay(r,n),s}a(gu,"finalizeWrite");function Iu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(kh(r,!l,o),Number.isInteger(r[_s])&&u[_s]>r[_s])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Xn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)w.remove(B[X],s);if(B=Xn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)w.put(B[X],s)}let S=Object.assign({},u,r);c.put(s,S,S[_s])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:Iu(e,t,r,s,n,i,o))}a(Iu,"updateUpsertRecord");function Ny(e,t,r){if(Xn.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ny,"validateBasic");function Cu(e,t,r,s){if(Ny(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Cu,"validateWrite");xh.exports={insertRecords:my,updateRecords:Oy,upsertRecords:py}});var te=h((M1,Yh)=>{"use strict";var bu=T(),Js=Y(),wu=require("path");Js.initSync();var Va,ka,xa;function $h(){if(Va!==void 0)return Va;if(Js.getHdbBasePath()!==void 0)return Va=wu.join(Js.getHdbBasePath(),bu.SCHEMA_DIR_NAME),Va}a($h,"getBaseSchemaPath");function gy(){if(ka!==void 0)return ka;if(Js.getHdbBasePath()!==void 0)return ka=wu.join($h(),bu.SYSTEM_SCHEMA_NAME),ka}a(gy,"getSystemSchemaPath");function Iy(){if(xa!==void 0)return xa;if(Js.getHdbBasePath()!==void 0)return xa=wu.join(Js.getHdbBasePath(),bu.TRANSACTIONS_DIR_NAME),xa}a(Iy,"getTransactionAuditStorePath");Yh.exports={getBaseSchemaPath:$h,getSystemSchemaPath:gy,getTransactionAuditStorePath:Iy}});var Tr=h((P1,Wh)=>{"use strict";var Qh=C(),Kh=T(),Ya=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Lu=require("joi"),$a={schema_format:{pattern:Ya,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Cy=Lu.alternatives(Lu.string().min(1).max($a.schema_length.maximum).pattern(Ya).messages({"string.pattern.base":"{:#label} "+$a.schema_format.message}),Lu.number()).required();function by(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>$a.schema_length.maximum?`'${e}' maximum of 250 characters`:Ya.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(by,"checkValidTable");function wy(e,t){return Qh.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(wy,"validateSchemaExists");function Ly(e,t){let r=t.state.ancestors[0].schema;return Qh.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Ly,"validateTableExists");function Uy(e,t){return e.toLowerCase()===Kh.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Kh.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Uy,"validateSchemaName");Wh.exports={common_validators:$a,schema_regex:Ya,hdb_schema_table:Cy,validateSchemaExists:wy,validateTableExists:Ly,validateSchemaName:Uy,checkValidTable:by}});var Ka=h((B1,Jh)=>{var{common_validators:Hr}=Tr(),zn=Ee(),xt="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function jn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(jn,"makeAttributesStrings");function yy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(yy,"schema_object");function Dy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Dy,"table_object");function My(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:xt},zn.validateObject(e,Z)}a(My,"create_table_object");function Py(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence={message:xt},Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Py,"attribute_object");function By(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(By,"describe_table");function vy(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(vy,"validateTableResidence");Jh.exports={schema_object:yy,create_table_object:My,table_object:Dy,attribute_object:Py,describe_table:By,validateTableResidence:vy}});var Xh=h((v1,Zh)=>{"use strict";var Hy=require("uuid"),Qa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Qa,"CreateAttributeObject");Zh.exports=Qa});var Ja=h((H1,zh)=>{"use strict";var Gy=Xh(),Wa=class extends Gy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Wa,"LMDBCreateAttributeObject");zh.exports=Wa});var ef=h((G1,jh)=>{"use strict";jh.exports=Fy;var qy="inserted";function Fy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fy,"returnObject")});var Za=h((q1,rf)=>{"use strict";var Vy=T(),Uu=z(),ky=Ws(),{getSystemSchemaPath:xy,getBaseSchemaPath:$y}=te(),Yy=require("path"),Ky=as(),Qy=Ka(),Wy=Ja(),Jy=ef(),{handleHDBError:Zy,hdb_errors:Xy}=D(),zy=C(),yu=Ky.hdb_attribute,tf=[];for(let e=0;e<yu.attributes.length;e++)tf.push(yu.attributes[e].attribute);var jy="inserted";rf.exports=eD;async function eD(e){let t=Qy.attribute_object(e);if(t)throw Zy(new Error,t.message,Xy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=zy.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new Wy(e.schema,e.table,e.attribute,e.id);try{let n=await Uu.openEnvironment(Yy.join($y(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Uu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Uu.openEnvironment(xy(),Vy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await ky.insertRecords(i,yu.hash_attribute,tf,[s]);return Jy(jy,o,{records:[s]},c)}catch(n){throw n}}a(eD,"lmdbCreateAttribute")});var Mu=h((F1,nf)=>{var{hdb_schema_table:sf}=Tr(),tD=Ee(),Du=require("joi"),rD={undefined:"undefined",null:"null"},sD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||rD[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),nD=Du.object({schema:sf,table:sf,records:Du.array().items(Du.object().custom(sD)).required()});nf.exports=function(e){return tD.validateBySchema(e,nD)}});var Xa=h((k1,of)=>{"use strict";var mr=C(),af=I(),V1=Mu();of.exports=iD;function iD(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(mr.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&mr.isEmptyOrZeroLength(o[r]))throw af.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw af.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(iD,"insertUpdateValidate")});var ei=h((x1,cf)=>{"use strict";var aD=T().OPERATIONS_ENUM,za=class{constructor(t,r,s,n,i=void 0){this.operation=aD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(za,"InsertObject");cf.exports=za});var eo=h((Y1,_f)=>{"use strict";var $1=ei(),ja=T(),Bu=C(),Pu=I(),oD=require("uuid"),{handleHDBError:ti,hdb_errors:cD}=D(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:si}=cD;_f.exports=_D;function _D(e,t,r){for(let n=0;n<t.length;n++)uD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];lD(i,r,e.operation)}}a(_D,"processRows");function uD(e){if(Buffer.byteLength(String(e))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ti(new Error,ri.ATTR_NAME_LENGTH_ERR(e),si.BAD_REQUEST,void 0,void 0,!0);if(Bu.isEmptyOrZeroLength(e)||Bu.isEmpty(e.trim()))throw ti(new Error,ri.ATTR_NAME_NULLISH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(uD,"validateAttribute");function lD(e,t,r){if(!e.hasOwnProperty(t)||Bu.isEmptyOrZeroLength(e[t])){if(r===ja.OPERATIONS_ENUM.INSERT||r===ja.OPERATIONS_ENUM.UPSERT){e[t]=oD.v4();return}throw Pu.error("Update transaction aborted due to record with no hash value:",e),ti(new Error,ri.RECORD_MISSING_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Pu.error(e),ti(new Error,ri.HASH_VAL_LENGTH_ERR,si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Pu.error(e),ti(new Error,ri.INVALID_FORWARD_SLASH_IN_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(lD,"validateHash")});var lf=h((K1,uf)=>{"use strict";var to=class{constructor(t,r){this.type=t,this.message=r}};a(to,"IPCEventObject");uf.exports=to});var us=h((Q1,Ef)=>{"use strict";var ED=I(),vu=C(),dD=T(),{IPC_ERRORS:ni}=rt();Ef.exports={sendIpcEvent:SD,validateEvent:hD,SchemaEventMsg:fD,UserEventMsg:TD};function SD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ED.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(SD,"sendIpcEvent");function hD(e){if(typeof e!="object")return ni.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||vu.isEmpty(e.type))return ni.MISSING_TYPE;if(!e.hasOwnProperty("message")||vu.isEmpty(e.message))return ni.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||vu.isEmpty(e.message.originator))return ni.MISSING_ORIGIN;if(dD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ni.INVALID_EVENT(e.type)}a(hD,"validateEvent");function fD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(fD,"SchemaEventMsg");function TD(e){this.originator=e}a(TD,"UserEventMsg")});var Zs=h((J1,ff)=>{"use strict";var df=T(),W1=C(),ro=I(),Sf=lf(),{sendIpcEvent:hf}=us();function mD(e){try{ro.trace("signalSchemaChange called with message:",e);let t=new Sf(df.IPC_EVENT_TYPES.SCHEMA,e);hf(t)}catch(t){ro.error(t)}}a(mD,"signalSchemaChange");function RD(e){try{ro.trace("signalUserChange called with message:",e);let t=new Sf(df.IPC_EVENT_TYPES.USER,e);hf(t)}catch(t){ro.error(t)}}a(RD,"signalUserChange");ff.exports={signalSchemaChange:mD,signalUserChange:RD}});var so=h((Z1,mf)=>{"use strict";var Tf=C(),AD=T(),OD=I(),pD=Za(),ND=Ja(),gD=Zs(),{SchemaEventMsg:ID}=us(),CD="already exists in";mf.exports=bD;async function bD(e,t,r){try{if(Tf.isEmptyOrZeroLength(r))return r;let s=[];Tf.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await wD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(bD,"lmdbCheckForNewAttributes");async function wD(e,t,r,s){let n=new ND(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await LD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(CD))OD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(wD,"createNewAttribute");async function LD(e){let t;try{return t=await pD(e),gD.signalSchemaChange(new ID(process.pid,AD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(LD,"createAttribute")});var Xs=h((X1,Rf)=>{"use strict";var no=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(no,"LMDBTransactionObject");Rf.exports=no});var Of=h((z1,Af)=>{"use strict";var UD=Xs(),yD=T().OPERATIONS_ENUM,io=class extends UD{constructor(t,r,s,n,i=void 0){super(yD.INSERT,r,s,n,i),this.records=t}};a(io,"LMDBInsertTransactionObject");Af.exports=io});var Nf=h((j1,pf)=>{"use strict";var DD=Xs(),MD=T().OPERATIONS_ENUM,ao=class extends DD{constructor(t,r,s,n,i,o=void 0){super(MD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(ao,"LMDBUpdateTransactionObject");pf.exports=ao});var If=h((eJ,gf)=>{"use strict";var PD=Xs(),BD=T().OPERATIONS_ENUM,oo=class extends PD{constructor(t,r,s,n,i,o=void 0){super(BD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(oo,"LMDBUpsertTransactionObject");gf.exports=oo});var bf=h((tJ,Cf)=>{"use strict";var vD=Xs(),HD=T().OPERATIONS_ENUM,co=class extends vD{constructor(t,r,s,n,i=void 0){super(HD.DELETE,s,n,t,i),this.original_records=r}};a(co,"LMDBDeleteTransactionObject");Cf.exports=co});var ii=h((rJ,yf)=>{"use strict";var GD=require("path"),wf=z(),qD=Of(),FD=Nf(),VD=If(),kD=bf(),zs=Ye(),Lf=C(),{CONFIG_PARAMS:xD}=T(),Uf=Y();Uf.initSync();var _o=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:$D}=te();yf.exports=YD;async function YD(e,t){if(Uf.get(xD.LOGGING_AUDITLOG)===!1)return;let r=GD.join($D(),e.schema.toString()),s=await wf.openEnvironment(r,e.table,!0),n=KD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){wf.initializeDBIs(s,zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zs.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Lf.isEmpty(n.user_name)||s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(YD,"writeTransaction");function KD(e,t){let r=Lf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new qD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new FD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new VD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new kD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KD,"createTransactionObject")});var Hu=h((nJ,Df)=>{"use strict";var QD=Xa(),sJ=ei(),js=T(),WD=eo(),JD=Ws().insertRecords,ZD=z(),XD=require("path"),zD=I(),jD=so(),{getBaseSchemaPath:eM}=te(),tM=ii();Df.exports=rM;async function rM(e){try{let{schema_table:t,attributes:r}=QD(e);WD(e,r,t.hash_attribute),e.schema!==js.SYSTEM_SCHEMA_NAME&&(r.includes(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jD(e.hdb_auth_header,t,r),n=XD.join(eM(),e.schema.toString()),i=await ZD.openEnvironment(n,e.table),o=await JD(i,t.hash_attribute,r,e.records,e[js.CLUSTERING_FLAG]!==!0);try{await tM(e,o)}catch(c){zD.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(rM,"lmdbCreateRecords")});var Bf=h((iJ,Pf)=>{"use strict";var Mf=T(),sM=Hu(),nM=ei(),iM=require("fs-extra"),aM=require("path"),{getBaseSchemaPath:oM}=te();Pf.exports=cM;async function cM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nM(Mf.SYSTEM_SCHEMA_NAME,Mf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sM(r),await iM.mkdirp(aM.join(oM(),e.schema.toString()))}a(cM,"lmdbCreateSchema")});var Hf=h((aJ,vf)=>{"use strict";var uo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(uo,"DeleteRecordsResponseObject");vf.exports=uo});var Fu=h((uJ,Ff)=>{"use strict";var Gf=z(),Gu=os(),qu=rt().LMDB_ERRORS_ENUM,_M=Ye(),qf=I(),oJ=C(),uM=require("lmdb"),lM=Hf(),{OVERFLOW_MARKER:cJ,MAX_SEARCH_KEY_LENGTH:_J}=_M;async function EM(e,t,r){if(Gu.validateEnv(e),t===void 0)throw new Error(qu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qu.IDS_REQUIRED):new Error(qu.IDS_MUST_BE_ARRAY);try{let s=Gf.listDBIs(e);Gf.initializeDBIs(e,t,s);let n=new lM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,uM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let X=Gu.getIndexedValues(B);if(X)for(let V=0,W=X.length;V<W;V++)L.remove(X[V],i)}catch{qf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){qf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Gu.getMicroTime(),n}catch(s){throw s}}a(EM,"deleteRecords");Ff.exports={deleteRecords:EM}});var ai=h((lJ,kf)=>{"use strict";var en=C(),dM=Fu(),SM=z(),hM=require("path"),{getBaseSchemaPath:fM}=te(),TM=ii(),mM=I();kf.exports=RM;async function RM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(en.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(en.isEmptyOrZeroLength(e.hash_values)&&!en.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];en.isEmpty(_)||e.hash_values.push(_)}}if(en.isEmptyOrZeroLength(e.hash_values))return Vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(en.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=hM.join(fM(),e.schema.toString()),i=await SM.openEnvironment(n,e.table),o=await dM.deleteRecords(i,s,e.hash_values);try{t===!0&&await TM(e,o)}catch(c){mM.error(`unable to write transaction due to ${c.message}`)}return Vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(RM,"lmdbDeleteRecords");function Vf(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Vf,"createDeleteResponse")});var ku=h((dJ,xf)=>{"use strict";var AM=T(),EJ=os();function Vu(e,t){let r=Object.create(null);if(t.length===1&&AM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Vu,"parseRow");function OM(e,t,r,s){let n=Vu(r,e);s.push(n)}a(OM,"searchAll");function pM(e,t,r,s){let n=Vu(r,e);s[t]=n}a(pM,"searchAllToMap");function NM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(NM,"iterateDBI");function ls(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ls,"pushResults");function gM(e,t,r,s,n,i){t.toString().endsWith(e)&&ls(t,r,s,n,i)}a(gM,"endsWith");function IM(e,t,r,s,n,i){t.toString().includes(e)&&ls(t,r,s,n,i)}a(IM,"contains");function CM(e,t,r,s,n,i){t>e&&ls(t,r,s,n,i)}a(CM,"greaterThanCompare");function bM(e,t,r,s,n,i){t>=e&&ls(t,r,s,n,i)}a(bM,"greaterThanEqualCompare");function wM(e,t,r,s,n,i){t<e&&ls(t,r,s,n,i)}a(wM,"lessThanCompare");function LM(e,t,r,s,n,i){t<=e&&ls(t,r,s,n,i)}a(LM,"lessThanEqualCompare");xf.exports={parseRow:Vu,searchAll:OM,searchAllToMap:pM,iterateDBI:NM,endsWith:gM,contains:IM,greaterThanCompare:CM,greaterThanEqualCompare:bM,lessThanCompare:wM,lessThanEqualCompare:LM,pushResults:ls}});var tn=h((fJ,Jf)=>{"use strict";var wt=z(),UM=I(),ht=os(),Gr=Ye(),ce=rt().LMDB_ERRORS_ENUM,SJ=C(),yM=T(),$t=ku(),hJ=require("lmdb"),{OVERFLOW_MARKER:$f,MAX_SEARCH_KEY_LENGTH:DM}=Gr,oi={lazy:!0};function Yf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=xu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Yf,"iterateFullIndex");function ci(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=xu(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))$t.pushResults(d(L,B),B,l,t,r);return l}a(ci,"iterateRangeBetween");function xu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith($f)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,oi)[r]}return n}}a(xu,"getOverflowCheck");function MM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);lo(r),r=_i(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))$t.searchAll(r,_,u,o);return o}a(MM,"searchAll");function PM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return lo(r),r=_i(e,r),Yf(e,t,t,$t.searchAllToMap.bind(null,r),s,n,i)}a(PM,"searchAllToMap");function BM(e,t,r=!1,s=void 0,n=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Yf(e,void 0,t,$t.iterateDBI,r,s,n)}a(BM,"iterateDBI");function vM(e,t){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(vM,"countAll");function HM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=wt.openDBI(e,r);s=ht.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,oi);u!==void 0&&$t.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))$t.pushResults(s,u,_,t,r);return _}a(HM,"equals");function GM(e,t,r){return qr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(GM,"count");function qM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ht.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))$t.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))$t.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(qM,"startsWith");function FM(e,t,r,s,n=!1,i=void 0,o=void 0){return Kf(e,t,r,s,n,i,o,!0)}a(FM,"endsWith");function Kf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){qr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=xu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith($f))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&($t.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(Kf,"contains");function VM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!0,!1)}a(VM,"greaterThan");function kM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!1,!1)}a(kM,"greaterThanEqual");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!0)}a(xM,"lessThan");function $M(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!1)}a($M,"lessThanEqual");function YM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ht.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ht.convertKeyValueToWrite(s),n=ht.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ci(e,t,r,s,n,i,o,c)}a(YM,"between");function KM(e,t,r,s){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),r=_i(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?oi:void 0);return i&&(n=$t.parseRow(i,r)),n}a(KM,"searchByHash");function QM(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,oi)===void 0&&(s=!1),s}a(QM,"checkHashExists");function WM(e,t,r,s,n=[]){Wf(e,t,r,s,n);let i=Qf(e,t,r,s,n);return Object.values(i)}a(WM,"batchSearchByHash");function JM(e,t,r,s,n=[]){return Wf(e,t,r,s,n),Qf(e,t,r,s,n)}a(JM,"batchSearchByHashToMap");function Qf(e,t,r,s,n=[]){r=_i(e,r);let i=Object.create(null),o=r.length<3?oi:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=$t.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw UM.warn(u),u}}return i}a(Qf,"batchHashSearch");function Wf(e,t,r,s,n){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(Wf,"initializeBatchSearchByHash");function lo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(lo,"validateFetchAttributes");function qr(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>DM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(qr,"validateComparisonFunctions");function _i(e,t){return t.length===1&&yM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(_i,"setGetWholeRowAttributes");Jf.exports={searchAll:MM,searchAllToMap:PM,count:GM,countAll:vM,equals:HM,startsWith:qM,endsWith:FM,contains:Kf,searchByHash:KM,setGetWholeRowAttributes:_i,batchSearchByHash:WM,batchSearchByHashToMap:JM,checkHashExists:QM,iterateDBI:BM,greaterThan:VM,greaterThanEqual:kM,lessThan:xM,lessThanEqual:$M,between:YM}});var ui=h((mJ,jf)=>{var Zf=require("lodash"),Xf=Ee(),Q=require("joi"),ZM=C(),{hdb_schema_table:Yt,checkValidTable:zf}=Tr(),{handleHDBError:XM,hdb_errors:zM}=D(),{HTTP_STATUS_CODES:jM}=zM,TJ=Q.object({schema:Yt,table:Yt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Yt).required()}),eP=Q.object({schema:Yt,table:Yt,search_attribute:Yt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Yt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),tP=Q.object({schema:Yt,table:Yt,operator:Q.string().valid("and","or").default("and").lowercase(),offset:Q.number().integer().min(0),limit:Q.number().integer().min(1),get_attributes:Q.array().min(1).items(Yt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Yt,search_type:Q.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Q.when("search_type",{switch:[{is:"equals",then:Q.any()},{is:"between",then:Q.array().items(Q.alternatives([Q.string(),Q.number()])).length(2)}],otherwise:Q.alternatives(Q.string(),Q.number())}).required()})).required()});jf.exports=function(e,t){let r=null;switch(t){case"value":r=Xf.validateBySchema(e,eP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(zf("schema",e.schema)),i(zf("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Xf.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ZM.checkGlobalSchemaTable(e.schema,e.table);if(n)return XM(new Error,n,jM.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=Zf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Zf.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var $u=h((RJ,eT)=>{"use strict";var rP=z(),sP=ui(),nP=require("path"),{getBaseSchemaPath:iP}=te();eT.exports=aP;function aP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP.join(iP(),e.schema.toString());return rP.openEnvironment(r,e.table)}a(aP,"initialize")});var Yu=h((AJ,tT)=>{"use strict";var oP=tn(),cP=$u();tT.exports=_P;async function _P(e){try{let t=await cP(e),r=global.hdb_schema[e.schema][e.table];return oP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(_P,"lmdbGetDataByHash")});var Es=h((OJ,rT)=>{"use strict";var Eo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Eo,"SearchByHashObject");rT.exports=Eo});var nT=h((NJ,sT)=>{"use strict";var pJ=Es(),uP=tn(),lP=$u();sT.exports=EP;async function EP(e){try{let t=await lP(e),r=global.hdb_schema[e.schema][e.table];return uP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(EP,"lmdbSearchByHash")});var Kt=h((gJ,iT)=>{"use strict";var So=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(So,"SearchObject");iT.exports=So});var ho=h((IJ,uT)=>{"use strict";var Qe=tn(),dP=z(),SP=require("path"),hP=C(),U=Ye(),ds=T(),{getBaseSchemaPath:fP}=te(),TP=as(),aT=rt().LMDB_ERRORS_ENUM,{compareKeys:rn}=require("ordered-binary"),Rr=ds.SEARCH_WILDCARDS;async function mP(e,t,r){let s;e.schema===ds.SYSTEM_SCHEMA_NAME?s=TP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=_T(e,s.hash_attribute,r,t);return oT(e,n,s.hash_attribute,r)}a(mP,"prepSearch");async function oT(e,t,r,s){let n=SP.join(fP(),e.schema.toString()),i=await dP.openEnvironment(n,e.table),o=cT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(OP(e,r)===!1)return s===!0?AP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(oT,"executeSearch");function cT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(cT,"searchByType");function RP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return rn(i,s[0])>=0&&rn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>rn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>rn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>rn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>rn(n[r],s)<=0;default:return Object.create(null)}}a(RP,"filterByType");function AP(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(AP,"createMapFromArrays");function OP(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(OP,"checkToFetchMore");function _T(e,t,r,s){if(hP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Rr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rr[0])<0&&n.indexOf(Rr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Rr.indexOf(i)>=0&&Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Rr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rr[0])||n.includes(Rr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(aT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ds.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ds.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ds.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ds.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ds.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(aT.UNKNOWN_SEARCH_TYPE)}}a(_T,"createSearchTypeFromSearchObject");uT.exports={executeSearch:oT,createSearchTypeFromSearchObject:_T,prepSearch:mP,searchByType:cT,filterByType:RP}});var ET=h((bJ,lT)=>{"use strict";var CJ=Kt(),pP=ui(),NP=C(),gP=T(),IP=ho();lT.exports=CP;async function CP(e,t){if(!NP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=pP(e,"value");if(s)throw s;let n=!0;try{return await IP.prepSearch(e,t,n)}catch(i){throw i}}a(CP,"lmdbGetDataByValue")});var sn=h((LJ,dT)=>{"use strict";var wJ=Kt(),bP=ui(),wP=C(),LP=T(),UP=ho();dT.exports=yP;async function yP(e,t){if(!wP.isEmpty(t)&&LP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=bP(e,"value");if(s)throw s;let n=!1;try{return await UP.prepSearch(e,t,n)}catch(i){throw i}}a(yP,"lmdbSearchByValue")});var hT=h((yJ,ST)=>{"use strict";var UJ=Ye(),fo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(fo,"SearchByConditionsObject");var To=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(To,"SearchCondition");var mo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(mo,"SortAttribute");ST.exports={SearchByConditionsObject:fo,SearchCondition:To,SortAttribute:mo}});var OT=h((MJ,AT)=>{"use strict";var DJ=hT().SearchByConditionsObject,DP=Kt(),MP=ui(),Ku=tn(),Ro=Ye(),RT=ho(),PP=ku(),fT=require("lodash"),{getBaseSchemaPath:BP}=te(),vP=require("path"),HP=z(),{handleHDBError:TT,hdb_errors:GP}=D(),{HTTP_STATUS_CODES:qP}=GP,FP=1e8,VP={lazy:!0};AT.exports=kP;async function kP(e){try{let t=MP(e,"conditions");if(t)throw TT(t,t.message,qP.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=vP.join(BP(),e.schema.toString()),s=await HP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=fT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===Ro.SEARCH_TYPES.EQUALS?o.estimated_count=Ku.count(s,o.search_attribute,o.search_value):c===Ro.SEARCH_TYPES.CONTAINS||c===Ro.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=FP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await mT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(RT.filterByType),u=_.length,l=[],E=Ku.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,VP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(PP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await mT(s,e,_,n.hash_attribute);c.push(u)}if(o=fT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ku.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw TT(t)}}a(kP,"lmdbSearchByConditions");async function mT(e,t,r,s){let n=new DP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RT.searchByType(e,n,i,s)}a(mT,"executeConditionSearch")});var li=h((PJ,pT)=>{"use strict";var xP=T().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=xP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ao,"DeleteObject");pT.exports=Ao});var Qu=h((BJ,NT)=>{"use strict";var Oo=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Oo,"DropAttributeObject");NT.exports=Oo});var Ju=h((HJ,gT)=>{"use strict";var $P=Kt(),YP=li(),vJ=Qu(),er=T(),KP=C(),Wu=z(),QP=as(),WP=sn(),JP=ai(),{getBaseSchemaPath:ZP}=te(),XP=require("path");gT.exports=zP;async function zP(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=QP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await eB(e),n=XP.join(ZP(),e.schema.toString()),i=await Wu.openEnvironment(n,e.table);return t===!0&&await jP(e,i,r.hash_attribute),Wu.dropDBI(i,e.attribute),s}a(zP,"lmdbDropAttribute");async function jP(e,t,r){let s=Wu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(jP,"removeAttributeFromAllObjects");async function eB(e){let t=new $P(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await WP(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(KP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new YP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JP(i)}a(eB,"dropAttributeFromSystem")});var wT=h((GJ,bT)=>{"use strict";var tB=Ju(),rB=Qu(),IT=C(),CT=I(),sB=rt().LMDB_ERRORS_ENUM;bT.exports=nB;async function nB(e){if(IT.isEmpty(global.hdb_schema[e.schema])||IT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new rB(e.schema,e.table,r);try{await tB(n,!1)}catch(i){i.message!==sB.DBI_DOES_NOT_EXIST&&CT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw CT.error(`Error dropping attribute ${r}`),s}}a(nB,"lmdbDropAllAttributes")});var Zu=h((FJ,HT)=>{"use strict";var MT=Kt(),PT=li(),BT=sn(),vT=ai(),qJ=wT(),at=T(),LT=C(),UT=z(),{getBaseSchemaPath:iB,getTransactionAuditStorePath:aB}=te(),yT=require("path"),DT=I();HT.exports=oB;async function oB(e){try{if(LT.isEmpty(global.hdb_schema[e.schema])||LT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await cB(e),await _B(e);let t=yT.join(iB(),e.schema.toString());try{await UT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=yT.join(aB(),e.schema.toString());await UT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(oB,"lmdbDropTable");async function cB(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await BT(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await vT(n)}a(cB,"deleteAttributesFromSystem");async function _B(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await BT(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await vT(n)}catch(i){throw i}}a(_B,"dropTableFromSystem")});var qT=h((kJ,GT)=>{"use strict";var uB=require("fs-extra"),lB=Kt(),EB=Es(),dB=li(),SB=Zu(),hB=ai(),fB=Yu(),TB=sn(),Ar=T(),VJ=C(),mB=require("path"),{getBaseSchemaPath:RB}=te(),{handleHDBError:AB,hdb_errors:OB}=D(),{HDB_ERROR_MSGS:pB,HTTP_STATUS_CODES:NB}=OB;GT.exports=gB;async function gB(e){let t;try{t=await IB(e.schema);let r=new lB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await TB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await SB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new dB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await hB(n);let i=mB.join(RB(),t.toString());await uB.remove(i)}catch(r){throw r}}a(gB,"lmdbDropSchema");async function IB(e){let t=new EB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await fB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw AB(new Error,pB.SCHEMA_NOT_FOUND(e),NB.NOT_FOUND,void 0,void 0,!0);return s}a(IB,"validateDropSchema")});var Xu=h((xJ,FT)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(po,"CreateTableObject");FT.exports=po});var kT=h((YJ,VT)=>{"use strict";var CB=require("path"),bB=require("fs-extra"),No=z(),{getTransactionAuditStorePath:wB}=te(),zu=Ye(),$J=Xu();VT.exports=LB;async function LB(e){let t;try{let r=CB.join(wB(),e.schema.toString());await bB.mkdirp(r),t=await No.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(LB,"createTransactionsAuditEnvironment")});var KT=h((KJ,YT)=>{"use strict";var ju=T(),xT=z(),UB=Ws(),yB=require("path"),{getSystemSchemaPath:DB,getBaseSchemaPath:MB}=te(),PB=as(),BB=Za(),el=Ja(),vB=I(),HB=kT(),rl=PB.hdb_table,$T=[];for(let e=0;e<rl.attributes.length;e++)$T.push(rl.attributes[e].attribute);YT.exports=GB;async function GB(e,t){let r=yB.join(MB(),t.schema.toString()),s=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new el(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xT.createEnvironment(r,t.table),e!==void 0){let o=await xT.openEnvironment(DB(),ju.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UB.insertRecords(o,rl.hash_attribute,$T,[e]),await tl(s),await tl(n),await tl(i)}await HB(t)}catch(o){throw o}}a(GB,"lmdbCreateTable");async function tl(e){try{await BB(e)}catch(t){vB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tl,"createAttribute")});var WT=h((QJ,QT)=>{"use strict";var qB=Xa(),FB=eo(),VB=so(),nn=T(),kB=Ws().updateRecords,xB=z(),$B=require("path"),{getBaseSchemaPath:YB}=te(),KB=ii(),QB=I();QT.exports=WB;async function WB(e){try{let{schema_table:t,attributes:r}=qB(e);FB(e,r,t.hash_attribute),e.schema!==nn.SYSTEM_SCHEMA_NAME&&(r.includes(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VB(e.hdb_auth_header,t,r),n=$B.join(YB(),e.schema.toString()),i=await xB.openEnvironment(n,e.table),o=await kB(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await KB(e,o)}catch(c){QB.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WB,"lmdbUpdateRecords")});var ZT=h((WJ,JT)=>{"use strict";var JB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=JB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(go,"UpsertObject");JT.exports=go});var zT=h((ZJ,XT)=>{"use strict";var JJ=ZT(),ZB=Xa(),XB=eo(),zB=so(),an=T(),jB=Ws().upsertRecords,ev=z(),tv=require("path"),{getBaseSchemaPath:rv}=te(),sv=ii(),nv=I(),{handleHDBError:iv,hdb_errors:av}=D();XT.exports=ov;async function ov(e){let t;try{t=ZB(e)}catch(_){throw iv(_,_.message,av.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XB(e,s,r.hash_attribute),e.schema!==an.SYSTEM_SCHEMA_NAME&&(s.includes(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zB(e.hdb_auth_header,r,s),i=tv.join(rv(),e.schema.toString()),o=await ev.openEnvironment(i,e.table),c=await jB(o,r.hash_attribute,s,e.records,e[an.CLUSTERING_FLAG]!==!0);try{await sv(e,c)}catch(_){nv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(ov,"lmdbUpsertRecords")});var nm=h((XJ,sm)=>{"use strict";var cv=Kt(),jT=C(),em=I(),_v=sn(),tm=T(),uv=Fu().deleteRecords,lv=z(),Ev=require("path"),{getBaseSchemaPath:dv}=te(),{promisify:Sv}=require("util"),hv=Sv(setTimeout),rm=1e4,fv=10;sm.exports=Tv;async function Tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(jT.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new cv(e.schema,e.table,tm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await _v(n,tm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw em.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return jT.isEmptyOrZeroLength(s)?(em.trace("No records found to delete"),{message:"No records found to delete"}):await mv(e,s,t)}a(Tv,"lmdbDeleteRecordsBefore");async function mv(e,t,r){let s=Ev.join(dv(),e.schema.toString()),n=await lv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=rm){let _=t.slice(o,o+rm),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await uv(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await hv(fv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(mv,"chunkDeletes")});var am=h((zJ,im)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Io,"DeleteBeforeObject");im.exports=Io});var cm=h((jJ,om)=>{"use strict";var Co=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Co,"DeleteAuditLogsBeforeResults");om.exports=Co});var lm=h((tZ,um)=>{"use strict";var sl=z(),{getTransactionAuditStorePath:Rv}=te(),eZ=am(),Av=require("path"),Ei=Ye(),Ov=C(),_m=cm(),pv=require("util").promisify,Nv=pv(setTimeout),gv=1e4,Iv=100;um.exports=Cv;async function Cv(e){let t=Av.join(Rv(),e.schema),r=await sl.openEnvironment(t,e.table,!0),s=sl.listDBIs(r);sl.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new _m;do n=await bv(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await Nv(Iv);while(n.transactions_deleted>0);return i}a(Cv,"deleteAuditLogsBefore");async function bv(e,t){let r=new _m;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ov.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>gv)break}return await n,r}catch(s){throw s}}a(bv,"deleteTransactions")});var mm=h((rZ,Tm)=>{"use strict";var nl=z(),on=Ye(),Em=os(),il=T(),dm=C(),{getTransactionAuditStorePath:wv}=te(),Lv=require("path"),Uv=tn(),bo=Xs(),yv=I();Tm.exports=Dv;async function Dv(e){let t=Lv.join(wv(),e.schema),r=await nl.openEnvironment(t,e.table,!0),s=nl.listDBIs(r);nl.initializeDBIs(r,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Sm(r,e.search_values);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Pv(r,e.search_values,n);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Mv(r,e.search_values);default:return Sm(r)}}a(Dv,"readAuditLog");function Sm(e,t=[0,Em.getMicroTime()]){dm.isEmpty(t[0])&&(t[0]=0),dm.isEmpty(t[1])&&(t[1]=Em.getMicroTime());let r=[];try{let s=e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new bo,i);r.push(o)}return r}catch(s){throw s}}a(Sm,"searchTransactionsByTimestamp");function Mv(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,fm(e,i))}return Object.fromEntries(r)}a(Mv,"searchTransactionsByUsername");function Pv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Uv.equals(e,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,on.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=fm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);hm(_,"records",r,l,o),hm(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Pv,"searchTransactionsByHashValues");function hm(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new bo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new bo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(hm,"loopRecords");function fm(e,t){let r=[];try{let s=e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new bo,i);r.push(o)}}catch(i){yv.warn(i)}return r}catch(s){throw s}}a(fm,"batchSearchTransactions")});var Am=h((sZ,Rm)=>{"use strict";var Bv=require("path"),{getBaseSchemaPath:vv}=te(),Hv=z();Rm.exports={writeTransaction:Gv};async function Gv(e,t,r){let s=Bv.join(vv(),e);return(await Hv.openEnvironment(s,t)).transaction(r)}a(Gv,"writeTransaction")});var pm=h((nZ,Om)=>{"use strict";var qv=require("path"),{getBaseSchemaPath:Fv}=te(),Vv=z();Om.exports={flush:kv};async function kv(e,t){let r=qv.join(Fv(),e.toString());return(await Vv.openEnvironment(r,t.toString())).flushed}a(kv,"flush")});var gm=h((iZ,Nm)=>{"use strict";var Re=I(),{handleHDBError:xv}=D(),$v=_u(),Yv=Za(),Kv=Hu(),Qv=Bf(),Wv=ai(),Jv=Yu(),Zv=nT(),Xv=ET(),zv=sn(),jv=OT(),eH=qT(),tH=KT(),rH=WT(),sH=zT(),nH=nm(),iH=lm(),aH=Zu(),oH=Ju(),cH=mm(),_H=Am(),uH=pm(),wo=class extends $v{async searchByConditions(t){try{return jv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Jv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Zv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Xv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await Qv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await tH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await aH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await sH(t)}catch(r){throw xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Wv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await nH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await cH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return _H.writeTransaction(t,r,s)}flush(t,r){return uH.flush(t,r)}};a(wo,"LMDBBridge");Nm.exports=wo});var Or=h((aZ,Cm)=>{"use strict";var lH=gm(),EH=_u(),dH=Y();dH.initSync();var Im;function SH(){return Im instanceof EH?Im:new lH}a(SH,"getBridge");Cm.exports=SH()});var Um=h((oZ,Lm)=>{"use strict";var bm=require("lodash"),di=require("mathjs"),hH=require("jsonata"),wm=C();Lm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?bm.uniqWith(e,bm.isEqual):e,searchJSON:fH,mad:Si.bind(null,di.mad),mean:Si.bind(null,di.mean),mode:Si.bind(null,di.mode),prod:Si.bind(null,di.prod),median:Si.bind(null,di.median)};function Si(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(Si,"aggregateFunction");function fH(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(wm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),wm.isEmpty(this.__ala__.res[r])){let s=hH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(fH,"searchJSON")});var Dm=h((cZ,ym)=>{"use strict";var de=require("moment"),al="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;ym.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(al),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(al),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(al)}});var vm=h((_Z,Bm)=>{"use strict";var TH=require("@turf/area"),mH=require("@turf/length"),RH=require("@turf/circle"),AH=require("@turf/difference"),OH=require("@turf/distance"),pH=require("@turf/boolean-contains"),NH=require("@turf/boolean-equal"),gH=require("@turf/boolean-disjoint"),IH=require("@turf/helpers"),Mm=T(),k=C();Bm.exports={geoArea:CH,geoLength:bH,geoCircle:wH,geoDifference:LH,geoDistance:Pm,geoNear:UH,geoContains:yH,geoEqual:DH,geoCrosses:MH,geoConvert:PH};var ol="geo1 is required",cl="geo2 is required";function CH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),TH.default(e)}a(CH,"geoArea");function bH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),mH.default(e,{units:t||"kilometers"})}a(bH,"geoLength");function wH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),RH.default(e,t,{units:r||"kilometers"})}a(wH,"geoCircle");function LH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),AH(e,t)}a(LH,"geoDifference");function Pm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),OH.default(e,t,{units:r||"kilometers"})}a(Pm,"geoDistance");function UH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Pm(e,t,s)<=r}a(UH,"geoNear");function yH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),pH.default(e,t)}a(yH,"geoContains");function DH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),NH.default(e,t)}a(DH,"geoEqual");function MH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!gH.default(e,t)}a(MH,"geoCrosses");function PH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Mm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Mm.GEO_CONVERSION_ENUM).join(",")}`);return IH[t](e,r)}a(PH,"geoConvert")});var Lo=h((uZ,Hm)=>{var Ss=Um(),ft=Dm(),tr=vm();Hm.exports=e=>{e.aggr.mad=e.aggr.MAD=Ss.mad,e.aggr.mean=e.aggr.MEAN=Ss.mean,e.aggr.mode=e.aggr.MODE=Ss.mode,e.aggr.prod=e.aggr.PROD=Ss.prod,e.aggr.median=e.aggr.MEDIAN=Ss.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ss.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ss.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Fm=h((lZ,qm)=>{"use strict";var hi=require("lodash"),Me=require("alasql");Me.options.cache=!1;var BH=Lo(),Gm=require("clone"),Uo=require("recursive-iterator"),v=I(),G=C(),cn=Or(),vH=T(),{hdb_errors:HH}=D(),GH="IS NULL",fi="There was a problem performing this search. Please check the logs and try again.";BH(Me);var yo=class{constructor(t,r){if(G.isEmpty(t))throw v.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),G.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!G.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(fi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(fi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(fi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(fi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(fi)}}_getColumns(){let t=new Uo(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Gm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=hi.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(G.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Uo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!G.isEmpty(r)&&r.right)if(G.isNotEmptyAndHasValue(r.right.value)){let s=G.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!G.isEmpty(s)&&G.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=G.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&G.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Uo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!G.isEmpty(vH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(G.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(G.isEmptyOrZeroLength(r.left.columnid)||G.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(G.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!G.isEmpty(r.right.value)||!G.isEmpty(r.left.value)?s.add(G.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from)&&G.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&hi.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(G.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);G.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(G.isEmptyOrZeroLength(this.all_table_attributes)&&!G.isEmptyOrZeroLength(this.columns.columns))return t;if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Gm(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(G.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(GH)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=hi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!G.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await cn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await cn.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!G.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await cn.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await cn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=hi.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Uo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=hi.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await cn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return v.error(HH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await cn.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(yo,"SQLSearch");qm.exports=yo});var Tt=h((EZ,km)=>{"use strict";var qH=zS();km.exports={searchByConditions:xH,searchByHash:$H,searchByValue:YH,search:KH};var _l=Or(),Vm=require("util"),FH=Vm.callbackify(_l.searchByHash),VH=Vm.callbackify(_l.searchByValue),kH=Fm();async function xH(e){return _l.searchByConditions(e)}a(xH,"searchByConditions");function $H(e,t){try{FH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a($H,"searchByHash");function YH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),VH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(YH,"searchByValue");function KH(e,t){try{let r=new qH(e);r.validate(),new kH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(KH,"search")});var Fr=h((dZ,Km)=>{"use strict";var Ti=require("crypto"),$m="aes-256-cbc",QH=32,WH=16,ul=64,Ym=32,JH=ul+Ym,xm=new Map;Km.exports={encrypt:ZH,decrypt:XH,createNatsTableStreamName:zH};function ZH(e){let t=Ti.randomBytes(QH),r=Ti.randomBytes(WH),s=Ti.createCipheriv($m,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(ZH,"encrypt");function XH(e){let t=e.substr(0,ul),r=e.substr(ul,Ym),s=e.substr(JH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ti.createDecipheriv($m,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(XH,"decrypt");function zH(e,t){let r=`${e}.${t}`,s=xm.get(r);return s||(s=Ti.createHash("md5").update(`${e}.${t}`).digest("hex"),xm.set(r,s)),s}a(zH,"createNatsTableStreamName")});var un=h((SZ,jm)=>{"use strict";var Wm=Tt(),Vr=I(),Jm=Ka(),jH=require("lodash"),eG=require("path"),tG=Fr(),ll=C(),{promisify:Zm}=require("util"),j=T(),{handleHDBError:Do,hdb_errors:rG}=D(),{HDB_ERROR_MSGS:Mo,HTTP_STATUS_CODES:Xm}=rG,sG=Y();sG.initSync();var Qm=z(),nG=te(),mi=Zm(Wm.searchByValue),iG=Zm(Wm.searchByHash),_n="name",zm="hash_attribute",El="schema",aG="schema_table",oG="attribute";jm.exports={describeAll:cG,describeTable:Po,describeSchema:uG};async function cG(e){try{let t=ll.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:_n,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[_n]},i=await mi(n);if(ll.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},u=await mi(_),l=[];for(let d of u)try{let S;if(t||s)S=await Po({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await Po({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){Vr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Vr.error("Got an error in describeAll"),Vr.error(t),Do(new Error,Mo.DESCRIBE_ALL_ERR)}}a(cG,"describeAll");async function Po(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Jm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_n,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await mi(c);if(!_||_.length===0)throw Do(new Error,Mo.TABLE_NOT_FOUND(e.schema,e.table),Xm.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Do(new Error,Mo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:aG,search_value:r+"."+s,get_attributes:[oG]},E=await mi(l);E=jH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=_G(n)),i.attributes=E,i.clustering_stream_name=tG.createNatsTableStreamName(u.schema,u.name);try{let d=eG.join(nG.getBaseSchemaPath(),i.schema.toString()),S=await Qm.openEnvironment(d,i.name),m=Qm.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){Vr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Vr.error(`There was an error getting attributes for table '${u.name}'`),Vr.error(l)}return i}a(Po,"descTable");function _G(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(_G,"getAttrsByPerms");async function uG(e){let t=Jm.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:El,search_value:s,hash_values:[],get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},i=await mi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[_n]},c=await iG(o);if(c&&c.length<1)throw Do(new Error,Mo.SCHEMA_NOT_FOUND(e.schema),Xm.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ll.isEmpty(_)||_.describe){let u=await Po({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Vr.error(`Error describing schema table '${e.schema}.${c}'`),Vr.error(_)}})),o}}a(uG,"describeSchema")});var hs=h((TZ,nR)=>{var hZ=require("async"),ln=as(),fZ=I(),{callbackify:rR,promisify:lG}=require("util");nR.exports={setSchemaDataToGlobal:eR,getTableSchema:SG,getSystemSchema:fG,setSchemaDataToGlobalAsync:lG(eR)};var sR=un(),EG=rR(sR.describeAll),dG=rR(sR.describeTable);function eR(e){EG(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=ln),global.hdb_schema=r,e(null,null)})}a(eR,"setSchemaDataToGlobal");function tR(e,t){return e==="system"?ln[t]:global.hdb_schema[e][t]}a(tR,"returnSchema");function SG(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?hG(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,tR(e,t))}):r(null,tR(e,t))}a(SG,"getTableSchema");function hG(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=ln:global.hdb_schema={system:ln},r();return}dG(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:ln}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(hG,"setTableDataToGlobal");function fG(){return ln}a(fG,"getSystemSchema")});var Se=h((RZ,aR)=>{"use strict";var{platform:mZ}=require("os"),TG="nats-server.zip",dl="nats-server",mG=process.platform==="win32"?`${dl}.exe`:dl,Sl="HDB",RG=/^[^\s.,*>]+$/,iR="__request__",AG=a(e=>`${e}.${iR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},pG={HUB:"hub.pid",LEAF:"leaf.pid"},NG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Sl,deliver_subject:"__HDB__.WORKQUEUE"},IG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Sl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Sl,deliver_subject:"HDB.USERQUEUE"},bG={SUCCESS:"success",ERROR:"error"},wG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LG={TXN:"txn",MSGID:"msgid"};aR.exports={NATS_SERVER_ZIP:TG,NATS_SERVER_NAME:dl,NATS_BINARY_NAME:mG,PID_FILES:pG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:NG,WORK_QUEUE_CONSUMER_NAMES:gG,SCHEMA_QUEUE_CONSUMER_NAMES:IG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:RG,REQUEST_SUFFIX:iR,UPDATE_REMOTE_RESPONSE_STATUSES:bG,CLUSTER_STATUS_STATUSES:wG,REQUEST_SUBJECT:AG,SUBJECT_PREFIXES:LG}});var cR=h((AZ,oR)=>{"use strict";var UG=Se(),Bo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,this.server_name=r+UG.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:S}},this.system_account="SYS"}};a(Bo,"HubConfigObject");oR.exports=Bo});var lR=h((OZ,uR)=>{"use strict";var _R=Se(),vo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d){this.port=t,this.server_name=r+_R.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+_R.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:d},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:d},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:d},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(vo,"LeafConfigObject");uR.exports=vo});var dR=h((pZ,ER)=>{"use strict";var Ho=class{constructor(t,r){this.user=t,this.password=r}};a(Ho,"HdbUserObject");ER.exports=Ho});var hR=h((NZ,SR)=>{"use strict";var yG=Se(),Go=class{constructor(t,r){this.user=t+yG.SERVER_SUFFIX.ADMIN,this.password=r}};a(Go,"SysUserObject");SR.exports=Go});var Ut=h((gZ,mR)=>{"use strict";var Fo=Mu(),Lt=C(),DG=require("util"),Vo=Or(),MG=hs(),hl=I(),{handleHDBError:kr,hdb_errors:PG}=D(),{HTTP_STATUS_CODES:fs}=PG,BG=DG.promisify(MG.getTableSchema),vG="updated",fR="inserted",TR="upserted";mR.exports={insert:GG,update:qG,upsert:FG,validation:HG,flush:VG};async function HG(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await BG(e.schema,e.table),r=Fo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw hl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(HG,"validation");async function GG(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.createRecords(e);return qo(fR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(GG,"insertData");async function qG(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Lt.isEmpty(s.existing_rows)?qo(vG,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):qo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(qG,"updateData");async function FG(e){if(e.operation!=="upsert")throw kr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return qo(TR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw kr(s,null,null,hl.ERR,n)}}a(FG,"upsertData");function qo(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===fR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(qo,"returnObject");function VG(e){return Vo.flush(e.schema,e.table)}a(VG,"flush")});var Tl=h((IZ,OR)=>{var kG=Ee(),fl=require("joi"),{hdb_schema_table:RR}=Tr(),AR={schema:RR,table:RR},xG={date:fl.date().iso().required()},$G={timestamp:fl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OR.exports=function(e,t){let r=t==="timestamp"?{...AR,...$G}:{...AR,...xG},s=fl.object(r);return kG.validateBySchema(e,s)}});var IR=h((CZ,gR)=>{var YG=Ee(),pR=require("joi"),{hdb_schema_table:NR}=Tr(),KG=pR.object({schema:NR,table:NR,hash_values:pR.array().required()});gR.exports=function(e){return YG.validateBySchema(e,KG)}});var bR=h((bZ,CR)=>{"use strict";var ko=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ko,"InsertObject");var xo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(xo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");CR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var ms=h((wZ,DR)=>{"use strict";var LR=Tl(),QG=IR(),Yo=C(),wR=require("moment"),UR=I(),{promisify:WG,callbackify:JG}=require("util"),Ts=T(),ZG=hs(),ml=WG(ZG.getTableSchema),Rl=Or(),{DeleteResponseObject:XG}=bR(),{handleHDBError:xr,hdb_errors:zG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:$r}=zG,jG="records successfully deleted",eq=JG(yR);DR.exports={delete:eq,deleteRecord:yR,deleteFilesBefore:tq,deleteAuditLogsBefore:rq};async function tq(e){let t=LR(e,"date");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!wR(e.date,wR.ISO_8601).isValid())throw xr(new Error,Ko.INVALID_DATE,$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw xr(new Error,s,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);try{let n=await Rl.deleteRecordsBefore(e);if(await ml(e.schema,e.table),UR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(tq,"deleteFilesBefore");async function rq(e){let t=LR(e,"timestamp");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw xr(new Error,Ko.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{let s=await Rl.deleteAuditLogsBefore(e);return await ml(e.schema,e.table),UR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(rq,"deleteAuditLogsBefore");async function yR(e){let t=QG(e);if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await ml(e.schema,e.table);let s=await Rl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${jG}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new XG;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(yR,"deleteRecord")});var Qo=h((LZ,BR)=>{var sq=require("crypto"),MR=9;function nq(e){let t=aq(MR),r=PR(e+t);return t+r}a(nq,"createHash");function iq(e,t){let r=e.substr(0,MR),s=r+PR(t+r);return e===s}a(iq,"validateHash");function aq(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(aq,"generateSalt");function PR(e){return sq.createHash("md5").update(e).digest("hex")}a(PR,"md5");BR.exports={hash:nq,validate:iq}});var HR=h((UZ,vR)=>{var Al=Ee(),We={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function oq(e){return We.password.presence=!0,We.username.presence=!0,We.role.presence=!0,We.active.presence=!0,Al.validateObject(e,We)}a(oq,"addUserValidation");function cq(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(cq,"alterUserValidation");function _q(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(_q,"dropUserValidation");vR.exports={addUserValidation:oq,alterUserValidation:cq,dropUserValidation:_q}});var qR=h((yZ,GR)=>{"use strict";var Yr=T(),Ri=class{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ri,"BaseLicense");var Wo=class extends Ri{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ri,ExtendedLicense:Wo}});var Ai=h((DZ,YR)=>{"use strict";var dn=require("fs-extra"),FR=Qo(),VR=require("crypto"),uq=require("moment"),lq=require("uuid").v4,Je=I(),pl=require("path"),Eq=C(),mt=T(),dq=qR().ExtendedLicense,En="invalid license key format",Sq="061183",hq="mofi25",fq="aes-256-cbc",Tq=16,mq=32,kR=Y();kR.initSync();var Ol;YR.exports={validateLicense:xR,generateFingerPrint:Aq,licenseSearch:$R,getLicense:Nq};function Nl(){return pl.join(kR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(Nl,"getLicenseDirPath");function Rq(){let e=Nl();return pl.join(e,mt.LICENSE_FILE_NAME)}a(Rq,"getLicenseFilePath");function gl(){let e=Nl();return pl.join(e,mt.REG_KEY_FILE_NAME)}a(gl,"getFingerPrintFilePath");async function Aq(){let e=gl();try{return await dn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Oq();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(Aq,"generateFingerPrint");async function Oq(){let e=lq(),t=FR.hash(e),r=gl();try{await dn.mkdirp(Nl()),await dn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(Oq,"writeFingerprint");function xR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=gl(),n=!1;try{n=dn.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=dn.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(hq),c=o[1];c=Buffer.concat([Buffer.from(c)],Tq);let _=Buffer.concat([Buffer.from(i)],mq),u=VR.createDecipheriv(fq,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=pq(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(En),Je.error(En),new Error(En)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(En),Je.error(En),new Error(En)}else r.exp_date=l;r.exp_date<uq().valueOf()&&(r.valid_date=!1),FR.validate(o[1],`${Sq}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Je.error("Invalid licence"),r}a(xR,"validateLicense");function pq(e,t){try{let r=VR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(pq,"checkOldLicense");function $R(){let e=new dq;e.api_call=0;let t=[];try{t=dn.readFileSync(Rq(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Eq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=xR(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),Ol=e,e}a($R,"licenseSearch");async function Nq(){return Ol||await $R(),Ol}a(Nq,"getLicense")});var Kr=h((MZ,iA)=>{"use strict";var JR="username is required",ZR="nothing to update, must supply active, role or password to update",XR="password cannot be an empty string",zR="If role is specified, it cannot be empty.",jR="active must be true or false";iA.exports={addUser:yq,alterUser:Dq,dropUser:Pq,userInfo:Bq,listUsers:Zo,listUsersExternal:vq,setUsersToGlobal:Oi,findAndValidateUser:qq,getClusterUser:Fq,USERNAME_REQUIRED:JR,ALTERUSER_NOTHING_TO_UPDATE:ZR,EMPTY_PASSWORD:XR,EMPTY_ROLE:zR,ACTIVE_BOOLEAN:jR};var eA=Ut(),gq=ms(),Cl=Qo(),tA=HR(),rA=Tt(),bl=Zs(),Ce=C(),sA=require("validate.js"),H=I(),{promisify:wl}=require("util"),Ll=Fr(),Rs=T(),KR=Se(),Iq=hr(),Ul=Y(),Cq=Ai(),bq=as(),{handleHDBError:rr,hdb_errors:wq}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:Il,HDB_ERROR_MSGS:Sn}=wq,{UserEventMsg:yl}=us(),QR=require("lodash"),nA={username:!0,active:!0,role:!0,password:!0},WR=new Map,Jo=wl(rA.searchByValue),Lq=wl(rA.searchByHash),Uq=wl(gq.delete);async function yq(e){let t=sA.cleanAttributes(e,nA),r=tA.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Jo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,Sn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,Sn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,Sn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ADD_USER,_,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${c.username} successfully added`}a(yq,"addUser");async function Dq(e){let t=sA.cleanAttributes(e,nA);if(Ce.isEmptyOrZeroLength(t.username))throw new Error(JR);if(Ce.isEmptyOrZeroLength(t.password)&&Ce.isEmptyOrZeroLength(t.role)&&Ce.isEmptyOrZeroLength(t.active))throw new Error(ZR);if(!Ce.isEmpty(t.password)&&Ce.isEmptyOrZeroLength(t.password.trim()))throw new Error(XR);if(!Ce.isEmpty(t.active)&&!Ce.isBoolean(t.active))throw new Error(jR);let r=Mq(t.username);if(!Ce.isEmpty(t.password)&&!Ce.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password)),t.role==="")throw new Error(zR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Jo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=Sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=Sn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await eA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),n}a(Dq,"alterUser");function Mq(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Mq,"isClusterUser");async function Pq(e){try{let t=tA.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Ce.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,Sn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Uq(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.DROP_USER,n,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Pq,"dropUser");async function Bq(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Lq(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(Bq,"userInfo");async function vq(){let e;try{e=await Zo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(vq,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=QR.cloneDeep(await Jo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!Ce.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=QR.cloneDeep(await Jo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],Hq(c.role),i.set(c.username,c)}return(await Cq.getLicense()).enterprise?i:Gq(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),Ce.errorizeMessage(e)}return null}a(Zo,"listUsers");function Hq(e){try{if(!e){H.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(bq)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(Hq,"appendSystemTablesToRole");function Gq(e){try{if(H.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(Gq,"nonEnterpriseFilter");async function Oi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function qq(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,Il.USER_INACTIVE,sr.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(WR.get(t)===s.password)return n;if(Cl.validate(s.password,t))WR.set(t,s.password);else throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qq,"findAndValidateUser");async function Fq(){let e=await Zo(),t=Iq.getConfigFromFile(Rs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ce.isEmpty(r))return r.decrypt_hash=Ll.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KR.SERVER_SUFFIX.ADMIN,r}a(Fq,"getClusterUser")});var Xo=h((PZ,aA)=>{"use strict";var Vq=Or();aA.exports={writeTransaction:kq};function kq(e,t,r){return Vq.writeTransaction(e,t,r)}a(kq,"writeTransaction")});var Dl=h((BZ,xq)=>{xq.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 Rt=h((KZ,CA)=>{"use strict";var nr=Y();nr.initSync();var $q=require("fs-extra"),Yq=require("semver"),Ci=require("path"),{monotonicFactory:Kq}=require("ulidx"),Qq=Kq(),cA=require("util"),_A=require("child_process"),Wq=cA.promisify(_A.exec),Jq=_A.spawn,ee=Se(),se=T(),Gl=C(),pr=I(),zo=Fr(),Zq=Xo(),pi=hr(),{encode:Bl,decode:uA}=require("msgpackr"),{isEmpty:As}=Gl,lA=Kr(),vZ=Es(),Xq=Tt(),HZ=cA.promisify(Xq.searchByHash),{connect:zq,StorageType:EA,RetentionPolicy:dA,AckPolicy:SA,DeliverPolicy:vl,NatsConnection:GZ,JetStreamManager:qZ,JetStreamClient:FZ,StringCodec:VZ,JSONCodec:jq,createInbox:ql,StreamSource:kZ,headers:eF,toJsMsg:tF,nuid:xZ,JetStreamOptions:$Z,ErrorCode:oA,nanos:YZ}=require("nats"),{PACKAGE_ROOT:rF}=T(),sF=Dl(),hA=jq(),nF="clustering",iF=sF.engines[ee.NATS_SERVER_NAME],aF=Ci.join(rF,"dependencies"),Hl=Ci.join(aF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ml,Pl,Ni,gi,Ii,Qt;CA.exports={runCommand:fA,checkNATSServerInstalled:oF,createConnection:Fl,getConnection:jo,getJetStreamManager:hn,getJetStream:TA,getNATSReferences:yt,getServerList:_F,createLocalStream:Vl,listStreams:mA,deleteLocalStream:uF,getServerConfig:bi,listRemoteStreams:lF,viewStream:EF,publishToStream:dF,createWorkQueueStream:SF,addSourceToWorkStream:RA,request:hF,removeSourceFromWorkStream:OA,reloadNATS:kl,reloadNATSHub:fF,reloadNATSLeaf:TF,extractServerName:AA,requestErrorHandler:mF,updateWorkStream:RF,createLocalTableStream:NA,createTableStreams:AF,purgeTableStream:gA,purgeSchemaTableStreams:OF,getStreamInfo:pF,updateNodeNameLocalStreams:NF,closeConnection:cF};async function fA(e,t=void 0){let{stdout:r,stderr:s}=await Wq(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
4
|
+
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:dw.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Tw,"findPs")});var Ye=h((n1,ES)=>{"use strict";var mw="__dbis__",Rw="__environment_name__",Aw="__dbi_defintion__",Ow={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},pw=["__createdtime__","__updatedtime__"],Nw="\uFFFF",lS={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},gw=Object.values(lS);ES.exports={INTERNAL_DBIS_NAME:mw,DBI_DEFINITION_NAME:Aw,SEARCH_TYPES:Ow,TIMESTAMP_NAMES:pw,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Rw,TRANSACTIONS_DBI_NAMES_ENUM:lS,TRANSACTIONS_DBIS:gw,OVERFLOW_MARKER:Nw}});var rt=h((i1,OS)=>{"use strict";var dS=T(),SS=Ye(),hS={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},fS=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),TS={500:fS("There was an error processing your request."),400:"Invalid request"},Iw=TS[hS.INTERNAL_SERVER_ERROR],Cw={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},bw={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},ww={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Lw={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ARRAY:"ids must be an array",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${SS.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${SS.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Uw={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dS.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 ${dS.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"},mS={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},yw={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid schema items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' schema, tables and records are used internally by HarperDB and cannot be updated or removed."},Dw={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view schema metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view schema.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},Mw={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`Schema '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`Schema '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in schema '${e}'`,SCHEMA_REQUIRED_ERR:"schema is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},Pw={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Bw={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},RS={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.`},AS={INVALID_IPC_DATA_TYPE:"Invalid IPC event data type, must be an object",MISSING_TYPE:"IPC event missing 'type'",MISSING_MSG:"IPC event missing 'message'",MISSING_ORIGIN:"IPC event message missing 'originator' property",INVALID_EVENT:e=>`IPC server received invalid event type: ${e}`},vw={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set customFunctions enabled to true in hdb/harperdb-config.yaml file."},Hw={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Gw={...mS,...ww,...Cw,...yw,...Dw,...Mw,...Pw,...Bw,...Uw,...RS,...AS,...vw,...Hw,...bw};OS.exports={CHECK_LOGS_WRAPPER:fS,HDB_ERROR_MSGS:Gw,DEFAULT_ERROR_MSGS:TS,DEFAULT_ERROR_RESP:Iw,HTTP_STATUS_CODES:hS,LMDB_ERRORS_ENUM:Lw,AUTHENTICATION_ERROR_MSGS:mS,VALIDATION_ERROR_MSGS:RS,IPC_ERRORS:AS}});var D=h((a1,gS)=>{"use strict";var $s=rt(),qw=I(),Fw=T(),$n=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,pS),this.http_resp_code=s||$s.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($s.DEFAULT_ERROR_MSGS[s]?$s.DEFAULT_ERROR_MSGS[s]:$s.DEFAULT_ERROR_MSGS[$s.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,typeof this.message!="string"&&(this.stack=t.stack),i&&qw[n](i)}};a($n,"HdbError");function pS(e,t,r,s=Fw.LOG_LEVELS.ERROR,n=null,i=!1){if(NS(e))return e;let o=new $n(e,t,r,s,n);return i&&delete o.stack,o}a(pS,"handleHDBError");function NS(e){return e.__proto__.constructor.name===$n.name}a(NS,"isHDBError");gS.exports={isHDBError:NS,handleHDBError:pS,hdb_errors:$s}});var C=h((c1,qS)=>{"use strict";var su=require("path"),Vw=require("fs-extra"),Ie=I(),IS=require("fs-extra"),kw=require("truncate-utf8-bytes"),Yn=require("os"),xw=require("net"),$w=require("recursive-iterator"),Ue=T(),US=uS(),CS=require("papaparse"),ma=require("moment"),{inspect:Yw}=require("util"),bS=require("is-number"),o1=require("lodash"),{hdb_errors:Ra}=D(),yS=require("util").promisify(setTimeout),Kw=100,Qw=5,Ww="",Jw=4,wS=255,LS={true:!0,false:!1,undefined:null,null:null,NaN:NaN};qS.exports={isEmpty:St,isEmptyOrZeroLength:Xt,arrayHasEmptyValues:zw,arrayHasEmptyOrZeroLengthValues:jw,buildFolderPath:eL,isBoolean:DS,errorizeMessage:Zw,stripFileExtension:rL,autoCast:sL,autoCastJSONDeep:nu,removeDir:iL,compareVersions:aL,isCompatibleDataVersion:oL,escapeRawValue:PS,unescapeValue:cL,stringifyProps:_L,valueConverter:uL,timeoutPromise:EL,isClusterOperation:SL,getClusterUser:TL,sendTransactionToSocketCluster:hL,checkGlobalSchemaTable:fL,getHomeDir:BS,getPropsFilePath:lL,promisifyPapaParse:mL,removeBOM:vS,createEventPromise:RL,checkProcessRunning:AL,checkSchemaTableExist:OL,checkSchemaExists:HS,checkTableExists:GS,getStartOfTomorrowInSeconds:pL,getLimitKey:NL,isObject:tL,isNotEmptyAndHasValue:Xw,autoCasterIsNumberCheck:MS,backtickASTSchemaItems:gL,isPortTaken:dL,stopProcess:IL,createForkArgs:CL,autoCastBoolean:bL,async_set_timeout:yS,getTableHashAttribute:wL,doesSchemaExist:LL,doesTableExist:UL,stringifyObj:yL,ms_to_time:DL,PACKAGE_ROOT:Ue.PACKAGE_ROOT};function Zw(e){return e instanceof Error?e:new Error(e)}a(Zw,"errorizeMessage");function St(e){return e==null}a(St,"isEmpty");function Xw(e){return!St(e)&&(e||e===0||e===""||DS(e))}a(Xw,"isNotEmptyAndHasValue");function Xt(e){return St(e)||e.length===0||e.size===0}a(Xt,"isEmptyOrZeroLength");function zw(e){if(St(e))return!0;for(let t=0;t<e.length;t++)if(St(e[t]))return!0;return!1}a(zw,"arrayHasEmptyValues");function jw(e){if(Xt(e))return!0;for(let t=0;t<e.length;t++)if(Xt(e[t]))return!0;return!1}a(jw,"arrayHasEmptyOrZeroLengthValues");function eL(...e){try{return e.join(su.sep)}catch{console.error(e)}}a(eL,"buildFolderPath");function DS(e){return St(e)?!1:e===!0||e===!1}a(DS,"isBoolean");function tL(e){return St(e)?!1:typeof e=="object"}a(tL,"isObject");function rL(e){return Xt(e)?Ww:e.slice(0,-Jw)}a(rL,"stripFileExtension");function sL(e){return St(e)||e===""||typeof e!="string"?e:LS[e]!==void 0?LS[e]:MS(e)===!0?Number(e):e}a(sL,"autoCast");function nL(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(nL,"autoCastJSON");function nu(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=nu(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=nu(r);s!==r&&(e[t]=s)}return e}else return nL(e)}a(nu,"autoCastJSONDeep");function MS(e){if(e.startsWith("0.")&&bS(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&bS(e))}a(MS,"autoCasterIsNumberCheck");async function iL(e){if(Xt(e))throw new Error(`Directory path: ${e} does not exist`);try{await IS.emptyDir(e),await IS.remove(e)}catch(t){throw Ie.error(`Error removing files in ${e} -- ${t}`),t}}a(iL,"removeDir");function aL(e,t){if(Xt(e)){Ie.info("Invalid current version sent as parameter.");return}if(Xt(t)){Ie.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(o.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(aL,"compareVersions");function oL(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(oL,"isCompatibleDataVersion");function PS(e){if(St(e))return e;let t=String(e);return t==="."?Ue.UNICODE_PERIOD:t===".."?Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD:t.replace(Ue.FORWARD_SLASH_REGEX,Ue.UNICODE_FORWARD_SLASH)}a(PS,"escapeRawValue");function cL(e){if(St(e))return e;let t=String(e);return t===Ue.UNICODE_PERIOD?".":t===Ue.UNICODE_PERIOD+Ue.UNICODE_PERIOD?"..":String(e).replace(Ue.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(cL,"unescapeValue");function _L(e,t){if(St(e))return Ie.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Yn.EOL}!Xt(s)&&s[0]===";"?r+=" "+s+n+Yn.EOL:Xt(s)||(r+=s+"="+n+Yn.EOL)}catch{Ie.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(_L,"stringifyProps");function uL(e){let t;try{t=typeof e=="object"?JSON.stringify(e):e}catch(n){Ie.error(n),t=e}let r=String(PS(t)),s=Buffer.byteLength(r)>wS?kw(r,wS)+"/blob":r;return{value:t,value_stripped:r,value_path:s}}a(uL,"valueConverter");function BS(){let e;try{e=Yn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(BS,"getHomeDir");function lL(){let e=su.join(BS(),Ue.HDB_HOME_DIR_NAME,Ue.BOOT_PROPS_FILE_NAME);return Vw.existsSync(e)||(e=su.join(__dirname,"../","hdb_boot_properties.file")),e}a(lL,"getPropsFilePath");function EL(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(EL,"timeoutPromise");async function dL(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=xw.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(dL,"isPortTaken");function SL(e){try{return Ue.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Ie.error(`Error checking operation against cluster ops ${t}`)}return!1}a(SL,"isClusterOperation");function hL(e,t,r){if(global.hdb_socket_client!==void 0){Ie.trace(`Sending transaction to channel: ${e}`);let{hdb_user:s,hdb_auth_header:n,...i}=t;i.__originator||(i.__originator={}),i.__transacted=!0,r&&(i.__originator[r]=Ue.ORIGINATOR_SET_VALUE),global.hdb_socket_client.publish(e,i)}}a(hL,"sendTransactionToSocketCluster");function fL(e,t){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(fL,"checkGlobalSchemaTable");function TL(e,t){if(St(t)){Ie.warn("No CLUSTERING_USER defined, clustering disabled");return}if(St(e)||Xt(e)){Ie.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){Ie.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Ie.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(TL,"getClusterUser");function mL(){CS.parsePromise=function(e,t){return new Promise(function(r,s){CS.parse(e,{header:!0,transformHeader:vS,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}a(mL,"promisifyPapaParse");function vS(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(vS,"removeBOM");function RL(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Ie.info(`Got cluster status event response: ${Yw(n)}`);try{i.cancel()}catch{Ie.error("Error trying to cancel timeout.")}s(n)})})}a(RL,"createEventPromise");async function AL(e){let t=!0,r=0;do await yS(Kw*r++),(await US.findPs(e)).length>0&&(t=!1);while(t&&r<Qw);if(t)throw new Error(`process ${e} was not started`)}a(AL,"checkProcessRunning");function OL(e,t){let r=HS(e);if(r)return r;let s=GS(e,t);if(s)return s}a(OL,"checkSchemaTableExist");function HS(e){if(!global.hdb_schema[e])return Ra.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(HS,"checkSchemaExists");function GS(e,t){if(!global.hdb_schema[e][t])return Ra.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GS,"checkTableExists");function pL(){let e=ma().utc().add(1,Ue.MOMENT_DAYS_TAG).startOf(Ue.MOMENT_DAYS_TAG).unix(),t=ma().utc().unix();return e-t}a(pL,"getStartOfTomorrowInSeconds");function NL(){return ma().utc().format("DD-MM-YYYY")}a(NL,"getLimitKey");function gL(e){try{let t=new $w(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){Ie.error("Got an error back ticking items."),Ie.error(t)}}a(gL,"backtickASTSchemaItems");async function IL(e){let t=Yn.userInfo();(await US.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Ie.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}a(IL,"stopProcess");function CL(e){return[e]}a(CL,"createForkArgs");function bL(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(bL,"autoCastBoolean");function wL(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}a(wL,"getTableHashAttribute");function LL(e){return global?.hdb_schema?.[e]!==void 0}a(LL,"doesSchemaExist");function UL(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}a(UL,"doesTableExist");function yL(e){try{return JSON.stringify(e)}catch{return e}}a(yL,"stringifyObj");function DL(e){let t=ma.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(DL,"ms_to_time")});var as=h((_1,ML)=>{ML.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var zS=h((l1,XS)=>{"use strict";var iu=require("recursive-iterator"),PL=require("alasql"),au=require("clone"),FS=C(),{handleHDBError:VS,hdb_errors:BL}=D(),{HDB_ERROR_MSGS:kS,HTTP_STATUS_CODES:xS}=BL,vL=["DISTINCT_ARRAY"],$S=Symbol("validateTables"),ou=Symbol("validateTable"),u1=Symbol("getAllColumns"),YS=Symbol("validateAllColumns"),Aa=Symbol("findColumn"),KS=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),cu=Symbol("validateColumn"),QS=Symbol("setColumnsForTable"),WS=Symbol("checkColumnsForAsterisk"),JS=Symbol("validateGroupBy"),ZS=Symbol("hasColumns"),Oa=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$S](),this[WS](),this[YS]()}[$S](){if(this[ZS]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ou](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ou](t.table)})}}[ZS](){let t=!1,r=new iu(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ou](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw VS(new Error,kS.SCHEMA_NOT_FOUND(t.databaseid),xS.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw VS(new Error,kS.TABLE_NOT_FOUND(t.databaseid,t.tableid),xS.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=au(s);n.table=au(t),this.attributes.push(n)})}[Aa](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[WS](){let t=new iu(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[QS](r.tableid)}[QS](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new PL.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[YS](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[JS](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new iu(t),n=[];for(let{node:i,path:o}of s)!FS.isEmpty(i)&&!FS.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[KS](i):n.push(this[cu](i)));return n}[JS](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&vL.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=au(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Aa](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Aa](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[KS](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[cu](t)}[cu](t){let r=this[Aa](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};a(Oa,"SelectValidator");XS.exports=Oa});var _u=h((E1,jS)=>{"use strict";var pa=class{createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};a(pa,"BridgeMethods");jS.exports=pa});var os=h((h1,sh)=>{"use strict";var eh=rt().LMDB_ERRORS_ENUM,d1=require("lmdb"),HL=Ye(),S1=require("buffer").Buffer,GL=require("microtime"),{OVERFLOW_MARKER:th,MAX_SEARCH_KEY_LENGTH:Na}=HL,rh=["number","string","symbol","boolean","bigint"];function qL(e){if(!e)throw new Error(eh.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(eh.INVALID_ENVIRONMENT)}a(qL,"validateEnv");function FL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(FL,"stringifyData");function VL(e){return e instanceof Date?e.valueOf():e}a(VL,"convertKeyValueToWrite");function kL(e){if(e==null)return;if(rh.includes(typeof e))return e.length>Na?[e.slice(0,Na)+th]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];rh.includes(typeof n)&&(n.length>Na?t.push(n.slice(0,Na)+th):t.push(n))}}return t}a(kL,"getIndexedValues");function xL(){let e=GL.now().toString(),t=e.length-3;return Number(e.slice(0,t)+"."+e.slice(t))}a(xL,"getMicroTime");sh.exports={validateEnv:qL,stringifyData:FL,convertKeyValueToWrite:VL,getMicroTime:xL,getIndexedValues:kL}});var ih=h((f1,nh)=>{"use strict";var ga=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};a(ga,"DBIDefinition");nh.exports=ga});var oh=h((T1,ah)=>{"use strict";var Ia=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache={validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};a(Ia,"OpenDBIObject");ah.exports=Ia});var _h=h((m1,ch)=>{"use strict";var Ca=class{constructor(t,r,s,n,i=!1,o=!1,c=void 0){this.path=t,this.mapSize=r,this.maxDbs=s,this.maxReaders=n,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=i,this.trackMetrics=!0,this.noSync=o,c!==void 0&&(this.overlappingSync=c)}};a(Ca,"OpenEnvironmentObject");ch.exports=Ca});var lh=h((R1,uh)=>{"use strict";var $L={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},YL="certificate.pem",KL="privateKey.pem",QL="ca.pem";uh.exports={CERTIFICATE_VALUES:$L,CERTIFICATE_PEM_NAME:YL,PRIVATEKEY_PEM_NAME:KL,CA_PEM_NAME:QL}});var Ee=h((A1,Eh)=>{"use strict";var st=require("validate.js");st.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||st.validators.type.checks[t](e)?null:` must be a '${t}' value`};st.validators.type.checks={Object:function(e){return st.isObject(e)&&!st.isArray(e)},Array:st.isArray,Integer:st.isInteger,Number:st.isNumber,String:st.isString,Date:st.isDate,Boolean:function(e){return typeof e=="boolean"}};st.validators.hasValidFileExt=function(e,t){return!st.isString(e)||e===""||t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`};Eh.exports={validateObject:WL,validateObjectAsync:JL,validateBySchema:ZL};function WL(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=st(e,t,{format:"flat"});return r?new Error(r):null}a(WL,"validateObject");async function JL(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await st.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(JL,"validateObjectAsync");function ZL(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(ZL,"validateBySchema")});var lu=h((O1,Sh)=>{"use strict";var XL=require("fs-extra"),F=require("joi"),zL=require("os"),{boolean:ye,string:dr,number:zt,array:uu}=F.types(),qt=require("path"),jL=I(),ba=C(),Sr=lh(),eU=Ee(),Er="keys",tU=Sr.CERTIFICATE_PEM_NAME,rU=Sr.PRIVATEKEY_PEM_NAME,sU=Sr.CA_PEM_NAME,nU=Sr.CERTIFICATE_PEM_NAME,iU=Sr.PRIVATEKEY_PEM_NAME,aU=Sr.CA_PEM_NAME,oU=Sr.CERTIFICATE_PEM_NAME,cU=Sr.PRIVATEKEY_PEM_NAME,_U=Sr.CA_PEM_NAME,uU="log",lU="custom_functions",EU="Invalid logging.rotation.maxSize unit. Available units are G, M or K",dU="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SU="rootPath config parameter is undefined",hU="clustering.enabled config parameter is undefined",Pr=zt.min(0).required(),wa=uu.items({host:dr.required(),port:Pr}).empty(null),nt;Sh.exports={configValidator:fU,routesValidator:OU,route_constraints:wa};function fU(e){if(nt=e.rootPath,ba.isEmpty(nt))throw SU;let t=ye.required(),r=F.valid("production","development").required(),s=zt.min(1).max(1e3).empty(null).default(AU),n=dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(dh),i=F.custom(mU).messages({"any.custom":"{:#label} {:#error}"}).empty(null).default(dh),o=dr.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),c=e.clustering?.enabled;if(ba.isEmpty(c))throw hU;let _;return c===!0?_=F.object({enabled:t,hubServer:F.object({cluster:F.object({name:F.required().empty(null),network:F.object({port:Pr,routes:wa}).required()}).required(),leafNodes:F.object({network:F.object({port:Pr}).required()}).required(),network:F.object({port:Pr}).required()}).required(),leafServer:F.object({network:F.object({port:Pr,routes:wa}).required()}).required(),nodeName:o,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()}),user:F.string().required()}).required():_=F.object({enabled:t,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ye.required()})}).required(),F.object({clustering:_,customFunctions:F.object({enabled:t,network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}),nodeEnv:r,root:n,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),ipc:F.object({network:F.object({port:Pr})}).required(),localStudio:F.object({enabled:t}).required(),logging:F.object({file:ye.required(),level:F.valid("notify","fatal","error","warn","info","debug","trace"),rotation:F.object({compress:ye.required(),dateFormat:dr.required(),maxSize:dr.custom(RU).required(),retain:zt.min(0).required(),rotate:ye.required(),rotateInterval:dr.required(),rotateModule:ye.required(),timezone:dr.required(),workerInterval:zt.min(1).required()}).required(),root:n,stdStreams:ye.required(),auditLog:ye.required()}).required(),operationsApi:F.object({authentication:F.object({operationTokenTimeout:F.required(),refreshTokenTimeout:F.required()}).required(),foreground:ye.required(),network:F.object({cors:ye.required(),corsAccessList:uu.required(),headersTimeout:zt.min(1).required(),https:ye.required(),keepAliveTimeout:zt.min(1).required(),port:Pr,timeout:zt.min(1).required()}).required(),nodeEnv:r,tls:F.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:F.object({threads:s}).required(),storage:F.object({writeAsync:ye.required(),overlappingSync:ye.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fU,"configValidator");function TU(e){return XL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(TU,"doesPathExist");function mU(e,t){F.assert(e,dr.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+\.pem+$/).messages({"string.pattern.base":"must be a valid directory path and specify a .pem file"}));let r=TU(e);if(r)return t.message(r)}a(mU,"validatePemFile");function RU(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EU);let s=e.slice(0,-1);if(isNaN(parseInt(s)))return t.message(dU)}a(RU,"validateRotationMaxSize");function AU(e,t){let r=t.state.path.join("."),s=zL.cpus().length,n=s-1;return n<=2&&(n=2),jL.info(`Detected ${s} cores on this machine, defaulting ${r} to ${n}`),n}a(AU,"setDefaultThreads");function dh(e,t){if(!ba.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ba.isEmpty(nt))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return qt.join(nt,lU);case"logging.root":return qt.join(nt,uU);case"operationsApi.tls.certificate":return qt.join(nt,Er,tU);case"operationsApi.tls.privateKey":return qt.join(nt,Er,rU);case"operationsApi.tls.certificateAuthority":return qt.join(nt,Er,sU);case"customFunctions.tls.certificate":return qt.join(nt,Er,nU);case"customFunctions.tls.privateKey":return qt.join(nt,Er,iU);case"customFunctions.tls.certificateAuthority":return qt.join(nt,Er,aU);case"clustering.tls.certificate":return qt.join(nt,Er,oU);case"clustering.tls.privateKey":return qt.join(nt,Er,cU);case"clustering.tls.certificateAuthority":return qt.join(nt,Er,_U);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(dh,"setDefaultRoot");function OU(e){let t=F.object({routes:wa});return eU.validateBySchema({routes:e},t)}a(OU,"routesValidator")});var hr=h((p1,Oh)=>{"use strict";var re=T(),It=C(),Ke=I(),{configValidator:pU,routesValidator:hh}=lu(),Ft=require("fs-extra"),NU=require("yaml"),Ys=require("path"),gU=require("is-number"),ya=require("properties-reader"),IU=require("lodash"),{handleHDBError:CU}=D(),{HTTP_STATUS_CODES:bU,HDB_ERROR_MSGS:La}=rt(),{PACKAGE_ROOT:wU}=T(),LU="Unable to get config value because config is uninitialized",UU="Config successfully initialized",yU="Error backing up config file",DU="Empty parameter sent to getConfigValue",fh=Ys.join(wU,"config","yaml",re.HDB_DEFAULT_CONFIG_FILE),MU="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Ua,it;Oh.exports={createConfigFile:PU,getDefaultConfig:BU,getConfigValue:Th,initConfig:mh,flattenConfig:cs,updateConfigValue:Rh,updateConfigObject:vU,getConfiguration:HU,setConfiguration:GU,readConfigFile:Su,getClusteringRoutes:qU,initOldConfig:Ah,getConfigFromFile:FU};function PU(e){let t=Ks(fh);Ua=cs(t.toJSON());for(let i in e){let o=re.CONFIG_PARAM_MAP[i.toLowerCase()];if(o!==void 0){let c=o.split("_"),_=Eu(o,e[i]);try{t.setIn([...c],_)}catch(u){Ke.error(u)}}}du(t);let r=t.toJSON();it=cs(r);let s=t.getIn(["rootPath"]),n=Ys.join(s,re.HDB_CONFIG_FILE);Ft.createFileSync(n),Ft.writeFileSync(n,String(t)),Ke.trace(`Config file written to ${n}`)}a(PU,"createConfigFile");function BU(e){if(Ua===void 0){let r=Ks(fh);Ua=cs(r.toJSON())}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return Ua[t.toLowerCase()]}a(BU,"getDefaultConfig");function Th(e){if(It.isEmpty(e)){Ke.error(DU);return}if(it===void 0){Ke.trace(LU);return}let t=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(t!==void 0)return it[t.toLowerCase()]}a(Th,"getConfigValue");function mh(e=!1){if(it===void 0||e){let t=It.getPropsFilePath();try{Ft.accessSync(t,Ft.constants.F_OK|Ft.constants.R_OK)}catch(o){throw Ke.error(o),new Error(`HarperDB properties file at path ${t} does not exist`)}let s=ya(t).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),n;if(s.includes("config/settings.js"))try{Ah(s);return}catch(o){if(o.code!==re.NODE_ERROR_CODES.ENOENT)throw o}try{n=Ks(s)}catch(o){if(o.code===re.NODE_ERROR_CODES.ENOENT){Ke.trace(`HarperDB config file not found at ${s}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw Ke.error(o),new Error(`Error reading HarperDB config file at ${s}`)}du(n);let i=n.toJSON();it=cs(i),Ke.trace(UU)}}a(mh,"initConfig");function du(e){let t=e.toJSON(),r=pU(t);if(r.error)throw La.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["operationsApi","tls","certificate"],r.value.operationsApi.tls.certificate),e.setIn(["operationsApi","tls","privateKey"],r.value.operationsApi.tls.privateKey),e.setIn(["operationsApi","tls","certificateAuthority"],r.value.operationsApi.tls.certificateAuthority),e.setIn(["customFunctions","tls","certificate"],r.value.customFunctions.tls.certificate),e.setIn(["customFunctions","tls","privateKey"],r.value.customFunctions.tls.privateKey),e.setIn(["customFunctions","tls","certificateAuthority"],r.value.customFunctions.tls.certificateAuthority),e.setIn(["clustering","tls","certificate"],r.value.clustering.tls.certificate),e.setIn(["clustering","tls","privateKey"],r.value.clustering.tls.privateKey),e.setIn(["clustering","tls","certificateAuthority"],r.value.clustering.tls.certificateAuthority)}a(du,"validateConfig");function vU(e,t){it===void 0&&(it={});let r=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(r===void 0){Ke.trace(`Unable to update config object because config param '${e}' does not exist`);return}it[r.toLowerCase()]=t}a(vU,"updateConfigObject");function Rh(e,t,r=void 0,s=!1,n=!1){it===void 0&&mh();let i=Th(re.CONFIG_PARAM_MAP.hdb_root),o=Ys.join(i,re.HDB_CONFIG_FILE),c=Ks(o);if(r===void 0){let l=re.CONFIG_PARAM_MAP[e.toLowerCase()];if(l===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=l.split("_"),d=Eu(l,t);c.setIn([...E],d)}else for(let l in r){let E=re.CONFIG_PARAM_MAP[l.toLowerCase()];if(E!==void 0){let d=E.split("_"),S=Eu(E,r[l]);try{c.setIn([...d],S)}catch(m){Ke.error(m)}}}du(c);let _=c.getIn(["rootPath"]),u=Ys.join(_,re.HDB_CONFIG_FILE);if(s===!0)try{let l=Ys.join(_,"backup",`${re.HDB_CONFIG_FILE}.bak`);Ft.copySync(o,l),Ke.trace(`Config file: ${o} backed up to: ${l}`)}catch(l){Ke.error(yU),Ke.error(l)}Ft.writeFileSync(u,String(c)),n&&(it=cs(c.toJSON())),Ke.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Rh,"updateConfigValue");function cs(e){let t={};for(let r in e)if(!!e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])){let s=cs(e[r]);for(let n in s)!s.hasOwnProperty(n)||(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(cs,"flattenConfig");function Eu(e,t){if(e===re.CONFIG_PARAMS.CLUSTERING_NODENAME||e===re.CONFIG_PARAMS.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(gU(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return It.autoCast(t)}a(Eu,"castConfigValue");function HU(){let e=It.getPropsFilePath(),r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(HU,"getConfiguration");async function GU(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Rh(void 0,void 0,n,!0),MU}catch(i){throw typeof i=="string"||i instanceof String?CU(i,i,bU.BAD_REQUEST,void 0,void 0,!0):i}}a(GU,"setConfiguration");function Su(){let e=It.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(n){throw Ke.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let r=ya(e).get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);return Ks(r).toJSON()}a(Su,"readConfigFile");function Ks(e){return NU.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ks,"parseYamlDoc");function qU(){let e=Su(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=hh(t);if(r)throw La.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=hh(s);if(n)throw La.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw La.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(qU,"getClusteringRoutes");function Ah(e){let t=ya(e);it={};for(let r in re.CONFIG_PARAM_MAP){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=re.CONFIG_PARAM_MAP[r].toLowerCase();n===re.CONFIG_PARAMS.LOGGING_ROOT?it[n]=Ys.dirname(s):it[n]=s}return it}a(Ah,"initOldConfig");function FU(e){let t=Su();return IU.get(t,e.replaceAll("_","."))}a(FU,"getConfigFromFile")});var Y=h((N1,Nh)=>{"use strict";var hu=require("fs-extra"),jt=require("path"),VU=require("os"),kU=require("properties-reader"),Qn=I(),Qs=C(),M=T(),Da=hr(),xU="Error initializing environment manager",Ma="BOOT_PROPS_FILE_PATH",ph=!1,$U={[M.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},fr={};Nh.exports={BOOT_PROPS_FILE_PATH:Ma,getHdbBasePath:YU,setHdbBasePath:KU,get:QU,initSync:JU,setProperty:$,initTestEnvironment:ZU};function YU(){return fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(YU,"getHdbBasePath");function KU(e){fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(KU,"setHdbBasePath");function QU(e){let t=Da.getConfigValue(e);return t===void 0?fr[e]:t}a(QU,"get");function $(e,t){$U[e]&&(fr[e]=t),Da.updateConfigObject(e,t)}a($,"setProperty");function WU(){let e;try{e=Qs.getPropsFilePath(),hu.accessSync(e,hu.constants.F_OK|hu.constants.R_OK),ph=!0;let t=kU(e);return fr[M.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(M.HDB_SETTINGS_NAMES.INSTALL_USER),fr[M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),fr[Ma]=e,!0}catch{return Qn.trace(`Environment manager found no properties file at ${e}`),!1}}a(WU,"doesPropFileExist");function JU(e=!1){try{(ph||WU())&&(Da.initConfig(e),fr[M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Da.getConfigValue(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Qn.error(xU),Qn.error(t),console.error(t),process.exit(1)}}a(JU,"initSync");function ZU(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,_=jt.join(__dirname,"../../","unitTests");fr[Ma]=jt.join(_,"hdb_boot_properties.file"),$(M.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,jt.join(_,"settings.test")),$(M.HDB_SETTINGS_NAMES.INSTALL_USER,VU.userInfo().username),$(M.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.HDB_SETTINGS_NAMES.CERT_KEY,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,jt.join(_,"envDir","utility","keys","privateKey.pem")),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,jt.join(_,"envDir","utility","keys","certificate.pem")),$(M.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),$(M.HDB_SETTINGS_NAMES.LOG_PATH_KEY,jt.join(_,"envDir","log")),$(M.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),$(M.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),$(M.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,jt.join(_,"envDir")),$(M.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Qs.isEmpty(n)?!0:n),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Qs.isEmpty(n)?!0:n),$(M.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),$(M.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Qs.isEmpty(i)?!1:i),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Qs.isEmpty(i)?!1:i),$(M.HDB_SETTINGS_NAMES.IPC_SERVER_PORT,9383),$(M.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),$(M.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),$(M.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,jt.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),$(M.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Qs.isEmpty(c)?!1:c),o&&($("CORS_ACCESSLIST",o),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&($(M.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&($(M.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&($(M.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),$(M.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ma}. Please check your boot props and settings files`;Qn.fatal(r),Qn.error(t)}}a(ZU,"initTestEnvironment")});var z=h((I1,Bh)=>{"use strict";var fu=require("lmdb"),Ct=require("fs-extra"),Vt=require("path"),Ba=os(),gh=I(),De=rt().LMDB_ERRORS_ENUM,va=ih(),Tu=oh(),Ih=_h(),Br=Ye(),g1=T(),Wn=Y();Wn.initSync();var Ch=Wn.get("STORAGE_WRITEASYNC")===!0||Wn.get("STORAGE_WRITEASYNC")==="true"||Wn.get("STORAGE_WRITEASYNC")==="TRUE",bh=Wn.get("STORAGE_OVERLAPPINGSYNC"),wh=1024*1024*1024,Lh=1e4,Uh=1e3,kt=Br.INTERNAL_DBIS_NAME,yh=Br.DBI_DEFINITION_NAME,XU="data.mdb",zU="lock.mdb",Jn=".mdb",jU="-lock",Pa=class{constructor(t,r,s=!1){this.dbi=bt(t,r),this.key_type=this.dbi[Br.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Br.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new fu.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};a(Pa,"TransactionCursor");function mu(e,t){if(e===void 0)throw new Error(De.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(De.ENV_NAME_REQUIRED)}a(mu,"pathEnvNameValidation");async function Ru(e,t,r=!0){try{await Ct.access(e)}catch(s){throw s.code==="ENOENT"?new Error(De.INVALID_BASE_PATH):s}try{let s=Vt.join(e,t+Jn);return await Ct.access(s,Ct.constants.R_OK|Ct.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ct.access(Vt.join(e,t,XU),Ct.constants.R_OK|Ct.constants.F_OK),Vt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(De.INVALID_ENVIRONMENT)}else throw new Error(De.INVALID_ENVIRONMENT);throw s}}a(Ru,"validateEnvironmentPath");function Ha(e,t){if(Ba.validateEnv(e),t===void 0)throw new Error(De.DBI_NAME_REQUIRED)}a(Ha,"validateEnvDBIName");async function ey(e,t,r=!1,s=!1){mu(e,t),t=t.toString();try{return await Ru(e,t,s),Au(e,t,r)}catch(n){if(n.message===De.INVALID_ENVIRONMENT){let i=Vt.join(e,t);await Ct.mkdirp(s?i:e);let o=new Ih(s?i:i+Jn,wh,Lh,Uh,!1,Ch,bh),c=fu.open(o);c.dbis=Object.create(null);let _=new Tu(!1);c.openDB(kt,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=Ou(e,t,r);return c[Br.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}a(ey,"createEnvironment");async function ty(e,t,r,s=!0){let n=await Au(e,t);if(r===void 0)throw new Error(De.DESTINATION_PATH_REQUIRED);try{await Ct.access(Vt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(De.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}a(ty,"copyEnvironment");async function Au(e,t,r=!1){mu(e,t),t=t.toString();let s=Ou(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Ru(e,t),i=Vt.join(e,t+Jn),o=n!=i,c=new Ih(n,wh,Lh,Uh,o,Ch,bh),_=fu.open(c);_.dbis=Object.create(null);let u=Mh(_);for(let l=0;l<u.length;l++)bt(_,u[l]);return _[Br.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}a(Au,"openEnvironment");async function ry(e,t,r=!1){mu(e,t),t=t.toString();let s=Vt.join(e,t+Jn),n=await Ru(e,t);if(global.lmdb_map!==void 0){let i=Ou(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Dh(o),delete global.lmdb_map[i]}}await Ct.remove(n),await Ct.remove(n===s?n+jU:Vt.join(Vt.dirname(n),zU))}a(ry,"deleteEnvironment");async function Dh(e){Ba.validateEnv(e);let t=e[Br.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Dh,"closeEnvironment");function Ou(e,t,r=!1){let n=`${Vt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ou,"getCachedEnvironmentName");function sy(e){Ba.validateEnv(e);let t=Object.create(null),r=bt(e,kt);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==kt)try{t[s]=Object.assign(new va,n)}catch{gh.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(sy,"listDBIDefinitions");function Mh(e){Ba.validateEnv(e);let t=[],r=bt(e,kt);for(let{key:s}of r.getRange({start:!1}))s!==kt&&t.push(s);return t}a(Mh,"listDBIs");function ny(e,t){let s=bt(e,kt).getEntry(t),n=new va;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{gh.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ny,"getDBIDefinition");function Ph(e,t,r,s=!1){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return bt(e,t)}catch(n){if(n.message===De.DBI_DOES_NOT_EXIST){let i=new Tu(r,s===!0),o=e.openDB(t,i),c=new va(r===!0,s);return o[yh]=c,bt(e,kt).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Ph,"createDBI");function bt(e,t){if(Ha(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==kt?r=ny(e,t):r=new va,r===void 0)throw new Error(De.DBI_DOES_NOT_EXIST);let s;try{let n=new Tu(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(De.DBI_DOES_NOT_EXIST):n}return s[yh]=r,e.dbis[t]=s,s}a(bt,"openDBI");function iy(e,t){Ha(e,t),t=t.toString();let r=bt(e,t),s=r.getStats();return r[Br.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(iy,"statDBI");async function ay(e,t){try{let r=Vt.join(e,t+Jn);return(await Ct.stat(r)).size}catch{throw new Error(De.INVALID_ENVIRONMENT)}}a(ay,"environmentDataSize");function oy(e,t){if(Ha(e,t),t=t.toString(),t===kt)throw new Error(De.CANNOT_DROP_INTERNAL_DBIS_NAME);bt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],bt(e,kt).removeSync(t)}a(oy,"dropDBI");function cy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{bt(e,n)}catch(i){if(i.message===De.DBI_DOES_NOT_EXIST)Ph(e,n,n!==t,n===t);else throw i}}}a(cy,"initializeDBIs");Bh.exports={openDBI:bt,openEnvironment:Au,createEnvironment:ey,listDBIs:Mh,listDBIDefinitions:sy,createDBI:Ph,dropDBI:oy,statDBI:iy,deleteEnvironment:ry,initializeDBIs:cy,TransactionCursor:Pa,environmentDataSize:ay,copyEnvironment:ty,closeEnvironment:Dh}});var Hh=h((C1,vh)=>{"use strict";var Ga=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};a(Ga,"InsertRecordsResponseObject");vh.exports=Ga});var qh=h((b1,Gh)=>{"use strict";var qa=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};a(qa,"UpdateRecordsResponseObject");Gh.exports=qa});var Vh=h((w1,Fh)=>{"use strict";var Fa=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};a(Fa,"UpsertRecordsResponseObject");Fh.exports=Fa});var Ws=h((D1,xh)=>{"use strict";var _y=z(),uy=Hh(),ly=qh(),Ey=Vh(),Xn=os(),Zn=rt().LMDB_ERRORS_ENUM,dy=Ye(),vr=T(),Sy=C(),hy=require("uuid"),L1=require("lmdb"),{handleHDBError:fy,hdb_errors:Ty}=D(),{OVERFLOW_MARKER:U1,MAX_SEARCH_KEY_LENGTH:y1}=dy,pu=vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME,_s=vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function my(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new uy,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];kh(u,!0,n);let l=Ry(e,t,r,u),E=u[t];o.push(l),c.push(E)}return gu(o,c,s,i)}a(my,"insertRecords");function Ry(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let u=c([[{}]]);Array.isArray(u)&&(c=u[0][vr.FUNC_VAL],s[o]=c)}let _=Xn.getIndexedValues(c);if(_)for(let u=0,l=_.length;u<l;u++)e.dbis[o].put(_[u],n)}e.dbis[t].put(n,s,s[_s])})}a(Ry,"insertRecord");function Ay(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ay,"removeSkippedRecords");function kh(e,t,r=!0){let s=Date.now();(r===!0||!Number.isInteger(e[_s]))&&(e[_s]=s),t===!0?(r===!0||!Number.isInteger(e[pu]))&&(e[pu]=s):delete e[pu]}a(kh,"setTimestamps");function Nu(e,t,r){r.indexOf(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(vr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),_y.initializeDBIs(e,t,r)}a(Nu,"initializeTransaction");async function Oy(e,t,r,s,n=!0){Cu(e,t,r,s),Nu(e,t,r);let i=new ly,o=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=Iu(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),o.push(u);continue}c.push(d),_.push(E)}return gu(c,_,s,i,o)}a(Oy,"updateRecords");async function py(e,t,r,s,n=!0){try{Cu(e,t,r,s)}catch(_){throw fy(_,_.message,Ty.HTTP_STATUS_CODES.BAD_REQUEST)}Nu(e,t,r);let i=new Ey,o=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;Sy.isEmpty(u[t])?(l=hy.v4(),u[t]=l):l=u[t];let E=Iu(e,t,u,l,i,!1,n);o.push(E),c.push(l)}return gu(o,c,s,i)}a(py,"upsertRecords");async function gu(e,t,r,s,n=[]){let i=await Promise.all(e);for(let o=0,c=i.length;o<c;o++)i[o]===!0?s.written_hashes.push(t[o]):(s.skipped_hashes.push(t[o]),n.push(o));return s.txn_time=Xn.getMicroTime(),Ay(r,n),s}a(gu,"finalizeWrite");function Iu(e,t,r,s,n,i=!1,o=!0){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(kh(r,!l,o),Number.isInteger(r[_s])&&u[_s]>r[_s])return!1;l&&n.original_records.push(u);let E,d=a(()=>{for(let m in r){if(!r.hasOwnProperty(m)||m===t)continue;let R=r[m],w=e.dbis[m];if(w===void 0)continue;let L=u[m];if(typeof R=="function"){let X=R([[u]]);Array.isArray(X)&&(R=X[0][vr.FUNC_VAL],r[m]=R)}if(R===L)continue;let B=Xn.getIndexedValues(L);if(B)for(let X=0,V=B.length;X<V;X++)w.remove(B[X],s);if(B=Xn.getIndexedValues(R),B)for(let X=0,V=B.length;X<V;X++)w.put(B[X],s)}let S=Object.assign({},u,r);c.put(s,S,S[_s])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:Iu(e,t,r,s,n,i,o))}a(Iu,"updateUpsertRecord");function Ny(e,t,r){if(Xn.validateEnv(e),t===void 0)throw new Error(Zn.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zn.WRITE_ATTRIBUTES_REQUIRED):new Error(Zn.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ny,"validateBasic");function Cu(e,t,r,s){if(Ny(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Zn.RECORDS_REQUIRED):new Error(Zn.RECORDS_MUST_BE_ARRAY)}a(Cu,"validateWrite");xh.exports={insertRecords:my,updateRecords:Oy,upsertRecords:py}});var te=h((M1,Yh)=>{"use strict";var bu=T(),Js=Y(),wu=require("path");Js.initSync();var Va,ka,xa;function $h(){if(Va!==void 0)return Va;if(Js.getHdbBasePath()!==void 0)return Va=wu.join(Js.getHdbBasePath(),bu.SCHEMA_DIR_NAME),Va}a($h,"getBaseSchemaPath");function gy(){if(ka!==void 0)return ka;if(Js.getHdbBasePath()!==void 0)return ka=wu.join($h(),bu.SYSTEM_SCHEMA_NAME),ka}a(gy,"getSystemSchemaPath");function Iy(){if(xa!==void 0)return xa;if(Js.getHdbBasePath()!==void 0)return xa=wu.join(Js.getHdbBasePath(),bu.TRANSACTIONS_DIR_NAME),xa}a(Iy,"getTransactionAuditStorePath");Yh.exports={getBaseSchemaPath:$h,getSystemSchemaPath:gy,getTransactionAuditStorePath:Iy}});var Tr=h((P1,Wh)=>{"use strict";var Qh=C(),Kh=T(),Ya=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Lu=require("joi"),$a={schema_format:{pattern:Ya,message:"names cannot include backticks or forward slashes"},schema_length:{maximum:250,tooLong:"cannot exceed 250 characters"}},Cy=Lu.alternatives(Lu.string().min(1).max($a.schema_length.maximum).pattern(Ya).messages({"string.pattern.base":"{:#label} "+$a.schema_format.message}),Lu.number()).required();function by(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>$a.schema_length.maximum?`'${e}' maximum of 250 characters`:Ya.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(by,"checkValidTable");function wy(e,t){return Qh.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}a(wy,"validateSchemaExists");function Ly(e,t){let r=t.state.ancestors[0].schema;return Qh.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Ly,"validateTableExists");function Uy(e,t){return e.toLowerCase()===Kh.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${Kh.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Uy,"validateSchemaName");Wh.exports={common_validators:$a,schema_regex:Ya,hdb_schema_table:Cy,validateSchemaExists:wy,validateTableExists:Ly,validateSchemaName:Uy,checkValidTable:by}});var Ka=h((B1,Jh)=>{var{common_validators:Hr}=Tr(),zn=Ee(),xt="is required",Z={schema:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},table:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length},hash_attribute:{presence:!0,format:Hr.schema_format,length:Hr.schema_length}};function jn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(jn,"makeAttributesStrings");function yy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence=!1,Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(yy,"schema_object");function Dy(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Dy,"table_object");function My(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence={message:xt},zn.validateObject(e,Z)}a(My,"create_table_object");function Py(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence={message:xt},Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(Py,"attribute_object");function By(e){return e=jn(e),Z.schema.presence={message:xt},Z.table.presence={message:xt},Z.attribute.presence=!1,Z.hash_attribute.presence=!1,zn.validateObject(e,Z)}a(By,"describe_table");function vy(e){if(!!e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(vy,"validateTableResidence");Jh.exports={schema_object:yy,create_table_object:My,table_object:Dy,attribute_object:Py,describe_table:By,validateTableResidence:vy}});var Xh=h((v1,Zh)=>{"use strict";var Hy=require("uuid"),Qa=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Hy.v4(),this.schema_table=`${this.schema}.${this.table}`}};a(Qa,"CreateAttributeObject");Zh.exports=Qa});var Ja=h((H1,zh)=>{"use strict";var Gy=Xh(),Wa=class extends Gy{constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};a(Wa,"LMDBCreateAttributeObject");zh.exports=Wa});var ef=h((G1,jh)=>{"use strict";jh.exports=Fy;var qy="inserted";function Fy(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fy,"returnObject")});var Za=h((q1,rf)=>{"use strict";var Vy=T(),Uu=z(),ky=Ws(),{getSystemSchemaPath:xy,getBaseSchemaPath:$y}=te(),Yy=require("path"),Ky=as(),Qy=Ka(),Wy=Ja(),Jy=ef(),{handleHDBError:Zy,hdb_errors:Xy}=D(),zy=C(),yu=Ky.hdb_attribute,tf=[];for(let e=0;e<yu.attributes.length;e++)tf.push(yu.attributes[e].attribute);var jy="inserted";rf.exports=eD;async function eD(e){let t=Qy.attribute_object(e);if(t)throw Zy(new Error,t.message,Xy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=zy.isEmpty(e.dup_sort)||e.dup_sort=="true";let r=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(r=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(r)&&r.length>0){for(let n of r)if(n.attribute===e.attribute)throw new Error(`attribute '${n.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new Wy(e.schema,e.table,e.attribute,e.id);try{let n=await Uu.openEnvironment(Yy.join($y(),e.schema.toString()),e.table);if(n.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Uu.createDBI(n,e.attribute,e.dup_sort,e.is_hash_attribute);let i=await Uu.openEnvironment(xy(),Vy.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:o,skipped_hashes:c}=await ky.insertRecords(i,yu.hash_attribute,tf,[s]);return Jy(jy,o,{records:[s]},c)}catch(n){throw n}}a(eD,"lmdbCreateAttribute")});var Mu=h((F1,nf)=>{var{hdb_schema_table:sf}=Tr(),tD=Ee(),Du=require("joi"),rD={undefined:"undefined",null:"null"},sD=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||rD[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),nD=Du.object({schema:sf,table:sf,records:Du.array().items(Du.object().custom(sD)).required()});nf.exports=function(e){return tD.validateBySchema(e,nD)}});var Xa=h((k1,of)=>{"use strict";var mr=C(),af=I(),V1=Mu();of.exports=iD;function iD(e){if(mr.isEmpty(e))throw new Error("invalid update parameters defined.");if(mr.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(mr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");if(!Array.isArray(e.records))throw new Error("records must be an array");let t=global.hdb_schema[e.schema][e.table];if(mr.isEmpty(t))throw new Error(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.hash_attribute,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&mr.isEmptyOrZeroLength(o[r]))throw af.error("a valid hash attribute must be provided with update record:",o),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!mr.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw af.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Error(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!mr.isEmpty(o[r])&&o[r]!==""&&s.has(mr.autoCast(o[r]))&&(o.skip=!0),s.add(mr.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(iD,"insertUpdateValidate")});var ei=h((x1,cf)=>{"use strict";var aD=T().OPERATIONS_ENUM,za=class{constructor(t,r,s,n,i=void 0){this.operation=aD.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};a(za,"InsertObject");cf.exports=za});var eo=h((Y1,_f)=>{"use strict";var $1=ei(),ja=T(),Bu=C(),Pu=I(),oD=require("uuid"),{handleHDBError:ti,hdb_errors:cD}=D(),{HDB_ERROR_MSGS:ri,HTTP_STATUS_CODES:si}=cD;_f.exports=_D;function _D(e,t,r){for(let n=0;n<t.length;n++)uD(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];lD(i,r,e.operation)}}a(_D,"processRows");function uD(e){if(Buffer.byteLength(String(e))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ti(new Error,ri.ATTR_NAME_LENGTH_ERR(e),si.BAD_REQUEST,void 0,void 0,!0);if(Bu.isEmptyOrZeroLength(e)||Bu.isEmpty(e.trim()))throw ti(new Error,ri.ATTR_NAME_NULLISH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(uD,"validateAttribute");function lD(e,t,r){if(!e.hasOwnProperty(t)||Bu.isEmptyOrZeroLength(e[t])){if(r===ja.OPERATIONS_ENUM.INSERT||r===ja.OPERATIONS_ENUM.UPSERT){e[t]=oD.v4();return}throw Pu.error("Update transaction aborted due to record with no hash value:",e),ti(new Error,ri.RECORD_MISSING_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ja.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Pu.error(e),ti(new Error,ri.HASH_VAL_LENGTH_ERR,si.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Pu.error(e),ti(new Error,ri.INVALID_FORWARD_SLASH_IN_HASH_ERR,si.BAD_REQUEST,void 0,void 0,!0)}a(lD,"validateHash")});var lf=h((K1,uf)=>{"use strict";var to=class{constructor(t,r){this.type=t,this.message=r}};a(to,"IPCEventObject");uf.exports=to});var us=h((Q1,Ef)=>{"use strict";var ED=I(),vu=C(),dD=T(),{IPC_ERRORS:ni}=rt();Ef.exports={sendIpcEvent:SD,validateEvent:hD,SchemaEventMsg:fD,UserEventMsg:TD};function SD(e){global.hdb_ipc?global.hdb_ipc.emitToServer(e):ED.warn("Tried to send event:",e,"to HDB IPC client but it does not exist")}a(SD,"sendIpcEvent");function hD(e){if(typeof e!="object")return ni.INVALID_IPC_DATA_TYPE;if(!e.hasOwnProperty("type")||vu.isEmpty(e.type))return ni.MISSING_TYPE;if(!e.hasOwnProperty("message")||vu.isEmpty(e.message))return ni.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||vu.isEmpty(e.message.originator))return ni.MISSING_ORIGIN;if(dD.IPC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ni.INVALID_EVENT(e.type)}a(hD,"validateEvent");function fD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(fD,"SchemaEventMsg");function TD(e){this.originator=e}a(TD,"UserEventMsg")});var Zs=h((J1,ff)=>{"use strict";var df=T(),W1=C(),ro=I(),Sf=lf(),{sendIpcEvent:hf}=us();function mD(e){try{ro.trace("signalSchemaChange called with message:",e);let t=new Sf(df.IPC_EVENT_TYPES.SCHEMA,e);hf(t)}catch(t){ro.error(t)}}a(mD,"signalSchemaChange");function RD(e){try{ro.trace("signalUserChange called with message:",e);let t=new Sf(df.IPC_EVENT_TYPES.USER,e);hf(t)}catch(t){ro.error(t)}}a(RD,"signalUserChange");ff.exports={signalSchemaChange:mD,signalUserChange:RD}});var so=h((Z1,mf)=>{"use strict";var Tf=C(),AD=T(),OD=I(),pD=Za(),ND=Ja(),gD=Zs(),{SchemaEventMsg:ID}=us(),CD="already exists in";mf.exports=bD;async function bD(e,t,r){try{if(Tf.isEmptyOrZeroLength(r))return r;let s=[];Tf.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await wD(e,t.schema,t.name,i)})),n}catch(s){throw s}}a(bD,"lmdbCheckForNewAttributes");async function wD(e,t,r,s){let n=new ND(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await LD(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(CD))OD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(wD,"createNewAttribute");async function LD(e){let t;try{return t=await pD(e),gD.signalSchemaChange(new ID(process.pid,AD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}catch(r){throw r}}a(LD,"createAttribute")});var Xs=h((X1,Rf)=>{"use strict";var no=class{constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};a(no,"LMDBTransactionObject");Rf.exports=no});var Of=h((z1,Af)=>{"use strict";var UD=Xs(),yD=T().OPERATIONS_ENUM,io=class extends UD{constructor(t,r,s,n,i=void 0){super(yD.INSERT,r,s,n,i),this.records=t}};a(io,"LMDBInsertTransactionObject");Af.exports=io});var Nf=h((j1,pf)=>{"use strict";var DD=Xs(),MD=T().OPERATIONS_ENUM,ao=class extends DD{constructor(t,r,s,n,i,o=void 0){super(MD.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};a(ao,"LMDBUpdateTransactionObject");pf.exports=ao});var If=h((eJ,gf)=>{"use strict";var PD=Xs(),BD=T().OPERATIONS_ENUM,oo=class extends PD{constructor(t,r,s,n,i,o=void 0){super(BD.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};a(oo,"LMDBUpsertTransactionObject");gf.exports=oo});var bf=h((tJ,Cf)=>{"use strict";var vD=Xs(),HD=T().OPERATIONS_ENUM,co=class extends vD{constructor(t,r,s,n,i=void 0){super(HD.DELETE,s,n,t,i),this.original_records=r}};a(co,"LMDBDeleteTransactionObject");Cf.exports=co});var ii=h((rJ,yf)=>{"use strict";var GD=require("path"),wf=z(),qD=Of(),FD=Nf(),VD=If(),kD=bf(),zs=Ye(),Lf=C(),{CONFIG_PARAMS:xD}=T(),Uf=Y();Uf.initSync();var _o=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:$D}=te();yf.exports=YD;async function YD(e,t){if(Uf.get(xD.LOGGING_AUDITLOG)===!1)return;let r=GD.join($D(),e.schema.toString()),s=await wf.openEnvironment(r,e.table,!0),n=KD(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){wf.initializeDBIs(s,zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zs.TRANSACTIONS_DBIS);try{let i=n.timestamp;return await s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Lf.isEmpty(n.user_name)||s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}catch(i){throw i}}}a(YD,"writeTransaction");function KD(e,t){let r=Lf.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===_o.INSERT)return new qD(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPDATE)return new FD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.UPSERT)return new VD(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===_o.DELETE)return new kD(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KD,"createTransactionObject")});var Hu=h((nJ,Df)=>{"use strict";var QD=Xa(),sJ=ei(),js=T(),WD=eo(),JD=Ws().insertRecords,ZD=z(),XD=require("path"),zD=I(),jD=so(),{getBaseSchemaPath:eM}=te(),tM=ii();Df.exports=rM;async function rM(e){try{let{schema_table:t,attributes:r}=QD(e);WD(e,r,t.hash_attribute),e.schema!==js.SYSTEM_SCHEMA_NAME&&(r.includes(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(js.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jD(e.hdb_auth_header,t,r),n=XD.join(eM(),e.schema.toString()),i=await ZD.openEnvironment(n,e.table),o=await JD(i,t.hash_attribute,r,e.records,e[js.CLUSTERING_FLAG]!==!0);try{await tM(e,o)}catch(c){zD.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(rM,"lmdbCreateRecords")});var Bf=h((iJ,Pf)=>{"use strict";var Mf=T(),sM=Hu(),nM=ei(),iM=require("fs-extra"),aM=require("path"),{getBaseSchemaPath:oM}=te();Pf.exports=cM;async function cM(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nM(Mf.SYSTEM_SCHEMA_NAME,Mf.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sM(r),await iM.mkdirp(aM.join(oM(),e.schema.toString()))}a(cM,"lmdbCreateSchema")});var Hf=h((aJ,vf)=>{"use strict";var uo=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};a(uo,"DeleteRecordsResponseObject");vf.exports=uo});var Fu=h((uJ,Ff)=>{"use strict";var Gf=z(),Gu=os(),qu=rt().LMDB_ERRORS_ENUM,_M=Ye(),qf=I(),oJ=C(),uM=require("lmdb"),lM=Hf(),{OVERFLOW_MARKER:cJ,MAX_SEARCH_KEY_LENGTH:_J}=_M;async function EM(e,t,r){if(Gu.validateEnv(e),t===void 0)throw new Error(qu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qu.IDS_REQUIRED):new Error(qu.IDS_MUST_BE_ARRAY);try{let s=Gf.listDBIs(e);Gf.initializeDBIs(e,t,s);let n=new lM,i,o=[],c=[];for(let E=0,d=r.length;E<d;E++)try{i=r[E];let S=e.dbis[t].get(i);if(!S){n.skipped.push(i);continue}let m=e.dbis[t].ifVersion(i,uM.IF_EXISTS,()=>{e.dbis[t].remove(i);for(let R=0;R<s.length;R++){let w=s[R];if(!S.hasOwnProperty(w)||w===t)continue;let L=e.dbis[w],B=S[w];if(B!=null)try{let X=Gu.getIndexedValues(B);if(X)for(let V=0,W=X.length;V<W;V++)L.remove(X[V],i)}catch{qf.warn(`cannot delete from attribute: ${w}, ${B}:${i}`)}}});o.push(m),c.push(i),n.original_records.push(S)}catch(S){qf.warn(S),n.skipped.push(i)}let _=[],u=await Promise.all(o);for(let E=0,d=u.length;E<d;E++)u[E]===!0?n.deleted.push(c[E]):(n.skipped.push(c[E]),_.push(E));let l=0;for(let E=0;E<_.length;E++){let d=_[E];n.original_records.splice(d-l,1),l++}return n.txn_time=Gu.getMicroTime(),n}catch(s){throw s}}a(EM,"deleteRecords");Ff.exports={deleteRecords:EM}});var ai=h((lJ,kf)=>{"use strict";var en=C(),dM=Fu(),SM=z(),hM=require("path"),{getBaseSchemaPath:fM}=te(),TM=ii(),mM=I();kf.exports=RM;async function RM(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(en.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(en.isEmptyOrZeroLength(e.hash_values)&&!en.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];en.isEmpty(_)||e.hash_values.push(_)}}if(en.isEmptyOrZeroLength(e.hash_values))return Vf([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(en.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=hM.join(fM(),e.schema.toString()),i=await SM.openEnvironment(n,e.table),o=await dM.deleteRecords(i,s,e.hash_values);try{t===!0&&await TM(e,o)}catch(c){mM.error(`unable to write transaction due to ${c.message}`)}return Vf(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(RM,"lmdbDeleteRecords");function Vf(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(Vf,"createDeleteResponse")});var ku=h((dJ,xf)=>{"use strict";var AM=T(),EJ=os();function Vu(e,t){let r=Object.create(null);if(t.length===1&&AM.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Vu,"parseRow");function OM(e,t,r,s){let n=Vu(r,e);s.push(n)}a(OM,"searchAll");function pM(e,t,r,s){let n=Vu(r,e);s[t]=n}a(pM,"searchAllToMap");function NM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(NM,"iterateDBI");function ls(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ls,"pushResults");function gM(e,t,r,s,n,i){t.toString().endsWith(e)&&ls(t,r,s,n,i)}a(gM,"endsWith");function IM(e,t,r,s,n,i){t.toString().includes(e)&&ls(t,r,s,n,i)}a(IM,"contains");function CM(e,t,r,s,n,i){t>e&&ls(t,r,s,n,i)}a(CM,"greaterThanCompare");function bM(e,t,r,s,n,i){t>=e&&ls(t,r,s,n,i)}a(bM,"greaterThanEqualCompare");function wM(e,t,r,s,n,i){t<e&&ls(t,r,s,n,i)}a(wM,"lessThanCompare");function LM(e,t,r,s,n,i){t<=e&&ls(t,r,s,n,i)}a(LM,"lessThanEqualCompare");xf.exports={parseRow:Vu,searchAll:OM,searchAllToMap:pM,iterateDBI:NM,endsWith:gM,contains:IM,greaterThanCompare:CM,greaterThanEqualCompare:bM,lessThanCompare:wM,lessThanEqualCompare:LM,pushResults:ls}});var tn=h((fJ,Jf)=>{"use strict";var wt=z(),UM=I(),ht=os(),Gr=Ye(),ce=rt().LMDB_ERRORS_ENUM,SJ=C(),yM=T(),$t=ku(),hJ=require("lmdb"),{OVERFLOW_MARKER:$f,MAX_SEARCH_KEY_LENGTH:DM}=Gr,oi={lazy:!0};function Yf(e,t,r,s,n=!1,i=void 0,o=void 0){let c=Object.create(null),_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let u=xu(e,t,r);for(let{key:l,value:E}of _.getRange({start:n?void 0:!1,end:n?!1:void 0,limit:i,offset:o,reverse:n}))s(u(l,E),E,c,t,r);return c}a(Yf,"iterateFullIndex");function ci(e,t,r,s,n,i=!1,o=void 0,c=void 0,_=!1,u=!1){let l=[[],[]],E=wt.openDBI(e,r),d=xu(e,t,r);E[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let S=i===!0?s:n,m=i===!0?n:s,R=i===!0?!_:!u,w=i===!0?u:_;for(let{key:L,value:B}of E.getRange({start:m,end:S,reverse:i,limit:o,offset:c,inclusiveEnd:R,exclusiveStart:w}))$t.pushResults(d(L,B),B,l,t,r);return l}a(ci,"iterateRangeBetween");function xu(e,t,r){let s;return function(n,i){if(typeof n=="string"&&n.endsWith($f)){if(!s)if(t)s=wt.openDBI(e,t);else{let c=wt.listDBIs(e);for(let _=0,u=c.length;_<u&&(s=wt.openDBI(e,c[_]),!s[Gr.DBI_DEFINITION_NAME].is_hash_attribute);_++);}n=s.get(i,oi)[r]}return n}}a(xu,"getOverflowCheck");function MM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);lo(r),r=_i(e,r);let o=[],c=wt.openDBI(e,t);for(let{key:_,value:u}of c.getRange({start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))$t.searchAll(r,_,u,o);return o}a(MM,"searchAll");function PM(e,t,r,s=!1,n=void 0,i=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return lo(r),r=_i(e,r),Yf(e,t,t,$t.searchAllToMap.bind(null,r),s,n,i)}a(PM,"searchAllToMap");function BM(e,t,r=!1,s=void 0,n=void 0){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);return Yf(e,void 0,t,$t.iterateDBI,r,s,n)}a(BM,"iterateDBI");function vM(e,t){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);return wt.statDBI(e,t).entryCount}a(vM,"countAll");function HM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=wt.openDBI(e,r);s=ht.convertKeyValueToWrite(s);let _=[[],[]];if(c[Gr.DBI_DEFINITION_NAME].is_hash_attribute){t=r;let u=c.get(s,oi);u!==void 0&&$t.pushResults(s,u,_,t,r)}else for(let u of c.getValues(s,{reverse:n,limit:i,offset:o}))$t.pushResults(s,u,_,t,r);return _}a(HM,"equals");function GM(e,t,r){return qr(e,t,r),wt.openDBI(e,t).getValuesCount(r)}a(GM,"count");function qM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=[[],[]],_=wt.openDBI(e,r);_[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r),s=ht.convertKeyValueToWrite(s);let u=!0;if(typeof s=="number"&&(u=!1),n===!0){let l;for(let E of _.getKeys({start:s}))if(!E.startsWith(s)){l=E;break}l!==void 0&&(Number.isInteger(o)?o++:i++);for(let{key:E,value:d}of _.getRange({start:l,end:void 0,reverse:n,limit:i,offset:o}))if(E!==l){if(E.toString().startsWith(s))$t.pushResults(E,d,c,t,r);else if(u===!0)break}}else for(let{key:l,value:E}of _.getRange({start:s,reverse:n,limit:i,offset:o}))if(l.toString().startsWith(s))$t.pushResults(l,E,c,t,r);else if(u===!0)break;return c}a(qM,"startsWith");function FM(e,t,r,s,n=!1,i=void 0,o=void 0){return Kf(e,t,r,s,n,i,o,!0)}a(FM,"endsWith");function Kf(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){qr(e,r,s);let _=[[],[]],u=wt.openDBI(e,r);u[Gr.DBI_DEFINITION_NAME].is_hash_attribute&&(t=r);let l=xu(e,t,r);o=Number.isInteger(o)?o:0;for(let d of u.getKeys({end:n?!1:void 0,reverse:n})){if(i===0)break;let S=d.toString();if(S.endsWith($f))for(let m of u.getValues(d)){let R=l(d,m);(c?R.endsWith(s):R.includes(s))&&E(R,m)}else if(c?S.endsWith(s):S.includes(s))if(u[Gr.DBI_DEFINITION_NAME].is_hash_attribute)E(d,d);else for(let m of u.getValues(d))E(d,m)}function E(d,S){if(o>0){o--;return}i!==0&&($t.pushResults(d,S,_,t,r),i--)}return a(E,"found_match"),_}a(Kf,"contains");function VM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!0,!1)}a(VM,"greaterThan");function kM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),ci(e,t,r,s,_,n,i,o,!1,!1)}a(kM,"greaterThanEqual");function xM(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!0)}a(xM,"lessThan");function $M(e,t,r,s,n=!1,i=void 0,o=void 0){qr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),ci(e,t,r,_,s,n,i,o,!1,!1)}a($M,"lessThanEqual");function YM(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ht.validateEnv(e),r===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ce.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ce.END_VALUE_REQUIRED);if(s=ht.convertKeyValueToWrite(s),n=ht.convertKeyValueToWrite(n),s>n)throw new Error(ce.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return ci(e,t,r,s,n,i,o,c)}a(YM,"between");function KM(e,t,r,s){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),r=_i(e,r),s===void 0)throw new Error(ce.ID_REQUIRED);let n=null,i=e.dbis[t].get(s,r.length<3?oi:void 0);return i&&(n=$t.parseRow(i,r)),n}a(KM,"searchByHash");function QM(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.ID_REQUIRED);let s=!0;return e.dbis[t].get(r,oi)===void 0&&(s=!1),s}a(QM,"checkHashExists");function WM(e,t,r,s,n=[]){Wf(e,t,r,s,n);let i=Qf(e,t,r,s,n);return Object.values(i)}a(WM,"batchSearchByHash");function JM(e,t,r,s,n=[]){return Wf(e,t,r,s,n),Qf(e,t,r,s,n)}a(JM,"batchSearchByHashToMap");function Qf(e,t,r,s,n=[]){r=_i(e,r);let i=Object.create(null),o=r.length<3?oi:void 0;for(let c=0;c<s.length;c++){let _=s[c];try{let u=e.dbis[t].get(_,o);if(u){let l=$t.parseRow(u,r);i[_]=l}else n.push(_)}catch(u){throw UM.warn(u),u}}return i}a(Qf,"batchHashSearch");function Wf(e,t,r,s,n){if(ht.validateEnv(e),t===void 0)throw new Error(ce.HASH_ATTRIBUTE_REQUIRED);if(lo(r),!Array.isArray(s))throw s===void 0?new Error(ce.IDS_REQUIRED):new Error(ce.IDS_MUST_BE_ARRAY);Array.isArray(n)||(n=[])}a(Wf,"initializeBatchSearchByHash");function lo(e){if(!Array.isArray(e))throw e===void 0?new Error(ce.FETCH_ATTRIBUTES_REQUIRED):new Error(ce.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(lo,"validateFetchAttributes");function qr(e,t,r){if(ht.validateEnv(e),t===void 0)throw new Error(ce.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ce.SEARCH_VALUE_REQUIRED);if(r?.length>DM)throw new Error(ce.SEARCH_VALUE_TOO_LARGE)}a(qr,"validateComparisonFunctions");function _i(e,t){return t.length===1&&yM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wt.listDBIs(e)),t}a(_i,"setGetWholeRowAttributes");Jf.exports={searchAll:MM,searchAllToMap:PM,count:GM,countAll:vM,equals:HM,startsWith:qM,endsWith:FM,contains:Kf,searchByHash:KM,setGetWholeRowAttributes:_i,batchSearchByHash:WM,batchSearchByHashToMap:JM,checkHashExists:QM,iterateDBI:BM,greaterThan:VM,greaterThanEqual:kM,lessThan:xM,lessThanEqual:$M,between:YM}});var ui=h((mJ,jf)=>{var Zf=require("lodash"),Xf=Ee(),Q=require("joi"),ZM=C(),{hdb_schema_table:Yt,checkValidTable:zf}=Tr(),{handleHDBError:XM,hdb_errors:zM}=D(),{HTTP_STATUS_CODES:jM}=zM,TJ=Q.object({schema:Yt,table:Yt,hash_values:Q.array().min(1).items(Q.alternatives(Q.string(),Q.number())).required(),get_attributes:Q.array().min(1).items(Yt).required()}),eP=Q.object({schema:Yt,table:Yt,search_attribute:Yt,search_value:Q.any().required(),get_attributes:Q.array().min(1).items(Yt).required(),desc:Q.bool(),limit:Q.number().integer().min(1),offset:Q.number().integer().min(0)}),tP=Q.object({schema:Yt,table:Yt,operator:Q.string().valid("and","or").default("and").lowercase(),offset:Q.number().integer().min(0),limit:Q.number().integer().min(1),get_attributes:Q.array().min(1).items(Yt).required(),conditions:Q.array().min(1).items(Q.object({search_attribute:Yt,search_type:Q.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Q.when("search_type",{switch:[{is:"equals",then:Q.any()},{is:"between",then:Q.array().items(Q.alternatives([Q.string(),Q.number()])).length(2)}],otherwise:Q.alternatives(Q.string(),Q.number())}).required()})).required()});jf.exports=function(e,t){let r=null;switch(t){case"value":r=Xf.validateBySchema(e,eP);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(zf("schema",e.schema)),i(zf("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Xf.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=ZM.checkGlobalSchemaTable(e.schema,e.table);if(n)return XM(new Error,n,jM.NOT_FOUND);let o=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=Zf.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!Zf.some(o,l=>l===u||l.attribute===u||l.attribute===u.attribute));if(_&&_.length>0){let u=_.join(", ");return u=u.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${u}'`)}}return r}});var $u=h((RJ,eT)=>{"use strict";var rP=z(),sP=ui(),nP=require("path"),{getBaseSchemaPath:iP}=te();eT.exports=aP;function aP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP.join(iP(),e.schema.toString());return rP.openEnvironment(r,e.table)}a(aP,"initialize")});var Yu=h((AJ,tT)=>{"use strict";var oP=tn(),cP=$u();tT.exports=_P;async function _P(e){try{let t=await cP(e),r=global.hdb_schema[e.schema][e.table];return oP.batchSearchByHashToMap(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(_P,"lmdbGetDataByHash")});var Es=h((OJ,rT)=>{"use strict";var Eo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};a(Eo,"SearchByHashObject");rT.exports=Eo});var nT=h((NJ,sT)=>{"use strict";var pJ=Es(),uP=tn(),lP=$u();sT.exports=EP;async function EP(e){try{let t=await lP(e),r=global.hdb_schema[e.schema][e.table];return uP.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}catch(t){throw t}}a(EP,"lmdbSearchByHash")});var Kt=h((gJ,iT)=>{"use strict";var So=class{constructor(t,r,s,n,i,o,c,_=!1,u=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};a(So,"SearchObject");iT.exports=So});var ho=h((IJ,uT)=>{"use strict";var Qe=tn(),dP=z(),SP=require("path"),hP=C(),U=Ye(),ds=T(),{getBaseSchemaPath:fP}=te(),TP=as(),aT=rt().LMDB_ERRORS_ENUM,{compareKeys:rn}=require("ordered-binary"),Rr=ds.SEARCH_WILDCARDS;async function mP(e,t,r){let s;e.schema===ds.SYSTEM_SCHEMA_NAME?s=TP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=_T(e,s.hash_attribute,r,t);return oT(e,n,s.hash_attribute,r)}a(mP,"prepSearch");async function oT(e,t,r,s){let n=SP.join(fP(),e.schema.toString()),i=await dP.openEnvironment(n,e.table),o=cT(i,e,t,r);if([U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,U.SEARCH_TYPES.SEARCH_ALL,U.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(OP(e,r)===!1)return s===!0?AP(o):o[1];let _=o[0];return s===!0?Qe.batchSearchByHashToMap(i,r,e.get_attributes,_):Qe.batchSearchByHash(i,r,e.get_attributes,_)}a(oT,"executeSearch");function cT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:_}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case U.SEARCH_TYPES.EQUALS:n=Qe.equals(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.CONTAINS:n=Qe.contains(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:n=Qe.endsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:n=Qe.startsWith(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qe.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qe.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case U.SEARCH_TYPES.SEARCH_ALL:return Qe.searchAll(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qe.searchAllToMap(e,s,t.get_attributes,o,c,_);case U.SEARCH_TYPES.BETWEEN:n=Qe.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:n=Qe.greaterThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qe.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:n=Qe.lessThan(e,i,t.search_attribute,t.search_value,o,c,_);break;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qe.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,_);break;default:return Object.create(null)}return n}a(cT,"searchByType");function RP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case U.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case U.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case U.SEARCH_TYPES.ENDS_WITH:case U.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case U.SEARCH_TYPES.STARTS_WITH:case U.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case U.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return rn(i,s[0])>=0&&rn(i,s[1])<=0};case U.SEARCH_TYPES.GREATER_THAN:case U.SEARCH_TYPES._GREATER_THAN:return n=>rn(n[r],s)>0;case U.SEARCH_TYPES.GREATER_THAN_EQUAL:case U.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>rn(n[r],s)>=0;case U.SEARCH_TYPES.LESS_THAN:case U.SEARCH_TYPES._LESS_THAN:return n=>rn(n[r],s)<0;case U.SEARCH_TYPES.LESS_THAN_EQUAL:case U.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>rn(n[r],s)<=0;default:return Object.create(null)}}a(RP,"filterByType");function AP(e){let t=Object.create(null);for(let r=0,s=e[0].length;r<s;r++)t[e[0][r]]=e[1][r];return t}a(AP,"createMapFromArrays");function OP(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(OP,"checkToFetchMore");function _T(e,t,r,s){if(hP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Rr.indexOf(n)>-1)return r===!0?U.SEARCH_TYPES.SEARCH_ALL_TO_MAP:U.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rr[0])<0&&n.indexOf(Rr[1])<0)return c===!0?r===!0?U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:U.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:U.SEARCH_TYPES.EQUALS;if(Rr.indexOf(i)>=0&&Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),U.SEARCH_TYPES.CONTAINS;if(Rr.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),U.SEARCH_TYPES.ENDS_WITH;if(Rr.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),U.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rr[0])||n.includes(Rr[1]))return U.SEARCH_TYPES.EQUALS;throw new Error(aT.UNKNOWN_SEARCH_TYPE)}else switch(s){case ds.VALUE_SEARCH_COMPARATORS.BETWEEN:return U.SEARCH_TYPES.BETWEEN;case ds.VALUE_SEARCH_COMPARATORS.GREATER:return U.SEARCH_TYPES.GREATER_THAN;case ds.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return U.SEARCH_TYPES.GREATER_THAN_EQUAL;case ds.VALUE_SEARCH_COMPARATORS.LESS:return U.SEARCH_TYPES.LESS_THAN;case ds.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return U.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(aT.UNKNOWN_SEARCH_TYPE)}}a(_T,"createSearchTypeFromSearchObject");uT.exports={executeSearch:oT,createSearchTypeFromSearchObject:_T,prepSearch:mP,searchByType:cT,filterByType:RP}});var ET=h((bJ,lT)=>{"use strict";var CJ=Kt(),pP=ui(),NP=C(),gP=T(),IP=ho();lT.exports=CP;async function CP(e,t){if(!NP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=pP(e,"value");if(s)throw s;let n=!0;try{return await IP.prepSearch(e,t,n)}catch(i){throw i}}a(CP,"lmdbGetDataByValue")});var sn=h((LJ,dT)=>{"use strict";var wJ=Kt(),bP=ui(),wP=C(),LP=T(),UP=ho();dT.exports=yP;async function yP(e,t){if(!wP.isEmpty(t)&&LP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=bP(e,"value");if(s)throw s;let n=!1;try{return await UP.prepSearch(e,t,n)}catch(i){throw i}}a(yP,"lmdbSearchByValue")});var hT=h((yJ,ST)=>{"use strict";var UJ=Ye(),fo=class{constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}};a(fo,"SearchByConditionsObject");var To=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};a(To,"SearchCondition");var mo=class{constructor(t,r){this.attribute=t,this.desc=r}};a(mo,"SortAttribute");ST.exports={SearchByConditionsObject:fo,SearchCondition:To,SortAttribute:mo}});var OT=h((MJ,AT)=>{"use strict";var DJ=hT().SearchByConditionsObject,DP=Kt(),MP=ui(),Ku=tn(),Ro=Ye(),RT=ho(),PP=ku(),fT=require("lodash"),{getBaseSchemaPath:BP}=te(),vP=require("path"),HP=z(),{handleHDBError:TT,hdb_errors:GP}=D(),{HTTP_STATUS_CODES:qP}=GP,FP=1e8,VP={lazy:!0};AT.exports=kP;async function kP(e){try{let t=MP(e,"conditions");if(t)throw TT(t,t.message,qP.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=vP.join(BP(),e.schema.toString()),s=await HP.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table],i=fT.sortBy(e.conditions,o=>{if(o.estimated_count===void 0){let c=o.search_type;c===Ro.SEARCH_TYPES.EQUALS?o.estimated_count=Ku.count(s,o.search_attribute,o.search_value):c===Ro.SEARCH_TYPES.CONTAINS||c===Ro.SEARCH_TYPES.ENDS_WITH?o.estimated_count=1/0:o.estimated_count=FP}return o.estimated_count});if(!e.operator||e.operator.toLowerCase()==="and"){let[o]=await mT(s,e,i[0],n.hash_attribute),c=s.dbis[n.hash_attribute],_=i.slice(1).map(RT.filterByType),u=_.length,l=[],E=Ku.setGetWholeRowAttributes(s,e.get_attributes),d=e.offset>-1?e.offset:0,S=e.limit>-1?e.limit:1/0;e:for(let m of o){let R=c.get(m,VP);for(let w=0;w<u;w++)if(!_[w](R))continue e;if(d>0){d--;continue}if(S<=0)break;S--,l.push(PP.parseRow(R,E))}return l}else{let o=[],c=[];for(let _ of i){let[u]=await mT(s,e,_,n.hash_attribute);c.push(u)}if(o=fT.union(...c),e.limit>0||e.offset>0){let _=Number.isInteger(e.limit)?e.limit:o.length;o=o.splice(e.offset,_)}return Ku.batchSearchByHash(s,n.hash_attribute,e.get_attributes,o)}}catch(t){throw TT(t)}}a(kP,"lmdbSearchByConditions");async function mT(e,t,r,s){let n=new DP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ro.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,RT.searchByType(e,n,i,s)}a(mT,"executeConditionSearch")});var li=h((PJ,pT)=>{"use strict";var xP=T().OPERATIONS_ENUM,Ao=class{constructor(t,r,s,n=void 0){this.operation=xP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};a(Ao,"DeleteObject");pT.exports=Ao});var Qu=h((BJ,NT)=>{"use strict";var Oo=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};a(Oo,"DropAttributeObject");NT.exports=Oo});var Ju=h((HJ,gT)=>{"use strict";var $P=Kt(),YP=li(),vJ=Qu(),er=T(),KP=C(),Wu=z(),QP=as(),WP=sn(),JP=ai(),{getBaseSchemaPath:ZP}=te(),XP=require("path");gT.exports=zP;async function zP(e,t=!0){let r;e.schema===er.SYSTEM_SCHEMA_NAME?r=QP[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await eB(e),n=XP.join(ZP(),e.schema.toString()),i=await Wu.openEnvironment(n,e.table);return t===!0&&await jP(e,i,r.hash_attribute),Wu.dropDBI(i,e.attribute),s}a(zP,"lmdbDropAttribute");async function jP(e,t,r){let s=Wu.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:_}of s.getRange({start:!1,versions:!0})){let u={};for(let l in c)l!==i&&(u[l]=c[l]);n=t.dbis[r].put(o,u,_)}await n}a(jP,"removeAttributeFromAllObjects");async function eB(e){let t=new $P(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=(await WP(t)).filter(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(KP.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[er.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new YP(er.SYSTEM_SCHEMA_NAME,er.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JP(i)}a(eB,"dropAttributeFromSystem")});var wT=h((GJ,bT)=>{"use strict";var tB=Ju(),rB=Qu(),IT=C(),CT=I(),sB=rt().LMDB_ERRORS_ENUM;bT.exports=nB;async function nB(e){if(IT.isEmpty(global.hdb_schema[e.schema])||IT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);let t=global.hdb_schema[e.schema][e.table],r;try{for(let s=0;s<t.attributes.length;s++){r=t.attributes[s].attribute;let n=new rB(e.schema,e.table,r);try{await tB(n,!1)}catch(i){i.message!==sB.DBI_DOES_NOT_EXIST&&CT.error(`unable to drop attribute ${e.schema}.${e.table}.${r}:`+i)}}}catch(s){throw CT.error(`Error dropping attribute ${r}`),s}}a(nB,"lmdbDropAllAttributes")});var Zu=h((FJ,HT)=>{"use strict";var MT=Kt(),PT=li(),BT=sn(),vT=ai(),qJ=wT(),at=T(),LT=C(),UT=z(),{getBaseSchemaPath:iB,getTransactionAuditStorePath:aB}=te(),yT=require("path"),DT=I();HT.exports=oB;async function oB(e){try{if(LT.isEmpty(global.hdb_schema[e.schema])||LT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await cB(e),await _B(e);let t=yT.join(iB(),e.schema.toString());try{await UT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=yT.join(aB(),e.schema.toString());await UT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")DT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(oB,"lmdbDropTable");async function cB(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=await BT(t),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await vT(n)}a(cB,"deleteAttributesFromSystem");async function _B(e){let t=new MT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,at.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=await BT(t)}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new PT(at.SYSTEM_SCHEMA_NAME,at.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await vT(n)}catch(i){throw i}}a(_B,"dropTableFromSystem")});var qT=h((kJ,GT)=>{"use strict";var uB=require("fs-extra"),lB=Kt(),EB=Es(),dB=li(),SB=Zu(),hB=ai(),fB=Yu(),TB=sn(),Ar=T(),VJ=C(),mB=require("path"),{getBaseSchemaPath:RB}=te(),{handleHDBError:AB,hdb_errors:OB}=D(),{HDB_ERROR_MSGS:pB,HTTP_STATUS_CODES:NB}=OB;GT.exports=gB;async function gB(e){let t;try{t=await IB(e.schema);let r=new lB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=await TB(r);for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await SB(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new dB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await hB(n);let i=mB.join(RB(),t.toString());await uB.remove(i)}catch(r){throw r}}a(gB,"lmdbDropSchema");async function IB(e){let t=new EB(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ar.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=await fB(t)}catch(n){throw n}for(let n in r)r[n].name===e&&(s=e);if(!s)throw AB(new Error,pB.SCHEMA_NOT_FOUND(e),NB.NOT_FOUND,void 0,void 0,!0);return s}a(IB,"validateDropSchema")});var Xu=h((xJ,FT)=>{"use strict";var po=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};a(po,"CreateTableObject");FT.exports=po});var kT=h((YJ,VT)=>{"use strict";var CB=require("path"),bB=require("fs-extra"),No=z(),{getTransactionAuditStorePath:wB}=te(),zu=Ye(),$J=Xu();VT.exports=LB;async function LB(e){let t;try{let r=CB.join(wB(),e.schema.toString());await bB.mkdirp(r),t=await No.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),No.createDBI(t,zu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(LB,"createTransactionsAuditEnvironment")});var KT=h((KJ,YT)=>{"use strict";var ju=T(),xT=z(),UB=Ws(),yB=require("path"),{getSystemSchemaPath:DB,getBaseSchemaPath:MB}=te(),PB=as(),BB=Za(),el=Ja(),vB=I(),HB=kT(),rl=PB.hdb_table,$T=[];for(let e=0;e<rl.attributes.length;e++)$T.push(rl.attributes[e].attribute);YT.exports=GB;async function GB(e,t){let r=yB.join(MB(),t.schema.toString()),s=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new el(t.schema,t.table,ju.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new el(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xT.createEnvironment(r,t.table),e!==void 0){let o=await xT.openEnvironment(DB(),ju.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UB.insertRecords(o,rl.hash_attribute,$T,[e]),await tl(s),await tl(n),await tl(i)}await HB(t)}catch(o){throw o}}a(GB,"lmdbCreateTable");async function tl(e){try{await BB(e)}catch(t){vB.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(tl,"createAttribute")});var WT=h((QJ,QT)=>{"use strict";var qB=Xa(),FB=eo(),VB=so(),nn=T(),kB=Ws().updateRecords,xB=z(),$B=require("path"),{getBaseSchemaPath:YB}=te(),KB=ii(),QB=I();QT.exports=WB;async function WB(e){try{let{schema_table:t,attributes:r}=qB(e);FB(e,r,t.hash_attribute),e.schema!==nn.SYSTEM_SCHEMA_NAME&&(r.includes(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(nn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VB(e.hdb_auth_header,t,r),n=$B.join(YB(),e.schema.toString()),i=await xB.openEnvironment(n,e.table),o=await kB(i,t.hash_attribute,r,e.records,e[nn.CLUSTERING_FLAG]!==!0);try{await KB(e,o)}catch(c){QB.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(WB,"lmdbUpdateRecords")});var ZT=h((WJ,JT)=>{"use strict";var JB=T().OPERATIONS_ENUM,go=class{constructor(t,r,s,n=void 0){this.operation=JB.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(go,"UpsertObject");JT.exports=go});var zT=h((ZJ,XT)=>{"use strict";var JJ=ZT(),ZB=Xa(),XB=eo(),zB=so(),an=T(),jB=Ws().upsertRecords,ev=z(),tv=require("path"),{getBaseSchemaPath:rv}=te(),sv=ii(),nv=I(),{handleHDBError:iv,hdb_errors:av}=D();XT.exports=ov;async function ov(e){let t;try{t=ZB(e)}catch(_){throw iv(_,_.message,av.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XB(e,s,r.hash_attribute),e.schema!==an.SYSTEM_SCHEMA_NAME&&(s.includes(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(an.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await zB(e.hdb_auth_header,r,s),i=tv.join(rv(),e.schema.toString()),o=await ev.openEnvironment(i,e.table),c=await jB(o,r.hash_attribute,s,e.records,e[an.CLUSTERING_FLAG]!==!0);try{await sv(e,c)}catch(_){nv.error(`unable to write transaction due to ${_.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(ov,"lmdbUpsertRecords")});var nm=h((XJ,sm)=>{"use strict";var cv=Kt(),jT=C(),em=I(),_v=sn(),tm=T(),uv=Fu().deleteRecords,lv=z(),Ev=require("path"),{getBaseSchemaPath:dv}=te(),{promisify:Sv}=require("util"),hv=Sv(setTimeout),rm=1e4,fv=10;sm.exports=Tv;async function Tv(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(jT.isEmptyOrZeroLength(t))throw new Error(`Could not retrieve hash attribute for schema: ${e.schema} table: ${e.table}`);let r=Date.parse(e.date),s;try{let n=new cv(e.schema,e.table,tm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=await _v(n,tm.VALUE_SEARCH_COMPARATORS.LESS)}catch(n){throw em.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return jT.isEmptyOrZeroLength(s)?(em.trace("No records found to delete"),{message:"No records found to delete"}):await mv(e,s,t)}a(Tv,"lmdbDeleteRecordsBefore");async function mv(e,t,r){let s=Ev.join(dv(),e.schema.toString()),n=await lv.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let o=0,c=t.length;o<c;o+=rm){let _=t.slice(o,o+rm),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await uv(n,r,u);i.deleted_hashes=i.deleted_hashes.concat(l.deleted),i.skipped_hashes=i.skipped_hashes.concat(l.skipped)}catch(l){throw l}await hv(fv)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}a(mv,"chunkDeletes")});var am=h((zJ,im)=>{"use strict";var Io=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};a(Io,"DeleteBeforeObject");im.exports=Io});var cm=h((jJ,om)=>{"use strict";var Co=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};a(Co,"DeleteAuditLogsBeforeResults");om.exports=Co});var lm=h((tZ,um)=>{"use strict";var sl=z(),{getTransactionAuditStorePath:Rv}=te(),eZ=am(),Av=require("path"),Ei=Ye(),Ov=C(),_m=cm(),pv=require("util").promisify,Nv=pv(setTimeout),gv=1e4,Iv=100;um.exports=Cv;async function Cv(e){let t=Av.join(Rv(),e.schema),r=await sl.openEnvironment(t,e.table,!0),s=sl.listDBIs(r);sl.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new _m;do n=await bv(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await Nv(Iv);while(n.transactions_deleted>0);return i}a(Cv,"deleteAuditLogsBefore");async function bv(e,t){let r=new _m;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ov.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<o.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>gv)break}return await n,r}catch(s){throw s}}a(bv,"deleteTransactions")});var mm=h((rZ,Tm)=>{"use strict";var nl=z(),on=Ye(),Em=os(),il=T(),dm=C(),{getTransactionAuditStorePath:wv}=te(),Lv=require("path"),Uv=tn(),bo=Xs(),yv=I();Tm.exports=Dv;async function Dv(e){let t=Lv.join(wv(),e.schema),r=await nl.openEnvironment(t,e.table,!0),s=nl.listDBIs(r);nl.initializeDBIs(r,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Sm(r,e.search_values);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Pv(r,e.search_values,n);case il.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Mv(r,e.search_values);default:return Sm(r)}}a(Dv,"readAuditLog");function Sm(e,t=[0,Em.getMicroTime()]){dm.isEmpty(t[0])&&(t[0]=0),dm.isEmpty(t[1])&&(t[1]=Em.getMicroTime());let r=[];try{let s=e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let i of s.getKeys({start:t[1]}))if(i!==t[1]){n=i;break}for(let{value:i}of s.getRange({start:t[0],end:n})){let o=Object.assign(new bo,i);r.push(o)}return r}catch(s){throw s}}a(Sm,"searchTransactionsByTimestamp");function Mv(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,fm(e,i))}return Object.fromEntries(r)}a(Mv,"searchTransactionsByUsername");function Pv(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=Uv.equals(e,on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,on.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let E=0,d=l[0].length;E<d;E++){let S=l[0][E],m=Number(S);s.has(m)?s.get(m).push(u.toString()):s.set(m,[u.toString()])}}let n=Array.from(s.keys()),i=fm(e,n),o=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);hm(_,"records",r,l,o),hm(_,"original_records",r,l,o)}return Object.fromEntries(o)}a(Pv,"searchTransactionsByHashValues");function hm(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],_=c[r].toString();if(s.indexOf(_)>=0)if(n.has(_)){let u=n.get(_),l=u[u.length-1];if(l.timestamp===i)l[t]=[c];else{let E=new bo(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new bo(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}a(hm,"loopRecords");function fm(e,t){let r=[];try{let s=e.dbis[on.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new bo,i);r.push(o)}}catch(i){yv.warn(i)}return r}catch(s){throw s}}a(fm,"batchSearchTransactions")});var Am=h((sZ,Rm)=>{"use strict";var Bv=require("path"),{getBaseSchemaPath:vv}=te(),Hv=z();Rm.exports={writeTransaction:Gv};async function Gv(e,t,r){let s=Bv.join(vv(),e);return(await Hv.openEnvironment(s,t)).transaction(r)}a(Gv,"writeTransaction")});var pm=h((nZ,Om)=>{"use strict";var qv=require("path"),{getBaseSchemaPath:Fv}=te(),Vv=z();Om.exports={flush:kv};async function kv(e,t){let r=qv.join(Fv(),e.toString());return(await Vv.openEnvironment(r,t.toString())).flushed}a(kv,"flush")});var gm=h((iZ,Nm)=>{"use strict";var Re=I(),{handleHDBError:xv}=D(),$v=_u(),Yv=Za(),Kv=Hu(),Qv=Bf(),Wv=ai(),Jv=Yu(),Zv=nT(),Xv=ET(),zv=sn(),jv=OT(),eH=qT(),tH=KT(),rH=WT(),sH=zT(),nH=nm(),iH=lm(),aH=Zu(),oH=Ju(),cH=mm(),_H=Am(),uH=pm(),wo=class extends $v{async searchByConditions(t){try{return jv(t)}catch(r){throw Re.error(r),r}}async getDataByHash(t){try{return await Jv(t)}catch(r){throw Re.error(r),r}}async searchByHash(t){try{return await Zv(t)}catch(r){throw Re.error(r),r}}async getDataByValue(t,r){try{return await Xv(t,r)}catch(s){throw Re.error(s),s}}async searchByValue(t){try{return await zv(t)}catch(r){throw Re.error(r),r}}async createSchema(t){try{return await Qv(t)}catch(r){throw Re.error(r),r}}async dropSchema(t){try{return await eH(t)}catch(r){throw Re.error(r),r}}async createTable(t,r){try{return await tH(t,r)}catch(s){throw Re.error(s),s}}async dropTable(t){try{return await aH(t)}catch(r){throw Re.error(r),r}}async createAttribute(t){try{return await Yv(t)}catch(r){throw Re.error(r),r}}async createRecords(t){try{return await Kv(t)}catch(r){throw Re.error(r),r}}async updateRecords(t){try{return await rH(t)}catch(r){throw Re.error(r),r}}async upsertRecords(t){try{return await sH(t)}catch(r){throw xv(r,null,null,Re.ERR,r)}}async deleteRecords(t){try{return await Wv(t)}catch(r){throw Re.error(r),r}}async deleteRecordsBefore(t){try{return await nH(t)}catch(r){throw Re.error(r),r}}async dropAttribute(t){try{return await oH(t)}catch(r){throw Re.error(r),r}}async deleteAuditLogsBefore(t){try{return await iH(t)}catch(r){throw Re.error(r),r}}async readAuditLog(t){try{return await cH(t)}catch(r){throw Re.error(r),r}}writeTransaction(t,r,s){return _H.writeTransaction(t,r,s)}flush(t,r){return uH.flush(t,r)}};a(wo,"LMDBBridge");Nm.exports=wo});var Or=h((aZ,Cm)=>{"use strict";var lH=gm(),EH=_u(),dH=Y();dH.initSync();var Im;function SH(){return Im instanceof EH?Im:new lH}a(SH,"getBridge");Cm.exports=SH()});var Um=h((oZ,Lm)=>{"use strict";var bm=require("lodash"),di=require("mathjs"),hH=require("jsonata"),wm=C();Lm.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?bm.uniqWith(e,bm.isEqual):e,searchJSON:fH,mad:Si.bind(null,di.mad),mean:Si.bind(null,di.mean),mode:Si.bind(null,di.mode),prod:Si.bind(null,di.prod),median:Si.bind(null,di.median)};function Si(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(Si,"aggregateFunction");function fH(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(wm.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),wm.isEmpty(this.__ala__.res[r])){let s=hH(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(fH,"searchJSON")});var Dm=h((cZ,ym)=>{"use strict";var de=require("moment"),al="YYYY-MM-DDTHH:mm:ss.SSSZZ";de.suppressDeprecationWarnings=!0;ym.exports={current_date:()=>de().utc().format("YYYY-MM-DD"),current_time:()=>de().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return de(e).utc().format("YYYY");case"month":return de(e).utc().format("MM");case"day":return de(e).utc().format("DD");case"hour":return de(e).utc().format("HH");case"minute":return de(e).utc().format("mm");case"second":return de(e).utc().format("ss");case"millisecond":return de(e).utc().format("SSS");default:break}},date:e=>de(e).utc().format(al),date_format:(e,t)=>de(e).utc().format(t),date_add:(e,t,r)=>de(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>de(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=de(e).utc(),n=de(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>de().utc().valueOf(),get_server_time:()=>de().format(al),offset_utc:(e,t)=>de(e).utc().utcOffset(t).format(al)}});var vm=h((_Z,Bm)=>{"use strict";var TH=require("@turf/area"),mH=require("@turf/length"),RH=require("@turf/circle"),AH=require("@turf/difference"),OH=require("@turf/distance"),pH=require("@turf/boolean-contains"),NH=require("@turf/boolean-equal"),gH=require("@turf/boolean-disjoint"),IH=require("@turf/helpers"),Mm=T(),k=C();Bm.exports={geoArea:CH,geoLength:bH,geoCircle:wH,geoDifference:LH,geoDistance:Pm,geoNear:UH,geoContains:yH,geoEqual:DH,geoCrosses:MH,geoConvert:PH};var ol="geo1 is required",cl="geo2 is required";function CH(e){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),TH.default(e)}a(CH,"geoArea");function bH(e,t){if(k.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=k.autoCast(e)),mH.default(e,{units:t||"kilometers"})}a(bH,"geoLength");function wH(e,t,r){if(k.isEmpty(e))throw new Error("point is required");if(k.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=k.autoCast(e)),RH.default(e,t,{units:r||"kilometers"})}a(wH,"geoCircle");function LH(e,t){if(k.isEmpty(e))throw new Error("poly1 is required");if(k.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),AH(e,t)}a(LH,"geoDifference");function Pm(e,t,r){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),OH.default(e,t,{units:r||"kilometers"})}a(Pm,"geoDistance");function UH(e,t,r,s){if(k.isEmpty(e))throw new Error("point1 is required");if(k.isEmpty(t))throw new Error("point2 is required");if(k.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),isNaN(r))throw new Error("distance must be a number");return Pm(e,t,s)<=r}a(UH,"geoNear");function yH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),pH.default(e,t)}a(yH,"geoContains");function DH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),NH.default(e,t)}a(DH,"geoEqual");function MH(e,t){if(k.isEmpty(e))throw new Error(ol);if(k.isEmpty(e))throw new Error(cl);return typeof e=="string"&&(e=k.autoCast(e)),typeof t=="string"&&(t=k.autoCast(t)),!gH.default(e,t)}a(MH,"geoCrosses");function PH(e,t,r){if(k.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(k.isEmpty(t))throw new Error("geo_type is required");if(k.isEmpty(Mm.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Mm.GEO_CONVERSION_ENUM).join(",")}`);return IH[t](e,r)}a(PH,"geoConvert")});var Lo=h((uZ,Hm)=>{var Ss=Um(),ft=Dm(),tr=vm();Hm.exports=e=>{e.aggr.mad=e.aggr.MAD=Ss.mad,e.aggr.mean=e.aggr.MEAN=Ss.mean,e.aggr.mode=e.aggr.MODE=Ss.mode,e.aggr.prod=e.aggr.PROD=Ss.prod,e.aggr.median=e.aggr.MEDIAN=Ss.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ss.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ss.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ft.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ft.current_time,e.fn.extract=e.fn.EXTRACT=ft.extract,e.fn.date=e.fn.DATE=ft.date,e.fn.date_format=e.fn.DATE_FORMAT=ft.date_format,e.fn.date_add=e.fn.DATE_ADD=ft.date_add,e.fn.date_sub=e.fn.DATE_SUB=ft.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ft.date_diff,e.fn.now=e.fn.NOW=ft.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ft.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ft.get_server_time,e.fn.getdate=e.fn.GETDATE=ft.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ft.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=tr.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=tr.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=tr.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=tr.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=tr.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=tr.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=tr.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=tr.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=tr.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=tr.geoNear}});var Fm=h((lZ,qm)=>{"use strict";var hi=require("lodash"),Me=require("alasql");Me.options.cache=!1;var BH=Lo(),Gm=require("clone"),Uo=require("recursive-iterator"),v=I(),G=C(),cn=Or(),vH=T(),{hdb_errors:HH}=D(),GH="IS NULL",fi="There was a problem performing this search. Please check the logs and try again.";BH(Me);var yo=class{constructor(t,r){if(G.isEmpty(t))throw v.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),G.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!G.isEmptyOrZeroLength(s))return v.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw v.error("Error thrown from checkEmptySQL in SQLSearch class method search."),v.error(s),new Error(fi)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw v.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),v.error(s),new Error(fi)}if(Object.keys(this.data).length===0)return v.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw v.error("Error thrown from processJoins in SQLSearch class method search."),v.error(s),new Error(fi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw v.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),v.error(s),new Error(fi)}try{return t=await this._finalSQL(),t}catch(s){throw v.error("Error thrown from finalSQL in SQLSearch class method search."),v.error(s),new Error(fi)}}_getColumns(){let t=new Uo(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Gm(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=hi.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=global.hdb_schema[r.databaseid][r.tableid].hash_attribute,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(G.isEmpty(this.statement.where)){v.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Uo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!G.isEmpty(r)&&r.right)if(G.isNotEmptyAndHasValue(r.right.value)){let s=G.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Me.yy.LogicValue({value:s}):r.right instanceof Me.yy.StringValue&&!G.isEmpty(s)&&G.autoCasterIsNumberCheck(s.toString())&&(r.right=new Me.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=G.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Me.yy.LogicValue({value:i}):s instanceof Me.yy.StringValue&&G.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Me.yy.NumValue({value:i}))});if(t){v.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Uo(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!G.isEmpty(vH.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(G.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(G.isEmptyOrZeroLength(r.left.columnid)||G.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(G.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!G.isEmpty(r.right.value)||!G.isEmpty(r.left.value)?s.add(G.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let _=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<_.length;u++)if(_[u].value)s.add(_[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from)&&G.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&hi.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(G.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);G.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(G.isEmptyOrZeroLength(this.all_table_attributes)&&!G.isEmptyOrZeroLength(this.columns.columns))return t;if(G.isEmptyOrZeroLength(this.all_table_attributes)&&G.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Me.promise(r)}catch(r){throw v.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),v.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Gm(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(G.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(GH)>-1&&this.tables.forEach(n=>{let i={columnid:global.hdb_schema[n.databaseid][n.tableid].hash_attribute,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=hi.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},_=!1,u=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(_=!0),!G.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await cn.getDataByHash(c);for(let E of c.hash_values)E in l&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){v.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async l=>{let E=Object.assign({},c);E.search_value=l;let d=await cn.getDataByValue(E);for(let S in d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,d[S][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(S)))}))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),v.error(l)}else if(!G.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!G.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let l=this.comparator_search_values[u].comparators;for(let E=0,d=l.length;E<d;E++){let S=l[E];c.search_attribute=S.attribute,c.search_value=S.search_value;let m=await cn.getDataByValue(c,S.operation);if(_)for(let R in m)this.data[i].__merged_data[R]||(this.data[i].__merged_data[R]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(R)));else for(let R in m)this.data[i].__merged_data[R]?this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]):(this.data[i].__merged_data[R]=[...s[i]],this._updateMergedAttribute(i,R,n.attribute,m[R][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(R)))}}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),v.error(l)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await cn.getDataByValue(c);if(_)for(let E in l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,G.autoCast(E)));else for(let E in l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,l[E][n.attribute]),this._setMergedHashAttribute(i,G.autoCast(E)))}catch(l){v.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),v.error(l)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Me.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new Me.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Me.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new Me.yy.FuncValue:new Me.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(S=>{S.joinmode&&S.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(S.table);let m=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(m+=" ON "+S.on.toString()),i.push(m),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(S=>{let m=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,R=S.as?S.as_orig:S.tableid_orig;o.push({key:`'${R}.${m}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${m}\` AS "${R}.${m}"`),c[S.as?S.as_orig:S.tableid_orig]=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__merged_attributes});let _=this.statement.where?"WHERE "+this.statement.where:"",u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(S=>{S.is_func?r.push(S.initial_select_column.toString()):S.initial_select_column.tableid?r.push(`${S.initial_select_column.tableid}.${S.initial_select_column.columnid} AS ${S.expression.columnid}`):r.push(`${S.initial_select_column.columnid} AS ${S.expression.columnid}`)}));let l="",E="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",E=this.statement.offset?"OFFSET "+this.statement.offset:"");let d=[];try{let S=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${_} ${u} ${l} ${E}`,m=this._convertColumnsToIndexes(S,n);d=await Me.promise(m,t),t=null}catch(S){throw v.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),v.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,m=d.length;S<m;S++){let R=d[S];o.forEach(w=>{R[w.key]!==null&&R[w.key]!==void 0&&w.keys.add(R[w.key])})}o.forEach(S=>{let m=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),R=hi.difference(m,[...S.keys].map(w=>w.toString()));for(let w=0,L=R.length;w<L;w++){let B=R[w];delete this.data[`${S.schema}_${S.table}`].__merged_data[B]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Uo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=hi.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){v.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),v.error(i)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},_=await cn.getDataByHash(c),u=n.columns.length;for(let l=0,E=o.length;l<E;l++){let d=o[l],S=_[d];for(let m=0;m<u;m++){let R=n.columns[m],w=S[R]===void 0?null:S[R];this.data[s].__merged_data[d].push(w)}}}}catch(r){throw v.error("Error thrown from getDataByHash function in SQLSearch class method getData."),v.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,_=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===_}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();v.trace(`Final SQL: ${n}`),s=await Me.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),v.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw v.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),v.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return v.error(HH.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),v.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=n[i],u=new RegExp(`${_}.\`${o}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let _=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;s=s.replace(_,u)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await cn.getDataByValue(i);for(let c in o)this.data[n].__merged_data[c]||(this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=o[c][s.attribute]}catch(o){v.error("There was an error when processing this SQL operation. Check your logs"),v.error(o)}}return Object.values(Object.values(this.data)[0].__merged_data)}};a(yo,"SQLSearch");qm.exports=yo});var Tt=h((EZ,km)=>{"use strict";var qH=zS();km.exports={searchByConditions:xH,searchByHash:$H,searchByValue:YH,search:KH};var _l=Or(),Vm=require("util"),FH=Vm.callbackify(_l.searchByHash),VH=Vm.callbackify(_l.searchByValue),kH=Fm();async function xH(e){return _l.searchByConditions(e)}a(xH,"searchByConditions");function $H(e,t){try{FH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a($H,"searchByHash");function YH(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),VH(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}a(YH,"searchByValue");function KH(e,t){try{let r=new qH(e);r.validate(),new kH(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(KH,"search")});var Fr=h((dZ,Km)=>{"use strict";var Ti=require("crypto"),$m="aes-256-cbc",QH=32,WH=16,ul=64,Ym=32,JH=ul+Ym,xm=new Map;Km.exports={encrypt:ZH,decrypt:XH,createNatsTableStreamName:zH};function ZH(e){let t=Ti.randomBytes(QH),r=Ti.randomBytes(WH),s=Ti.createCipheriv($m,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(ZH,"encrypt");function XH(e){let t=e.substr(0,ul),r=e.substr(ul,Ym),s=e.substr(JH,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ti.createDecipheriv($m,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(XH,"decrypt");function zH(e,t){let r=`${e}.${t}`,s=xm.get(r);return s||(s=Ti.createHash("md5").update(`${e}.${t}`).digest("hex"),xm.set(r,s)),s}a(zH,"createNatsTableStreamName")});var un=h((SZ,jm)=>{"use strict";var Wm=Tt(),Vr=I(),Jm=Ka(),jH=require("lodash"),eG=require("path"),tG=Fr(),ll=C(),{promisify:Zm}=require("util"),j=T(),{handleHDBError:Do,hdb_errors:rG}=D(),{HDB_ERROR_MSGS:Mo,HTTP_STATUS_CODES:Xm}=rG,sG=Y();sG.initSync();var Qm=z(),nG=te(),mi=Zm(Wm.searchByValue),iG=Zm(Wm.searchByHash),_n="name",zm="hash_attribute",El="schema",aG="schema_table",oG="attribute";jm.exports={describeAll:cG,describeTable:Po,describeSchema:uG};async function cG(e){try{let t=ll.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:_n,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[_n]},i=await mi(n);if(ll.isEmptyOrZeroLength(i))return{};let o={},c={};for(let d in i)o[i[d].name]=!0,!t&&!s&&(c[i[d].name]=r[i[d].name].describe);let _={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:j.ID_ATTRIBUTE_STRING,search_value:j.WILDCARD_SEARCH_VALUE,get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},u=await mi(_),l=[];for(let d of u)try{let S;if(t||s)S=await Po({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let m=r[d.schema].tables[d.name].attribute_permissions;S=await Po({schema:d.schema,table:d.name},m)}S&&l.push(S)}catch(S){Vr.error(S)}let E={};for(let d in l)t||s?(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]):c[l[d].schema]&&(E[l[d].schema]==null&&(E[l[d].schema]={}),E[l[d].schema][l[d].name]=l[d],o[l[d].schema]&&delete o[l[d].schema]);for(let d in o)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return Vr.error("Got an error in describeAll"),Vr.error(t),Do(new Error,Mo.DESCRIBE_ALL_ERR)}}a(cG,"describeAll");async function Po(e,t){let{schema:r,table:s}=e;r=r.toString(),s=s.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i={},o=Jm.describe_table(e);if(o)throw o;if(r===j.SYSTEM_SCHEMA_NAME)return global.hdb_schema[j.SYSTEM_SCHEMA_NAME][s];let c={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:_n,search_value:s,hash_values:[],get_attributes:[j.WILDCARD_SEARCH_VALUE]},_=await mi(c);if(!_||_.length===0)throw Do(new Error,Mo.TABLE_NOT_FOUND(e.schema,e.table),Xm.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw Do(new Error,Mo.INVALID_TABLE_ERR(i));let l={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:aG,search_value:r+"."+s,get_attributes:[oG]},E=await mi(l);E=jH.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=_G(n)),i.attributes=E,i.clustering_stream_name=tG.createNatsTableStreamName(u.schema,u.name);try{let d=eG.join(nG.getBaseSchemaPath(),i.schema.toString()),S=await Qm.openEnvironment(d,i.name),m=Qm.statDBI(S,i.hash_attribute);i.record_count=m.entryCount}catch(d){Vr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){Vr.error(`There was an error getting attributes for table '${u.name}'`),Vr.error(l)}return i}a(Po,"descTable");function _G(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}a(_G,"getAttrsByPerms");async function uG(e){let t=Jm.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:El,search_value:s,hash_values:[],get_attributes:[zm,j.ID_ATTRIBUTE_STRING,_n,El]},i=await mi(n);if(i&&i.length<1){let o={schema:j.SYSTEM_SCHEMA_NAME,table:j.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:j.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[_n]},c=await iG(o);if(c&&c.length<1)throw Do(new Error,Mo.SCHEMA_NOT_FOUND(e.schema),Xm.NOT_FOUND);return{}}else{let o={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),ll.isEmpty(_)||_.describe){let u=await Po({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(o[u.name]=u)}}catch(_){Vr.error(`Error describing schema table '${e.schema}.${c}'`),Vr.error(_)}})),o}}a(uG,"describeSchema")});var hs=h((TZ,nR)=>{var hZ=require("async"),ln=as(),fZ=I(),{callbackify:rR,promisify:lG}=require("util");nR.exports={setSchemaDataToGlobal:eR,getTableSchema:SG,getSystemSchema:fG,setSchemaDataToGlobalAsync:lG(eR)};var sR=un(),EG=rR(sR.describeAll),dG=rR(sR.describeTable);function eR(e){EG(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=ln),global.hdb_schema=r,e(null,null)})}a(eR,"setSchemaDataToGlobal");function tR(e,t){return e==="system"?ln[t]:global.hdb_schema[e][t]}a(tR,"returnSchema");function SG(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?hG(e,t,s=>{if(s)return r(s);if(!global.hdb_schema[e])return r(`schema ${e} does not exist`);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return r(`table ${e}.${t} does not exist`);r(null,tR(e,t))}):r(null,tR(e,t))}a(SG,"getTableSchema");function hG(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=ln:global.hdb_schema={system:ln},r();return}dG(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:ln}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}a(hG,"setTableDataToGlobal");function fG(){return ln}a(fG,"getSystemSchema")});var Se=h((RZ,aR)=>{"use strict";var{platform:mZ}=require("os"),TG="nats-server.zip",dl="nats-server",mG=process.platform==="win32"?`${dl}.exe`:dl,Sl="HDB",RG=/^[^\s.,*>]+$/,iR="__request__",AG=a(e=>`${e}.${iR}`,"REQUEST_SUBJECT"),OG={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},pG={HUB:"hub.pid",LEAF:"leaf.pid"},NG={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gG={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Sl,deliver_subject:"__HDB__.WORKQUEUE"},IG={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Sl,deliver_subject:"HDB.SCHEMAQUEUE"},CG={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Sl,deliver_subject:"HDB.USERQUEUE"},bG={SUCCESS:"success",ERROR:"error"},wG={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},LG={TXN:"txn",MSGID:"msgid"};aR.exports={NATS_SERVER_ZIP:TG,NATS_SERVER_NAME:dl,NATS_BINARY_NAME:mG,PID_FILES:pG,NATS_CONFIG_FILES:OG,SERVER_SUFFIX:NG,WORK_QUEUE_CONSUMER_NAMES:gG,SCHEMA_QUEUE_CONSUMER_NAMES:IG,USER_QUEUE_CONSUMER_NAMES:CG,NATS_TERM_CONSTRAINTS_RX:RG,REQUEST_SUFFIX:iR,UPDATE_REMOTE_RESPONSE_STATUSES:bG,CLUSTER_STATUS_STATUSES:wG,REQUEST_SUBJECT:AG,SUBJECT_PREFIXES:LG}});var cR=h((AZ,oR)=>{"use strict";var UG=Se(),Bo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d,S){this.port=t,this.server_name=r+UG.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:u,port:l,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.accounts={SYS:{users:d},HDB:{users:S}},this.system_account="SYS"}};a(Bo,"HubConfigObject");oR.exports=Bo});var lR=h((OZ,uR)=>{"use strict";var _R=Se(),vo=class{constructor(t,r,s,n,i,o,c,_,u,l,E,d){this.port=t,this.server_name=r+_R.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+_R.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:d},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:d},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:d},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};a(vo,"LeafConfigObject");uR.exports=vo});var dR=h((pZ,ER)=>{"use strict";var Ho=class{constructor(t,r){this.user=t,this.password=r}};a(Ho,"HdbUserObject");ER.exports=Ho});var hR=h((NZ,SR)=>{"use strict";var yG=Se(),Go=class{constructor(t,r){this.user=t+yG.SERVER_SUFFIX.ADMIN,this.password=r}};a(Go,"SysUserObject");SR.exports=Go});var Ut=h((gZ,mR)=>{"use strict";var Fo=Mu(),Lt=C(),DG=require("util"),Vo=Or(),MG=hs(),hl=I(),{handleHDBError:kr,hdb_errors:PG}=D(),{HTTP_STATUS_CODES:fs}=PG,BG=DG.promisify(MG.getTableSchema),vG="updated",fR="inserted",TR="upserted";mR.exports={insert:GG,update:qG,upsert:FG,validation:HG,flush:VG};async function HG(e){if(Lt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Lt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Lt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await BG(e.schema,e.table),r=Fo(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Lt.isEmptyOrZeroLength(c[s]))throw hl.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Lt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hl.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Lt.isEmpty(c[s])&&c[s]!==""&&n.has(Lt.autoCast(c[s]))&&(c.skip=!0),n.add(Lt.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(HG,"validation");async function GG(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.createRecords(e);return qo(fR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}catch(s){throw s}}a(GG,"insertData");async function qG(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.updateRecords(e);return Lt.isEmpty(s.existing_rows)?qo(vG,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):qo(s.update_action,[],e,s.hashes,void 0,s.txn_time)}catch(s){throw s}}a(qG,"updateData");async function FG(e){if(e.operation!=="upsert")throw kr(new Error,"invalid operation, must be upsert",fs.INTERNAL_SERVER_ERROR);let t=Fo(e);if(t)throw kr(new Error,t.message,fs.BAD_REQUEST);let r=Lt.checkSchemaTableExist(e.schema,e.table);if(r)throw kr(new Error,r,fs.BAD_REQUEST);try{let s=await Vo.upsertRecords(e);return qo(TR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw kr(s,null,null,hl.ERR,n)}}a(FG,"upsertData");function qo(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===fR?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TR?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(qo,"returnObject");function VG(e){return Vo.flush(e.schema,e.table)}a(VG,"flush")});var Tl=h((IZ,OR)=>{var kG=Ee(),fl=require("joi"),{hdb_schema_table:RR}=Tr(),AR={schema:RR,table:RR},xG={date:fl.date().iso().required()},$G={timestamp:fl.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OR.exports=function(e,t){let r=t==="timestamp"?{...AR,...$G}:{...AR,...xG},s=fl.object(r);return kG.validateBySchema(e,s)}});var IR=h((CZ,gR)=>{var YG=Ee(),pR=require("joi"),{hdb_schema_table:NR}=Tr(),KG=pR.object({schema:NR,table:NR,hash_values:pR.array().required()});gR.exports=function(e){return YG.validateBySchema(e,KG)}});var bR=h((bZ,CR)=>{"use strict";var ko=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};a(ko,"InsertObject");var xo=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}};a(xo,"NoSQLSeachObject");var $o=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};a($o,"DeleteResponseObject");CR.exports={InsertObject:ko,NoSQLSeachObject:xo,DeleteResponseObject:$o}});var ms=h((wZ,DR)=>{"use strict";var LR=Tl(),QG=IR(),Yo=C(),wR=require("moment"),UR=I(),{promisify:WG,callbackify:JG}=require("util"),Ts=T(),ZG=hs(),ml=WG(ZG.getTableSchema),Rl=Or(),{DeleteResponseObject:XG}=bR(),{handleHDBError:xr,hdb_errors:zG}=D(),{HDB_ERROR_MSGS:Ko,HTTP_STATUS_CODES:$r}=zG,jG="records successfully deleted",eq=JG(yR);DR.exports={delete:eq,deleteRecord:yR,deleteFilesBefore:tq,deleteAuditLogsBefore:rq};async function tq(e){let t=LR(e,"date");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(!wR(e.date,wR.ISO_8601).isValid())throw xr(new Error,Ko.INVALID_DATE,$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_DATE,!0);let s=Yo.checkSchemaTableExist(e.schema,e.table);if(s)throw xr(new Error,s,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,s,!0);try{let n=await Rl.deleteRecordsBefore(e);if(await ml(e.schema,e.table),UR.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}catch(n){throw n}}a(tq,"deleteFilesBefore");async function rq(e){let t=LR(e,"timestamp");if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw xr(new Error,Ko.INVALID_VALUE("Timestamp"),$r.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,Ko.INVALID_VALUE("Timestamp"),!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{let s=await Rl.deleteAuditLogsBefore(e);return await ml(e.schema,e.table),UR.info(`Finished deleting audit logs before ${e.timestamp}`),s}catch(s){throw s}}a(rq,"deleteAuditLogsBefore");async function yR(e){let t=QG(e);if(t)throw xr(t,t.message,$r.BAD_REQUEST,void 0,void 0,!0);let r=Yo.checkSchemaTableExist(e.schema,e.table);if(r)throw xr(new Error,r,$r.NOT_FOUND,Ts.LOG_LEVELS.ERROR,r,!0);try{await ml(e.schema,e.table);let s=await Rl.deleteRecords(e);return Yo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${jG}`),s}catch(s){if(s.message===Ts.SEARCH_NOT_FOUND_MESSAGE){let n=new XG;return n.message=Ts.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(yR,"deleteRecord")});var Qo=h((LZ,BR)=>{var sq=require("crypto"),MR=9;function nq(e){let t=aq(MR),r=PR(e+t);return t+r}a(nq,"createHash");function iq(e,t){let r=e.substr(0,MR),s=r+PR(t+r);return e===s}a(iq,"validateHash");function aq(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(aq,"generateSalt");function PR(e){return sq.createHash("md5").update(e).digest("hex")}a(PR,"md5");BR.exports={hash:nq,validate:iq}});var HR=h((UZ,vR)=>{var Al=Ee(),We={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function oq(e){return We.password.presence=!0,We.username.presence=!0,We.role.presence=!0,We.active.presence=!0,Al.validateObject(e,We)}a(oq,"addUserValidation");function cq(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(cq,"alterUserValidation");function _q(e){return We.password.presence=!1,We.username.presence=!0,We.role.presence=!1,We.active.presence=!1,Al.validateObject(e,We)}a(_q,"dropUserValidation");vR.exports={addUserValidation:oq,alterUserValidation:cq,dropUserValidation:_q}});var qR=h((yZ,GR)=>{"use strict";var Yr=T(),Ri=class{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.LICENSE_VALUES.VERSION_DEFAULT,o){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=o}};a(Ri,"BaseLicense");var Wo=class extends Ri{constructor(t=0,r=Yr.STORAGE_TYPES_ENUM.LMDB,s=Yr.LICENSE_VALUES.API_CALL_DEFAULT,n=Yr.RAM_ALLOCATION_ENUM.DEFAULT,i=Yr.LICENSE_VALUES.VERSION_DEFAULT,o,c=!1){super(t,r,s,n,i,o),this.enterprise=c}};a(Wo,"ExtendedLicense");GR.exports={BaseLicense:Ri,ExtendedLicense:Wo}});var Ai=h((DZ,YR)=>{"use strict";var dn=require("fs-extra"),FR=Qo(),VR=require("crypto"),uq=require("moment"),lq=require("uuid").v4,Je=I(),pl=require("path"),Eq=C(),mt=T(),dq=qR().ExtendedLicense,En="invalid license key format",Sq="061183",hq="mofi25",fq="aes-256-cbc",Tq=16,mq=32,kR=Y();kR.initSync();var Ol;YR.exports={validateLicense:xR,generateFingerPrint:Aq,licenseSearch:$R,getLicense:Nq};function Nl(){return pl.join(kR.getHdbBasePath(),mt.LICENSE_KEY_DIR_NAME,mt.LICENSE_FILE_NAME)}a(Nl,"getLicenseDirPath");function Rq(){let e=Nl();return pl.join(e,mt.LICENSE_FILE_NAME)}a(Rq,"getLicenseFilePath");function gl(){let e=Nl();return pl.join(e,mt.REG_KEY_FILE_NAME)}a(gl,"getFingerPrintFilePath");async function Aq(){let e=gl();try{return await dn.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Oq();throw Je.error(`Error writing fingerprint file to ${e}`),Je.error(t),new Error("There was an error generating the fingerprint")}}a(Aq,"generateFingerPrint");async function Oq(){let e=lq(),t=FR.hash(e),r=gl();try{await dn.mkdirp(Nl()),await dn.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Je.error(`Error writing fingerprint file to ${r}`),Je.error(s),new Error("There was an error generating the fingerprint")}return t}a(Oq,"writeFingerprint");function xR(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:mt.STORAGE_TYPES_ENUM.LMDB,api_call:mt.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:mt.RAM_ALLOCATION_ENUM.DEFAULT,version:mt.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Je.error("empty license key passed to validate."),r;let s=gl(),n=!1;try{n=dn.statSync(s)}catch(i){Je.error(i)}if(n){let i;try{i=dn.readFileSync(s,"utf8")}catch{Je.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(hq),c=o[1];c=Buffer.concat([Buffer.from(c)],Tq);let _=Buffer.concat([Buffer.from(i)],mq),u=VR.createDecipheriv(fq,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(o[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=pq(o[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(En),Je.error(En),new Error(En)}let E;if(isNaN(l))try{E=JSON.parse(l),r.api_call=E.api_call,r.version=E.version,r.storage_type=E.storage_type,r.exp_date=E.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),E.ram_allocation&&(r.ram_allocation=E.ram_allocation)}catch{throw console.error(En),Je.error(En),new Error(En)}else r.exp_date=l;r.exp_date<uq().valueOf()&&(r.valid_date=!1),FR.validate(o[1],`${Sq}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Je.error("Invalid licence"),r}a(xR,"validateLicense");function pq(e,t){try{let r=VR.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Je.warn("Check old license failed")}}a(pq,"checkOldLicense");function $R(){let e=new dq;e.api_call=0;let t=[];try{t=dn.readFileSync(Rq(),"utf-8").split(mt.NEW_LINE)}catch(r){r.code==="ENOENT"?Je.info("no license file found"):Je.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Eq.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=xR(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.api_call+=i.api_call,e.ram_allocation=i.ram_allocation,e.storage_type=i.storage_type,e.enterprise=!0)}catch(n){Je.error("There was an error parsing the license string."),Je.error(n),e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=mt.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=mt.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=mt.LICENSE_VALUES.API_CALL_DEFAULT),Ol=e,e}a($R,"licenseSearch");async function Nq(){return Ol||await $R(),Ol}a(Nq,"getLicense")});var Kr=h((MZ,iA)=>{"use strict";var JR="username is required",ZR="nothing to update, must supply active, role or password to update",XR="password cannot be an empty string",zR="If role is specified, it cannot be empty.",jR="active must be true or false";iA.exports={addUser:yq,alterUser:Dq,dropUser:Pq,userInfo:Bq,listUsers:Zo,listUsersExternal:vq,setUsersToGlobal:Oi,findAndValidateUser:qq,getClusterUser:Fq,USERNAME_REQUIRED:JR,ALTERUSER_NOTHING_TO_UPDATE:ZR,EMPTY_PASSWORD:XR,EMPTY_ROLE:zR,ACTIVE_BOOLEAN:jR};var eA=Ut(),gq=ms(),Cl=Qo(),tA=HR(),rA=Tt(),bl=Zs(),Ce=C(),sA=require("validate.js"),H=I(),{promisify:wl}=require("util"),Ll=Fr(),Rs=T(),KR=Se(),Iq=hr(),Ul=Y(),Cq=Ai(),bq=as(),{handleHDBError:rr,hdb_errors:wq}=D(),{HTTP_STATUS_CODES:sr,AUTHENTICATION_ERROR_MSGS:Il,HDB_ERROR_MSGS:Sn}=wq,{UserEventMsg:yl}=us(),QR=require("lodash"),nA={username:!0,active:!0,role:!0,password:!0},WR=new Map,Jo=wl(rA.searchByValue),Lq=wl(rA.searchByHash),Uq=wl(gq.delete);async function yq(e){let t=sA.cleanAttributes(e,nA),r=tA.addUserValidation(t);if(r)throw rr(new Error,r.message,sr.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Jo(s)}catch(u){throw H.error("There was an error searching for a role in add user"),H.error(u),u}if(!n||n.length<1)throw rr(new Error,Sn.ROLE_NAME_NOT_FOUND(t.role),sr.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw rr(new Error,Sn.DUP_ROLES_FOUND(t.role),sr.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await eA.insert(i)}catch(u){throw H.error("There was an error searching for a user."),H.error(u),u}H.debug(o);try{await Oi()}catch(u){throw H.error("Got an error setting users to global"),H.error(u),u}if(o.skipped_hashes.length===1)throw rr(new Error,Sn.USER_ALREADY_EXISTS(t.username),sr.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);c.role=n[0];let _={user:null};return _.user=c,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ADD_USER,_,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${c.username} successfully added`}a(yq,"addUser");async function Dq(e){let t=sA.cleanAttributes(e,nA);if(Ce.isEmptyOrZeroLength(t.username))throw new Error(JR);if(Ce.isEmptyOrZeroLength(t.password)&&Ce.isEmptyOrZeroLength(t.role)&&Ce.isEmptyOrZeroLength(t.active))throw new Error(ZR);if(!Ce.isEmpty(t.password)&&Ce.isEmptyOrZeroLength(t.password.trim()))throw new Error(XR);if(!Ce.isEmpty(t.active)&&!Ce.isBoolean(t.active))throw new Error(jR);let r=Mq(t.username);if(!Ce.isEmpty(t.password)&&!Ce.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Ll.encrypt(t.password)),t.password=Cl.hash(t.password)),t.role==="")throw new Error(zR);if(t.role){let o={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},c;try{c=await Jo(o)}catch(_){throw H.error("Got an error searching for a role."),H.error(_),_}if(!c||c.length===0){let _=Sn.ALTER_USER_ROLE_NOT_FOUND(t.role);throw H.error(_),rr(new Error,_,sr.NOT_FOUND,void 0,void 0,!0)}if(c.length>1){let _=Sn.ALTER_USER_DUP_ROLES(t.role);throw H.error(_),rr(new Error,_,sr.CONFLICT,void 0,void 0,!0)}t.role=c[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await eA.update(s)}catch(o){throw H.error("Error during update."),H.error(o),o}try{await Oi()}catch(o){throw H.error("Got an error setting users to global"),H.error(o),o}let i={user:null};return i.user=t,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.ALTER_USER,i,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),n}a(Dq,"alterUser");function Mq(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(Mq,"isClusterUser");async function Pq(e){try{let t=tA.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Ce.isEmpty(global.hdb_users.get(e.username)))throw rr(new Error,Sn.USER_NOT_EXIST(e.username),sr.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Uq(r)}catch(i){throw H.error("Got an error deleting a user."),H.error(i),i}H.debug(s);try{await Oi()}catch(i){throw H.error("Got an error setting users to global."),H.error(i),i}let n={user:null};return n.user=e,Ce.sendTransactionToSocketCluster(Rs.INTERNAL_SC_CHANNELS.DROP_USER,n,Ul.get(Rs.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY)),bl.signalUserChange(new yl(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(Pq,"dropUser");async function Bq(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Lq(r)}catch(n){throw H.error("Got an error searching for a role."),H.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw H.error(r),r}return t}a(Bq,"userInfo");async function vq(){let e;try{e=await Zo()}catch(t){throw H.error("Got an error listing users."),H.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(vq,"listUsersExternal");async function Zo(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=QR.cloneDeep(await Jo(e))}catch(r){throw H.error("Got an error searching for roles."),H.error(r),r}if(!Ce.isEmptyOrZeroLength(t)){let r={};for(let o in t)r[t[o].id]=t[o];let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=QR.cloneDeep(await Jo(s))}catch(o){throw H.error("Got an error searching for users."),H.error(o),o}let i=new Map;for(let o in n){let c=n[o];c.role=r[n[o].role],Hq(c.role),i.set(c.username,c)}return(await Cq.getLicense()).enterprise?i:Gq(i)}}catch(e){throw H.error("got an error listing users"),H.error(e),Ce.errorizeMessage(e)}return null}a(Zo,"listUsers");function Hq(e){try{if(!e){H.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(bq)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){H.error("Got an error trying to set system permissions."),H.error(t)}}a(Hq,"appendSystemTablesToRole");function Gq(e){try{if(H.info("No enterprise license found. System is limited to 1 clustering role and 1 user role"),!e)return new Map;let t=Object.create(null),r=new Map;e.forEach((n,i)=>{n.role.permission.cluster_user===void 0||n.role.permission.cluster_user===!1?n.role.permission.super_user===!0&&(t[n.role.id]||(t[n.role.id]=new Map),t[n.role.id].set(i,n)):r.set(i,n)});let s={role:void 0,count:0};return Object.keys(t).forEach(n=>{let i=t[n];i.size>=s.count&&(s.role=n,s.count=i.size)}),s.role===void 0?(H.error("No roles found with active users. This is bad."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return H.error("error filtering users."),H.error(t),new Map}}a(Gq,"nonEnterpriseFilter");async function Oi(){try{let e=await Zo();global.hdb_users=e}catch(e){throw H.error(e),e}}a(Oi,"setUsersToGlobal");async function qq(e,t,r=!0){global.hdb_users||await Oi();let s=global.hdb_users.get(e);if(!s)throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw rr(new Error,Il.USER_INACTIVE,sr.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(WR.get(t)===s.password)return n;if(Cl.validate(s.password,t))WR.set(t,s.password);else throw rr(new Error,Il.GENERIC_AUTH_FAIL,sr.UNAUTHORIZED,void 0,void 0,!0)}return n}a(qq,"findAndValidateUser");async function Fq(){let e=await Zo(),t=Iq.getConfigFromFile(Rs.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Ce.isEmpty(r))return r.decrypt_hash=Ll.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KR.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KR.SERVER_SUFFIX.ADMIN,r}a(Fq,"getClusterUser")});var Xo=h((PZ,aA)=>{"use strict";var Vq=Or();aA.exports={writeTransaction:kq};function kq(e,t,r){return Vq.writeTransaction(e,t,r)}a(kq,"writeTransaction")});var Dl=h((BZ,xq)=>{xq.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 Rt=h((KZ,CA)=>{"use strict";var nr=Y();nr.initSync();var $q=require("fs-extra"),Yq=require("semver"),Ci=require("path"),{monotonicFactory:Kq}=require("ulidx"),Qq=Kq(),cA=require("util"),_A=require("child_process"),Wq=cA.promisify(_A.exec),Jq=_A.spawn,ee=Se(),se=T(),Gl=C(),pr=I(),zo=Fr(),Zq=Xo(),pi=hr(),{encode:Bl,decode:uA}=require("msgpackr"),{isEmpty:As}=Gl,lA=Kr(),vZ=Es(),Xq=Tt(),HZ=cA.promisify(Xq.searchByHash),{connect:zq,StorageType:EA,RetentionPolicy:dA,AckPolicy:SA,DeliverPolicy:vl,NatsConnection:GZ,JetStreamManager:qZ,JetStreamClient:FZ,StringCodec:VZ,JSONCodec:jq,createInbox:ql,StreamSource:kZ,headers:eF,toJsMsg:tF,nuid:xZ,JetStreamOptions:$Z,ErrorCode:oA,nanos:YZ}=require("nats"),{PACKAGE_ROOT:rF}=T(),sF=Dl(),hA=jq(),nF="clustering",iF=sF.engines[ee.NATS_SERVER_NAME],aF=Ci.join(rF,"dependencies"),Hl=Ci.join(aF,`${process.platform}-${process.arch}`,ee.NATS_BINARY_NAME),Ml,Pl,Ni,gi,Ii,Qt;CA.exports={runCommand:fA,checkNATSServerInstalled:oF,createConnection:Fl,getConnection:jo,getJetStreamManager:hn,getJetStream:TA,getNATSReferences:yt,getServerList:_F,createLocalStream:Vl,listStreams:mA,deleteLocalStream:uF,getServerConfig:bi,listRemoteStreams:lF,viewStream:EF,publishToStream:dF,createWorkQueueStream:SF,addSourceToWorkStream:RA,request:hF,removeSourceFromWorkStream:OA,reloadNATS:kl,reloadNATSHub:fF,reloadNATSLeaf:TF,extractServerName:AA,requestErrorHandler:mF,updateWorkStream:RF,createLocalTableStream:NA,createTableStreams:AF,purgeTableStream:gA,purgeSchemaTableStreams:OF,getStreamInfo:pF,updateNodeNameLocalStreams:NF,closeConnection:cF};async function fA(e,t=void 0){let{stdout:r,stderr:s}=await Wq(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
6
6
|
`,""));return r.replace(`
|
|
7
7
|
`,"")}a(fA,"runCommand");async function oF(){try{await $q.access(Hl)}catch{return!1}let e=await fA(`${Hl} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Yq.eq(t,iF)}a(oF,"checkNATSServerInstalled");async function Fl(e,t,r,s=!0,n="127.0.0.1"){return zq({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),insecure:nr.get(se.CONFIG_PARAMS.CLUSTERING_TLS_INSECURE)}})}a(Fl,"createConnection");async function cF(){Qt&&(await Qt.close(),Qt=void 0)}a(cF,"closeConnection");async function jo(){if(!Qt){let e=await lA.getClusterUser();if(As(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=nr.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Qt=await Fl(t,e.username,e.decrypt_hash)}return Qt}a(jo,"getConnection");async function hn(){if(gi)return gi;As(Qt)&&await jo();let{domain:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(As(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return gi=await Qt.jetstreamManager({domain:e}),gi}a(hn,"getJetStreamManager");async function TA(){if(Ii)return Ii;As(Qt)&&await jo();let{domain:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(As(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ii=Qt.jetstream({domain:e}),Ii}a(TA,"getJetStream");async function yt(){let e=Qt||await jo(),t=gi||await hn(),r=Ii||await TA();return{connection:e,jsm:t,js:r}}a(yt,"getNATSReferences");async function _F(){let e=nr.get(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),{sys_name:t,decrypt_hash:r}=await lA.getClusterUser(),s=await Fl(e,t,r),n=ql(),i=s.subscribe(n),o=[],c=(async()=>{for await(let _ of i)o.push(hA.decode(_.data))})();return await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:n}),await s.flush(),await Gl.async_set_timeout(50),await i.drain(),await s.close(),await c,o}a(_F,"getServerList");async function Vl(e,t){let{jsm:r}=await yt();await r.streams.add({name:e,storage:EA.File,retention:dA.Limits,subjects:t})}a(Vl,"createLocalStream");async function mA(){let{jsm:e}=await yt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(mA,"listStreams");async function uF(e){let{jsm:t}=await yt();await t.streams.delete(e)}a(uF,"deleteLocalStream");async function lF(e){let{connection:t}=await yt(),r=[],s=ql(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(hA.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(lF,"listRemoteStreams");async function EF(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await yt(),i=Qq(),o=[],c={ack_policy:SA.None,durable_name:i,deliver_subject:i,deliver_policy:vl.All};t&&(c.deliver_policy=vl.StartTime,c.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,c);let _={timeout:2e3};r&&(_.max=r);let u=await n.subscribe(i,_);for await(let l of u){let E=tF(l),d=uA(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d,originators:[]},m=[];if(E.headers){let R=E.headers.get("originators");R&&(m=R.split(","),S.originators=m)}o.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),o}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return o;throw _}}a(EF,"viewStream");async function dF(e,t,r=[],s=[]){pr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,r,"originators:",s);let{connection:n,js:i}=await yt(),o=await ec(),c=`${e}.${o}`,_=eF();s.push(o),_.append("originators",s.join());for(let u=0,l=r.length;u<l;u++)try{pr.trace(`publishToStream publishing to subject: ${c}, data:`,r[u]),await i.publish(c,Bl(r[u]),{headers:_})}catch(E){if(E.code&&E.code.toString()==="503")pr.trace(`publishToStream creating stream: ${t}`),await Vl(t,[c]),await i.publish(c,Bl(r[u]),{headers:_});else throw E}}a(dF,"publishToStream");function bi(e){e=e.toLowerCase();let t=Ci.join(nr.get(se.CONFIG_PARAMS.ROOTPATH),nF);if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return As(Pl)&&(Pl={port:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.HUB,config_file:ee.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ci.join(t,ee.PID_FILES.HUB),hdb_nats_path:t}),Pl;if(e===se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return As(Ml)&&(Ml={port:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,config_file:ee.NATS_CONFIG_FILES.LEAF_SERVER,domain:pi.getConfigFromFile(se.CONFIG_PARAMS.CLUSTERING_NODENAME)+ee.SERVER_SUFFIX.LEAF,pid_file_path:Ci.join(t,ee.PID_FILES.LEAF),hdb_nats_path:t}),Ml;pr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(bi,"getServerConfig");async function SF(e){let{jsm:t}=await yt(),r=await ec();try{await t.streams.add({name:e.stream_name,storage:EA.File,retention:dA.Workqueue,subjects:[`${ee.SUBJECT_PREFIXES.MSGID}.${r}`,`${ee.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:SA.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:vl.All,max_ack_pending:1e4,deliver_group:e.deliver_group,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`});else throw s}}a(SF,"createWorkQueueStream");async function RA(e,t,r){let{jsm:s}=await yt(),n=await s.streams.info(t),i=AA(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=zo.createNatsTableStreamName(c,_),l=i===e,E,d,S=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let R=0,w=n.config.sources.length;R<w;R++)if(E=n.config.sources[R],d=R,l&&E.name===u||!l&&E.name===u&&E.external&&E.external.api===`$JS.${e}.API`){S=!0;break}if(S===!0){if(E.opt_start_time===o)return;await pA(c,_,E,t),n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let m={name:u,opt_start_time:o,filter_subject:`${ee.SUBJECT_PREFIXES.TXN}.>`};l||(m.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(m),await s.streams.update(t,n.config)}a(RA,"addSourceToWorkStream");function AA(e){return e.split(".")[1]}a(AA,"extractServerName");async function OA(e,t,r){let{schema:s,table:n}=r,i=zo.createNatsTableStreamName(s,n),{jsm:o}=await yt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let _=c.config.sources.length,u;for(;_--;)if(u=c.config.sources[_],u.name===i&&u.external.api===`$JS.${e}.API`){c.config.sources.splice(_,1);break}await o.streams.update(t,c.config),await pA(s,n,u,t)}a(OA,"removeSourceFromWorkStream");async function pA(e,t,r,s){let n=await hn(),i;try{i=IA(e,t,r.external.api.split(".")[1]),await n.streams.purge(s,{filter:i})}catch{pr.error("Error purging source subject",i,"from work stream",s)}}a(pA,"purgeSourceFromWorkStream");async function hF(e,t,r=2e3,s=ql()){if(!Gl.isObject(t))throw new Error("data param must be an object");let n=Bl(t),{connection:i}=await yt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return uA(c.data)}a(hF,"request");function kl(e){return new Promise(async(t,r)=>{let s=Jq(Hl,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(kl,"reloadNATS");async function fF(){let{pid_file_path:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kl(e)}a(fF,"reloadNATSHub");async function TF(){let{pid_file_path:e}=bi(se.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kl(e)}a(TF,"reloadNATSLeaf");function mF(e,t,r){let s;switch(e.code){case oA.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case oA.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(mF,"requestErrorHandler");async function RF(e,t){let r=t+ee.SERVER_SUFFIX.LEAF;await Zq.writeTransaction(se.SYSTEM_SCHEMA_NAME,se.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await RA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await OA(r,ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(RF,"updateWorkStream");async function NA(e,t){let r=zo.createNatsTableStreamName(e,t),s=await ec(),n=IA(e,t,s);await Vl(r,[n])}a(NA,"createLocalTableStream");async function AF(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await NA(s,n)}}a(AF,"createTableStreams");async function gA(e,t){if(nr.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=zo.createNatsTableStreamName(e,t),{jsm:s}=await yt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")pr.warn(r);else throw r}}a(gA,"purgeTableStream");async function OF(e,t){if(nr.get(se.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await gA(e,t[r])}a(OF,"purgeSchemaTableStreams");async function pF(e){return(await hn()).streams.info(e)}a(pF,"getStreamInfo");function IA(e,t,r){return`${ee.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}a(IA,"createSubjectName");async function ec(){if(Ni)return Ni;if(Ni=(await hn())?.nc?.info?.server_name,Ni===void 0)throw new Error("Unable to get jetstream manager server name");return Ni}a(ec,"getJsmServerName");async function NF(){let e=await hn(),t=await ec(),r=await mA();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i.split(".");if(o[o.length-1]!==t){if(n.name===ee.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;pr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ee.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ee.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;pr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_,await e.consumers.update(ee.WORK_QUEUE_CONSUMER_NAMES.stream_name,ee.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${ee.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let _=i.split(".");_[_.length-1]=t;let u=_.join(".");pr.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}await e.streams.update(n.name,n)}}}a(NF,"updateNodeNameLocalStreams")});var Yl=h((QZ,LA)=>{"use strict";var fn=require("path"),nc=require("fs-extra"),gF=cR(),IF=lR(),CF=dR(),bF=hR(),xl=Kr(),mn=C(),Dt=hr(),sc=T(),tc=Se(),{CONFIG_PARAMS:be}=sc,ic=I(),ac=Y(),bA=Fr(),$l=Rt(),Tn="clustering",wF=1e4,wA=5;LA.exports={generateNatsConfig:LF,removeNatsConfig:UF};async function LF(e=!1,t=void 0){ac.initSync();let r=ac.get(be.ROOTPATH),s=fn.join(r,Tn,tc.PID_FILES.HUB),n=fn.join(r,Tn,tc.PID_FILES.LEAF),i=fn.join(r,Tn,"leaf"),o=fn.join(r,Tn,tc.NATS_CONFIG_FILES.HUB_SERVER),c=fn.join(r,Tn,tc.NATS_CONFIG_FILES.LEAF_SERVER),_=Dt.getConfigFromFile(be.CLUSTERING_TLS_CERTIFICATE),u=Dt.getConfigFromFile(be.CLUSTERING_TLS_PRIVATEKEY),l=Dt.getConfigFromFile(be.CLUSTERING_TLS_CERT_AUTH),E=Dt.getConfigFromFile(be.CLUSTERING_TLS_INSECURE),d=Dt.getConfigFromFile(be.CLUSTERING_NODENAME),S=Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await $l.checkNATSServerInstalled()||oc("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await xl.listUsers(),R=Dt.getConfigFromFile(be.CLUSTERING_USER),w=await xl.getClusterUser();(mn.isEmpty(w)||w.active!==!0)&&oc(`invalid cluster user '${R}'`),e||(await rc(be.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await rc(be.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await rc(be.CLUSTERING_HUBSERVER_NETWORK_PORT),await rc(be.CLUSTERING_LEAFSERVER_NETWORK_PORT));let L=[],B=[];for(let[la,yr]of m.entries())yr.role.role===sc.ROLE_TYPES_ENUM.CLUSTER_USER&&yr.active&&(L.push(new bF(yr.username,bA.decrypt(yr.hash))),B.push(new CF(yr.username,bA.decrypt(yr.hash))));let X=[],{hub_routes:V}=Dt.getClusteringRoutes();if(!mn.isEmptyOrZeroLength(V))for(let la of V)X.push(`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@${la.host}:${la.port}`);let W=new gF(Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_NETWORK_PORT),d,s,_,u,l,E,S,Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_CLUSTER_NAME),Dt.getConfigFromFile(be.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),X,L,B);t=mn.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===sc.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await nc.writeJson(o,W),ic.trace(`Hub server config written to ${o}`));let ke=`tls://${w.sys_name_encoded}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,xe=`tls://${w.uri_encoded_name}:${w.uri_encoded_d_hash}@0.0.0.0:${S}`,ua=new IF(Dt.getConfigFromFile(be.CLUSTERING_LEAFSERVER_NETWORK_PORT),d,n,i,[ke],[xe],L,B,_,u,l,E);(t===void 0||t===sc.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await nc.writeJson(c,ua),ic.trace(`Leaf server config written to ${c}`))}a(LF,"generateNatsConfig");async function rc(e){let t=ac.get(e);mn.isEmpty(t)&&oc(`port undefined for '${e}'`),await mn.isPortTaken(t)&&oc(`'${e}' port '${t}' is unavailable`)}a(rc,"isPortAvailable");function oc(e){let t=`Error generating clustering config: ${e}`;ic.error(t),console.error(t),process.exit(1)}a(oc,"generateNatsConfigError");async function UF(e){let{port:t,config_file:r}=$l.getServerConfig(e),{username:s,decrypt_hash:n}=await xl.getClusterUser(),i=0,o=500;for(;i<wA;){try{let u=await $l.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){ic.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=wA)throw new Error(`removeNatsConfig timed out waiting to connect to ${e}`);await mn.async_set_timeout(o*i)}let c="0".repeat(wF),_=fn.join(ac.get(be.ROOTPATH),Tn,r);await nc.writeFile(_,c),await nc.remove(_)}a(UF,"removeNatsConfig")});var _c=h((WZ,vA)=>{"use strict";var ne=Y(),UA=Ai(),b=T(),Kl=Se(),Ae=require("path"),{PACKAGE_ROOT:cc}=T(),_e="/dev/null",Rn=Ae.join(cc,"launchServiceScripts"),yA=Ae.join(cc,"utility/scripts"),yF=Ae.join(yA,b.HDB_RESTART_SCRIPT),DA=Ae.resolve(cc,"dependencies",`${process.platform}-${process.arch}`,Kl.NATS_BINARY_NAME),Pe,Be;function ir(){(Pe===void 0||Be===void 0)&&(ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY))}a(ir,"initLogConfig");function MA(){ir();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.IPC),t={name:b.PROCESS_DESCRIPTORS.IPC,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.IPC},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:b.SERVICE_SERVERS_CWD.IPC};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:b.SERVICE_SERVERS.IPC}}a(MA,"generateIPCServerConfig");function PA(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,b.PROCESS_LOG_NAMES.HDB),t=UA.licenseSearch(),r=t.ram_allocation?b.MEM_SETTING_KEY+t.ram_allocation:b.MEM_SETTING_KEY+b.RAM_ALLOCATION_ENUM.DEFAULT,s={name:b.PROCESS_DESCRIPTORS.HDB,script:b.LAUNCH_SERVICE_SCRIPTS.HDB,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.HDB},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(b.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Rn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(PA,"generateHDBServerConfig");function BA(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CUSTOM_FUNCTIONS),t=UA.licenseSearch(),r=t.ram_allocation?b.MEM_SETTING_KEY+t.ram_allocation:b.MEM_SETTING_KEY+b.RAM_ALLOCATION_ENUM.DEFAULT,s={name:b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS,script:b.LAUNCH_SERVICE_SCRIPTS.CUSTOM_FUNCTIONS,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS},merge_logs:!0,out_file:e,error_file:e,instances:ne.get(b.CONFIG_PARAMS.HTTP_THREADS),node_args:r,cwd:Rn};return Pe||(s.out_file=_e,s.error_file=_e),s}a(BA,"generateCFServerConfig");function DF(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(b.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",Kl.NATS_CONFIG_FILES.HUB_SERVER),r=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_HUB),s={name:b.PROCESS_DESCRIPTORS.CLUSTERING_HUB,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(DF,"generateNatsHubServerConfig");function MF(){ir(),ne.initSync(),Pe=ne.get(b.HDB_SETTINGS_NAMES.LOG_TO_FILE),Be=ne.get(b.HDB_SETTINGS_NAMES.LOG_PATH_KEY);let e=ne.get(b.CONFIG_PARAMS.ROOTPATH),t=Ae.join(e,"clustering",Kl.NATS_CONFIG_FILES.LEAF_SERVER),r=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_LEAF),s={name:b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,script:DA,args:`-c ${t}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Pe||(s.out_file=_e,s.error_file=_e),s}a(MF,"generateNatsLeafServerConfig");function PF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_INGEST_SERVICE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,script:b.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(PF,"generateNatsIngestServiceConfig");function BF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_REPLY_SERVICE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE,script:b.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,exec_mode:"cluster",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn};return Pe||(t.out_file=_e,t.error_file=_e),t}a(BF,"generateNatsReplyServiceConfig");function vF(){ir(),ne.initSync();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.CLUSTERING_UPGRADE),t={name:b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:b.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Rn,autorestart:!1};return Pe||(t.out_file=_e,t.error_file=_e),t}a(vF,"generateClusteringUpgradeV4ServiceConfig");function HF(){ir();let e=Ae.join(Be,b.PROCESS_LOG_NAMES.PM2),t={name:b.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:b.PROCESS_DESCRIPTORS.RESTART_HDB},merge_logs:!0,out_file:e,error_file:e,instances:1,autorestart:!1,cwd:yA};return Pe||(t.out_file=_e,t.error_file=_e),{...t,script:yF}}a(HF,"generateRestart");function GF(e){ir();let t=Ae.join(Be,b.PROCESS_LOG_NAMES.JOBS),r=Ae.join(cc,"server/jobs"),s={name:`JOB-${e}`,exec_mode:"fork",env:{[b.PROCESS_NAME_ENV_PROP]:`JOB-${e}`},merge_logs:!0,out_file:t,error_file:t,instances:1,cwd:Rn,autorestart:!1};return Pe||(s.out_file=_e,s.error_file=_e),{...s,script:Ae.join(r,"jobProcess.js")}}a(GF,"generateJobConfig");function qF(){return{apps:[MA(),PA(),BA()]}}a(qF,"generateAllServiceConfigs");vA.exports={generateAllServiceConfigs:qF,generateIPCServerConfig:MA,generateHDBServerConfig:PA,generateCFServerConfig:BA,generateRestart:HF,generateNatsHubServerConfig:DF,generateNatsLeafServerConfig:MF,generateNatsIngestServiceConfig:PF,generateNatsReplyServiceConfig:BF,generateClusteringUpgradeV4ServiceConfig:vF,generateJobConfig:GF}});var GA=h((JZ,HA)=>{var FF=Ee(),VF={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HA.exports=function(e){return FF.validateObject(e,VF)}});var Ql=h((ZZ,qA)=>{"use strict";var kF=T().OPERATIONS_ENUM,uc=class{constructor(t,r,s,n=void 0){this.operation=kF.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(uc,"UpdateObject");qA.exports=uc});var VA=h((XZ,FA)=>{"use strict";var xF={OPERATION:"operation",REFRESH:"refresh"},lc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};a(lc,"JWTTokens");var Ec=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};a(Ec,"JWTRSAKeys");FA.exports={JWTTokens:lc,TOKEN_TYPE_ENUM:xF,JWTRSAKeys:Ec}});var fc=h((zZ,YA)=>{"use strict";var Li=require("jsonwebtoken"),Wl=require("fs-extra"),Jl=C(),Mt=T(),{handleHDBError:ot,hdb_errors:$F}=D(),{HTTP_STATUS_CODES:ct,AUTHENTICATION_ERROR_MSGS:_t}=$F,wi=I(),kA=Qo(),zl=Kr(),YF=Ut().update,KF=Ql(),QF=Zs(),{UserEventMsg:WF}=us(),Qr=Y();Qr.initSync();var Zl=require("path"),{JWTTokens:JF,JWTRSAKeys:ZF,TOKEN_TYPE_ENUM:dc}=VA(),XF=Qr.get(Mt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qr.get(Mt.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",zF=Qr.get(Mt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qr.get(Mt.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Sc="RS256",Xl;YA.exports={createTokens:jF,validateOperationToken:t0,refreshOperationToken:e0,validateRefreshToken:$A};async function jF(e){if(Jl.isEmpty(e)||typeof e!="object")throw ot(new Error,_t.INVALID_AUTH_OBJECT,ct.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmpty(e.username))throw ot(new Error,_t.USERNAME_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmpty(e.password))throw ot(new Error,_t.PASSWORD_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await zl.findAndValidateUser(e.username,e.password),!t)throw ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw wi.error(d),ot(new Error,_t.INVALID_CREDENTIALS,ct.UNAUTHORIZED,void 0,void 0,!0)}let r=await hc(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await xA(i,r.private_key,r.passphrase),c=await Li.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:zF,algorithm:Sc,subject:dc.REFRESH}),_=kA.hash(c),u=new KF(Mt.SYSTEM_SCHEMA_NAME,Mt.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await YF(u)}catch(d){wi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw ot(new Error,_t.REFRESH_TOKEN_SAVE_FAILED,ct.INTERNAL_SERVER_ERROR);return QF.signalUserChange(new WF(process.pid)),new JF(o,c)}a(jF,"createTokens");async function xA(e,t,r){return await Li.sign(e,{key:t,passphrase:r},{expiresIn:XF,algorithm:Sc,subject:dc.OPERATION})}a(xA,"signOperationToken");async function hc(){if(Xl===void 0)try{let e=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Zl.join(Qr.getHdbBasePath(),Mt.LICENSE_KEY_DIR_NAME,Mt.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Wl.readFile(e)).toString(),n=(await Wl.readFile(t)).toString(),i=(await Wl.readFile(r)).toString();Xl=new ZF(i,n,s)}catch(e){throw wi.error(e),ot(new Error,_t.NO_ENCRYPTION_KEYS,ct.INTERNAL_SERVER_ERROR)}return Xl}a(hc,"getJWTRSAKeys");async function e0(e){if(!e)throw ot(new Error,_t.INVALID_BODY,ct.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ot(new Error,_t.REFRESH_TOKEN_REQUIRED,ct.BAD_REQUEST,void 0,void 0,!0);await $A(e.refresh_token);let t=await hc(),r=await Li.decode(e.refresh_token);return{operation_token:await xA({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(e0,"refreshOperationToken");async function t0(e){try{let t=await hc(),r=await Li.verify(e,t.public_key,{algorithms:Sc,subject:dc.OPERATION});return await zl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wi.warn(t),t.name&&t.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}}a(t0,"validateOperationToken");async function $A(e){let t;try{let r=await hc(),s=await Li.verify(e,r.public_key,{algorithms:Sc,subject:dc.REFRESH});t=await zl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw wi.warn(r),r.name&&r.name==="TokenExpiredError"?ot(new Error,_t.TOKEN_EXPIRED,ct.FORBIDDEN):ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED)}if(!kA.validate(t.refresh_token,e))throw ot(new Error,_t.INVALID_TOKEN,ct.UNAUTHORIZED);return t}a($A,"validateRefreshToken")});var JA=h((eX,WA)=>{"use strict";var r0=GA(),An=require("passport"),s0=require("passport-local").Strategy,n0=require("passport-http").BasicStrategy,i0=require("util"),a0=Kr(),QA=i0.callbackify(a0.findAndValidateUser),jZ=rt(),o0=T(),KA=fc();An.use(new s0(function(e,t,r){QA(e,t,r)}));An.use(new n0(function(e,t,r){QA(e,t,r)}));An.serializeUser(function(e,t){t(null,e)});An.deserializeUser(function(e,t){t(null,e)});function c0(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("User not found")}switch(a(i,"handleResponse"),s){case"Basic":An.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===o0.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?KA.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):KA.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:An.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(c0,"authorize");function _0(e,t){let r=r0(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n||!n.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(_0,"checkPermissions");WA.exports={authorize:c0,checkPermissions:_0}});var On=h((tX,ZA)=>{"use strict";var Tc=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};a(Tc,"Node");var mc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};a(mc,"NodeSubscription");ZA.exports={Node:Tc,NodeSubscription:mc}});var zA=h((rX,XA)=>{"use strict";var u0=T().OPERATIONS_ENUM,Rc=class{constructor(t,r,s,n=void 0){this.operation=u0.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};a(Rc,"UpsertObject");XA.exports=Rc});var Ui=h((sX,jA)=>{"use strict";var Ac=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};a(Ac,"RemotePayloadObject");var Oc=class{constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o}};a(Oc,"RemotePayloadSubscription");jA.exports={RemotePayloadObject:Ac,RemotePayloadSubscription:Oc}});var tO=h((nX,eO)=>{"use strict";var pc=class{constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};a(pc,"TableSizeObject");eO.exports=pc});var iO=h((iX,nO)=>{"use strict";var l0=tO(),rO=require("path"),sO=te(),E0=Ye(),pn=z(),d0=I();nO.exports=S0;async function S0(e){let t=new l0;try{let r=rO.join(sO.getBaseSchemaPath(),e.schema.toString()),s=await pn.openEnvironment(r,e.name),n=pn.statDBI(s,e.hash_attribute),i=rO.join(sO.getTransactionAuditStorePath(),e.schema.toString()),o=await pn.openEnvironment(i,e.name,!0),c=pn.statDBI(o,E0.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await pn.environmentDataSize(r,e.name),u=await pn.environmentDataSize(i,e.name);t.schema=e.schema,t.table=e.name,t.table_size=_,t.record_count=n.entryCount,t.transaction_log_size=u,t.transaction_log_record_count=c.entryCount}catch(r){d0.warn(`unable to stat table dbi due to ${r}`)}return t}a(S0,"lmdbGetTableSize")});var oO=h((aX,aO)=>{"use strict";var h0=T(),Nc=class{constructor(t){this.operator=h0.OPERATIONS_ENUM.SYSTEM_INFORMATION,this.attributes=t}};a(Nc,"SystemInformationOperation");aO.exports=Nc});var _O=h((oX,cO)=>{"use strict";var gc=class{constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};a(gc,"SystemInformationObject");cO.exports=gc});var Cc=h((_X,uO)=>{"use strict";var ve=require("systeminformation"),Nn=I(),f0=T(),T0=iO(),m0=un(),R0=Y();R0.initSync();var cX=oO(),A0=_O(),Ic;uO.exports={getHDBProcessInfo:rE,getNetworkInfo:nE,getDiskInfo:sE,getMemoryInfo:tE,getCPUInfo:eE,getTimeInfo:jl,getSystemInformation:iE,systemInformation:O0,getTableSize:aE};function jl(){return ve.time()}a(jl,"getTimeInfo");async function eE(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:_,cache:u,...l}=await ve.cpu();l.cpu_speed=await ve.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:m,raw_currentload_system:R,raw_currentload_user:w,cpus:L,...B}=await ve.currentLoad();return B.cpus=[],L.forEach(X=>{let{raw_load:V,raw_load_idle:W,raw_load_irq:ke,raw_load_nice:xe,raw_load_system:ua,raw_load_user:la,...yr}=X;B.cpus.push(yr)}),l.current_load=B,l}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}a(eE,"getCPUInfo");async function tE(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await ve.mem();return n}catch(e){return Nn.error(`error in getMemoryInfo: ${e}`),{}}}a(tE,"getMemoryInfo");async function rE(){let e={core:[],clustering:[]};try{return(await ve.processes()).list.forEach(r=>{r.params.includes(f0.HDB_PROC_NAME)?e.core.push(r):r.params.includes("socketcluster")&&e.clustering.push(r)}),e}catch(t){return Nn.error(`error in getHDBProcessInfo: ${t}`),e}}a(rE,"getHDBProcessInfo");async function sE(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await ve.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:_,...u}=await ve.fsStats();return e.read_write=u,e.size=await ve.fsSize(),e}catch(t){return Nn.error(`error in getDiskInfo: ${t}`),e}}a(sE,"getDiskInfo");async function nE(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await ve.networkInterfaceDefault(),e.latency=await ve.inetChecksite("google.com"),(await ve.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await ve.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e.connections=await ve.networkConnections(),e}catch(t){return Nn.error(`error in getNetworkInfo: ${t}`),e}}a(nE,"getNetworkInfo");async function iE(){if(Ic!==void 0)return Ic;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await ve.osInfo();e=c;let _=await ve.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,Ic=e,Ic}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}a(iE,"getSystemInformation");async function aE(){let e=[],t=await m0.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await T0(s));return e}a(aE,"getTableSize");async function O0(e){let t=new A0;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iE(),t.time=jl(),t.cpu=await eE(),t.memory=await tE(),t.disk=await sE(),t.network=await nE(),t.harperdb_processes=await rE(),t.table_size=await aE(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iE();break;case"time":t.time=jl();break;case"cpu":t.cpu=await eE();break;case"memory":t.memory=await tE();break;case"disk":t.disk=await sE();break;case"network":t.network=await nE();break;case"harperdb_processes":t.harperdb_processes=await rE();break;case"table_size":t.table_size=await aE();break;default:break}return t}a(O0,"systemInformation")});var oE=h((EX,lO)=>{"use strict";var uX=require("fs-extra"),lX=I();lO.exports={version:p0,printVersion:g0,nodeVersion:N0};var Wr=Dl();function p0(){if(Wr)return Wr.version}a(p0,"version");function N0(){if(Wr&&Wr.engines&&Wr.engines["preferred-node"])return Wr.engines["preferred-node"]}a(N0,"nodeVersion");function g0(){Wr&&console.log(`HarperDB Version ${Wr.version}`)}a(g0,"printVersion")});var ps=h((hX,hO)=>{"use strict";var I0=Ut(),cE=C(),_E=require("util"),Os=T(),EO=Y();EO.initSync();var C0=JA(),dO=Tt(),{Node:dX,NodeSubscription:SX}=On(),b0=Es(),w0=zA(),{RemotePayloadObject:L0,RemotePayloadSubscription:U0}=Ui(),{handleHDBError:y0,hdb_errors:D0}=D(),{HTTP_STATUS_CODES:M0,HDB_ERROR_MSGS:P0}=D0,B0=Kt(),v0=Cc(),H0=oE(),G0=_E.promisify(C0.authorize),q0=_E.promisify(dO.searchByHash),F0=_E.promisify(dO.searchByValue);hO.exports={authHeaderToUser:V0,isEmpty:k0,getNodeRecord:x0,upsertNodeRecord:$0,buildNodePayloads:Y0,checkClusteringEnabled:K0,getAllNodeRecords:Q0,getSystemInfo:W0,reverseSubscription:SO};async function V0(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await G0(t,null),e}a(V0,"authHeaderToUser");function k0(e){return e==null}a(k0,"isEmpty");async function x0(e){let t=new b0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return q0(t)}a(x0,"getNodeRecord");async function $0(e){let t=new w0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return I0.upsert(t)}a($0,"upsertNodeRecord");function SO(e){if(cE.isEmpty(e.subscribe)||cE.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(SO,"reverseSubscription");function Y0(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:_,table:u}=c,l=cE.getTableHashAttribute(_,u),{subscribe:E,publish:d}=SO(c),S=new U0(_,u,l,d,E,c.start_time);n.push(S)}return new L0(r,t,n,s)}a(Y0,"buildNodePayloads");function K0(){if(!EO.get(Os.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y0(new Error,P0.CLUSTERING_NOT_ENABLED,M0.BAD_REQUEST,void 0,void 0,!0)}a(K0,"checkClusteringEnabled");async function Q0(){let e=new B0(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return F0(e)}a(Q0,"getAllNodeRecords");async function W0(){let e=await v0.getSystemInformation();return{hdb_version:H0.version(),node_version:e.node_version,platform:e.platform}}a(W0,"getSystemInfo")});var gn=h((fX,CO)=>{"use strict";var P=T(),bc=C(),yi=Yl(),wc=Rt(),J0=Se(),x=require("pm2"),Z0=require("fs-extra"),Nr=_c(),ut=Y(),gr=I(),X0=_c(),z0=ps(),j0=require("util"),TO=j0.promisify(require("child_process").exec),mO=require("path");CO.exports={start:Ns,stop:Uc,reload:AO,restart:OO,list:lE,describe:yc,connect:ar,kill:NO,startAllServices:_V,startService:Lc,getUniqueServicesList:EE,restartAllServices:uV,stopAllServices:lV,isServiceRegistered:gO,reloadStopStart:uE,restartHdb:pO,deleteProcess:oV,configureLogRotate:SV,startClustering:IO,isHdbRestartRunning:cV,isClusteringRunning:fV,stopClustering:hV,reloadClustering:TV};var{PACKAGE_ROOT:eV}=T(),tV="2.7.0",RO=mO.join(eV,"node_modules/pm2/bin/pm2"),rV="Log rotate installed.",sV="Error installing log rotate.",nV="Log rotate updated.",iV="Error updating log rotate.",aV="The number of HarperDB processes running is different from the settings value. To restart and update the number HarperDB processes running you must stop and then start HarperDB";function ar(){return new Promise((e,t)=>{x.connect((r,s)=>{r&&t(r),e(s)})})}a(ar,"connect");function Ns(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.start(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(Ns,"start");function Uc(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.stop(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.delete(e,(i,o)=>{i&&(x.disconnect(),r(s)),x.disconnect(),t(o)})})})}a(Uc,"stop");function AO(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.reload(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(AO,"reload");function OO(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.restart(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(OO,"restart");function oV(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.delete(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(oV,"deleteProcess");async function pO(){await Ns(X0.generateRestart())}a(pO,"restartHdb");async function cV(){let e=await lE();for(let t in e)if(e[t].name===P.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(cV,"isHdbRestartRunning");function lE(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.list((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(lE,"list");function yc(e){return new Promise(async(t,r)=>{try{await ar()}catch(s){r(s)}x.describe(e,(s,n)=>{s&&(x.disconnect(),r(s)),x.disconnect(),t(n)})})}a(yc,"describe");function NO(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.killDaemon((r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(NO,"kill");async function _V(){try{await IO(),await Ns(Nr.generateAllServiceConfigs())}catch(e){throw x.disconnect(),e}}a(_V,"startAllServices");async function Lc(e){try{let t;switch(e=e.toLowerCase(),e){case P.PROCESS_DESCRIPTORS.IPC.toLowerCase():t=Nr.generateIPCServerConfig();break;case P.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Nr.generateHDBServerConfig();break;case P.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase():t=Nr.generateCFServerConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Nr.generateNatsIngestServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Nr.generateNatsReplyServiceConfig();break;case P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Nr.generateNatsHubServerConfig(),await Ns(t),await yi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Nr.generateNatsLeafServerConfig(),await Ns(t),await yi.removeNatsConfig(e);return;case P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Nr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ns(t)}catch(t){throw x.disconnect(),t}}a(Lc,"startService");async function EE(){try{let e=await lE(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw x.disconnect(),e}}a(EE,"getUniqueServicesList");async function uV(e=[]){try{let t=!1,r=await EE();for(let s=0,n=Object.values(r).length;s<n;s++){let i=Object.values(r)[s],o=i.name;e.includes(o)||(i.exec_mode==="cluster_mode"?o===P.PROCESS_DESCRIPTORS.HDB?t=!0:await uE(o):await OO(o))}t&&await uE(P.PROCESS_DESCRIPTORS.HDB)}catch(t){throw x.disconnect(),t}}a(uV,"restartAllServices");async function lV(){try{let e=await EE();for(let t=0,r=Object.values(e).length;t<r;t++){let s=Object.values(e)[t];await Uc(s.name)}if(await NO(),ut.get(P.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND)===!0){let t=(await Z0.readFile(mO.join(ut.get(P.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),P.FOREGROUND_PID_FILE))).toString();try{process.kill(t,"SIGTERM")}catch(r){gr.warn(`Error terminating foreground process: ${r}`)}}}catch(e){throw x.disconnect(),e}}a(lV,"stopAllServices");async function gO(e){return!bc.isEmptyOrZeroLength(await yc(e))}a(gO,"isServiceRegistered");async function uE(e){let t=e===P.PROCESS_DESCRIPTORS.HDB?ut.get(P.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ut.get(P.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await yc(e),s=bc.isEmptyOrZeroLength(r)?0:r.length;t!==s?e===P.PROCESS_DESCRIPTORS.HDB?gr.error(aV):(await Uc(e),await Lc(e)):e===P.PROCESS_DESCRIPTORS.HDB?await pO():await AO(e)}a(uE,"reloadStopStart");function EV(){return new Promise(async(e,t)=>{try{await ar()}catch(r){t(r)}x.stop(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE,(r,s)=>{r&&(x.disconnect(),t(r)),x.disconnect(),e(s)})})}a(EV,"stopLogrotate");async function dV(){let{stdout:e,stderr:t}=await TO(`${process.platform==="win32"?"node":""} ${RO} install pm2-logrotate@${tV}`);if(gr.debug(`loadLogRotate stdout: ${e}`),t)throw gr.error(sV),t;gr.info(rV)}a(dV,"installLogRotate");async function fO(){let e={max_size:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_MAX_SIZE),retain:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_RETAIN),compress:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_COMPRESS),dateFormat:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_DATE_FORMAT),rotateModule:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_MODULE),workerInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_WORKER_INTERVAL),rotateInterval:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_ROTATE_INTERVAL),TZ:ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE_TIMEZONE)},t="";for(let n in e)t+=`${process.platform==="win32"?"node":""} ${RO} set pm2-logrotate:${n} ${e[n]}`,n!=="TZ"&&(t+=" && ");let{stdout:r,stderr:s}=await TO(t);if(gr.debug(`updateLogRotateConfig stdout: ${r}`),s)throw gr.error(iV),s;gr.info(nV)}a(fO,"updateLogRotateConfig");async function SV(){ut.initSync();let e=bc.autoCastBoolean(ut.get(P.HDB_SETTINGS_NAMES.LOG_ROTATE)),t=await yc(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),r,s=!1;if(bc.isEmptyOrZeroLength(t)||(s=!0,r=t[0].pm2_env.status),e&&!s){await dV(),await fO();return}if(e&&s){await Ns(P.PROCESS_DESCRIPTORS.PM2_LOGROTATE),await fO();return}!e&&r===P.PM2_PROCESS_STATUSES.ONLINE&&await EV()}a(SV,"configureLogRotate");async function IO(){for(let t in P.CLUSTERING_PROCESSES){let r=P.CLUSTERING_PROCESSES[t];await Lc(r)}await wc.createWorkQueueStream(J0.WORK_QUEUE_CONSUMER_NAMES),await wc.updateNodeNameLocalStreams();let e=await z0.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===P.PRE_4_0_0_VERSION){gr.info("Starting clustering upgrade 4.0.0 process"),await Lc(P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0);break}}a(IO,"startClustering");async function hV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];await Uc(t)}}a(hV,"stopClustering");async function fV(){for(let e in P.CLUSTERING_PROCESSES){let t=P.CLUSTERING_PROCESSES[e];if(await gO(t)===!1)return!1}return!0}a(fV,"isClusteringRunning");async function TV(){await yi.generateNatsConfig(!0),await wc.reloadNATSHub(),await wc.reloadNATSLeaf(),await yi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yi.removeNatsConfig(P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(TV,"reloadClustering")});var dE=h((TX,bO)=>{"use strict";var Dc=class{constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};a(Dc,"ClusteringOriginObject");bO.exports=Dc});var bn=h((mX,UO)=>{"use strict";var wO=C(),Mi=Y(),ue=T(),SE=Se(),In=Rt(),he=I(),LO=dE(),mV=Fr();Mi.initSync();var Cn=SE.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name,Di=SE.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject;UO.exports={sendAttributeTransaction:Pc,postOperationHandler:AV};async function Pc(e,t,r=[]){if(!!Mi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&!wO.isEmptyOrZeroLength(e.new_attributes)&&t.schema!==ue.SYSTEM_SCHEMA_NAME){let s=t.hdb_user?.username,n=Mi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let i of e.new_attributes){let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:t.schema,table:t.table,attribute:i,__origin:new LO(e.txn_time,s,n)};he.trace(`sendAttributeTransaction publishing ${Cn}`,o),await In.publishToStream(Di,Cn,[o],r)}}}a(Pc,"sendAttributeTransaction");async function Mc(e,t,r,s=[]){if(e.schema===ue.SYSTEM_SCHEMA_NAME)return;let n=RV(e,t,r);n&&(he.trace(`sendOperationTransaction publishing to schema ${e.schema} table ${e.table} following transaction:`,n),await In.publishToStream(`${SE.SUBJECT_PREFIXES.TXN}.${e.schema}.${e.table}`,mV.createNatsTableStreamName(e.schema,e.table),[n],s))}a(Mc,"sendOperationTransaction");function RV(e,t,r){if(wO.isEmptyOrZeroLength(t))return null;let s={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===ue.OPERATIONS_ENUM.DELETE?s.hash_values=t:s.records=e.records,s}a(RV,"convertCRUDOperationToTransaction");async function AV(e,t,r=[]){if(!Mi.get(ue.CONFIG_PARAMS.CLUSTERING_ENABLED))return;he.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let s=e.hdb_user?.username,n=Mi.get(ue.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new LO(t.txn_time,s,n);switch(e.operation){case ue.OPERATIONS_ENUM.INSERT:try{await Mc(e,t.inserted_hashes,i,r),await Pc(t,e,r)}catch(o){he.error("There was an error calling clustering postOperationHandler for insert."),he.error(o)}break;case ue.OPERATIONS_ENUM.DELETE:try{await Mc(e,t.deleted_hashes,i,r)}catch(o){he.error("There was an error calling clustering postOperationHandler for delete."),he.error(o)}break;case ue.OPERATIONS_ENUM.UPDATE:try{await Mc(e,t.update_hashes,i,r),await Pc(t,e,r)}catch(o){he.error("There was an error calling clustering postOperationHandler for update."),he.error(o)}break;case ue.OPERATIONS_ENUM.UPSERT:try{await Mc(e,t.upserted_hashes,i,r),await Pc(t,e,r)}catch(o){he.error("There was an error calling clustering postOperationHandler for upsert."),he.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_SCHEMA:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_SCHEMA,schema:e.schema,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){he.error("There was an error calling clustering postOperationHandler for create_schema."),he.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_TABLE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_TABLE,schema:e.schema,table:e.table,hash_attribute:e.hash_attribute,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){he.error("There was an error calling clustering postOperationHandler for create_table."),he.error(o)}break;case ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE:try{let o={operation:ue.OPERATIONS_ENUM.CREATE_ATTRIBUTE,schema:e.schema,table:e.table,attribute:e.attribute,__origin:i};await In.publishToStream(Di,Cn,[o],r)}catch(o){he.error("There was an error calling clustering postOperationHandler for create_attribute."),he.error(o)}break;case ue.OPERATIONS_ENUM.CSV_DATA_LOAD:try{let o={operation:ue.OPERATIONS_ENUM.CSV_DATA_LOAD,schema:e.schema,table:e.table,attribute:e.attribute};await In.publishToStream(Di,Cn,[o],r)}catch(o){he.error("There was an error calling clustering postOperationHandler for csv_data_load."),he.error(o)}break;default:break}return t}a(AV,"postOperationHandler")});var BO=h((RX,PO)=>{"use strict";var OV=Tt(),pV=hs(),yO=I(),DO=Ut(),NV=Xo(),gV=require("clone"),fE=require("alasql"),IV=Lo(),MO=require("util"),CV=MO.promisify(pV.getTableSchema),bV=MO.promisify(OV.search),wV=T(),hE=C(),LV=bn();IV(fE);PO.exports={update:yV};var UV="There was a problem performing this update. Please check the logs and try again.";async function yV({statement:e,hdb_user:t}){let r=await CV(e.table.databaseid,e.table.tableid),s=DV(e.columns);hE.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=gV(n),c=hE.isEmpty(i)?"":` WHERE ${i.toString()}`,_=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,u=fE.parse(_).statements[0],l=await NV.writeTransaction(r.schema,r.name,async()=>{let E=await bV(u),d=MV(s,E);return PV(o,d,t)});return await DO.flush({schema:r.schema,table:r.name}),l}a(yV,"update");function DV(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value:t[r.column.columnid]=fE.compile(`SELECT ${r.expression.toString()} AS [${wV.FUNC_VAL}] FROM ?`)}),t}catch(t){throw yO.error(t),new Error(UV)}}a(DV,"createUpdateRecord");function MV(e,t){return hE.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(MV,"buildUpdateRecords");async function PV(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r};try{let n=await DO.update(s);await LV.postOperationHandler(s,n);try{delete n.new_attributes,delete n.txn_time}catch(i){yO.error(`Error delete new_attributes from update response: ${i}`)}return n}catch(n){throw n}}a(PV,"updateRecords")});var HO=h((AX,vO)=>{var BV=require("alasql"),vV=Tt(),HV=I(),GV=Or(),mE=require("util"),TE=C(),qV=T(),FV=hs(),VV=Xo(),kV=bn(),xV=Ut(),$V="record",YV="successfully deleted",KV=mE.callbackify(ZV),QV=mE.promisify(vV.search),WV=mE.promisify(FV.getTableSchema);vO.exports={convertDelete:KV};function JV(e){return`${e.deleted_hashes.length} ${$V}${e.deleted_hashes.length===1?"":"s"} ${YV}`}a(JV,"generateReturnMessage");async function ZV({statement:e,hdb_user:t}){let r=await WV(e.table.databaseid,e.table.tableid);TE.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=TE.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=BV.parse(o).statements[0],_={operation:qV.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{let u=await VV.writeTransaction(r.schema,r.name,async()=>(_.records=await QV(c),GV.deleteRecords(_)));return await xV.flush({schema:r.schema,table:r.name}),u.deleted_hashes.length>0&&await kV.postOperationHandler(_,u),TE.isEmptyOrZeroLength(u.message)&&(u.message=JV(u)),delete u.txn_time,u}catch(u){throw HV.error(u),u.hdb_code?u.message:u}}a(ZV,"convertDelete")});var FO=h((OX,qO)=>{"use strict";var AE=un(),{hdb_errors:RE}=D();qO.exports={checkSchemaExists:GO,checkSchemaTableExists:XV,schema_describe:AE};async function GO(e){if(!global.hdb_schema[e])try{let t=await AE.describeSchema({schema:e});global.hdb_schema[e]=t}catch{return RE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}}a(GO,"checkSchemaExists");async function XV(e,t){let r=await GO(e);if(r)return r;if(!global.hdb_schema[e][t])try{let s=await AE.describeTable({schema:e,table:t});if(!s||Object.keys(s).length===0)return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t);global.hdb_schema[e][t]=s}catch{return RE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}}a(XV,"checkSchemaTableExists")});var Bc=h((NX,YO)=>{"use strict";var wn=Ka(),gs=FO(),VO=I(),zV=require("uuid").v4,pX=require("clone"),Un=Zs(),Is=T(),jV=require("util"),Cs=Or(),{handleHDBError:He,hdb_errors:ek}=D(),{HDB_ERROR_MSGS:Ln,HTTP_STATUS_CODES:Ge}=ek,{SchemaEventMsg:yn}=us(),kO=Rt();YO.exports={createSchema:tk,createSchemaStructure:xO,createTable:rk,createTableStructure:$O,createAttribute:ok,dropSchema:sk,dropTable:nk,dropAttribute:ik};async function tk(e){try{let t=await xO(e);return Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema)),t}catch(t){throw t}}a(tk,"createSchema");async function xO(e){let t=wn.schema_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);if(!await gs.checkSchemaExists(e.schema))throw He(new Error,Ln.SCHEMA_EXISTS_ERR(e.schema),Ge.BAD_REQUEST,Is.LOG_LEVELS.ERROR,Ln.SCHEMA_EXISTS_ERR(e.schema),!0);try{return await Cs.createSchema(e),`schema '${e.schema}' successfully created`}catch(r){throw r}}a(xO,"createSchemaStructure");async function rk(e){try{let t=await $O(e);return Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table)),t}catch(t){throw t}}a(rk,"createTable");async function $O(e){let t=wn.create_table_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);wn.validateTableResidence(e.residence);let r=await gs.checkSchemaExists(e.schema);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(!await gs.checkSchemaTableExists(e.schema,e.table))throw He(new Error,Ln.TABLE_EXISTS_ERR(e.schema,e.table),Ge.BAD_REQUEST,Is.LOG_LEVELS.ERROR,Ln.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:zV(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Cs.createTable(n,e);else throw He(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Ge.BAD_REQUEST);else await Cs.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(i){throw i}}a($O,"createTableStructure");async function sk(e){let t=wn.schema_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaExists(e.schema);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);let s=await gs.schema_describe.describeSchema({schema:e.schema});global.hdb_schema[e.schema]=s;let n=Object.keys(global.hdb_schema[e.schema]);return await Cs.dropSchema(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema)),delete global.hdb_schema[e.schema],await kO.purgeSchemaTableStreams(e.schema,n),`successfully deleted schema '${e.schema}'`}a(sk,"dropSchema");async function nk(e){let t=wn.table_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);return await Cs.dropTable(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table)),await kO.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nk,"dropTable");async function ik(e){let t=wn.attribute_object(e);if(t)throw He(t,t.message,Ge.BAD_REQUEST,void 0,void 0,!0);let r=await gs.checkSchemaTableExists(e.schema,e.table);if(r)throw He(new Error,r,Ge.NOT_FOUND,Is.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw He(new Error,"You cannot drop a hash attribute",Ge.BAD_REQUEST,void 0,void 0,!0);if(Is.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw He(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Ge.BAD_REQUEST,void 0,void 0,!0);try{return await Cs.dropAttribute(e),ak(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw VO.error(`Got an error deleting attribute ${jV.inspect(e)}.`),s}}a(ik,"dropAttribute");function ak(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(ak,"dropAttributeFromGlobal");async function ok(e){if(!global.hdb_schema[e.schema])throw He(new Error,Ln.SCHEMA_NOT_FOUND(e.schema),Ge.NOT_FOUND,void 0,void 0,!0);if(!global.hdb_schema[e.schema][e.table])throw He(new Error,Ln.TABLE_NOT_FOUND(e.schema,e.table),Ge.NOT_FOUND,void 0,void 0,!0);try{return await Cs.createAttribute(e),Un.signalSchemaChange(new yn(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}catch(t){throw VO.error(t),t}}a(ok,"createAttribute")});var QO=h((gX,KO)=>{"use strict";var{OPERATIONS_ENUM:ck}=T(),vc=class{constructor(t,r,s=void 0,n=void 0){this.operation=ck.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};a(vc,"ReadAuditLogObject");KO.exports=vc});var OE=h((CX,zO)=>{"use strict";var _k=Or(),IX=QO(),Hc=C(),Gc=T(),uk=Y(),{handleHDBError:WO,hdb_errors:lk}=D(),{HDB_ERROR_MSGS:JO,HTTP_STATUS_CODES:ZO}=lk,Ek=Object.values(Gc.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),XO="To use this operation audit log must be enabled in harperdb-config.yaml";zO.exports=dk;async function dk(e){if(Hc.isEmpty(e.schema))throw new Error(JO.SCHEMA_REQUIRED_ERR);if(Hc.isEmpty(e.table))throw new Error(JO.TABLE_REQUIRED_ERR);if(!uk.get(Gc.CONFIG_PARAMS.LOGGING_AUDITLOG))throw WO(new Error,XO,ZO.BAD_REQUEST,Gc.LOG_LEVELS.ERROR,XO,!0);let t=Hc.checkSchemaTableExist(e.schema,e.table);if(t)throw WO(new Error,t,ZO.NOT_FOUND,Gc.LOG_LEVELS.ERROR,t,!0);if(!Hc.isEmpty(e.search_type)&&Ek.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await _k.readAuditLog(e)}a(dk,"readAuditLog")});var np=h((bX,sp)=>{var Jr=require("validate.js"),ep=Ee(),Dn=T(),{handleHDBError:Sk,hdb_errors:hk}=D(),{HDB_ERROR_MSGS:le,HTTP_STATUS_CODES:fk}=hk,pE=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Tk={STRUCTURE_USER:"structure_user"},jO=Object.values(Dn.ROLE_TYPES_ENUM),mk="attribute_permissions",Rk="attribute_name",{PERMS_CRUD_ENUM:Mn}=Dn,Ak=[mk,...Object.values(Mn)],tp=[Mn.READ,Mn.INSERT,Mn.UPDATE],Ok=[Rk,...tp];function pk(e){let t=pE();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,rp(e,t)}a(pk,"addRoleValidation");function Nk(e){let t=pE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,rp(e,t)}a(Nk,"alterRoleValidation");function gk(e){let t=pE();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ep.validateObject(e,t)}a(gk,"dropRoleValidation");var Ik=["operation","role","id","permission","hdb_user","hdb_auth_header"];function rp(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Ik.includes(s[o])||n.push(s[o]);n.length>0&&fe(le.INVALID_ROLE_JSON_KEYS(n),r);let i=ep.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{fe(o,r)}),e.permission){let o=Ck(e);o&&fe(o,r),jO.forEach(c=>{e.permission[c]&&!Jr.isBoolean(e.permission[c])&&fe(le.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(jO.indexOf(o)<0){if(o===Tk.STRUCTURE_USER){let _=e.permission[o];if(typeof _=="boolean")continue;if(Array.isArray(_)){for(let u=0,l=_.length;u<l;u++){let E=_[u];global.hdb_schema[E]||fe(le.SCHEMA_NOT_FOUND(E),r)}continue}fe(le.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){fe(le.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let _ in c.tables){let u=c.tables[_];if(!_||!global.hdb_schema[o][_]){fe(le.TABLE_NOT_FOUND(o,_),r);continue}if(Object.keys(u).forEach(l=>{Ak.includes(l)||fe(le.INVALID_PERM_KEY(l),r,o,_)}),Object.values(Mn).forEach(l=>{Jr.isDefined(u[l])?Jr.isBoolean(u[l])||fe(le.TABLE_PERM_NOT_BOOLEAN(l),r,o,_):fe(le.TABLE_PERM_MISSING(l),r,o,_)}),Jr.isDefined(u.attribute_permissions)){if(!Jr.isArray(u.attribute_permissions)){fe(le.ATTR_PERMS_NOT_ARRAY,r,o,_);continue}}else{fe(le.ATTR_PERMS_ARRAY_MISSING,r,o,_);continue}if(u.attribute_permissions){let l=global.hdb_schema[o][_].attributes.map(({attribute:d})=>d),E={read:!1,insert:!1,update:!1};for(let d in u.attribute_permissions){let S=u.attribute_permissions[d];if(Object.keys(S).forEach(R=>{!Ok.includes(R)&&R!==Mn.DELETE&&fe(le.INVALID_ATTR_PERM_KEY(R),r,o,_)}),!Jr.isDefined(S.attribute_name)){fe(le.ATTR_PERM_MISSING_NAME,r,o,_);continue}let m=S.attribute_name;if(!l.includes(m)){fe(le.INVALID_ATTRIBUTE_IN_PERMS(m),r,o,_);continue}tp.forEach(R=>{Jr.isDefined(S[R])?Jr.isBoolean(S[R])||fe(le.ATTR_PERM_NOT_BOOLEAN(R,m),r,o,_):fe(le.ATTR_PERM_MISSING(R,m),r,o,_)}),!E.read&&S.read===!0&&(E.read=!0),!E.insert&&S.insert===!0&&(E.insert=!0),!E.update&&S.update===!0&&(E.update=!0)}if(u.read===!1&&E.read===!0||u.insert===!1&&E.insert===!0||u.update===!1&&E.update===!0){let d=`${o}.${_}`;fe(le.MISMATCHED_TABLE_ATTR_PERMS(d),r,o,_)}}}}return bk(r)}a(rp,"customValidate");sp.exports={addRoleValidation:pk,alterRoleValidation:Nk,dropRoleValidation:gk};function Ck(e){let{operation:t,permission:r}=e;if(t===Dn.OPERATIONS_ENUM.ADD_ROLE||t===Dn.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return le.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Dn.ROLE_TYPES_ENUM.SUPER_USER:Dn.ROLE_TYPES_ENUM.CLUSTER_USER;return le.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Ck,"validateNoSUPerms");function bk(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:le.ROLE_PERMS_ERROR,...e};return Sk(new Error,s,fk.BAD_REQUEST)}else return null}a(bk,"generateRolePermResponse");function fe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(fe,"addPermError")});var UE=h((wX,up)=>{"use strict";var ip=Ut(),ap=Tt(),wk=ms(),IE=np(),CE=Zs(),Lk=require("uuid").v4,bE=require("util"),Uk=Ai(),Ir=T(),op=C(),wE=bE.promisify(ap.searchByValue),yk=bE.promisify(ap.searchByHash),Dk=bE.promisify(wk.delete),Mk=Kt(),Pk=Es(),{hdb_errors:Bk,handleHDBError:Pi}=D(),{HDB_ERROR_MSGS:cp,HTTP_STATUS_CODES:NE}=Bk,{UserEventMsg:LE}=us();up.exports={addRole:vk,alterRole:Gk,dropRole:qk,listRoles:_p};function gE(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(gE,"scrubRoleDetails");async function vk(e){let t=IE.addRoleValidation(e);if(t)throw t;if(!(await Uk.getLicense()).enterprise){let o=await _p();if(Hk(e,o))throw new Error(`Your current license only supports ${Ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} cluster_user role. ${Ir.SUPPORT_HELP_MSG}`);if(o.length>=2)throw new Error(`Your current license only supports ${Ir.BASIC_LICENSE_MAX_NON_CU_ROLES+Ir.BASIC_LICENSE_MAX_CLUSTER_USER_ROLES} roles. ${Ir.SUPPORT_HELP_MSG}`)}e=gE(e);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=await wE(s)}catch(o){throw Pi(o)}if(n&&n.length>0)throw Pi(new Error,cp.ROLE_ALREADY_EXISTS(e.role),NE.CONFLICT,void 0,void 0,!0);e.id||(e.id=Lk());let i={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await ip.insert(i),CE.signalUserChange(new LE(process.pid)),e=gE(e),e}a(vk,"addRole");function Hk(e,t){let r=!1;if(e.permission.cluster_user===!0)for(let s=0;s<t.length;s++){let i=t[s].permission;if(!op.isEmpty(i)&&i.cluster_user===!0)return!0}return r}a(Hk,"checkClusterUserRole");async function Gk(e){let t=IE.alterRoleValidation(e);if(t)throw t;e=gE(e);let r={operation:"update",schema:"system",table:"hdb_role",hash_attribute:"rolename",records:[e]};try{await ip.update(r)}catch(s){throw Pi(s)}return CE.signalUserChange(new LE(process.pid)),e}a(Gk,"alterRole");async function qk(e){let t=IE.dropRoleValidation(e);if(t)throw Pi(new Error,t,NE.BAD_REQUEST,void 0,void 0,!0);let r=new Pk(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=await yk(r);if(s.length===0)throw Pi(new Error,cp.ROLE_NOT_FOUND,NE.NOT_FOUND,void 0,void 0,!0);let n=new Mk(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=await wE(n),o=!1;if(op.isEmptyOrZeroLength(i)===!1){for(let _=0;_<i.length;_++)if(i[_].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Dk(c),CE.signalUserChange(new LE(process.pid)),`${s[0].role} successfully deleted`}a(qk,"dropRole");async function _p(){return wE({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(_p,"listRoles")});var Sp=h((LX,dp)=>{"use strict";var Fk=Y(),Zr=require("joi"),Vk=Ee(),lp=require("moment"),kk=require("fs-extra"),yE=require("path"),xk=require("lodash"),Bi=T(),{LOG_LEVELS:bs}=T(),$k="YYYY-MM-DD hh:mm:ss",Yk=yE.resolve(__dirname,"../logs");dp.exports=function(e){return Vk.validateBySchema(e,Kk)};var Kk=Zr.object({from:Zr.custom(Ep),until:Zr.custom(Ep),level:Zr.valid(bs.NOTIFY,bs.FATAL,bs.ERROR,bs.WARN,bs.INFO,bs.DEBUG,bs.TRACE),order:Zr.valid("asc","desc"),limit:Zr.number().min(1),start:Zr.number().min(0),log_name:Zr.custom(Qk)});function Ep(e,t){if(lp(e,lp.ISO_8601).format($k)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Ep,"validateDatetime");function Qk(e,t){if(xk.invert(Bi.PROCESS_LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Fk.get(Bi.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Bi.PROCESS_LOG_NAMES.HDB:e,i=n===Bi.PROCESS_LOG_NAMES.INSTALL?yE.join(Yk,Bi.PROCESS_LOG_NAMES.INSTALL):yE.join(s,n);return kk.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Qk,"validateReadLogPath")});var ME=h((UX,fp)=>{"use strict";var qc=T(),hp=I(),Wk=Y(),Jk=Sp(),DE=require("path"),Zk=require("fs-extra"),Xk=require("readline"),{once:zk}=require("events"),{handleHDBError:jk,hdb_errors:ex}=D(),{PACKAGE_ROOT:tx}=T(),rx=DE.join(tx,"logs"),sx=1e3;fp.exports=nx;async function nx(e){let t=Jk(e);if(t)throw jk(t,t.message,ex.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Wk.get(qc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?qc.PROCESS_LOG_NAMES.HDB:e.log_name,n=s===qc.PROCESS_LOG_NAMES.INSTALL?DE.join(rx,qc.PROCESS_LOG_NAMES.INSTALL):DE.join(r,s),i=Zk.createReadStream(n);i.on("error",X=>{hp.error(X)});let o=Xk.createInterface({input:i,crlfDelay:1/0}),c=e.level!==void 0,_=c?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,E=e.until!==void 0,d=E?new Date(e.until):void 0,S=e.limit===void 0?sx:e.limit,m=e.order===void 0?void 0:e.order,R=e.start===void 0?0:e.start,w=R+S,L=0,B=[];return o.on("line",X=>{let V,W,ke,xe;try{V=JSON.parse(X)}catch(ua){hp.warn(ua.message);return}switch(!0){case(c&&u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),V.level===_&&W>=ke&&W<=xe&&L<R?L++:V.level===_&&W>=ke&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(c&&u):W=new Date(V.timestamp),ke=new Date(l),V.level===_&&W>=ke&&L<R?L++:V.level===_&&W>=ke&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(c&&E):W=new Date(V.timestamp),xe=new Date(d),V.level===_&&W<=xe&&L<R?L++:V.level===_&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case(u&&E):W=new Date(V.timestamp),ke=new Date(l),xe=new Date(d),W>=ke&&W<=xe&&L<R?L++:W>=ke&&W<=xe&&(zr(V,m,B),L++,L===w&&Xr(o));break;case c:V.level===_&&L<R?L++:V.level===_&&(zr(V,m,B),L++,L===w&&Xr(o));break;case u:W=new Date(V.timestamp),ke=new Date(l),W>=ke&&L<R?L++:W>=ke&&L>=R&&(zr(V,m,B),L++,L===w&&Xr(o));break;case E:W=new Date(V.timestamp),xe=new Date(d),W<=xe&&L<R?L++:W<=xe&&L>=R&&(zr(V,m,B),L++,L===w&&Xr(o));break;default:L<R?L++:(zr(V,m,B),L++,L===w&&Xr(o))}}),await zk(o,"close"),B}a(nx,"readLog");function Xr(e){e.close(),e.removeAllListeners()}a(Xr,"endReadLine");function zr(e,t,r){t==="desc"?ix(e,r):t==="asc"?ax(e,r):r.push(e)}a(zr,"pushLineToResult");function ix(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(ix,"insertDescending");function ax(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(ax,"insertAscending")});var Vc=h((MX,Rp)=>{"use strict";var PE=require("joi"),{string:Fc,boolean:Tp,date:ox}=PE.types(),cx=Ee(),{validateSchemaExists:yX,validateTableExists:DX,validateSchemaName:_x}=Tr(),ux=T(),lx=Se(),Ex=Y(),dx=Fc.invalid(Ex.get(ux.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(lx.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),mp={operation:Fc.valid("add_node","update_node"),node_name:dx,subscriptions:PE.array().items({table:Fc.required(),schema:Fc.custom(_x).required(),subscribe:Tp.required(),publish:Tp.required().custom(hx),start_time:ox.iso()}).min(1).required()};function Sx(e){return cx.validateBySchema(e,PE.object(mp))}a(Sx,"addUpdateNodeValidator");function hx(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(hx,"checkForFalsy");Rp.exports={addUpdateNodeValidator:Sx,validation_schema:mp}});var vE=h((PX,Ip)=>{"use strict";var BE=Rt(),Ap=C(),Op=Se(),fx=T(),kc=I(),pp=Bc(),Tx=Xu(),{RemotePayloadObject:mx}=Ui(),{handleHDBError:Np,hdb_errors:Rx}=D(),{HTTP_STATUS_CODES:gp}=Rx,{NodeSubscription:Ax}=On();Ip.exports=Ox;async function Ox(e,t){let r;try{r=await BE.request(`${t}.${Op.REQUEST_SUFFIX}`,new mx(fx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),kc.trace("Response from remote describe all request:",r)}catch(o){kc.error(`addNode received error from describe all request to remote node: ${o}`);let c=BE.requestErrorHandler(o,"add_node",t);throw Np(new Error,c,gp.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Op.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw Np(new Error,o,gp.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:_}=o,u=Ap.doesSchemaExist(c),l=s[c]!==void 0,E=Ap.doesTableExist(c,_),d=s?.[c]?.[_]!==void 0;if(!u&&!l||!E&&!d){n.push(o);continue}if(!u&&l&&(kc.trace(`addNode creating schema: ${c}`),await pp.createSchema({operation:"create_schema",schema:c})),!E&&d){kc.trace(`addNode creating table: ${_} in schema: ${c}`);let m=new Tx(c,_,s[c][_].hash_attribute);await pp.createTable(m)}await BE.createLocalTableStream(c,_);let S=new Ax(c,_,o.publish,o.subscribe);S.start_time=o.start_time,i.push(S)}return{added:i,skipped:n}}a(Ox,"reviewSubscriptions")});var Yc=h((BX,wp)=>{"use strict";var{handleHDBError:xc,hdb_errors:px}=D(),{HTTP_STATUS_CODES:$c}=px,{addUpdateNodeValidator:Nx}=Vc(),vi=I(),bp=T(),Cp=Se(),gx=C(),HE=Rt(),Hi=ps(),Ix=Y(),Cx=vE(),{Node:bx,NodeSubscription:wx}=On(),Lx="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Ux="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",yx=Ix.get(bp.CONFIG_PARAMS.CLUSTERING_NODENAME);wp.exports=Dx;async function Dx(e,t=!1){vi.trace("addNode called with:",e),Hi.checkClusteringEnabled();let r=Nx(e);if(r)throw xc(r,r.message,$c.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let E=await Hi.getNodeRecord(s);if(!gx.isEmptyOrZeroLength(E))throw xc(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,$c.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Cx(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=Lx,o;let c=Hi.buildNodePayloads(n,yx,bp.OPERATIONS_ENUM.ADD_NODE,await Hi.getSystemInfo());vi.trace("addNode sending remote payload:",c);let _;try{_=await HE.request(`${s}.${Cp.REQUEST_SUFFIX}`,c)}catch(E){vi.error(`addNode received error from request: ${E}`);let d=HE.requestErrorHandler(E,"add_node",s);throw xc(new Error,d,$c.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===Cp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let E=`Error returned from remote node ${s}: ${_.message}`;throw xc(new Error,E,$c.INTERNAL_SERVER_ERROR,"error",E)}vi.trace(_);let u=[];for(let E=0,d=n.length;E<d;E++){let S=n[E];vi.trace("Add node updating work stream for node:",s,"subscriptions:",S),await HE.updateWorkStream(S,s),n[E].start_time===void 0&&delete n[E].start_time,u.push(new wx(S.schema,S.table,S.publish,S.subscribe))}let l=new bx(s,u,_.system_info);return await Hi.upsertNodeRecord(l),i.length>0?o.message=Ux:o.message=`Successfully added '${s}' to manifest`,o}a(Dx,"addNode")});var qE=h((vX,yp)=>{"use strict";var{handleHDBError:Kc,hdb_errors:Mx}=D(),{HTTP_STATUS_CODES:Qc}=Mx,{addUpdateNodeValidator:Px}=Vc(),Gi=I(),Up=T(),Lp=Se(),Bx=C(),GE=Rt(),qi=ps(),vx=Y(),{cloneDeep:Hx}=require("lodash"),Gx=vE(),{NodeSubscription:qx}=On(),Fx="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Vx="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",kx=vx.get(Up.CONFIG_PARAMS.CLUSTERING_NODENAME);yp.exports=xx;async function xx(e){Gi.trace("updateNode called with:",e),qi.checkClusteringEnabled();let t=Px(e);if(t)throw Kc(t,t.message,Qc.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Hx(await qi.getNodeRecord(r));if(Bx.isEmptyOrZeroLength(s))throw Kc(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Qc.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Gx(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Fx,o;let c=qi.buildNodePayloads(n,kx,Up.OPERATIONS_ENUM.UPDATE_NODE,await qi.getSystemInfo());Gi.trace("updateNode sending remote payload:",c);let _;try{_=await GE.request(`${r}.${Lp.REQUEST_SUFFIX}`,c)}catch(u){Gi.error(`updateNode received error from request: ${u}`);let l=GE.requestErrorHandler(u,"update_node",r);throw Kc(new Error,l,Qc.INTERNAL_SERVER_ERROR,"error",l)}if(_.status===Lp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let u=`Error returned from remote node ${r}: ${_.message}`;throw Kc(new Error,u,Qc.INTERNAL_SERVER_ERROR,"error",u)}Gi.trace(_);for(let u=0,l=n.length;u<l;u++){let E=n[u];Gi.trace(`updateNode updating work stream for node: ${r} subscription:`,E),await GE.updateWorkStream(E,r),n[u].start_time===void 0&&delete n[u].start_time}return await $x(s[0],n,_.system_info),i.length>0?o.message=Vx:o.message=`Successfully updated '${r}'`,o}a(xx,"updateNode");async function $x(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let _=0,u=e.subscriptions.length;_<u;_++){let l=s.subscriptions[_];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new qx(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qi.upsertNodeRecord(s)}a($x,"updateNodeTable")});var vp=h((HX,Bp)=>{"use strict";var Pp=require("joi"),{string:Dp}=Pp.types(),Yx=Ee(),Mp=T(),Kx=Y(),Qx=Se();Bp.exports=Wx;function Wx(e){let t=Dp.invalid(Kx.get(Mp.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Qx.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=Pp.object({operation:Dp.valid(Mp.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Yx.validateBySchema(e,r)}a(Wx,"removeNodeValidator")});var Jc=h((GX,kp)=>{"use strict";var{handleHDBError:Hp,hdb_errors:Jx}=D(),{HTTP_STATUS_CODES:Gp}=Jx,Zx=vp(),Fi=I(),qp=ps(),Xx=C(),Wc=T(),Fp=Se(),Vp=Rt(),zx=Y(),{RemotePayloadObject:jx}=Ui(),{NodeSubscription:e$}=On(),t$=li(),r$=ms(),s$=zx.get(Wc.CONFIG_PARAMS.CLUSTERING_NODENAME);kp.exports=n$;async function n$(e){Fi.trace("removeNode called with:",e),qp.checkClusteringEnabled();let t=Zx(e);if(t)throw Hp(t,t.message,Gp.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await qp.getNodeRecord(r);if(Xx.isEmptyOrZeroLength(s))throw Hp(new Error,`Node '${r}' was not found.`,Gp.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new jx(Wc.OPERATIONS_ENUM.REMOVE_NODE,s$,[]),i,o=!1;try{i=await Vp.request(`${r}.${Fp.REQUEST_SUFFIX}`,n),Fi.trace("Remove node reply from remote node:",r,i)}catch(_){Fi.error("removeNode received error from request:",_),o=!0}for(let _=0,u=s.subscriptions.length;_<u;_++){let l=s.subscriptions[_];Fi.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let E=new e$(l.schema,l.table,!1,!1);await Vp.updateWorkStream(E,r)}let c=new t$(Wc.SYSTEM_SCHEMA_NAME,Wc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await r$.deleteRecord(c),i?.status===Fp.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fi.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(n$,"removeNode")});var Yp=h((qX,$p)=>{"use strict";var xp=require("joi"),{string:i$,array:a$}=xp.types(),o$=Ee(),c$=Vc();$p.exports=_$;function _$(e){let t=xp.object({operation:i$.valid("configure_cluster").required(),connections:a$.items(c$.validation_schema).required()});return o$.validateBySchema(e,t)}a(_$,"configureClusterValidator")});var FE=h((FX,Zp)=>{"use strict";var u$=T(),Zc=I(),l$=C(),E$=Jc(),d$=Yc(),Kp=ps(),S$=Yp(),{handleHDBError:Qp,hdb_errors:h$}=D(),{HTTP_STATUS_CODES:Wp}=h$,f$="Configure cluster complete.",T$="Failed to configure the cluster. Check the logs for more details.",m$="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Zp.exports=R$;async function R$(e){Zc.trace("configure cluster called with:",e),Kp.checkClusteringEnabled();let t=S$(e);if(t)throw Qp(t,t.message,Wp.BAD_REQUEST,void 0,void 0,!0);let r=await Kp.getAllNodeRecords(),s=[];for(let d=0,S=r.length;d<S;d++)s.push(Jp(E$,{operation:u$.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name));let n=await Promise.allSettled(s);Zc.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let d=0;d<o;d++){let S=e.connections[d];i.push(Jp(d$,S,S.node_name))}let c=await Promise.allSettled(i);Zc.trace("All results from configure_cluster add node:",c);let _=[],u=[],l=!1,E=n.concat(c);for(let d=0,S=E.length;d<S;d++){let m=E[d];m.status==="rejected"&&(Zc.error(m.reason),_.includes(m.reason.node_name)||_.push(m.reason.node_name)),m.status==="fulfilled"&&(l=!0);let R=m?.value?.result;typeof R=="string"&&R.includes("Successfully removed")||m.status==="rejected"||u.push({node_name:m?.value?.node_name,subscriptions:m?.value?.result})}if(l$.isEmptyOrZeroLength(_))return{message:f$,connections:u};if(l)return{message:m$,failed_nodes:_,connections:u};throw Qp(new Error,T$,Wp.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(R$,"configureCluster");async function Jp(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Jp,"functionWrapper")});var xE=h((VX,rN)=>{"use strict";var kE=ps(),A$=Rt(),jp=Y(),Xc=T(),ws=Se(),O$=C(),VE=I(),{RemotePayloadObject:p$}=Ui(),{ErrorCode:Xp}=require("nats"),zp=jp.get(Xc.CONFIG_PARAMS.CLUSTERING_ENABLED),eN=jp.get(Xc.CONFIG_PARAMS.CLUSTERING_NODENAME);rN.exports={clusterStatus:N$,buildNodeStatus:tN};async function N$(){let e={node_name:eN,is_enabled:zp,connections:[]};if(!zp)return e;let t=await kE.getAllNodeRecords();if(O$.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(tN(t[s],e.connections));return await Promise.allSettled(r),e}a(N$,"clusterStatus");async function tN(e,t){let r=e.name,s=new p$(Xc.OPERATIONS_ENUM.CLUSTER_STATUS,eN,void 0,await kE.getSystemInfo()),n,i,o=ws.CLUSTER_STATUS_STATUSES.OPEN;try{let _=Date.now();n=await A$.request(ws.REQUEST_SUBJECT(r),s),i=Date.now()-_,n.status===ws.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ws.CLUSTER_STATUS_STATUSES.CLOSED,VE.error(`Error getting node status from ${r} `,n))}catch(_){VE.warn(`Error getting node status from ${r}`,_),_.code===Xp.NoResponders?o=ws.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:_.code===Xp.Timeout?o=ws.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ws.CLUSTER_STATUS_STATUSES.CLOSED}let c=new g$(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let _={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==Xc.PRE_4_0_0_VERSION&&await kE.upsertNodeRecord(_)}catch(_){VE.error("Cluster status encountered an error updating system info for node:",r,_)}t.push(c)}a(tN,"buildNodeStatus");function g$(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(g$,"NodeStatusObject")});var aN=h((kX,iN)=>{"use strict";var $E=require("joi"),sN=Ee(),{route_constraints:nN}=lu();iN.exports={setRoutesValidator:I$,deleteRoutesValidator:C$};function I$(e){let t=$E.object({server:$E.valid("hub","leaf").required(),routes:nN.required()});return sN.validateBySchema(e,t)}a(I$,"setRoutesValidator");function C$(e){let t=$E.object({routes:nN.required()});return sN.validateBySchema(e,t)}a(C$,"deleteRoutesValidator")});var KE=h((xX,uN)=>{"use strict";var Ls=hr(),YE=C(),zc=T(),oN=aN(),{handleHDBError:cN,hdb_errors:b$}=D(),{HTTP_STATUS_CODES:_N}=b$,w$="cluster routes successfully set",L$="cluster routes successfully deleted";uN.exports={setRoutes:U$,getRoutes:y$,deleteRoutes:D$};function U$(e){let t=oN.setRoutesValidator(e);if(t)throw cN(t,t.message,_N.BAD_REQUEST,void 0,void 0,!0);let r=Ls.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,_=e.routes.length;c<_;c++){let u=e.routes[c];u.port=YE.autoCast(u.port);let l=s.some(d=>d.host===u.host&&d.port===u.port),E=n.some(d=>d.host===u.host&&d.port===u.port);l||E?i.push(u):(s.push(u),o.push(u))}return e.server==="hub"?Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:w$,set:o,skipped:i}}a(U$,"setRoutes");function y$(){let e=Ls.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(y$,"getRoutes");function D$(e){let t=oN.deleteRoutesValidator(e);if(t)throw cN(t,t.message,_N.BAD_REQUEST,void 0,void 0,!0);let r=Ls.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,_=!1;for(let u=0,l=e.routes.length;u<l;u++){let E=e.routes[u],d=!1;for(let S=0,m=s.length;S<m;S++){let R=s[S];if(E.host===R.host&&E.port===R.port){s.splice(S,1),d=!0,c=!0,i.push(E);break}}if(!d){let S=!0;for(let m=0,R=n.length;m<R;m++){let w=n[m];if(E.host===w.host&&E.port===w.port){n.splice(m,1),_=!0,S=!1,i.push(E);break}}S&&o.push(E)}}return c&&(s=YE.isEmptyOrZeroLength(s)?null:s,Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),_&&(n=YE.isEmptyOrZeroLength(n)?null:n,Ls.updateConfigValue(zc.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:L$,deleted:i,skipped:o}}a(D$,"deleteRoutes")});var EN=h(($X,lN)=>{"use strict";var Vi=require("alasql"),Us=require("recursive-iterator"),Wt=I(),M$=C(),ki=T(),jc=class{constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,B$(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>ki.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!ki.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][ki.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=P$(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let _=this.affected_attributes.get(i).get(o).filter(u=>!ki.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let l=new Vi.yy.Column({columnid:u});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),_.includes(u)||_.push(u)}),this.affected_attributes.get(i).set(o,_)}}),this.ast}};a(jc,"sql_statement_bucket");function P$(e){return e.filter(t=>t[ki.PERMS_CRUD_ENUM.READ])}a(P$,"filterReadRestrictedAttrs");function B$(e,t,r,s,n){v$(e,t,r,s,n)}a(B$,"interpretAST");function xi(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(xi,"addSchemaTableToMap");function v$(e,t,r,s,n){if(!e){Wt.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Vi.yy.Insert?F$(e,t,r):e instanceof Vi.yy.Select?H$(e,t,r,s,n):e instanceof Vi.yy.Update?G$(e,t,r):e instanceof Vi.yy.Delete?q$(e,t,r):Wt.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(v$,"getRecordAttributesAST");function H$(e,t,r,s,n){if(!e){Wt.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(M$.isEmptyOrZeroLength(i)){Wt.error("No schema specified");return}e.from.forEach(c=>{xi(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xi(c.table,t,r,s,n)});let o=new Us(e.columns);for(let{node:c}of o)if(c&&c.columnid){let _=c.tableid,u=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(u).has(_))if(r.has(_))_=r.get(_);else{Wt.info(`table specified as ${_} not found.`);return}t.get(u).get(_).indexOf(c.columnid)<0&&t.get(u).get(_).push(c.columnid)}if(e.where){let c=new Us(e.where),_=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid?u.tableid:_;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(u.columnid)<0&&t.get(i).get(l).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let _=new Us(c.on);for(let{node:u}of _)if(u&&u.columnid){let l=u.tableid,E=n.get(l);if(!t.get(E).has(l))if(r.has(l))l=r.get(l);else{Wt.info(`table specified as ${l} not found.`);continue}t.get(E).get(l).indexOf(u.columnid)<0&&t.get(E).get(l).push(u.columnid)}}),e.order){let c=new Us(e.order);for(let{node:_}of c)if(_&&_.columnid){let u=_.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Wt.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(_.columnid)<0&&t.get(l).get(u).push(_.columnid)}}}a(H$,"getSelectAttributes");function G$(e,t,r){if(!e){Wt.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Us(e.columns),n=e.table.databaseid;xi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(G$,"getUpdateAttributes");function q$(e,t,r){if(!e){Wt.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Us(e.where),n=e.table.databaseid;xi(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.table.tableid,n,i.columnid,t,r)}a(q$,"getDeleteAttributes");function F$(e,t,r){if(!e){Wt.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Us(e.columns),n=e.into.databaseid;xi(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&QE(e.into.tableid,n,i.columnid,t,r)}a(F$,"getInsertAttributes");function QE(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(QE,"pushAttribute");lN.exports=jc});var hN=h((YX,SN)=>{var V$=require("os"),dN=Y();SN.exports={checkPermission:k$};function k$(){if(V$.userInfo().username!==dN.get("install_user"))throw new Error(`Error: Must execute as ${dN.get("install_user")}`)}a(k$,"checkPermission")});var JE=h((KX,AN)=>{var t_=Ai(),fN=require("chalk"),or=I(),TN=hN(),mN=require("prompt"),{promisify:x$}=require("util"),e_=T(),$$=require("fs-extra"),Y$=require("path"),K$=C(),Q$=oE(),RN=Y();RN.initSync();var W$=require("moment"),J$=x$(mN.get),Z$=Y$.join(RN.getHdbBasePath(),e_.LICENSE_KEY_DIR_NAME,e_.LICENSE_FILE_NAME,e_.LICENSE_FILE_NAME);AN.exports={getFingerprint:z$,setLicense:X$,parseLicense:WE,register:j$,getRegistrationInfo:tY};async function X$(e){if(e&&e.key&&e.company){try{or.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await WE(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw or.error(r),or.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(X$,"setLicense");async function z$(){try{TN.checkPermission()}catch(t){throw or.error(t),new Error("You do not have permission to generate a fingerprint.")}let e={};try{e=await t_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw or.error(r),or.error(t),new Error(r)}return e}a(z$,"getFingerprint");async function WE(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");console.log("Validating license input...");let r=t_.validateLicense(e,t);if(console.log("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(console.log("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(console.log(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{or.info("writing license to disk"),await $$.writeFile(Z$,JSON.stringify({license_key:e,company:t}))}catch(s){throw or.error("Failed to write License"),s}return"Registration successful."}a(WE,"parseLicense");async function j$(){let e=await eY();return WE(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(j$,"register");async function eY(){try{TN.checkPermission()}catch(s){return console.error(s.message)}let e=await t_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:fN.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:fN.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{mN.start()}catch(s){or.error(s)}let r;try{r=await J$(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(eY,"promptForRegistration");async function tY(){let e={registered:!1,version:null,storage_type:null,ram_allocation:null,license_expiration_date:null},t;try{t=await t_.getLicense()}catch(r){throw or.error(`There was an error when searching licenses due to: ${r.message}`),r}if(K$.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Q$.version(),e.storage_type=e_.STORAGE_TYPES_ENUM.LMDB,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=W$.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(tY,"getRegistrationInfo")});var ed=h((QX,IN)=>{"use strict";var y=T(),K=I(),r_=C(),rY=X_(),ZE=Yl(),jE=Rt(),sY=Se(),pN=require("minimist"),{handleHDBError:XE,hdb_errors:nY}=D(),$i=hr(),{HTTP_STATUS_CODES:zE}=nY,q,ON=`Restarting HarperDB. This may take up to ${y.RESTART_TIMEOUT_MS/1e3} seconds.`,ys="HarperDB is currently restarting and must complete before another HarperDB restart can be initialized.",iY="Invalid service",aY="'service' is required",oY="Restarting all services",cY="Clustering is not enabled so cannot be restarted";IN.exports={stop:uY,restartProcesses:_Y,restartService:NN};async function _Y(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{q===void 0&&(q=gn());let e=rY(Object.keys(y.CONFIG_PARAM_MAP),!0);r_.isEmptyOrZeroLength(Object.keys(e))||$i.updateConfigValue(void 0,void 0,e,!0,!0);let t=$i.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=$i.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=pN(process.argv);if(!r_.isEmpty(s.service)){if(typeof s.service!="string"){let c=`Restart service argument expected a string but received: ${s.service}`;return K.error(c),c}let o=s.service.split(",");for(let c of o){let _=c.toLowerCase();if(_===y.HDB_PROC_DESCRIPTOR.toLowerCase()&&await q.isHdbRestartRunning()===!0){K.notify(ys),console.error(ys);continue}if(y.PROCESS_DESCRIPTORS_VALIDATE[_]===void 0){console.error(`Restart received unrecognized service command argument: ${_}`),K.error(`Restart received unrecognized service command argument: ${_}`);continue}let u=y.PROCESS_DESCRIPTORS_VALIDATE[_];if(console.log(`Restarting ${u}`),K.trace(`Restarting ${u}`),u===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await q.configureLogRotate();else if(_.toLowerCase().includes("clustering"))await Pn(_);else if(await q.isServiceRegistered(u))u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS&&!r?(await q.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)):await NN({service:u});else if(u===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS)if(r)await q.startService(u),K.trace(`Starting ${u}`);else{let l=`${u} is not enabled in harperdb-config.yaml and cannot be restarted.`;K.error(l),console.log(l)}else await q.startService(u);K.notify(`${u} successfully restarted.`)}return}if(await q.isHdbRestartRunning()===!0)return K.notify(ys),console.error(ys),ys;console.log(ON),t&&await gN();let n=await q.isServiceRegistered(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS);r&&!n&&(await q.startService(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Starting ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`));let i=[y.PROCESS_DESCRIPTORS.CLUSTERING_HUB,y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF,y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE,y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE];return!r&&n&&(i.push(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),await q.stop(y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS),K.trace(`Stopping ${y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS}`)),await q.configureLogRotate(),K.notify(oY),await q.restartAllServices(i),ON}catch(e){let t=`There was an error restarting HarperDB. ${e}`;return K.error(t),t}}a(_Y,"restartProcesses");async function NN(e){if(K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP),q===void 0&&(q=gn()),r_.isEmpty(e.service))throw XE(new Error,aY,zE.BAD_REQUEST,void 0,void 0,!0);let t=e.service.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw XE(new Error,iY,zE.BAD_REQUEST,void 0,void 0,!0);let r=$i.getConfigFromFile(y.CONFIG_PARAMS.CUSTOMFUNCTIONS_ENABLED),s=y.PROCESS_DESCRIPTORS_VALIDATE[t];if(s===y.PROCESS_DESCRIPTORS.HDB){if(await q.isHdbRestartRunning()===!0)return K.notify(ys),ys;await q.reloadStopStart(s)}else if(s===y.PROCESS_DESCRIPTORS.PM2_LOGROTATE)await q.configureLogRotate();else if(s.toLowerCase().includes("clustering"))await Pn(s);else if(s===y.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS||s===y.SERVICES.CUSTOM_FUNCTIONS){let i=await q.isServiceRegistered(s);if(r)i?(await q.reloadStopStart(s),K.trace(`Reloading ${s}`)):(await q.startService(s),K.trace(`Starting ${s}`));else if(!r&&i)await q.stop(s),K.trace(`Stopping ${s}`);else{let o=`${s} is not enabled in harperdb-config.yaml and cannot be restarted.`;throw K.error(o),XE(new Error,o,zE.BAD_REQUEST,void 0,void 0,!0)}}else await q.restart(s);let n=`Restarting ${s}`;return K.notify(n),n}a(NN,"restartService");async function uY(){K.createLogFile(y.PROCESS_LOG_NAMES.CLI,y.PROCESS_DESCRIPTORS.STOP);try{q===void 0&&(q=gn());let e=pN(process.argv);if(r_.isEmpty(e.service))console.log("Stopping HarperDB."),await q.stopAllServices(),K.notify("HarperDB has stopped");else{if(typeof e.service!="string"){let r=`Stop service argument expected a string but received: ${e.service}`;K.error(r),console.log(r)}let t=e.service.split(",");for(let r of t){let s=r.toLowerCase();if(y.PROCESS_DESCRIPTORS_VALIDATE[s]===void 0){K.error(`Stop received unrecognized service command argument: ${s}`);continue}s==="clustering"?await q.stopClustering():await q.stop(y.PROCESS_DESCRIPTORS_VALIDATE[s]);let n=`${y.PROCESS_DESCRIPTORS_VALIDATE[s]} successfully stopped.`;K.notify(n),console.log(n)}}}catch(e){throw console.error(e),e}}a(uY,"stop");async function gN(){await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE),await Pn(y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE),await jE.updateNodeNameLocalStreams(),await jE.closeConnection()}a(gN,"restartAllClusteringServices");async function Pn(e){e=y.PROCESS_DESCRIPTORS_VALIDATE[e.toLowerCase()];let t=$i.getConfigFromFile(y.CONFIG_PARAMS.CLUSTERING_ENABLED),r=e==="clustering",s=e==="clustering config",n=r?void 0:await q.isServiceRegistered(e),i=r||s?await q.isClusteringRunning():void 0;switch(!0){case s:if(!i){K.error(cY);break}await q.reloadClustering();break;case(r&&i&&!t):await q.stopClustering();break;case(r&&!i&&t):await q.startClustering();break;case(r&&i&&t):await gN();break;case(r&&!i&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&!t):await q.stop(e),K.trace(`Stopping ${e}`);break;case(!n&&t):e!==y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE&&e!==y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE&&await ZE.generateNatsConfig(!0,e),await q.startService(e),K.trace(`Starting ${e}`),e===y.PROCESS_DESCRIPTORS.CLUSTERING_LEAF&&await jE.createWorkQueueStream(sY.WORK_QUEUE_CONSUMER_NAMES);break;case(!n&&!t):K.error(`${e} is not enabled in harperdb-config.yaml and cannot be restarted.`);break;case(n&&t):e===y.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE||e===y.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE?await q.reload(e):(await ZE.generateNatsConfig(!0,e),await q.restart(e),await ZE.removeNatsConfig(e));break;default:K.error(`Error restarting ${e}`)}}a(Pn,"restartClustering")});var vN=h((JX,BN)=>{"use strict";var WX=require("lodash"),Ze=T(),{handleHDBError:CN,hdb_errors:lY}=D(),{HDB_ERROR_MSGS:EY,HTTP_STATUS_CODES:dY}=lY,td=I();BN.exports={getRolePermissions:hY};var Ds=Object.create(null),SY=a(e=>({key:e,perms:{}}),"perms_template_obj"),UN=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),yN=a((e=!1,t=!1,r=!1,s=!1)=>({[Ze.PERMS_CRUD_ENUM.READ]:e,[Ze.PERMS_CRUD_ENUM.INSERT]:t,[Ze.PERMS_CRUD_ENUM.UPDATE]:r,[Ze.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),rd=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...yN(t,r,s,n)}),"table_perms_template"),bN=a((e,t=yN())=>({attribute_name:e,describe:PN(t),[Yi]:t[Yi],[sd]:t[sd],[nd]:t[nd]}),"attr_perms_template"),wN=a((e,t=!1)=>({attribute_name:e,describe:t,[Yi]:t}),"timestamp_attr_perms_template"),{READ:Yi,INSERT:sd,UPDATE:nd}=Ze.PERMS_CRUD_ENUM,DN=Object.values(Ze.PERMS_CRUD_ENUM),MN=[Yi,sd,nd];function hY(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ze.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ds[t]&&Ds[t].key===s)return Ds[t].perms;let n=fY(e,r);return Ds[t]?Ds[t].key=s:Ds[t]=SY(s),Ds[t].perms=n,n}catch(r){if(!e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ze.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ze.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw td.error(s),td.debug(r),CN(new Error,EY.OUTDATED_PERMS_TRANSLATION_ERROR,dY.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
8
8
|
${r.stack}`;throw td.error(s),CN(new Error)}}}a(hY,"getRolePermissions");function fY(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ze.SYSTEM_SCHEMA_NAME]=s[Ze.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=TY(t[i]);return}r[i]=UN(),s[i]?Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],_=t[i][o],u=mY(c,_);r[i].describe||DN.forEach(l=>{u[l]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=rd()}):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=rd()})}),r}a(fY,"translateRolePermissions");function TY(e){let t=UN(!0);return Object.keys(e).forEach(r=>{t.tables[r]=rd(!0,!0,!0,!0,!0)}),t}a(TY,"createStructureUserPermissions");function mY(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((u,l)=>{let{attribute_name:E}=l,d=l;return Ze.TIME_STAMP_NAMES.includes(E)&&(d=wN(E,l[Yi])),u[E]=d,u},{}),o=t[Ze.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_HASH_ATTRIBUTE_KEY],c=!!i[o],_=bN(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let l=i[u];l.describe=PN(l),n.attribute_permissions.push(l),c||RY(l,_)}else if(u!==o){let l;Ze.TIME_STAMP_NAMES.includes(u)?l=wN(u):l=bN(u),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(_),n.describe=LN(n),n}else return e.describe=LN(e),e}a(mY,"getTableAttrPerms");function LN(e){return DN.filter(t=>e[t]).length>0}a(LN,"getSchemaTableDescribePerm");function PN(e){return MN.filter(t=>e[t]).length>0}a(PN,"getAttributeDescribePerm");function RY(e,t){MN.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(RY,"checkForHashPerms")});var xN=h((ZX,kN)=>{"use strict";var Te=require("joi"),HN=require("fs-extra"),GN=require("path"),Bn=Ee(),qN=Y(),FN=T(),VN=I(),{hdb_errors:AY}=D(),{HDB_ERROR_MSGS:lt}=AY,jr=/^[a-zA-Z0-9-_]+$/;kN.exports={getDropCustomFunctionValidator:pY,setCustomFunctionValidator:NY,addCustomFunctionProjectValidator:gY,dropCustomFunctionProjectValidator:IY,packageCustomFunctionProjectValidator:CY,deployCustomFunctionProjectValidator:bY};function Ki(e,t,r){try{let s=qN.get(FN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=GN.join(s,t);return HN.existsSync(n)?e?t:r.message(lt.PROJECT_EXISTS):e?r.message(lt.NO_PROJECT):t}catch(s){return VN.error(s),r.message(lt.VALIDATION_ERR)}}a(Ki,"checkProjectExists");function OY(e,t,r,s){try{let n=qN.get(FN.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=GN.join(n,e,t,r+".js");return HN.existsSync(i)?r:s.message(lt.NO_FILE)}catch(n){return VN.error(n),s.message(lt.VALIDATION_ERR)}}a(OY,"checkFileExists");function pY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(jr).custom(OY.bind(null,e.project,e.type)).required().messages({"string.pattern.base":lt.BAD_FILE_NAME})});return Bn.validateBySchema(e,t)}a(pY,"getDropCustomFunctionValidator");function NY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(jr).required().messages({"string.pattern.base":lt.BAD_FILE_NAME}),function_content:Te.string().required()});return Bn.validateBySchema(e,t)}a(NY,"setCustomFunctionValidator");function gY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!1)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Bn.validateBySchema(e,t)}a(gY,"addCustomFunctionProjectValidator");function IY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME})});return Bn.validateBySchema(e,t)}a(IY,"dropCustomFunctionProjectValidator");function CY(e){let t=Te.object({project:Te.string().pattern(jr).custom(Ki.bind(null,!0)).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return Bn.validateBySchema(e,t)}a(CY,"packageCustomFunctionProjectValidator");function bY(e){let t=Te.object({project:Te.string().pattern(jr).required().messages({"string.pattern.base":lt.BAD_PROJECT_NAME}),payload:Te.string().required().messages({"string.pattern.base":lt.BAD_PACKAGE})});return Bn.validateBySchema(e,t)}a(bY,"deployCustomFunctionProjectValidator")});var od=h((XX,KN)=>{"use strict";var we=require("fs-extra"),s_=require("fast-glob"),ie=require("path"),$N=require("tar-fs"),YN=require("uuid").v4,Qi=require("normalize-path"),Ms=xN(),Le=I(),At=T(),Ot=Y(),{PACKAGE_ROOT:wY}=T(),{handleHDBError:Xe,hdb_errors:LY}=D(),{HDB_ERROR_MSGS:es,HTTP_STATUS_CODES:ze}=LY,UY=ie.join(wY,"custom_function_template"),id=ie.join(Ot.get(At.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ad(){let e=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw Xe(new Error,es.NOT_ENABLED,ze.BAD_REQUEST,void 0,void 0,!0)}a(ad,"isCFEnabled");function yY(){Le.trace("getting custom api status");let e={};try{e={is_enabled:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw Xe(new Error,es.FUNCTION_STATUS,ze.INTERNAL_SERVER_ERROR,Le.ERR,t)}return e}a(yY,"customFunctionsStatus");function DY(){Le.trace("getting custom api endpoints");let e={},t=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{s_.sync(Qi(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:s_.sync(Qi(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:s_.sync(Qi(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),static:we.existsSync(Qi(`${s}/static`))&&s_.sync(Qi(`${s}/static/**/*`)).length}})}catch(r){throw Xe(new Error,es.GET_FUNCTIONS,ze.INTERNAL_SERVER_ERROR,Le.ERR,r)}return e}a(DY,"getCustomFunctions");function MY(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("getting custom api endpoint file content");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=ie.join(r,s,n,i+".js");try{return we.readFileSync(o,{encoding:"utf8"})}catch(c){throw Xe(new Error,es.GET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(MY,"getCustomFunction");function PY(e){ad(),e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.setCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("setting custom function file content");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return we.outputFileSync(ie.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Xe(new Error,es.SET_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,c)}}a(PY,"setCustomFunction");function BY(e){e.project&&(e.project=ie.parse(e.project).name),e.file&&(e.file=ie.parse(e.file).name);let t=Ms.getDropCustomFunctionValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function file");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return we.unlinkSync(ie.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Xe(new Error,es.DROP_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,o)}}a(BY,"dropCustomFunction");function vY(e){ad(),e.project&&(e.project=ie.parse(e.project).name);let t=Ms.addCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("adding custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.mkdirSync(n,{recursive:!0}),we.copySync(UY,n),`Successfully created custom function project: ${s}`}catch(n){throw Xe(new Error,es.ADD_FUNCTION,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(vY,"addCustomFunctionProject");function HY(e){e.project&&(e.project=ie.parse(e.project).name);let t=Ms.dropCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("dropping custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=ie.join(r,s);return we.rmSync(n,{recursive:!0}),`Successfully deleted project: ${s}`}catch(n){throw Xe(new Error,es.DROP_FUNCTION_PROJECT,ze.INTERNAL_SERVER_ERROR,Le.ERR,n)}}a(HY,"dropCustomFunctionProject");async function GY(e){e.project&&(e.project=ie.parse(e.project).name);let t=Ms.packageCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("packaging custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=ie.join(r,s),i=YN();if(!we.existsSync(n)){let l=`Unable to locate custom function project: ${s}`;throw Le.error(l),l}we.ensureDirSync(id);let c=ie.join(id,`${i}.tar`),_={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(_={ignore:l=>l.includes(ie.join(n,"node_modules"))}),$N.pack(n,_).pipe(we.createWriteStream(c)),await new Promise(l=>setTimeout(l,2e3));let u=we.readFileSync(c,{encoding:"base64"});return we.unlinkSync(c),{project:s,payload:u,file:c}}a(GY,"packageCustomFunctionProject");async function qY(e){ad(),e.project&&(e.project=ie.parse(e.project).name);let t=Ms.deployCustomFunctionProjectValidator(e);if(t)throw Xe(t,t.message,ze.BAD_REQUEST);Le.trace("deploying custom function project");let r=Ot.get(At.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,file:i}=e,o=ie.join(r,s);await we.ensureDir(o);let c,_;do c=ie.join(id,YN()+".tar"),_=await we.pathExists(c);while(_);await we.outputFile(c,n,{encoding:"base64"});let u=we.createReadStream(c);return u.pipe($N.extract(o)),await new Promise(l=>u.on("end",l)),await we.unlink(c),`Successfully deployed project: ${s}`}a(qY,"deployCustomFunctionProject");KN.exports={customFunctionsStatus:yY,getCustomFunctions:DY,getCustomFunction:MY,setCustomFunction:PY,dropCustomFunction:BY,addCustomFunctionProject:vY,dropCustomFunctionProject:HY,packageCustomFunctionProject:GY,deployCustomFunctionProject:qY}});var cd=h((zX,WN)=>{"use strict";var cr=require("joi"),QN=Ee();WN.exports={readTransactionLogValidator:FY,deleteTransactionLogsBeforeValidator:VY};function FY(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),from:cr.date().timestamp(),to:cr.date().timestamp(),limit:cr.number().min(1)});return QN.validateBySchema(e,t)}a(FY,"readTransactionLogValidator");function VY(e){let t=cr.object({schema:cr.string().required(),table:cr.string().required(),timestamp:cr.date().timestamp().required()});return QN.validateBySchema(e,t)}a(VY,"deleteTransactionLogsBeforeValidator")});var i_=h((jX,jN)=>{"use strict";var _d=T(),n_=Rt(),JN=C(),ZN=Y(),XN=Fr(),{handleHDBError:vn,hdb_errors:kY}=D(),{HTTP_STATUS_CODES:Hn}=kY,{readTransactionLogValidator:xY,deleteTransactionLogsBeforeValidator:$Y}=cd(),zN="This operation relies on clustering and cannot run with it disable.",YY="Logs successfully deleted from transaction log.",KY="All logs successfully deleted from transaction log.";jN.exports={readTransactionLog:QY,deleteTransactionLogsBefore:WY};async function QY(e){let t=xY(e);if(t)throw vn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!ZN.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vn(new Error,zN,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=JN.checkSchemaTableExist(r,s);if(n)throw vn(new Error,n,Hn.NOT_FOUND,void 0,void 0,!0);let i=XN.createNatsTableStreamName(r,s),o=await n_.viewStream(i,parseInt(e.from),e.limit),c=[];for(let _=0,u=o.length;_<u;_++){let l=o[_],E=Math.floor(l?.nats_timestamp/1e6);if(e.to&&E>e.to)break;let d={operation:l?.entry?.operation,user:l?.entry?.__origin?.user,timestamp:E,records:l?.entry?.records};l?.entry?.operation===_d.OPERATIONS_ENUM.DELETE&&(d.hash_values=l?.entry?.hash_values),c.push(d)}return c}a(QY,"readTransactionLog");async function WY(e){let t=$Y(e);if(t)throw vn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(!ZN.get(_d.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vn(new Error,zN,Hn.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=JN.checkSchemaTableExist(r,s);if(i)throw vn(new Error,i,Hn.NOT_FOUND,void 0,void 0,!0);let o=XN.createNatsTableStreamName(r,s),{jsm:c}=await n_.getNATSReferences(),_=await n_.getStreamInfo(o),u=new Date(_.state.first_ts).getTime();if(n<=u)return`No transactions exist before: ${n}`;let l=YY,E,d=new Date(_.state.last_ts).getTime();return n>d?(E=_.state.last_seq+1,l=KY):E=(await n_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:E}),l}a(WY,"deleteTransactionLogsBefore")});var ld=h((e3,_g)=>{"use strict";var a_=require("joi"),o_=require("path"),eg=require("fs-extra"),{exec:JY}=require("child_process"),ZY=require("util"),tg=ZY.promisify(JY),XY=T(),{handleHDBError:Gn,hdb_errors:zY}=D(),{HTTP_STATUS_CODES:qn}=zY,rg=Y(),jY=Ee(),c_=I();rg.initSync();var ud=rg.get(XY.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),sg="npm install --omit=dev --json",eK=`${sg} --dry-run`;_g.exports={installModules:tK,auditModules:rK};async function ng(e,t=void 0){let{stdout:r,stderr:s}=await tg(e,{cwd:t});if(s)throw new Error(s.replace(`
|