harperdb 4.1.2 → 4.1.3

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/bin/harperdb.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";var DN=Object.defineProperty;var o=(e,t)=>DN(e,"name",{value:t,configurable:!0});var f=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var T=f((uY,PE)=>{"use strict";var _t=require("path"),UN=require("fs");function PN(){let e=__dirname;for(;!UN.existsSync(_t.join(e,"package.json"));){let t=_t.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(PN,"getHDBPackageRoot");var _r=PN(),gE="js",Xi=gE,HN="harperdb-config.yaml",BN="defaultConfig.yaml",vN="hdb",pE=`harperdb.${Xi}`,NE=`customFunctionsServer.${Xi}`,GN=`restartHdb.${Xi}`,Zc="HarperDB",Ji="Custom Functions",Zi="Clustering Hub",zi="Clustering Leaf",qN="Clustering Ingest Service",FN="Clustering Reply Service",xN="foreground.pid",VN="hdb.pid",kN={HDB:Zc,CLUSTERING_HUB:Zi,CLUSTERING_LEAF:zi,CLUSTERING_INGEST_SERVICE:qN,CLUSTERING_REPLY_SERVICE:FN,CUSTOM_FUNCTIONS:Ji,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},YN={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},$N={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},KN={harperdb:Zc,"clustering hub":Zi,"clustering leaf":zi,"custom functions":Ji,custom_functions:Ji,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},WN={CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi},Xc={HDB:_t.join(_r,"server/harperdb"),CUSTOM_FUNCTIONS:_t.join(_r,"server/customFunctions"),CLUSTERING_HUB:_t.join(_r,"server/nats"),CLUSTERING_LEAF:_t.join(_r,"server/nats")},QN={HDB:_t.join(Xc.HDB,pE),CUSTOM_FUNCTIONS:_t.join(Xc.CUSTOM_FUNCTIONS,NE)},jN={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:_t.join(_r,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:_t.join(_r,"launchServiceScripts/launchUpdateNodes4-0-0.js")},JN={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},OE="support@harperdb.io",XN="customer-success@harperdb.io",IE=1,ZN=4141,CE="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",zN="https://www.harperdb.io/product",eO=`For support, please submit a request at ${CE} or contact ${OE}`,bE=`For license support, please contact ${XN}`,tO="None of the specified records were found.",rO="hash attribute not found",sO=`Your current license only supports ${IE} role. ${bE}`,nO="Your current license only supports 3 connections to a node.",iO="127.0.0.1",oO=1,aO=/^\.$/,cO=/^\.\.$/,_O="U+002E",uO=/\//g,lO="U+002F",EO=/U\+002F/g,dO=/^U\+002E$/,SO=/^U\+002EU\+002E$/,fO="d",hO=999999,TO="*",RO="--max-old-space-size=",mO="system",AO="__hdb_hash",gO=".harperdb",pO=".hdb",NO="keys",OO="hdb_boot_properties.file",IO=".updateConfig.json",CO="SIGTSTP",bO=24,LO=6e4,yO=448,wO="blob",MO="trash",DO="schema",UO="transactions",PO=".count",HO="id",BO="PROCESS_NAME",LE={SETTINGS_PATH_KEY:"settings_path"},yE=require("lodash"),vO={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"},GO={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},qO={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},FO={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"},xO={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"},Ge="hdb_internal:",VO={CREATE_SCHEMA:Ge+"create_schema",CREATE_TABLE:Ge+"create_table",CREATE_ATTRIBUTE:Ge+"create_attribute",ADD_USER:Ge+"add_user",ALTER_USER:Ge+"alter_user",DROP_USER:Ge+"drop_user",HDB_NODES:Ge+"hdb_nodes",HDB_USERS:Ge+"hdb_users",HDB_WORKERS:Ge+"hdb_workers",CATCHUP:Ge+"catchup",SCHEMA_CATCHUP:Ge+"schema_catchup",WORKER_ROOM:Ge+"cluster_workers"},kO={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"},YO="060493.ks",$O=".license",KO={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",CLUSTER_NETWORK:"cluster_network",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",PURGE_STREAM:"purge_stream"},WO={CSV:".csv",JSON:".json"},QO={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},jO={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},An={};An[g.INSERT]=g.INSERT;An[g.UPDATE]=g.UPDATE;An[g.UPSERT]=g.UPSERT;An[g.DELETE]=g.DELETE;var Y=Object.create(null);Y[g.DESCRIBE_ALL]=g.DESCRIBE_ALL;Y[g.DESCRIBE_TABLE]=g.DESCRIBE_TABLE;Y[g.DESCRIBE_SCHEMA]=g.DESCRIBE_SCHEMA;Y[g.READ_LOG]=g.READ_LOG;Y[g.ADD_NODE]=g.ADD_NODE;Y[g.LIST_USERS]=g.LIST_USERS;Y[g.LIST_ROLES]=g.LIST_ROLES;Y[g.USER_INFO]=g.USER_INFO;Y[g.SQL]=g.SQL;Y[g.GET_JOB]=g.GET_JOB;Y[g.SEARCH_JOBS_BY_START_DATE]=g.SEARCH_JOBS_BY_START_DATE;Y[g.DELETE_FILES_BEFORE]=g.DELETE_FILES_BEFORE;Y[g.EXPORT_LOCAL]=g.EXPORT_LOCAL;Y[g.EXPORT_TO_S3]=g.EXPORT_TO_S3;Y[g.CLUSTER_STATUS]=g.CLUSTER_STATUS;Y[g.REMOVE_NODE]=g.REMOVE_NODE;Y[g.RESTART]=g.RESTART;Y[g.CUSTOM_FUNCTIONS_STATUS]=g.CUSTOM_FUNCTIONS_STATUS;Y[g.GET_CUSTOM_FUNCTIONS]=g.GET_CUSTOM_FUNCTIONS;Y[g.GET_CUSTOM_FUNCTION]=g.GET_CUSTOM_FUNCTION;Y[g.SET_CUSTOM_FUNCTION]=g.SET_CUSTOM_FUNCTION;Y[g.DROP_CUSTOM_FUNCTION]=g.DROP_CUSTOM_FUNCTION;Y[g.ADD_CUSTOM_FUNCTION_PROJECT]=g.ADD_CUSTOM_FUNCTION_PROJECT;Y[g.DROP_CUSTOM_FUNCTION_PROJECT]=g.DROP_CUSTOM_FUNCTION_PROJECT;Y[g.PACKAGE_CUSTOM_FUNCTION_PROJECT]=g.PACKAGE_CUSTOM_FUNCTION_PROJECT;Y[g.DEPLOY_CUSTOM_FUNCTION_PROJECT]=g.DEPLOY_CUSTOM_FUNCTION_PROJECT;var JO={RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},XO={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},wE={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",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"},ZO=yE.invert(wE),h={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_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",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",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",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",HTTP_SESSION_AFFINITY:"http_sessionAffinity",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",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",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",SCHEMAS:"schemas"},ME={settings_path:LE.SETTINGS_PATH_KEY,hdb_root_key:h.ROOTPATH,hdb_root:h.ROOTPATH,server_port_key:h.OPERATIONSAPI_NETWORK_PORT,server_port:h.OPERATIONSAPI_NETWORK_PORT,cert_key:h.OPERATIONSAPI_TLS_CERTIFICATE,certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:h.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:h.OPERATIONSAPI_NETWORK_HTTPS,https_on:h.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:h.OPERATIONSAPI_NETWORK_CORS,cors_on:h.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:h.LOGGING_LEVEL,log_level:h.LOGGING_LEVEL,log_path_key:h.LOGGING_ROOT,log_path:h.LOGGING_ROOT,props_env_key:h.OPERATIONSAPI_NODEENV,node_env:h.OPERATIONSAPI_NODEENV,clustering_node_name_key:h.CLUSTERING_NODENAME,node_name:h.CLUSTERING_NODENAME,clustering_enabled_key:h.CLUSTERING_ENABLED,clustering:h.CLUSTERING_ENABLED,max_http_threads:h.HTTP_THREADS,max_hdb_processes:h.HTTP_THREADS,server_timeout_key:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:h.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:h.LOGGING_AUDITLOG,disable_transaction_log:h.LOGGING_AUDITLOG,operation_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:h.CUSTOMFUNCTIONS_ENABLED,custom_functions:h.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:h.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:h.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:h.HTTP_THREADS,log_to_file:h.LOGGING_FILE,log_to_stdstreams:h.LOGGING_STDSTREAMS,run_in_foreground:h.OPERATIONSAPI_FOREGROUND,local_studio_on:h.LOCALSTUDIO_ENABLED,clustering_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:h.CLUSTERING_USER,clustering_enabled:h.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:h.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:h.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:h.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:h.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:h.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:h.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:h.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:h.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:h.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:h.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:h.CLUSTERING_NODENAME,clustering_tls_certificate:h.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:h.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:h.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:h.CLUSTERING_TLS_INSECURE,clustering_tls_verify:h.CLUSTERING_TLS_VERIFY,clustering_loglevel:h.CLUSTERING_LOGLEVEL,clustering_republishmessages:h.CLUSTERING_REPUBLISHMESSAGES,customfunctions_enabled:h.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:h.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:h.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:h.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:h.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:h.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:h.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:h.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:h.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:h.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:h.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:h.CUSTOMFUNCTIONS_NODEENV,http_threads:h.HTTP_THREADS,http_session_affinity:h.HTTP_SESSION_AFFINITY,customfunctions_processes:h.HTTP_THREADS,customfunctions_root:h.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:h.LOCALSTUDIO_ENABLED,logging_file:h.LOGGING_FILE,logging_level:h.LOGGING_LEVEL,logging_root:h.LOGGING_ROOT,logging_rotation_enabled:h.LOGGING_ROTATION_ENABLED,logging_rotation_compress:h.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:h.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:h.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:h.LOGGING_ROTATION_PATH,logging_stdstreams:h.LOGGING_STDSTREAMS,logging_auditlog:h.LOGGING_AUDITLOG,operationsapi_authentication_operationtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:h.OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:h.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:h.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:h.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:h.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:h.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:h.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:h.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:h.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:h.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:h.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:h.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:h.OPERATIONSAPI_NODEENV,operationsapi_root:h.ROOTPATH,schemas:h.SCHEMAS,storage_path:h.STORAGE_PATH};for(let e in h){let t=h[e];ME[t.toLowerCase()]=t}var zO={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},eI={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"},tI={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"},rI={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},sI={FILE_SYSTEM:"fs",LMDB:"lmdb"},nI={API_CALL_DEFAULT:1e4,VERSION_DEFAULT:"2.2.0"},iI={DEVELOPMENT:8192,DEFAULT:512},oI={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"},aI={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"},cI={ENOENT:"ENOENT",EACCES:"EACCES"},DE={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_I="__clustering__",uI=Object.values(DE),lI=15984864e5,UE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},EI=yE.invert(UE),dI={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"},SI=111,fI=`\r
3
3
  `,hI={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},TI=["*","%"],RI="unauthorized_access",mI="func_val",AI={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},gI={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},pI={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},NI={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},OI={HTTP:"http"},II={STOPPED:"stopped",ONLINE:"online"},CI="3.x.x";PE.exports={LOCAL_HARPERDB_OPERATIONS:Y,HDB_SUPPORT_ADDRESS:OE,HDB_SUPPORT_URL:CE,HDB_PRICING_URL:zN,SUPPORT_HELP_MSG:eO,LICENSE_HELP_MSG:bE,HDB_PROC_NAME:pE,HDB_PROC_DESCRIPTOR:Zc,CLUSTERING_LEAF_PROC_DESCRIPTOR:zi,CLUSTERING_HUB_PROC_DESCRIPTOR:Zi,SYSTEM_SCHEMA_NAME:mO,HASH_FOLDER_NAME:AO,HDB_HOME_DIR_NAME:gO,UPDATE_FILE_NAME:IO,LICENSE_KEY_DIR_NAME:NO,BOOT_PROPS_FILE_NAME:OO,JOB_TYPE_ENUM:eI,JOB_STATUS_ENUM:KO,SYSTEM_TABLE_NAMES:FO,SYSTEM_TABLE_HASH_ATTRIBUTES:xO,OPERATIONS_ENUM:g,VALID_S3_FILE_TYPES:WO,S3_BUCKET_AUTH_KEYS:QO,VALID_SQL_OPS_ENUM:jO,GEO_CONVERSION_ENUM:XO,HDB_SETTINGS_NAMES:wE,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:ZO,SERVICE_ACTIONS_ENUM:JO,CLUSTER_MESSAGE_TYPE_ENUM:tI,CLUSTER_CONNECTION_DIRECTION_ENUM:rI,CLUSTER_EVENTS_DEFS_ENUM:oI,PERIOD_REGEX:aO,DOUBLE_PERIOD_REGEX:cO,UNICODE_PERIOD:_O,FORWARD_SLASH_REGEX:uO,UNICODE_FORWARD_SLASH:lO,ESCAPED_FORWARD_SLASH_REGEX:EO,ESCAPED_PERIOD_REGEX:dO,ESCAPED_DOUBLE_PERIOD_REGEX:SO,REG_KEY_FILE_NAME:YO,RESTART_TIMEOUT_MS:LO,HDB_FILE_PERMISSIONS:yO,SCHEMA_DIR_NAME:DO,TRANSACTIONS_DIR_NAME:UO,LIMIT_COUNT_NAME:PO,ID_ATTRIBUTE_STRING:HO,INSERT_MODULE_ENUM:GO,UPGRADE_JSON_FIELD_NAMES_ENUM:qO,RESTART_CODE:CO,RESTART_CODE_NUM:bO,CLUSTER_OPERATIONS:An,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:kO,HDB_INTERNAL_SC_CHANNEL_PREFIX:Ge,INTERNAL_SC_CHANNELS:VO,CLUSTERING_MESSAGE_TYPES:dI,HDB_FILE_SUFFIX:pO,BLOB_FOLDER_NAME:wO,HDB_TRASH_DIR:MO,ORIGINATOR_SET_VALUE:SI,LICENSE_VALUES:nI,RAM_ALLOCATION_ENUM:iI,STORAGE_TYPES_ENUM:sI,TIME_STAMP_NAMES_ENUM:DE,TIME_STAMP_NAMES:uI,PERMS_UPDATE_RELEASE_TIMESTAMP:lI,SEARCH_NOT_FOUND_MESSAGE:tO,SEARCH_ATTRIBUTE_NOT_FOUND:rO,LICENSE_ROLE_DENIED_RESPONSE:sO,LICENSE_MAX_CONNS_REACHED:nO,BASIC_LICENSE_MAX_NON_CU_ROLES:IE,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:ZN,VALUE_SEARCH_COMPARATORS:UE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:EI,LICENSE_FILE_NAME:$O,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:aI,NEW_LINE:fI,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:oO,MOMENT_DAYS_TAG:fO,API_TURNOVER_SEC:hO,LOOPBACK:iO,CODE_EXTENSION:Xi,WILDCARD_SEARCH_VALUE:TO,NODE_ERROR_CODES:cI,JAVASCRIPT_EXTENSION:gE,PERMS_CRUD_ENUM:hI,UNAUTHORIZED_PERMISSION_NAME:RI,SEARCH_WILDCARDS:TI,FUNC_VAL:mI,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:AI,JWT_ENUM:gI,CLUSTERING_FLAG:_I,ITC_EVENT_TYPES:pI,CUSTOM_FUNCTION_PROC_NAME:NE,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ji,SERVICES:NI,THREAD_TYPES:OI,MEM_SETTING_KEY:RO,HDB_RESTART_SCRIPT:GN,PROCESS_DESCRIPTORS:kN,SERVICE_SERVERS:QN,SERVICE_SERVERS_CWD:Xc,PROCESS_DESCRIPTORS_VALIDATE:KN,LAUNCH_SERVICE_SCRIPTS:jN,LOG_LEVELS:$N,PROCESS_NAME_ENV_PROP:BO,LOG_NAMES:YN,PM2_PROCESS_STATUSES:II,CONFIG_PARAM_MAP:ME,CONFIG_PARAMS:h,HDB_CONFIG_FILE:HN,HDB_DEFAULT_CONFIG_FILE:BN,ROLE_TYPES_ENUM:JN,BOOT_PROP_PARAMS:LE,INSTALL_PROMPTS:vO,HDB_ROOT_DIR_NAME:vN,CLUSTERING_PROCESSES:WN,FOREGROUND_PID_FILE:xN,PACKAGE_ROOT:_r,PRE_4_0_0_VERSION:CI,SCHEMAS_PARAM_CONFIG:zO,HDB_PID_FILE:VN}});var kr=f((EY,vE)=>{"use strict";var HE=require("minimist");vE.exports=bI;function bI(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BE(process.env),s=BE(HE(process.argv))):(r=process.env,s=HE(process.argv));let n={};for(let i=0,a=e.length;i<a;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}o(bI,"assignCMDENVVariables");function BE(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(BE,"objKeysToLowerCase")});var p=f((SY,jE)=>{"use strict";var Ds=require("fs-extra"),{workerData:LI,threadId:yI}=require("worker_threads"),ur=require("path"),FE=require("yaml"),xE=require("properties-reader"),ue=T(),GE=kr(),wI=require("os"),{PACKAGE_ROOT:e_}=T(),VE={};for(let e in console)VE[e]=console[e];var be={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kE={STDOUT:"stdOut",STDERR:"stdErr"},MI=ur.join(e_,"logs"),DI=ur.join(e_,"config/yaml/",ue.HDB_DEFAULT_CONFIG_FILE),UI=1e4,Vt,kt,Ce,eo,to,ro,pn,gn;gn===void 0&&YE();jE.exports={notify:WE,fatal:QE,error:Nn,warn:n_,info:so,debug:s_,trace:r_,setLogLevel:FI,log_level:Ce,loggerWithTag:PI,suppressLogging:HI,initLogSettings:YE,setupConsoleLogging:$E,logCustomLevel:GI,closeLogFile:t_,getLogFilePath:()=>ro,OUTPUTS:kE};function YE(e=!1){try{if(gn===void 0||e){t_();let t=qI();gn=xE(t);let r=GE(["ROOTPATH"]);({level:Ce,config_log_path:to,to_file:Vt,to_stream:kt}=xI(r.ROOTPATH?ur.join(r.ROOTPATH,ue.HDB_CONFIG_FILE):gn.get("settings_path"))),eo=ue.LOG_NAMES.HDB,ro=ur.join(to,eo)}}catch(t){if(gn=void 0,t.code===ue.NODE_ERROR_CODES.ENOENT){let r=GE(Object.keys(ue.CONFIG_PARAM_MAP),!0);for(let a in r){let c=ue.CONFIG_PARAM_MAP[a];c&&c.toLowerCase();let _=r[a];if(c===ue.CONFIG_PARAMS.LOGGING_LEVEL){Ce=_;continue}if(c===ue.CONFIG_PARAMS.LOGGING_STDSTREAMS){kt=_;continue}c===ue.CONFIG_PARAMS.LOGGING_FILE&&(Vt=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=VI();Vt=Vt===void 0?n:Vt,Vt=qE(Vt),kt=kt===void 0?i:kt,kt=qE(kt),Ce=Ce===void 0?s:Ce,to=MI,eo=ue.LOG_NAMES.INSTALL,ro=ur.join(to,eo);return}throw Nn("Error initializing log settings"),Nn(t),t}$E()}o(YE,"initLogSettings");var zc=!0;function $E(){Ms("error",Nn),Ms("warn",n_),Ms("log",so),Ms("info",so),Ms("debug",s_),Ms("trace",r_)}o($E,"setupConsoleLogging");function Ms(e,t){console[e]=function(...r){if(zc&&t(...r),!/PM2 log:|App \[/.test(r[0]))return VE[e](...r)}}o(Ms,"logConsole");function PI(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(WE),fatal:r(QE),error:r(Nn),warn:r(n_),info:r(so),debug:r(s_),trace:r(r_)};function r(s){return function(...n){return s(t,...n)}}}o(PI,"loggerWithTag");function HI(e){try{zc=!1,e()}finally{zc=!0}}o(HI,"suppressLogging");var BI=LI?.name?.replace(/ /g,"-")||"main";function Yt(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,a=[e],c=0,_;for(typeof t[0]=="object"&&(t[0]?.tagName?(a.push(t[0]?.tagName),c++):t[0]?.serviceName&&(_=t[0]?.serviceName,c++)),a.unshift(_||BI+"/"+yI);c<n;c++){let u=t[c];u instanceof Error&&u.stack?s+=u.stack:typeof u=="object"?s+=JSON.stringify(u):s+=u,c<i&&(s+=" ")}return`${r} [${a.join("] [")}]: ${s}
4
- `}o(Yt,"createLogRecord");function On(e){Vt&&KE(e),kt&&process.stdout.write(e)}o(On,"logStdOut");function no(e){Vt&&KE(e),kt&&process.stderr.write(e)}o(no,"logStdErr");function KE(e){vI(),Ds.appendFileSync(pn,e)}o(KE,"logToFile");function t_(){try{Ds.closeSync(pn)}catch{}pn=null}o(t_,"closeLogFile");function vI(){pn||(pn=Ds.openSync(ro,"a"),setTimeout(()=>{t_()},UI).unref())}o(vI,"openLogFile");function so(...e){be[Ce]<=be.info&&On(Yt("info",e))}o(so,"info");function r_(...e){be[Ce]<=be.trace&&On(Yt("trace",e))}o(r_,"trace");function Nn(...e){be[Ce]<=be.error&&no(Yt("error",e))}o(Nn,"error");function s_(...e){be[Ce]<=be.debug&&On(Yt("debug",e))}o(s_,"debug");function WE(...e){be[Ce]<=be.notify&&On(Yt("notify",e))}o(WE,"notify");function QE(...e){be[Ce]<=be.fatal&&no(Yt("fatal",e))}o(QE,"fatal");function n_(...e){be[Ce]<=be.warn&&no(Yt("warn",e))}o(n_,"warn");function GI(e,t,...r){t===kE.STDERR?no(Yt(e,r)):On(Yt(e,r))}o(GI,"logCustomLevel");function qI(){let e;try{e=wI.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ur.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return Ds.existsSync(t)||(t=ur.join(e_,"utility/hdb_boot_properties.file")),t}o(qI,"getPropsFilePath");function FI(e){Ce=e}o(FI,"setLogLevel");function qE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qE,"autoCastBoolean");function xI(e){try{if(e.includes("config/settings.js")){let a=xE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ur.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FE.parseDocument(Ds.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===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(xI,"getLogConfig");function VI(){try{let e=FE.parseDocument(Ds.readFileSync(DI,"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)}}o(VI,"getDefaultConfig")});var Us=f((hY,kI)=>{kI.exports={name:"harperdb",version:"4.1.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.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && 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/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --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'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.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/dataLayer/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:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.2.0","@fastify/cors":"~8.2.0","@fastify/static":"~6.9.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","cbor-x":"1.5.1",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.17.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.2",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.5",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.17.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","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":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",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"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var Yr=f((mY,JE)=>{"use strict";var TY=require("fs-extra"),RY=p();JE.exports={version:YI,printVersion:KI,nodeVersion:$I};var lr=Us();function YI(){if(lr)return lr.version}o(YI,"version");function $I(){if(lr&&lr.engines&&lr.engines["preferred-node"])return lr.engines["preferred-node"]}o($I,"nodeVersion");function KI(){lr&&console.log(`HarperDB Version ${lr.version}`)}o(KI,"printVersion")});var ed=f((gY,zE)=>{"use strict";var XE=require("semver/functions/major"),WI=require("semver/functions/satisfies"),ZE=Us(),In=process.versions&&process.versions.node?process.versions.node:void 0;zE.exports=QI;function QI(){let e=ZE.engines.node,t=ZE.engines["preferred-node"];if(In){if(e&&!WI(In,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${In}. Please install a version of Node.js that is withing the defined range.`};if(t&&XE(In)!==XE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${In}. Some issues may occur with untested versions of Node.js.`}}}o(QI,"checkNodeVersion")});var i_=f((NY,td)=>{"use strict";var jI=require("util"),JI=require("path"),XI=require("child_process"),ZI=jI.promisify(XI.execFile),zI=1e3*1e3*10;td.exports={findPs:eC};async function eC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await ZI("ps",["wwxo",`pid,${r}`],{maxBuffer:zI});for(let n of s.trim().split(`
4
+ `}o(Yt,"createLogRecord");function On(e){Vt&&KE(e),kt&&process.stdout.write(e)}o(On,"logStdOut");function no(e){Vt&&KE(e),kt&&process.stderr.write(e)}o(no,"logStdErr");function KE(e){vI(),Ds.appendFileSync(pn,e)}o(KE,"logToFile");function t_(){try{Ds.closeSync(pn)}catch{}pn=null}o(t_,"closeLogFile");function vI(){pn||(pn=Ds.openSync(ro,"a"),setTimeout(()=>{t_()},UI).unref())}o(vI,"openLogFile");function so(...e){be[Ce]<=be.info&&On(Yt("info",e))}o(so,"info");function r_(...e){be[Ce]<=be.trace&&On(Yt("trace",e))}o(r_,"trace");function Nn(...e){be[Ce]<=be.error&&no(Yt("error",e))}o(Nn,"error");function s_(...e){be[Ce]<=be.debug&&On(Yt("debug",e))}o(s_,"debug");function WE(...e){be[Ce]<=be.notify&&On(Yt("notify",e))}o(WE,"notify");function QE(...e){be[Ce]<=be.fatal&&no(Yt("fatal",e))}o(QE,"fatal");function n_(...e){be[Ce]<=be.warn&&no(Yt("warn",e))}o(n_,"warn");function GI(e,t,...r){t===kE.STDERR?no(Yt(e,r)):On(Yt(e,r))}o(GI,"logCustomLevel");function qI(){let e;try{e=wI.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ur.join(e,ue.HDB_HOME_DIR_NAME,ue.BOOT_PROPS_FILE_NAME);return Ds.existsSync(t)||(t=ur.join(e_,"utility/hdb_boot_properties.file")),t}o(qI,"getPropsFilePath");function FI(e){Ce=e}o(FI,"setLogLevel");function qE(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(qE,"autoCastBoolean");function xI(e){try{if(e.includes("config/settings.js")){let a=xE(e);return{level:a.get(ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ur.dirname(a.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(ue.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FE.parseDocument(Ds.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===ue.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(xI,"getLogConfig");function VI(){try{let e=FE.parseDocument(Ds.readFileSync(DI,"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)}}o(VI,"getDefaultConfig")});var Us=f((hY,kI)=>{kI.exports={name:"harperdb",version:"4.1.3",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.15.0","go-lang":"1.19.10","nats-server":"2.9.18"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license --storage_type=lmdb && npm run cover:logging && 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/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","cover:lmdbutility":"cd bin/ && nyc --no-clean --reporter=lcovonly --retries 3 ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","cover:hdbserver":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --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'","cover:apitests":"cd bin/ && node harperdb.js stop && node harperdb.js && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*.js' --config '../unitTests/.mocharc.json' && node harperdb.js stop","cover:logging":"cd bin/ && nyc --no-clean --reporter=lcovonly ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.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/dataLayer/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:{"@aws-sdk/client-s3":"3.354.0","@aws-sdk/lib-storage":"3.354.0","@aws-sdk/abort-controller":"3.347.0","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@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","cbor-x":"1.5.3",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.17.10","fast-glob":"3.2.12",fastify:"~4.21.0","fastify-plugin":"~4.5.1","fs-extra":"11.1.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.0",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.6.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4",msgpackr:"1.9.6",nats:"2.14.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.0",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.1",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.1","stream-chain":"2.2.5","stream-json":"1.7.5",systeminformation:"5.18.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",yaml:"2.3.1"},devDependencies:{axios:"0.27.2",chai:"4.3.7","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":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",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"},lmdb:{msgpackr:"1.8.4"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}}}});var Yr=f((mY,JE)=>{"use strict";var TY=require("fs-extra"),RY=p();JE.exports={version:YI,printVersion:KI,nodeVersion:$I};var lr=Us();function YI(){if(lr)return lr.version}o(YI,"version");function $I(){if(lr&&lr.engines&&lr.engines["preferred-node"])return lr.engines["preferred-node"]}o($I,"nodeVersion");function KI(){lr&&console.log(`HarperDB Version ${lr.version}`)}o(KI,"printVersion")});var ed=f((gY,zE)=>{"use strict";var XE=require("semver/functions/major"),WI=require("semver/functions/satisfies"),ZE=Us(),In=process.versions&&process.versions.node?process.versions.node:void 0;zE.exports=QI;function QI(){let e=ZE.engines.node,t=ZE.engines["preferred-node"];if(In){if(e&&!WI(In,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${In}. Please install a version of Node.js that is withing the defined range.`};if(t&&XE(In)!==XE(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${In}. Some issues may occur with untested versions of Node.js.`}}}o(QI,"checkNodeVersion")});var i_=f((NY,td)=>{"use strict";var jI=require("util"),JI=require("path"),XI=require("child_process"),ZI=jI.promisify(XI.execFile),zI=1e3*1e3*10;td.exports={findPs:eC};async function eC(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await ZI("ps",["wwxo",`pid,${r}`],{maxBuffer:zI});for(let n of s.trim().split(`
5
5
  `).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:JI.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"])}))}o(eC,"findPs")});var de=f((IY,sd)=>{"use strict";var tC="__dbis__",rC="__environment_name__",sC="__dbi_defintion__",nC={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"},iC=["__createdtime__","__updatedtime__"],oC="\uFFFF",rd={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},aC=Object.values(rd);sd.exports={INTERNAL_DBIS_NAME:tC,DBI_DEFINITION_NAME:sC,SEARCH_TYPES:nC,TIMESTAMP_NAMES:iC,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:rC,TRANSACTIONS_DBI_NAMES_ENUM:rd,TRANSACTIONS_DBIS:aC,OVERFLOW_MARKER:oC}});var et=f((CY,Ed)=>{"use strict";var nd=T(),id=de(),od={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},ad=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cd={500:ad("There was an error processing your request."),400:"Invalid request"},cC=cd[od.INTERNAL_SERVER_ERROR],_C={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.`},uC={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},lC={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"},EC={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_ITERABLE:"ids must be iterable",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 ${id.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${id.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"},dC={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${nd.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 ${nd.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"},_d={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"},SC={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."},fC={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`},hC={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"},TC={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},RC={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`},ud={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.`},ld={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},mC={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."},AC={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},gC={..._d,...lC,..._C,...SC,...fC,...hC,...TC,...RC,...dC,...ud,...ld,...mC,...AC,...uC};Ed.exports={CHECK_LOGS_WRAPPER:ad,HDB_ERROR_MSGS:gC,DEFAULT_ERROR_MSGS:cd,DEFAULT_ERROR_RESP:cC,HTTP_STATUS_CODES:od,LMDB_ERRORS_ENUM:EC,AUTHENTICATION_ERROR_MSGS:_d,VALIDATION_ERROR_MSGS:ud,ITC_ERRORS:ld}});var J=f((LY,fd)=>{"use strict";var Ps=et(),pC=p(),NC=T(),Cn=class extends Error{constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,dd),this.http_resp_code=s||Ps.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ps.DEFAULT_ERROR_MSGS[s]?Ps.DEFAULT_ERROR_MSGS[s]:Ps.DEFAULT_ERROR_MSGS[Ps.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&pC[n](i)}};o(Cn,"HdbError");function dd(e,t,r,s=NC.LOG_LEVELS.ERROR,n=null,i=!1){if(Sd(e))return e;let a=new Cn(e,t,r,s,n);return i&&delete a.stack,a}o(dd,"handleHDBError");function Sd(e){return e.__proto__.constructor.name===Cn.name}o(Sd,"isHDBError");fd.exports={isHDBError:Sd,handleHDBError:dd,hdb_errors:Ps}});var O=f((MY,yd)=>{"use strict";var $r=require("path"),OC=require("fs-extra"),Re=p(),hd=require("fs-extra"),bn=require("os"),IC=require("net"),CC=require("recursive-iterator"),Te=T(),Ad=i_(),Td=require("papaparse"),io=require("moment"),{inspect:bC}=require("util"),Rd=require("is-number"),wY=require("lodash"),{hdb_errors:oo}=J(),gd=require("util").promisify(setTimeout),LC=100,yC=5,wC="",MC=4,md={true:!0,false:!1,undefined:null,null:null,NaN:NaN};yd.exports={isEmpty:qe,isEmptyOrZeroLength:Ot,arrayHasEmptyValues:PC,arrayHasEmptyOrZeroLengthValues:HC,buildFolderPath:BC,isBoolean:pd,errorizeMessage:DC,stripFileExtension:GC,autoCast:qC,autoCastJSON:Nd,autoCastJSONDeep:o_,removeDir:FC,compareVersions:xC,isCompatibleDataVersion:VC,escapeRawValue:kC,unescapeValue:YC,stringifyProps:$C,timeoutPromise:WC,isClusterOperation:jC,getClusterUser:XC,checkGlobalSchemaTable:JC,getHomeDir:Id,getPropsFilePath:KC,promisifyPapaParse:ZC,removeBOM:Cd,createEventPromise:zC,checkProcessRunning:eb,checkSchemaTableExist:tb,checkSchemaExists:bd,checkTableExists:Ld,getStartOfTomorrowInSeconds:rb,getLimitKey:sb,isObject:vC,isNotEmptyAndHasValue:UC,autoCasterIsNumberCheck:Od,backtickASTSchemaItems:nb,isPortTaken:QC,stopProcess:ib,createForkArgs:ob,autoCastBoolean:ab,async_set_timeout:gd,getTableHashAttribute:cb,doesSchemaExist:_b,doesTableExist:ub,stringifyObj:lb,ms_to_time:Eb,changeExtension:db,PACKAGE_ROOT:Te.PACKAGE_ROOT};function DC(e){return e instanceof Error?e:new Error(e)}o(DC,"errorizeMessage");function qe(e){return e==null}o(qe,"isEmpty");function UC(e){return!qe(e)&&(e||e===0||e===""||pd(e))}o(UC,"isNotEmptyAndHasValue");function Ot(e){return qe(e)||e.length===0||e.size===0}o(Ot,"isEmptyOrZeroLength");function PC(e){if(qe(e))return!0;for(let t=0;t<e.length;t++)if(qe(e[t]))return!0;return!1}o(PC,"arrayHasEmptyValues");function HC(e){if(Ot(e))return!0;for(let t=0;t<e.length;t++)if(Ot(e[t]))return!0;return!1}o(HC,"arrayHasEmptyOrZeroLengthValues");function BC(...e){try{return e.join($r.sep)}catch{console.error(e)}}o(BC,"buildFolderPath");function pd(e){return qe(e)?!1:e===!0||e===!1}o(pd,"isBoolean");function vC(e){return qe(e)?!1:typeof e=="object"}o(vC,"isObject");function GC(e){return Ot(e)?wC:e.slice(0,-MC)}o(GC,"stripFileExtension");function qC(e){return qe(e)||e===""||typeof e!="string"?e:md[e]!==void 0?md[e]:Od(e)===!0?Number(e):e}o(qC,"autoCast");function Nd(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Nd,"autoCastJSON");function o_(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=o_(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=o_(r);s!==r&&(e[t]=s)}return e}else return Nd(e)}o(o_,"autoCastJSONDeep");function Od(e){if(e.startsWith("0.")&&Rd(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Rd(e))}o(Od,"autoCasterIsNumberCheck");async function FC(e){if(Ot(e))throw new Error(`Directory path: ${e} does not exist`);try{await hd.emptyDir(e),await hd.remove(e)}catch(t){throw Re.error(`Error removing files in ${e} -- ${t}`),t}}o(FC,"removeDir");function xC(e,t){if(Ot(e)){Re.info("Invalid current version sent as parameter.");return}if(Ot(t)){Re.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),c=i.replace(s,"").split("."),_=Math.min(a.length,c.length);for(let u=0;u<_;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(xC,"compareVersions");function VC(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(VC,"isCompatibleDataVersion");function kC(e){if(qe(e))return e;let t=String(e);return t==="."?Te.UNICODE_PERIOD:t===".."?Te.UNICODE_PERIOD+Te.UNICODE_PERIOD:t.replace(Te.FORWARD_SLASH_REGEX,Te.UNICODE_FORWARD_SLASH)}o(kC,"escapeRawValue");function YC(e){if(qe(e))return e;let t=String(e);return t===Te.UNICODE_PERIOD?".":t===Te.UNICODE_PERIOD+Te.UNICODE_PERIOD?"..":String(e).replace(Te.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(YC,"unescapeValue");function $C(e,t){if(qe(e))return Re.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+bn.EOL}!Ot(s)&&s[0]===";"?r+=" "+s+n+bn.EOL:Ot(s)||(r+=s+"="+n+bn.EOL)}catch{Re.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o($C,"stringifyProps");function Id(){let e;try{e=bn.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(Id,"getHomeDir");function KC(){let e=$r.join(Id(),Te.HDB_HOME_DIR_NAME,Te.BOOT_PROPS_FILE_NAME);return OC.existsSync(e)||(e=$r.join(__dirname,"../","hdb_boot_properties.file")),e}o(KC,"getPropsFilePath");function WC(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(WC,"timeoutPromise");async function QC(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=IC.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(QC,"isPortTaken");function jC(e){try{return Te.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Re.error(`Error checking operation against cluster ops ${t}`)}return!1}o(jC,"isClusterOperation");function JC(e,t){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!global.hdb_schema[e]||!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(JC,"checkGlobalSchemaTable");function XC(e,t){if(qe(t)){Re.warn("No CLUSTERING_USER defined, clustering disabled");return}if(qe(e)||Ot(e)){Re.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){Re.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Re.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(XC,"getClusterUser");function ZC(){Td.parsePromise=function(e,t){return new Promise(function(r,s){Td.parse(e,{header:!0,transformHeader:Cd,chunk:t.bind(null,s),skipEmptyLines:!0,dynamicTyping:!0,error:s,complete:r})})}}o(ZC,"promisifyPapaParse");function Cd(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(Cd,"removeBOM");function zC(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Re.info(`Got cluster status event response: ${bC(n)}`);try{i.cancel()}catch{Re.error("Error trying to cancel timeout.")}s(n)})})}o(zC,"createEventPromise");async function eb(e){let t=!0,r=0;do await gd(LC*r++),(await Ad.findPs(e)).length>0&&(t=!1);while(t&&r<yC);if(t)throw new Error(`process ${e} was not started`)}o(eb,"checkProcessRunning");function tb(e,t){let r=bd(e);if(r)return r;let s=Ld(e,t);if(s)return s}o(tb,"checkSchemaTableExist");function bd(e){if(!global.hdb_schema[e])return oo.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(bd,"checkSchemaExists");function Ld(e,t){if(!global.hdb_schema[e][t])return oo.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Ld,"checkTableExists");function rb(){let e=io().utc().add(1,Te.MOMENT_DAYS_TAG).startOf(Te.MOMENT_DAYS_TAG).unix(),t=io().utc().unix();return e-t}o(rb,"getStartOfTomorrowInSeconds");function sb(){return io().utc().format("DD-MM-YYYY")}o(sb,"getLimitKey");function nb(e){try{let t=new CC(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){Re.error("Got an error back ticking items."),Re.error(t)}}o(nb,"backtickASTSchemaItems");async function ib(e){let t=bn.userInfo();(await Ad.findPs(e)).forEach(s=>{(t.uid==0||s.uid==t.uid)&&(process.kill(s.pid),Re.trace(`Following process was killed by stopProcess: ${s.cmd}`))})}o(ib,"stopProcess");function ob(e){return[e]}o(ob,"createForkArgs");function ab(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(ab,"autoCastBoolean");function cb(e,t){return global.hdb_schema?.[e]?.[t]?.hash_attribute}o(cb,"getTableHashAttribute");function _b(e){return global?.hdb_schema?.[e]!==void 0}o(_b,"doesSchemaExist");function ub(e,t){return global?.hdb_schema?.[e]?.[t]!==void 0}o(ub,"doesTableExist");function lb(e){try{return JSON.stringify(e)}catch{return e}}o(lb,"stringifyObj");function Eb(e){let t=io.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}o(Eb,"ms_to_time");function db(e,t){let r=$r.basename(e,$r.extname(e));return $r.join($r.dirname(e),r+t)}o(db,"changeExtension")});var a_=f((UY,wd)=>{"use strict";var Sb={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))},fb="certificate.pem",hb="privateKey.pem",Tb="ca.pem";wd.exports={CERTIFICATE_VALUES:Sb,CERTIFICATE_PEM_NAME:fb,PRIVATEKEY_PEM_NAME:hb,CA_PEM_NAME:Tb}});var Fe=f((PY,Md)=>{"use strict";var Le=require("validate.js");Le.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Le.validators.type.checks[t](e)?null:` must be a '${t}' value`};Le.validators.type.checks={Object:function(e){return Le.isObject(e)&&!Le.isArray(e)},Array:Le.isArray,Integer:Le.isInteger,Number:Le.isNumber,String:Le.isString,Date:Le.isDate,Boolean:function(e){return typeof e=="boolean"}};Le.validators.hasValidFileExt=function(e,t){return Le.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};Md.exports={validateObject:Rb,validateObjectAsync:mb,validateBySchema:Ab};function Rb(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Le(e,t,{format:"flat"});return r?new Error(r):null}o(Rb,"validateObject");async function mb(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Le.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(mb,"validateObjectAsync");function Ab(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(Ab,"validateBySchema")});var __=f((vY,Hd)=>{"use strict";var gb=require("fs-extra"),M=require("joi"),pb=require("os"),{boolean:Z,string:$t,number:ut,array:c_}=M.types(),{totalmem:Dd}=require("os"),Ln=require("path"),Nb=p(),co=O(),BY=a_(),Ob=T(),Ib=Fe(),Ud="log",Cb="custom_functions",bb="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Lb="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",yb="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",wb="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Mb="rootPath config parameter is undefined",Db="clustering.enabled config parameter is undefined",Kr=ut.min(0).required(),_o=c_.items({host:$t.required(),port:Kr}).empty(null),Er;Hd.exports={configValidator:Ub,routesValidator:qb,route_constraints:_o};function Ub(e){if(Er=e.rootPath,co.isEmpty(Er))throw Mb;let t=Z.required(),r=M.valid("production","development").required(),s=ut.min(1).max(1e3).empty(null).default(Gb),n=$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ao),i=M.custom(Pb).messages({"any.custom":"{:#label} {:#error}"}),a=$t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=M.string().empty(null).default(ao),_=M.custom(Hb).empty(null).default(ao),u=e.clustering?.enabled;if(co.isEmpty(u))throw Db;let l;return u===!0?l=M.object({enabled:t,hubServer:M.object({cluster:M.object({name:M.required().empty(null),network:M.object({port:Kr,routes:_o}).required()}).required(),leafNodes:M.object({network:M.object({port:Kr}).required()}).required(),network:M.object({port:Kr}).required()}).required(),leafServer:M.object({network:M.object({port:Kr,routes:_o}).required(),streams:M.object({maxAge:ut.min(120).allow(null).optional(),maxBytes:ut.min(1).allow(null).optional(),maxMsgs:ut.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:M.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Z.optional(),tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required(),verify:Z.optional()}),user:$t.optional().empty(null)}).required():l=M.object({enabled:t,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Z.required()})}).required(),M.object({clustering:l,customFunctions:M.object({enabled:t,network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}),nodeEnv:r,root:n,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:M.object({enabled:t}).required(),logging:M.object({file:Z.required(),level:M.valid("notify","fatal","error","warn","info","debug","trace"),rotation:M.object({enabled:Z.optional(),compress:Z.optional(),interval:$t.custom(vb).optional().empty(null),maxSize:$t.custom(Bb).optional().empty(null),path:$t.optional().empty(null).default(ao)}).required(),root:n,stdStreams:Z.required(),auditLog:Z.required()}).required(),operationsApi:M.object({authentication:M.object({operationTokenTimeout:M.required(),refreshTokenTimeout:M.required()}).required(),foreground:Z.required(),network:M.object({cors:Z.required(),corsAccessList:c_.required(),headersTimeout:ut.min(1).required(),https:Z.required(),keepAliveTimeout:ut.min(1).required(),port:Kr,timeout:ut.min(1).required()}).required(),nodeEnv:r,tls:M.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),http:M.object({threads:s}).required(),storage:M.object({writeAsync:Z.required(),overlappingSync:Z.optional(),caching:Z.optional(),compression:Z.optional(),noReadAhead:Z.optional(),path:_,prefetchWrites:Z.optional()}).required()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(Ub,"configValidator");function Pd(e){return gb.existsSync(e)?null:`Specified path ${e} does not exist.`}o(Pd,"doesPathExist");function Pb(e,t){if(e===null)return;let r=Pd(e);return r?t.message(r):e}o(Pb,"validatePemFile");function Hb(e,t){M.assert(e,$t.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Pd(e);if(r)return t.message(r)}o(Hb,"validatePath");function Bb(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(bb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yb):e}o(Bb,"validateRotationMaxSize");function vb(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Lb);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(wb):e}o(vb,"validateRotationInterval");function Gb(e,t){let r=t.state.path.join("."),s=pb.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Dd();return i=Math.round(Math.min(i,Dd())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Nb.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}o(Gb,"setDefaultThreads");function ao(e,t){if(!co.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(co.isEmpty(Er))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Ln.join(Er,Cb);case"logging.root":return Ln.join(Er,Ud);case"clustering.leafServer.streams.path":return Ln.join(Er,"clustering","leaf");case"storage.path":return Ln.join(Er,Ob.SCHEMA_DIR_NAME);case"logging.rotation.path":return Ln.join(Er,Ud);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(ao,"setDefaultRoot");function qb(e){let t=M.object({routes:_o});return Ib.validateBySchema({routes:e},t)}o(qb,"routesValidator")});var Ve=f((qY,$d)=>{"use strict";var rt=T(),xe=O(),_e=p(),{configValidator:Fb,routesValidator:Bd}=__(),tt=require("fs-extra"),xb=require("yaml"),It=require("path"),Vb=require("is-number"),Gd=require("properties-reader"),kb=require("lodash"),{handleHDBError:Yb}=J(),{HTTP_STATUS_CODES:$b,HDB_ERROR_MSGS:uo}=et(),Kb=require("minimist"),{SCHEMAS_PARAM_CONFIG:yn,CONFIG_PARAMS:dr,CONFIG_PARAM_MAP:Kt}=rt,Wb="Unable to get config value because config is uninitialized",Qb="Config successfully initialized",jb="Error backing up config file",Jb="Empty parameter sent to getConfigValue",qd=It.join(rt.PACKAGE_ROOT,"config","yaml",rt.HDB_DEFAULT_CONFIG_FILE),Xb="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",vd={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"},lo,Se;$d.exports={createConfigFile:Zb,getDefaultConfig:zb,getConfigValue:xd,initConfig:Vd,flattenConfig:Wr,updateConfigValue:kd,updateConfigObject:tL,getConfiguration:nL,setConfiguration:iL,readConfigFile:d_,getClusteringRoutes:oL,initOldConfig:Yd,getConfigFromFile:aL};function Zb(e){let t=Hs(qd);lo=Wr(t.toJSON());let r;for(let a in e){let c=Kt[a.toLowerCase()];if(c===dr.SCHEMAS){r=e[a];continue}if(c!==void 0){let _=c.split("_"),u=u_(c,e[a]);try{t.setIn([..._],u)}catch(l){_e.error(l)}}}r&&Fd(t,r),E_(t);let s=t.toJSON();Se=Wr(s);let n=t.getIn(["rootPath"]),i=It.join(n,rt.HDB_CONFIG_FILE);tt.createFileSync(i),tt.writeFileSync(i,String(t)),_e.trace(`Config file written to ${i}`)}o(Zb,"createConfigFile");function Fd(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!xe.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(yn.TABLES))for(let i in s[n][yn.TABLES])for(let a in s[n][yn.TABLES][i]){let c=s[n][yn.TABLES][i][a],_=[dr.SCHEMAS,n,yn.TABLES,i,a];e.hasIn(_)?e.setIn(_,c):e.addIn(_,c)}else for(let i in s[n]){let a=s[n][i],c=[dr.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(s){_e.error("Error parsing schemas CLI/env config arguments",s)}}o(Fd,"setSchemasConfig");function zb(e){if(lo===void 0){let r=Hs(qd);lo=Wr(r.toJSON())}let t=Kt[e.toLowerCase()];if(t!==void 0)return lo[t.toLowerCase()]}o(zb,"getDefaultConfig");function xd(e){if(xe.isEmpty(e)){_e.error(Jb);return}if(Se===void 0){_e.trace(Wb);return}let t=Kt[e.toLowerCase()];if(t!==void 0)return Se[t.toLowerCase()]}o(xd,"getConfigValue");function l_(e){let t=Kb(process.argv);return t.ROOTPATH?It.join(t.ROOTPATH,rt.HDB_CONFIG_FILE):Gd(e).get(rt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(l_,"getConfigFilePath");function Vd(e=!1){if(Se===void 0||e){let t=xe.getPropsFilePath();try{tt.accessSync(t,tt.constants.F_OK|tt.constants.R_OK)}catch(i){throw _e.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}let r=l_(t),s;if(r.includes("config/settings.js"))try{Yd(r);return}catch(i){if(i.code!==rt.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hs(r)}catch(i){if(i.code===rt.NODE_ERROR_CODES.ENOENT){_e.trace(`HarperDB config file not found at ${r}.
6
- This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eL(s,r),E_(s);let n=s.toJSON();if(Se=Wr(n),Se.logging_rotation_rotate)for(let i in vd)Se[i]&&_e.error(`Config ${vd[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(Qb)}}o(Vd,"initConfig");function eL(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],It.join(r,rt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],It.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],It.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),tt.writeFileSync(t,String(e)))}o(eL,"checkForUpdatedConfig");function E_(e){let t=e.toJSON(),r=Fb(t);if(r.error)throw uo.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(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}o(E_,"validateConfig");function tL(e,t){Se===void 0&&(Se={});let r=Kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}Se[r.toLowerCase()]=t}o(tL,"updateConfigObject");function kd(e,t,r=void 0,s=!1,n=!1){Se===void 0&&Vd();let i=xd(Kt.hdb_root),a=It.join(i,rt.HDB_CONFIG_FILE),c=Hs(a),_;if(r===void 0&&e.toLowerCase()===dr.SCHEMAS)_=t;else if(r===void 0){let E=Kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=u_(E,t);c.setIn([...d],S)}else for(let E in r){let d=Kt[E.toLowerCase()];if(d===dr.SCHEMAS){_=r[E];continue}if(d!==void 0){let S=d.split("_"),R=u_(d,r[E]);try{c.setIn([...S],R)}catch(m){_e.error(m)}}}_&&Fd(c,_),E_(c);let u=c.getIn(["rootPath"]),l=It.join(u,rt.HDB_CONFIG_FILE);s===!0&&rL(a,u),tt.writeFileSync(l,String(c)),n&&(Se=Wr(c.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(kd,"updateConfigValue");function rL(e,t){try{let r=It.join(t,"backup",`${rt.HDB_CONFIG_FILE}.bak`);tt.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(jb),_e.error(r)}}o(rL,"backupConfigFile");var sL=["schemas"];function Wr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!sL.includes(r)){let s=Wr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(Wr,"flattenConfig");function u_(e,t){if(e===dr.CLUSTERING_NODENAME||e===dr.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(Vb(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xe.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 xe.autoCast(t)}o(u_,"castConfigValue");function nL(){let e=xe.getPropsFilePath(),t=l_(e);return Hs(t).toJSON()}o(nL,"getConfiguration");async function iL(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kd(void 0,void 0,n,!0),Xb}catch(i){throw typeof i=="string"||i instanceof String?Yb(i,i,$b.BAD_REQUEST,void 0,void 0,!0):i}}o(iL,"setConfiguration");function d_(){let e=xe.getPropsFilePath();try{tt.accessSync(e,tt.constants.F_OK|tt.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=l_(e);return Hs(t).toJSON()}o(d_,"readConfigFile");function Hs(e){return xb.parseDocument(tt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Hs,"parseYamlDoc");function oL(){let e=d_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xe.isEmptyOrZeroLength(t)?[]:t;let r=Bd(t);if(r)throw uo.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=xe.isEmptyOrZeroLength(s)?[]:s;let n=Bd(s);if(n)throw uo.CONFIG_VALIDATION(n.message);if(!xe.isEmptyOrZeroLength(s)&&!xe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(c=>c.host===a.host&&c.port===a.port));if(!xe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw uo.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(oL,"getClusteringRoutes");function Yd(e){let t=Gd(e);Se={};for(let r in Kt){let s=t.get(r.toUpperCase());if(xe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Kt[r].toLowerCase();n===dr.LOGGING_ROOT?Se[n]=It.dirname(s):Se[n]=s}return Se}o(Yd,"initOldConfig");function aL(e){let t=d_();return kb.get(t,e.replaceAll("_","."))}o(aL,"getConfigFromFile")});var H=f((xY,Wd)=>{"use strict";var S_=require("fs-extra"),Ct=require("path"),cL=require("os"),_L=require("properties-reader"),wn=p(),Bs=O(),L=T(),Eo=Ve(),uL="Error initializing environment manager",So="BOOT_PROPS_FILE_PATH",Kd=!1,lL={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Wt={};Wd.exports={BOOT_PROPS_FILE_PATH:So,getHdbBasePath:EL,setHdbBasePath:dL,get:SL,initSync:hL,setProperty:G,initTestEnvironment:TL};function EL(){return Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(EL,"getHdbBasePath");function dL(e){Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(dL,"setHdbBasePath");function SL(e){let t=Eo.getConfigValue(e);return t===void 0?Wt[e]:t}o(SL,"get");function G(e,t){lL[e]&&(Wt[e]=t),Eo.updateConfigObject(e,t)}o(G,"setProperty");function fL(){let e;try{e=Bs.getPropsFilePath(),S_.accessSync(e,S_.constants.F_OK|S_.constants.R_OK),Kd=!0;let t=_L(e);return Wt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Wt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Wt[So]=e,!0}catch{return wn.trace(`Environment manager found no properties file at ${e}`),!1}}o(fL,"doesPropFileExist");function hL(e=!1){try{(Kd||fL())&&(Eo.initConfig(e),Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Eo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wn.error(uL),wn.error(t),console.error(t),process.exit(1)}}o(hL,"initSync");function TL(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,_=Ct.join(__dirname,"../../","unitTests");Wt[So]=Ct.join(_,"hdb_boot_properties.file"),G(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ct.join(_,"settings.test")),G(L.HDB_SETTINGS_NAMES.INSTALL_USER,cL.userInfo().username),G(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.HDB_SETTINGS_NAMES.CERT_KEY,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),G(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ct.join(_,"envDir","log")),G(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),G(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),G(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ct.join(_,"envDir")),G(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Bs.isEmpty(n)?!0:n),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Bs.isEmpty(n)?!0:n),G(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),G(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Bs.isEmpty(i)?!1:i),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Bs.isEmpty(i)?!1:i),G(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),G(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ct.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),G(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Bs.isEmpty(c)?!1:c),a&&(G("CORS_ACCESSLIST",a),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(G(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(G(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(G(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${So}. Please check your boot props and settings files`;wn.fatal(r),wn.error(t)}}o(TL,"initTestEnvironment")});var ke=f((YY,jd)=>{"use strict";var{platform:kY}=require("os"),RL="nats-server.zip",f_="nats-server",mL=process.platform==="win32"?`${f_}.exe`:f_,h_="HDB",AL=/^[^\s.,*>]+$/,Qd="__request__",gL=o(e=>`${e}.${Qd}`,"REQUEST_SUBJECT"),pL={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},NL={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},OL={HUB:"hub.pid",LEAF:"leaf.pid"},IL={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CL={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:h_,deliver_subject:"__HDB__.WORKQUEUE"},bL={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:h_,deliver_subject:"HDB.SCHEMAQUEUE"},LL={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:h_,deliver_subject:"HDB.USERQUEUE"},yL={SUCCESS:"success",ERROR:"error"},wL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ML={TXN:"txn",MSGID:"msgid"},vs={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},DL={[vs.ERR]:1,[vs.WRN]:2,[vs.INF]:3,[vs.DBG]:4,[vs.TRC]:5},UL={debug:"-D",trace:"-DVV"};jd.exports={NATS_SERVER_ZIP:RL,NATS_SERVER_NAME:f_,NATS_BINARY_NAME:mL,PID_FILES:OL,NATS_CONFIG_FILES:NL,SERVER_SUFFIX:IL,WORK_QUEUE_CONSUMER_NAMES:CL,SCHEMA_QUEUE_CONSUMER_NAMES:bL,USER_QUEUE_CONSUMER_NAMES:LL,NATS_TERM_CONSTRAINTS_RX:AL,REQUEST_SUFFIX:Qd,UPDATE_REMOTE_RESPONSE_STATUSES:yL,CLUSTER_STATUS_STATUSES:wL,REQUEST_SUBJECT:gL,SUBJECT_PREFIXES:ML,MSG_HEADERS:pL,LOG_LEVELS:vs,LOG_LEVEL_FLAGS:UL,LOG_LEVEL_HIERARCHY:DL}});var Xd=f((KY,Jd)=>{"use strict";var PL=ke(),fo=class{constructor(t,r,s,n,i,a,c,_,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+PL.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:a,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c,verify:_}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(fo,"HubConfigObject");Jd.exports=fo});var eS=f((QY,zd)=>{"use strict";var Zd=ke(),ho=class{constructor(t,r,s,n,i,a,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Zd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Zd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};o(ho,"LeafConfigObject");zd.exports=ho});var rS=f((JY,tS)=>{"use strict";var To=class{constructor(t,r){this.user=t,this.password=r}};o(To,"HdbUserObject");tS.exports=To});var nS=f((ZY,sS)=>{"use strict";var HL=ke(),Ro=class{constructor(t,r){this.user=t+HL.SERVER_SUFFIX.ADMIN,this.password=r}};o(Ro,"SysUserObject");sS.exports=Ro});var Gs=f((e$,aS)=>{"use strict";var oS=O(),iS=T(),Ao=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,T_=require("joi"),mo={schema_format:{pattern:Ao,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BL=T_.alternatives(T_.string().min(1).max(mo.schema_length.maximum).pattern(Ao).messages({"string.pattern.base":"{:#label} "+mo.schema_format.message}),T_.number()).required();function vL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mo.schema_length.maximum?`'${e}' maximum of 250 characters`:Ao.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(vL,"checkValidTable");function GL(e,t){return oS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(GL,"validateSchemaExists");function qL(e,t){let r=t.state.ancestors[0].schema;return oS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(qL,"validateTableExists");function FL(e,t){return e.toLowerCase()===iS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${iS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(FL,"validateSchemaName");aS.exports={common_validators:mo,schema_regex:Ao,hdb_schema_table:BL,validateSchemaExists:GL,validateTableExists:qL,validateSchemaName:FL,checkValidTable:vL}});var m_=f((r$,_S)=>{var{hdb_schema_table:cS}=Gs(),xL=Fe(),R_=require("joi"),VL={undefined:"undefined",null:"null"},kL=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||VL[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),YL=R_.object({schema:cS,table:cS,records:R_.array().items(R_.object().custom(kL)).required()});_S.exports=function(e){return xL.validateBySchema(e,YL)}});var A_=f((n$,uS)=>{"use strict";var go=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")}};o(go,"BridgeMethods");uS.exports=go});var Sr=f((c$,hS)=>{"use strict";var lS=et().LMDB_ERRORS_ENUM,o$=require("lmdb"),$L=de(),a$=require("buffer").Buffer,{OVERFLOW_MARKER:ES,MAX_SEARCH_KEY_LENGTH:po}=$L,dS=["number","string","symbol","boolean","bigint"];function KL(e){if(e=e?.database||e,!e)throw new Error(lS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(lS.INVALID_ENVIRONMENT)}o(KL,"validateEnv");function WL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(WL,"stringifyData");function QL(e){return e instanceof Date?e.valueOf():e}o(QL,"convertKeyValueToWrite");function jL(e){if(e==null)return;if(dS.includes(typeof e))return e.length>po?[e.slice(0,po)+ES]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];dS.includes(typeof n)&&(n.length>po?t.push(n.slice(0,po)+ES):t.push(n))}}return t}o(jL,"getIndexedValues");var No=0,SS=0;function fS(){SS=Date.now()-performance.now()}o(fS,"adjustStartTime");fS();var JL=6e4;setInterval(fS,JL).unref();function XL(){let e=performance.now()+SS;return e>No?(No=e,e):(No+=488e-6,No)}o(XL,"getNextMonotonicTime");hS.exports={validateEnv:KL,stringifyData:WL,convertKeyValueToWrite:QL,getNextMonotonicTime:XL,getIndexedValues:jL}});var RS=f((u$,TS)=>{"use strict";var Oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Oo,"DBIDefinition");TS.exports=Oo});var gS=f((E$,AS)=>{"use strict";var g_=H(),mS=T();g_.initSync();var ZL=g_.get(mS.CONFIG_PARAMS.STORAGE_COMPRESSION),zL=g_.get(mS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Io=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Io,"OpenDBIObject");AS.exports=Io});var OS=f((S$,NS)=>{"use strict";var qs=H(),Mn=T();qs.initSync();var ey=qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",pS=qs.get(Mn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ty=qs.get(Mn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Co=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ey,pS!==void 0&&(this.overlappingSync=pS),this.noReadAhead=ty}};o(Co,"OpenEnvironmentObject");NS.exports=Co});var k=f((h$,MS)=>{"use strict";var p_=require("lmdb"),st=require("fs-extra"),lt=require("path"),Lo=Sr(),IS=p(),fe=et().LMDB_ERRORS_ENUM,yo=RS(),N_=gS(),CS=OS(),fr=de(),Et=fr.INTERNAL_DBIS_NAME,bS=fr.DBI_DEFINITION_NAME,ry="data.mdb",sy="lock.mdb",Dn=".mdb",ny="-lock",bo=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[fr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new p_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(bo,"TransactionCursor");function O_(e,t){if(e===void 0)throw new Error(fe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fe.ENV_NAME_REQUIRED)}o(O_,"pathEnvNameValidation");async function I_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(fe.INVALID_BASE_PATH):s}try{let s=lt.join(e,t+Dn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(lt.join(e,t,ry),st.constants.R_OK|st.constants.F_OK),lt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(fe.INVALID_ENVIRONMENT)}else throw new Error(fe.INVALID_ENVIRONMENT);throw s}}o(I_,"validateEnvironmentPath");function wo(e,t){if(Lo.validateEnv(e),t===void 0)throw new Error(fe.DBI_NAME_REQUIRED)}o(wo,"validateEnvDBIName");async function iy(e,t,r=!1,s=!1){O_(e,t),t=t.toString();try{return await I_(e,t,s),C_(e,t,r)}catch(n){if(n.message===fe.INVALID_ENVIRONMENT){let i=lt.join(e,t);await st.mkdirp(s?i:e);let a=new CS(s?i:i+Dn,!1),c=p_.open(a);c.dbis=Object.create(null);let _=new N_(!1);c.openDB(Et,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=b_(e,t,r);return c[fr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}o(iy,"createEnvironment");async function oy(e,t,r,s=!0){let n=await C_(e,t);if(r===void 0)throw new Error(fe.DESTINATION_PATH_REQUIRED);try{await st.access(lt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(fe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(oy,"copyEnvironment");async function C_(e,t,r=!1){O_(e,t),t=t.toString();let s=b_(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 I_(e,t),i=lt.join(e,t+Dn),a=n!=i,c=new CS(n,a),_=p_.open(c);_.dbis=Object.create(null);let u=yS(_);for(let l=0;l<u.length;l++)nt(_,u[l]);return _[fr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}o(C_,"openEnvironment");async function ay(e,t,r=!1){O_(e,t),t=t.toString();let s=lt.join(e,t+Dn),n=await I_(e,t);if(global.lmdb_map!==void 0){let i=b_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await LS(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+ny:lt.join(lt.dirname(n),sy))}o(ay,"deleteEnvironment");async function LS(e){Lo.validateEnv(e);let t=e[fr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(LS,"closeEnvironment");function b_(e,t,r=!1){let n=`${lt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(b_,"getCachedEnvironmentName");function cy(e){Lo.validateEnv(e);let t=Object.create(null),r=nt(e,Et);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Et)try{t[s]=Object.assign(new yo,n)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(cy,"listDBIDefinitions");function yS(e){Lo.validateEnv(e);let t=[],r=nt(e,Et);for(let{key:s}of r.getRange({start:!1}))s!==Et&&t.push(s);return t}o(yS,"listDBIs");function _y(e,t){let s=nt(e,Et).getEntry(t),n=new yo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(_y,"getDBIDefinition");function wS(e,t,r,s=!1){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===fe.DBI_DOES_NOT_EXIST){let i=new N_(r,s===!0),a=e.openDB(t,i),c=new yo(r===!0,s);return a[bS]=c,nt(e,Et).putSync(t,c),e.dbis[t]=a,a}throw n}}o(wS,"createDBI");function nt(e,t){if(wo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Et?r=_y(e,t):r=new yo,r===void 0)throw new Error(fe.DBI_DOES_NOT_EXIST);let s;try{let n=new N_(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(fe.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}o(nt,"openDBI");function uy(e,t){wo(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[fr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(uy,"statDBI");async function ly(e,t){try{let r=lt.join(e,t+Dn);return(await st.stat(r)).size}catch{throw new Error(fe.INVALID_ENVIRONMENT)}}o(ly,"environmentDataSize");function Ey(e,t){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Et).removeSync(t)}o(Ey,"dropDBI");function dy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===fe.DBI_DOES_NOT_EXIST)wS(e,n,n!==t,n===t);else throw i}}}o(dy,"initializeDBIs");MS.exports={openDBI:nt,openEnvironment:C_,createEnvironment:iy,listDBIs:yS,listDBIDefinitions:cy,createDBI:wS,dropDBI:Ey,statDBI:uy,deleteEnvironment:ay,initializeDBIs:dy,TransactionCursor:bo,environmentDataSize:ly,copyEnvironment:oy,closeEnvironment:LS}});var US=f((R$,DS)=>{"use strict";var Mo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Mo,"InsertRecordsResponseObject");DS.exports=Mo});var HS=f((A$,PS)=>{"use strict";var Do=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Do,"UpdateRecordsResponseObject");PS.exports=Do});var vS=f((p$,BS)=>{"use strict";var Uo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Uo,"UpsertRecordsResponseObject");BS.exports=Uo});var jr=f((b$,FS)=>{"use strict";var Sy=k(),fy=US(),hy=HS(),Ty=vS(),bt=Sr(),Un=et().LMDB_ERRORS_ENUM,Ry=de(),Qt=T(),my=O(),Ay=require("uuid"),O$=require("lmdb"),{handleHDBError:gy,hdb_errors:py}=J(),{OVERFLOW_MARKER:I$,MAX_SEARCH_KEY_LENGTH:C$}=Ry,GS=H();GS.initSync();var Po=GS.get(Qt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),L_=Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qr=Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ny(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new fy,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];qS(u,!0,n);let l=Oy(e,t,r,u),E=u[t];a.push(l),c.push(E)}return w_(a,c,s,i,n)}o(Ny,"insertRecords");function Oy(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let c=s[a];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Qt.FUNC_VAL],s[a]=c)}let _=bt.getIndexedValues(c),u=e.dbis[a];if(_){Po&&u.prefetch(_.map(l=>({key:l,value:n})),Ho);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}Po&&e.dbis[t].prefetch([n],Ho),e.dbis[t].put(n,s,s[Qr])})}o(Oy,"insertRecord");function Iy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(Iy,"removeSkippedRecords");function qS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Qr]))&&(e[Qr]=r||(r=bt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[L_]))&&(e[L_]=r||bt.getNextMonotonicTime()):delete e[L_]}o(qS,"setTimestamps");function y_(e,t,r){r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Sy.initializeDBIs(e,t,r)}o(y_,"initializeTransaction");async function Cy(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new hy,a=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=M_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}c.push(d),_.push(E)}return w_(c,_,s,i,n,a)}o(Cy,"updateRecords");async function by(e,t,r,s,n=bt.getNextMonotonicTime()){try{D_(e,t,r,s)}catch(_){throw gy(_,_.message,py.HTTP_STATUS_CODES.BAD_REQUEST)}y_(e,t,r);let i=new Ty,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;my.isEmpty(u[t])?(l=Ay.v4(),u[t]=l):l=u[t];let E=M_(e,t,u,l,i,!1,n);a.push(E),c.push(l)}return w_(a,c,s,i,n)}o(by,"upsertRecords");async function w_(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let c=0,_=a.length;c<_;c++)a[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||bt.getNextMonotonicTime(),Iy(r,i),s}o(w_,"finalizeWrite");function M_(e,t,r,s,n,i=!1,a){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(qS(r,!l,a),Number.isInteger(r[Qr])&&u[Qr]>r[Qr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let B=m([[u]]);Array.isArray(B)&&(m=B[0][Qt.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=bt.getIndexedValues($);if(A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.remove(A[B],s)}if(A=bt.getIndexedValues(m),A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.put(A[B],s)}}let S=Object.assign({},u,r);c.put(s,S,S[Qr])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:M_(e,t,r,s,n,i,a))}o(M_,"updateUpsertRecord");function Ly(e,t,r){if(bt.validateEnv(e),t===void 0)throw new Error(Un.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Un.WRITE_ATTRIBUTES_REQUIRED):new Error(Un.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(Ly,"validateBasic");function D_(e,t,r,s){if(Ly(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Un.RECORDS_REQUIRED):new Error(Un.RECORDS_MUST_BE_ARRAY)}o(D_,"validateWrite");function Ho(){}o(Ho,"noop");FS.exports={insertRecords:Ny,updateRecords:Cy,upsertRecords:by}});var K=f((y$,KS)=>{"use strict";var Gn=T(),yy=O(),ye=H(),qn=require("path"),wy=require("minimist"),xS=require("fs-extra"),VS=require("lodash");ye.initSync();var{CONFIG_PARAMS:hr,SCHEMAS_PARAM_CONFIG:Pn,SYSTEM_SCHEMA_NAME:Bo}=Gn,Hn,Bn,vn;function kS(){if(Hn!==void 0)return Hn;if(ye.getHdbBasePath()!==void 0)return Hn=ye.get(hr.STORAGE_PATH)||qn.join(ye.getHdbBasePath(),Gn.SCHEMA_DIR_NAME),Hn}o(kS,"getBaseSchemaPath");function YS(){if(Bn!==void 0)return Bn;if(ye.getHdbBasePath()!==void 0)return Bn=$S(Bo),Bn}o(YS,"getSystemSchemaPath");function My(){if(vn!==void 0)return vn;if(ye.getHdbBasePath()!==void 0)return vn=ye.get(Gn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||qn.join(ye.getHdbBasePath(),Gn.TRANSACTIONS_DIR_NAME),vn}o(My,"getTransactionAuditStoreBasePath");function Dy(e,t){let r=ye.get(hr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||qn.join(My(),e.toString())}o(Dy,"getTransactionAuditStorePath");function $S(e,t){e=e.toString(),t=t&&t.toString();let r=ye.get(Gn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||qn.join(kS(),e)}o($S,"getSchemaPath");function Uy(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,wy(process.argv));let s=r[hr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!yy.isObject(s))throw a;i=s}for(let a of i){let c=a[Bo];if(!c)continue;let _=ye.get(hr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[Pn.PATH];if(u)return VS.set(_,[Bo,Pn.TABLES,t,Pn.PATH],u),ye.setProperty(hr.SCHEMAS,_),u;let l=c?.[Pn.PATH];if(l)return VS.set(_,[Bo,Pn.PATH],l),ye.setProperty(hr.SCHEMAS,_),l}}let n=r[hr.STORAGE_PATH.toUpperCase()];if(n){if(!xS.pathExistsSync(n))throw new Error(n+" does not exist");let i=qn.join(n,e);return xS.mkdirsSync(i),ye.setProperty(hr.STORAGE_PATH,n),i}return YS()}o(Uy,"initSystemSchemaPaths");function Py(){Hn=void 0,Bn=void 0,vn=void 0}o(Py,"resetPaths");KS.exports={getBaseSchemaPath:kS,getSystemSchemaPath:YS,getTransactionAuditStorePath:Dy,getSchemaPath:$S,initSystemSchemaPaths:Uy,resetPaths:Py}});var jt=f((M$,Hy)=>{Hy.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 U_=f((D$,WS)=>{var{common_validators:Tr}=Gs(),Fn=Fe(),dt="is required",W={schema:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},table:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},hash_attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length}};function xn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(xn,"makeAttributesStrings");function By(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(By,"schema_object");function vy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(vy,"table_object");function Gy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence={message:dt},Fn.validateObject(e,W)}o(Gy,"create_table_object");function qy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence={message:dt},W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(qy,"attribute_object");function Fy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(Fy,"describe_table");function xy(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`)}}o(xy,"validateTableResidence");WS.exports={schema_object:By,create_table_object:Gy,table_object:vy,attribute_object:qy,describe_table:Fy,validateTableResidence:xy}});var jS=f((P$,QS)=>{"use strict";var Vy=require("uuid"),vo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vy.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(vo,"CreateAttributeObject");QS.exports=vo});var qo=f((B$,JS)=>{"use strict";var ky=jS(),Go=class extends ky{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Go,"LMDBCreateAttributeObject");JS.exports=Go});var ZS=f((G$,XS)=>{"use strict";XS.exports=$y;var Yy="inserted";function $y(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o($y,"returnObject")});var Fo=f((F$,sf)=>{"use strict";var Ky=T(),P_=k(),Wy=jr(),{getSystemSchemaPath:Qy,getSchemaPath:jy}=K(),Jy=jt(),Xy=U_(),Zy=qo(),zy=ZS(),{handleHDBError:zS,hdb_errors:tf}=J(),ef=O(),{HTTP_STATUS_CODES:ew}=tf,H_=Jy.hdb_attribute,rf=[];for(let e=0;e<H_.attributes.length;e++)rf.push(H_.attributes[e].attribute);var tw="inserted";sf.exports=rw;async function rw(e){let t=Xy.attribute_object(e);if(t)throw zS(new Error,t.message,tf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ef.checkGlobalSchemaTable(e.schema,e.table);if(r)throw zS(new Error,r,ew.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ef.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Zy(e.schema,e.table,e.attribute,e.id);try{let i=await P_.openEnvironment(jy(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);P_.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await P_.openEnvironment(Qy(),Ky.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await Wy.insertRecords(a,H_.hash_attribute,rf,[n]);return zy(tw,c,{records:[n]},_)}catch(i){throw i}}o(rw,"lmdbCreateAttribute")});var xo=f((k$,of)=>{"use strict";var Jt=O(),nf=p(),V$=m_();of.exports=sw;function sw(e){if(Jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Jt.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(Jt.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(a=>{if(i&&Jt.isEmptyOrZeroLength(a[r]))throw nf.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Jt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw nf.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Jt.isEmpty(a[r])&&a[r]!==""&&s.has(Jt.autoCast(a[r]))&&(a.skip=!0),s.add(Jt.autoCast(a[r]));for(let c in a)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(sw,"insertUpdateValidate")});var ko=f(($$,af)=>{"use strict";var nw=T().OPERATIONS_ENUM,Vo=class{constructor(t,r,s,n,i=void 0){this.operation=nw.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Vo,"InsertObject");af.exports=Vo});var $o=f((Q$,cf)=>{"use strict";var W$=ko(),Yo=T(),v_=O(),B_=p(),iw=require("uuid"),{handleHDBError:Vn,hdb_errors:ow}=J(),{HDB_ERROR_MSGS:kn,HTTP_STATUS_CODES:Yn}=ow;cf.exports=aw;function aw(e,t,r){for(let n=0;n<t.length;n++)cw(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_w(i,r,e.operation)}}o(aw,"processRows");function cw(e){if(Buffer.byteLength(String(e))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vn(new Error,kn.ATTR_NAME_LENGTH_ERR(e),Yn.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(e)||v_.isEmpty(e.trim()))throw Vn(new Error,kn.ATTR_NAME_NULLISH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(cw,"validateAttribute");function _w(e,t,r){if(!e.hasOwnProperty(t)||v_.isEmptyOrZeroLength(e[t])){if(r===Yo.OPERATIONS_ENUM.INSERT||r===Yo.OPERATIONS_ENUM.UPSERT){e[t]=iw.v4();return}throw B_.error("Update transaction aborted due to record with no hash value:",e),Vn(new Error,kn.RECORD_MISSING_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw B_.error(e),Vn(new Error,kn.HASH_VAL_LENGTH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw B_.error(e),Vn(new Error,kn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(_w,"validateHash")});var uf=f((J$,_f)=>{"use strict";var Ko=class{constructor(t,r){this.type=t,this.message=r}};o(Ko,"ITCEventObject");_f.exports=Ko});var Wo=f((Z$,df)=>{var uw=require("crypto"),lf=9;function lw(e){let t=dw(lf),r=Ef(e+t);return t+r}o(lw,"createHash");function Ew(e,t){let r=e.substr(0,lf),s=r+Ef(t+r);return e===s}o(Ew,"validateHash");function dw(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}o(dw,"generateSalt");function Ef(e){return uw.createHash("md5").update(e).digest("hex")}o(Ef,"md5");df.exports={hash:lw,validate:Ew}});var ff=f((eK,Sf)=>{"use strict";var Rr=T(),$n=class{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o($n,"BaseLicense");var Qo=class extends $n{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a,c=!1){super(t,r,s,n,i,a),this.enterprise=c}};o(Qo,"ExtendedLicense");Sf.exports={BaseLicense:$n,ExtendedLicense:Qo}});var Vs=f((rK,gf)=>{"use strict";var xs=require("fs-extra"),hf=Wo(),Tf=require("crypto"),Sw=require("moment"),fw=require("uuid").v4,me=p(),q_=require("path"),hw=O(),Ye=T(),Tw=ff().ExtendedLicense,Fs="invalid license key format",Rw="061183",mw="mofi25",Aw="aes-256-cbc",gw=16,pw=32,Rf=H();Rf.initSync();var G_;gf.exports={validateLicense:mf,generateFingerPrint:Ow,licenseSearch:Af,getLicense:bw};function F_(){return q_.join(Rf.getHdbBasePath(),Ye.LICENSE_KEY_DIR_NAME,Ye.LICENSE_FILE_NAME)}o(F_,"getLicenseDirPath");function Nw(){let e=F_();return q_.join(e,Ye.LICENSE_FILE_NAME)}o(Nw,"getLicenseFilePath");function x_(){let e=F_();return q_.join(e,Ye.REG_KEY_FILE_NAME)}o(x_,"getFingerPrintFilePath");async function Ow(){let e=x_();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Iw();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Ow,"generateFingerPrint");async function Iw(){let e=fw(),t=hf.hash(e),r=x_();try{await xs.mkdirp(F_()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(Iw,"writeFingerprint");function mf(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ye.STORAGE_TYPES_ENUM.LMDB,api_call:Ye.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ye.RAM_ALLOCATION_ENUM.DEFAULT,version:Ye.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=x_(),n=!1;try{n=xs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(mw),c=a[1];c=Buffer.concat([Buffer.from(c)],gw);let _=Buffer.concat([Buffer.from(i)],pw),u=Tf.createDecipheriv(Aw,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=Cw(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fs),me.error(Fs),new Error(Fs)}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(Fs),me.error(Fs),new Error(Fs)}else r.exp_date=l;r.exp_date<Sw().valueOf()&&(r.valid_date=!1),hf.validate(a[1],`${Rw}${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||me.error("Invalid licence"),r}o(mf,"validateLicense");function Cw(e,t){try{let r=Tf.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Cw,"checkOldLicense");function Af(){let e=new Tw;e.api_call=0;let t=[];try{t=xs.readFileSync(Nw(),"utf-8").split(Ye.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(hw.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mf(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){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ye.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ye.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT),G_=e,e}o(Af,"licenseSearch");async function bw(){return G_||await Af(),G_}o(bw,"getLicense")});var Xr=f((nK,W_)=>{"use strict";var{Worker:Lw,MessageChannel:yw,parentPort:Xt,isMainThread:Of,threadId:ww,workerData:Mw}=require("worker_threads"),{PACKAGE_ROOT:Dw}=T(),{join:Uw,isAbsolute:Pw,extname:Hw}=require("path"),{totalmem:pf}=require("os"),$_=T(),If=H(),Bw=Vs(),jo=p(),vw=T();If.initSync();var Gw=If.get($_.CONFIG_PARAMS.HTTP_THREADS)||1,qw=1024*1024,mr=[],Jr=[],Fw=50,Cf=1e4,bf="restart",Lf="request_thread_info",yf="resource_report",wf="thread_info",Mf="added-port",V_;W_.exports={startWorker:k_,restartWorkers:K_,shutdownWorkers:Vw,workers:mr,setMonitorListener:Ww,onMessageFromWorkers:kw,broadcast:Yw};function k_(e,t={}){let s=Bw.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||pf();n=Math.min(n,pf());let i=Math.min(Math.max(Math.floor(n/qw/(1+Gw/4)),512),s||1/0),a=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Jr){let{port1:l,port2:E}=new yw;u.postMessage({type:Mf,port:l},[l]),c.push(E)}Hw(e)||(e+=".js");let _=new Lw(Pw(e)?e:Uw(Dw,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:a},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Jo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{k_(e,t)},_.on("error",u=>{console.error("Worker error:",u),jo.error("Worker error:",u)}),_.on("exit",u=>{mr.splice(mr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<Fw?(t.unexpectedRestarts=_.unexpectedRestarts+1,k_(e,t)):jo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===bf&&K_(u.workerType),u.type===Lf&&$w(_),u.type===yf&&Kw(_,u)}),mr.push(_),jw(),t.onStarted&&t.onStarted(_),_.name=t.name,_}o(k_,"startWorker");var xw=[$_.THREAD_TYPES.HTTP];async function K_(e=null,t=2,r=!0){if(Of){t<1&&(t=t*mr.length);let s=[];for(let n of mr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:$_.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=xw.indexOf(n.name)>-1,a=new Promise(c=>{let _=setTimeout(()=>n.terminate(),Cf*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),c()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Xt.postMessage({type:bf,workerType:e})}o(K_,"restartWorkers");function Vw(e){return K_(e,1/0,!1)}o(Vw,"shutdownWorkers");var Df=[];function kw(e){Df.push(e)}o(kw,"onMessageFromWorkers");function Yw(e){for(let t of Jr)try{t.postMessage(e)}catch(r){jo.error("Unable to send message to worker",r)}}o(Yw,"broadcast");function $w(e){e.postMessage({type:wf,workers:Uf()})}o($w,"sendThreadInfo");function Uf(){let e=Date.now();return mr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(Uf,"getChildWorkerInfo");function Kw(e,t){e.resources=t,e.resources.updated=Date.now()}o(Kw,"recordResourceReport");var Y_;function Ww(e){Y_=e}o(Ww,"setMonitorListener");var Qw=1e3,Nf=!1;function jw(){Nf||(Nf=!0,setInterval(()=>{for(let e of mr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Y_&&Y_()},Qw).unref())}o(jw,"startMonitoring");var Jw=1e3;if(Xt){Jo(Xt);for(let e of Mw.addPorts)Jo(e);setInterval(()=>{let e=process.memoryUsage();Xt.postMessage({type:yf,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Jw).unref(),V_=o(()=>new Promise((e,t)=>{Xt.on("message",r),Xt.postMessage({type:Lf});function r(s){s.type===wf&&(Xt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else V_=Uf;W_.exports.getThreadInfo=V_;function Jo(e,t){Jr.push(e),e.on("message",r=>{if(r.type===Mf)Jo(r.port);else for(let s of Df)s(r)}).on("close",()=>{Jr.splice(Jr.indexOf(e),1)}).on("exit",()=>{Jr.splice(Jr.indexOf(e),1)}),t||e.unref()}o(Jo,"addPort");Of||Xt.on("message",async e=>{let{type:t}=e;t===vw.ITC_EVENT_TYPES.SHUTDOWN&&(Xt.unref(),setTimeout(()=>{jo.warn("Thread did not voluntarily terminate",ww),process.exit(0)},Cf).unref())})});var Bf=f((oK,Hf)=>{"use strict";var Q_=k(),Xw=p(),Pf=et().LMDB_ERRORS_ENUM;Hf.exports=Zw;async function Zw(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Q_.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==Pf.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Q_.closeEnvironment(global.lmdb_map[s]),await Q_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Pf.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){Xw.error(t)}}o(Zw,"cleanLMDBMap")});var jf=f((_K,Qf)=>{"use strict";var j_=require("recursive-iterator"),zw=require("alasql"),J_=require("clone"),vf=O(),{handleHDBError:Gf,hdb_errors:eM}=J(),{HDB_ERROR_MSGS:qf,HTTP_STATUS_CODES:Ff}=eM,tM=["DISTINCT_ARRAY"],xf=Symbol("validateTables"),X_=Symbol("validateTable"),cK=Symbol("getAllColumns"),Vf=Symbol("validateAllColumns"),Xo=Symbol("findColumn"),kf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),Z_=Symbol("validateColumn"),Yf=Symbol("setColumnsForTable"),$f=Symbol("checkColumnsForAsterisk"),Kf=Symbol("validateGroupBy"),Wf=Symbol("hasColumns"),Zo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xf](),this[$f](),this[Vf]()}[xf](){if(this[Wf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[X_](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[X_](t.table)})}}[Wf](){let t=!1,r=new j_(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[X_](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gf(new Error,qf.SCHEMA_NOT_FOUND(t.databaseid),Ff.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gf(new Error,qf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ff.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=J_(s);n.table=J_(t),this.attributes.push(n)})}[Xo](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)}[$f](){let t=new j_(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yf](r.tableid)}[Yf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new zw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Kf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new j_(t),n=[];for(let{node:i,path:a}of s)!vf.isEmpty(i)&&!vf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kf](i):n.push(this[Z_](i)));return n}[Kf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=J_(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Xo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[Xo](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,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`}[kf](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[Z_](t)}[Z_](t){let r=this[Xo](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]}};o(Zo,"SelectValidator");Qf.exports=Zo});var zf=f((lK,Zf)=>{"use strict";var Jf=require("lodash"),Wn=require("mathjs"),rM=require("jsonata"),Xf=O();Zf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jf.uniqWith(e,Jf.isEqual):e,searchJSON:sM,mad:Qn.bind(null,Wn.mad),mean:Qn.bind(null,Wn.mean),mode:Qn.bind(null,Wn.mode),prod:Qn.bind(null,Wn.prod),median:Qn.bind(null,Wn.median)};function Qn(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}o(Qn,"aggregateFunction");function sM(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(Xf.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Xf.isEmpty(this.__ala__.res[r])){let s=rM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(sM,"searchJSON")});var th=f((dK,eh)=>{"use strict";var re=require("moment"),z_="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;eh.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(z_),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(z_),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(z_)}});var ih=f((SK,nh)=>{"use strict";var nM=require("@turf/area"),iM=require("@turf/length"),oM=require("@turf/circle"),aM=require("@turf/difference"),cM=require("@turf/distance"),_M=require("@turf/boolean-contains"),uM=require("@turf/boolean-equal"),lM=require("@turf/boolean-disjoint"),EM=require("@turf/helpers"),rh=T(),U=O();nh.exports={geoArea:dM,geoLength:SM,geoCircle:fM,geoDifference:hM,geoDistance:sh,geoNear:TM,geoContains:RM,geoEqual:mM,geoCrosses:AM,geoConvert:gM};var eu="geo1 is required",tu="geo2 is required";function dM(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),nM.default(e)}o(dM,"geoArea");function SM(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),iM.default(e,{units:t||"kilometers"})}o(SM,"geoLength");function fM(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),oM.default(e,t,{units:r||"kilometers"})}o(fM,"geoCircle");function hM(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),aM(e,t)}o(hM,"geoDifference");function sh(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),cM.default(e,t,{units:r||"kilometers"})}o(sh,"geoDistance");function TM(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return sh(e,t,s)<=r}o(TM,"geoNear");function RM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),_M.default(e,t)}o(RM,"geoContains");function mM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),uM.default(e,t)}o(mM,"geoEqual");function AM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!lM.default(e,t)}o(AM,"geoCrosses");function gM(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(rh.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rh.GEO_CONVERSION_ENUM).join(",")}`);return EM[t](e,r)}o(gM,"geoConvert")});var ah=f((hK,oh)=>{var Zr=zf(),$e=th(),Lt=ih();oh.exports=e=>{e.aggr.mad=e.aggr.MAD=Zr.mad,e.aggr.mean=e.aggr.MEAN=Zr.mean,e.aggr.mode=e.aggr.MODE=Zr.mode,e.aggr.prod=e.aggr.PROD=Zr.prod,e.aggr.median=e.aggr.MEDIAN=Zr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=$e.current_date,e.fn.current_time=e.fn.CURRENT_TIME=$e.current_time,e.fn.extract=e.fn.EXTRACT=$e.extract,e.fn.date=e.fn.DATE=$e.date,e.fn.date_format=e.fn.DATE_FORMAT=$e.date_format,e.fn.date_add=e.fn.DATE_ADD=$e.date_add,e.fn.date_sub=e.fn.DATE_SUB=$e.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=$e.date_diff,e.fn.now=e.fn.NOW=$e.now,e.fn.offset_utc=e.fn.OFFSET_UTC=$e.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=$e.get_server_time,e.fn.getdate=e.fn.GETDATE=$e.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=$e.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Lt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Lt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Lt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Lt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Lt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Lt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Lt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Lt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Lt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Lt.geoNear}});var uh=f((TK,_h)=>{"use strict";var jn=require("lodash"),he=require("alasql");he.options.cache=!1;var pM=ah(),ch=require("clone"),zo=require("recursive-iterator"),y=p(),D=O(),ks=zr(),NM=T(),{hdb_errors:OM}=J(),IM="IS NULL",St="There was a problem performing this search. Please check the logs and try again.";pM(he);var ea=class{constructor(t,r){if(D.isEmpty(t))throw y.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(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(St)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(St)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(St)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(St)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(St)}}_getColumns(){let t=new zo(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(ch(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jn.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(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new zo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new he.yy.LogicValue({value:s}):r.right instanceof he.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new he.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new he.yy.LogicValue({value:i}):s instanceof he.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new he.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new zo(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(NM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.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&&jn.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(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.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(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await he.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.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(ch(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(D.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(IM)>-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=jn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=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===a&&(_=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await ks.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}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 ks.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.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 R=await ks.getDataByValue(c,S.operation);if(_)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ks.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(St)}}}_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 he.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,a=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===a});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 he.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new he.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 he.yy.FuncValue:new he.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 R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],c={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),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}`,R=this._convertColumnsToIndexes(S,n);d=await he.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=jn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new zo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&s.push(a)}}s=jn.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){throw y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(St)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},_=await ks.getDataByHash(c),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=_.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.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(a=>{let c=a.aggregatorid?a.expression:a,_=a.aggregatorid?a.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();y.trace(`Final SQL: ${n}`),s=await he.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.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 y.error(OM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.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((a,c)=>{let _=n[i],u=new RegExp(`${_}.\`${a}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let _=new RegExp(`\`${a}\``,"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 a=await ks.getDataByValue(i);for(let[c,_]of a)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]]=_[s.attribute]}catch(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(St)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(ea,"SQLSearch");_h.exports=ea});var es=f((mK,Eh)=>{"use strict";var CM=jf();Eh.exports={searchByConditions:wM,searchByHash:MM,searchByValue:DM,search:UM};var ru=zr(),lh=require("util"),bM=lh.callbackify(ru.searchByHash),LM=lh.callbackify(ru.searchByValue),yM=uh();async function wM(e){return ru.searchByConditions(e)}o(wM,"searchByConditions");function MM(e,t){try{bM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(MM,"searchByHash");function DM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),LM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(DM,"searchByValue");function UM(e,t){try{let r=new CM(e);r.validate(),new yM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(UM,"search")});var Xn=f((gK,hh)=>{"use strict";var Jn=require("crypto"),Sh="aes-256-cbc",PM=32,HM=16,su=64,fh=32,BM=su+fh,dh=new Map;hh.exports={encrypt:vM,decrypt:GM,createNatsTableStreamName:qM};function vM(e){let t=Jn.randomBytes(PM),r=Jn.randomBytes(HM),s=Jn.createCipheriv(Sh,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=n.toString("hex");return i+a+c}o(vM,"encrypt");function GM(e){let t=e.substr(0,su),r=e.substr(su,fh),s=e.substr(BM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Jn.createDecipheriv(Sh,Buffer.from(t,"hex"),n),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(GM,"decrypt");function qM(e,t){let r=`${e}.${t}`,s=dh.get(r);return s||(s=Jn.createHash("md5").update(`${e}.${t}`).digest("hex"),dh.set(r,s)),s}o(qM,"createNatsTableStreamName")});var iu=f((OK,Th)=>{"use strict";var FM=T(),NK=Sr();function nu(e,t){let r=Object.create(null);if(t.length===1&&FM.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}o(nu,"parseRow");function xM(e,t,r,s){let n=nu(r,e);s.push(n)}o(xM,"searchAll");function VM(e,t,r,s){let n=nu(r,e);s[t]=n}o(VM,"searchAllToMap");function kM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(kM,"iterateDBI");function ts(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(ts,"pushResults");function YM(e,t,r,s,n,i){t.toString().endsWith(e)&&ts(t,r,s,n,i)}o(YM,"endsWith");function $M(e,t,r,s,n,i){t.toString().includes(e)&&ts(t,r,s,n,i)}o($M,"contains");function KM(e,t,r,s,n,i){t>e&&ts(t,r,s,n,i)}o(KM,"greaterThanCompare");function WM(e,t,r,s,n,i){t>=e&&ts(t,r,s,n,i)}o(WM,"greaterThanEqualCompare");function QM(e,t,r,s,n,i){t<e&&ts(t,r,s,n,i)}o(QM,"lessThanCompare");function jM(e,t,r,s,n,i){t<=e&&ts(t,r,s,n,i)}o(jM,"lessThanEqualCompare");Th.exports={parseRow:nu,searchAll:xM,searchAllToMap:VM,iterateDBI:kM,endsWith:YM,contains:$M,greaterThanCompare:KM,greaterThanEqualCompare:WM,lessThanCompare:QM,lessThanEqualCompare:jM,pushResults:ts}});var ss=f((yK,Oh)=>{"use strict";var Ar=k(),CK=p(),Ke=Sr(),ta=de(),ee=et().LMDB_ERRORS_ENUM,bK=O(),JM=T(),ra=iu(),{parseRow:XM}=ra,LK=require("lmdb"),{OVERFLOW_MARKER:Rh,MAX_SEARCH_KEY_LENGTH:ZM}=ta;function mh(e,t,r,s=!1,n=void 0,i=void 0){return rs(e,t,r,(a,c)=>c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(mh,"iterateFullIndex");function Zn(e,t,r,s,n,i=!1,a=void 0,c=void 0,_=!1,u=!1){return rs(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return S===r?(A.values=!1,E.getRange(A).map(B=>({value:B}))):E.getRange(A)})}o(Zn,"iterateRangeBetween");function rs(e,t,r,s){let n=e.database||e,i=Ar.openDBI(n,r);i[ta.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ar.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=s(a,i,n,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(rs,"setupTransaction");function Ah(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(Rh)){if(!n)if(r)n=Ar.openDBI(e,r);else{let _=Ar.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Ar.openDBI(e,_[u]),!n[ta.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(Ah,"getOverflowCheck");function zM(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return rs(e,t,t,(a,c,_)=>(sa(r),r=zn(_,r),c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>XM(u.value,r))))}o(zM,"searchAll");function eD(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);sa(r),r=zn(e.database||e,r);let a=new Map;for(let{key:c,value:_}of mh(e,t,t,s,n,i))a.set(c,ra.parseRow(_,r));return a}o(eD,"searchAllToMap");function tD(e,t,r=!1,s=void 0,n=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=mh(e,void 0,t,r,s,n),c=a.transaction,_=Ah(c.database,c,void 0,t);for(let{key:u,value:l}of a){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(tD,"iterateDBI");function rD(e,t){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Ar.statDBI(e,t).entryCount}o(rD,"countAll");function sD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,t,r,(c,_,u,l)=>(s=Ke.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(sD,"equals");function nD(e,t,r){return gr(e,t,r),Ar.openDBI(e,t).getValuesCount(r)}o(nD,"count");function iD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,null,r,(c,_)=>{s=Ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(iD,"startsWith");function oD(e,t,r,s,n=!1,i=void 0,a=void 0){return gh(e,t,r,s,n,i,a,!0)}o(oD,"endsWith");function gh(e,t,r,s,n=!1,i=void 0,a=void 0,c=!1){return gr(e,r,s),rs(e,null,r,(_,u,l,E)=>{let d=Ah(l,_,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(Rh)?u.getValues(S,{transaction:_}).map(m=>{let b=d(S,m);if(c?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(c?R.endsWith(s):R.includes(s))?u[ta.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:_}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(gh,"contains");function aD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!0,!1)}o(aD,"greaterThan");function cD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!1,!1)}o(cD,"greaterThanEqual");function _D(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!0)}o(_D,"lessThan");function uD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!1)}o(uD,"lessThanEqual");function lD(e,t,r,s,n,i=!1,a=void 0,c=void 0){if(Ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=Ke.convertKeyValueToWrite(s),n=Ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Zn(e,t,r,s,n,i,a,c)}o(lD,"between");function ED(e,t,r,s){Ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),r=zn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(a=ra.parseRow(c,r)),a}o(ED,"searchByHash");function dD(e,t,r){Ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(dD,"checkHashExists");function SD(e,t,r,s,n=[]){return Nh(e,t,r,s,n),ph(e,t,r,s,n).map(i=>i[1])}o(SD,"batchSearchByHash");function fD(e,t,r,s,n=[]){Nh(e,t,r,s,n);let i=new Map;for(let[a,c]of ph(e,t,r,s,n))i.set(a,c);return i}o(fD,"batchSearchByHashToMap");function ph(e,t,r,s,n=[]){return rs(e,t,t,(i,a,c)=>{r=zn(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ra.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(ph,"batchHashSearch");function Nh(e,t,r,s,n){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(Nh,"initializeBatchSearchByHash");function sa(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(sa,"validateFetchAttributes");function gr(e,t,r){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>ZM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(gr,"validateComparisonFunctions");function zn(e,t){return t.length===1&&JM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ar.listDBIs(e)),t}o(zn,"setGetWholeRowAttributes");Oh.exports={searchAll:zM,searchAllToMap:eD,count:nD,countAll:rD,equals:sD,startsWith:iD,endsWith:oD,contains:gh,searchByHash:ED,setGetWholeRowAttributes:zn,batchSearchByHash:SD,batchSearchByHashToMap:fD,checkHashExists:dD,iterateDBI:tD,greaterThan:aD,greaterThanEqual:cD,lessThan:_D,lessThanEqual:uD,between:lD}});var ti=f((MK,Dh)=>{"use strict";var Ch=es(),pr=p(),bh=U_(),hD=require("lodash"),TD=Xn(),Lh=O(),{promisify:yh}=require("util"),Q=T(),{handleHDBError:na,hdb_errors:RD}=J(),{HDB_ERROR_MSGS:ia,HTTP_STATUS_CODES:wh}=RD,mD=H();mD.initSync();var Ih=k(),AD=ss(),{getSchemaPath:gD}=K(),ei=yh(Ch.searchByValue),pD=yh(Ch.searchByHash),Ys="name",Mh="hash_attribute",ou="schema",ND="schema_table",OD="attribute";Dh.exports={describeAll:ID,describeTable:oa,describeSchema:bD};async function ID(e){try{let t=Lh.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ys,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Ys]},i=await ei(n),a={},c={};for(let d of i)a[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},u=await ei(_),l=[];for(let d of u)try{let S;if(t||s)S=await oa({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await oa({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){pr.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],a[l[d].schema]&&delete a[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],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return pr.error("Got an error in describeAll"),pr.error(t),na(new Error,ia.DESCRIBE_ALL_ERR)}}o(ID,"describeAll");async function oa(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={},a=bh.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ys,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},_=Array.from(await ei(c));if(!_||_.length===0)throw na(new Error,ia.TABLE_NOT_FOUND(e.schema,e.table),wh.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw na(new Error,ia.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:ND,search_value:r+"."+s,get_attributes:[OD]},E=Array.from(await ei(l));E=hD.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=CD(n)),i.attributes=E,i.clustering_stream_name=TD.createNatsTableStreamName(u.schema,u.name);try{let d=gD(i.schema,i.name),S=await Ih.openEnvironment(d,i.name),R=Ih.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of AD.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){pr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){pr.error(`There was an error getting attributes for table '${u.name}'`),pr.error(l)}return i}o(oa,"descTable");function CD(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(CD,"getAttrsByPerms");async function bD(e){let t=bh.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ou,search_value:s,hash_values:[],get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},i=Array.from(await ei(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ys]},c=Array.from(await pD(a));if(c&&c.length<1)throw na(new Error,ia.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Lh.isEmpty(_)||_.describe){let u=await oa({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(a[u.name]=u)}}catch(_){pr.error(`Error describing schema table '${e.schema}.${c}'`),pr.error(_)}})),a}}o(bD,"describeSchema")});var ns=f((UK,vh)=>{var $s=jt(),{callbackify:Hh,promisify:LD}=require("util");vh.exports={setSchemaDataToGlobal:Uh,getTableSchema:MD,getSystemSchema:UD,setSchemaDataToGlobalAsync:LD(Uh)};var Bh=ti(),yD=Hh(Bh.describeAll),wD=Hh(Bh.describeTable);function Uh(e){yD(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=$s),global.hdb_schema=r,e(null,null)})}o(Uh,"setSchemaDataToGlobal");function Ph(e,t){return e==="system"?$s[t]:global.hdb_schema[e][t]}o(Ph,"returnSchema");function MD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DD(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,Ph(e,t))}):r(null,Ph(e,t))}o(MD,"getTableSchema");function DD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=$s:global.hdb_schema={system:$s},r();return}wD(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:$s}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DD,"setTableDataToGlobal");function UD(){return $s}o(UD,"getSystemSchema")});var aa=f((HK,xh)=>{"use strict";var is=p(),We=T(),PD=Bf(),Gh=ns(),HD=ti(),BD=Nr(),{validateEvent:Fh}=os(),ri=zr(),vD=require("process"),GD={[We.ITC_EVENT_TYPES.SCHEMA]:qD,[We.ITC_EVENT_TYPES.USER]:xD};async function qD(e){let t=Fh(e);if(t){is.error(t);return}is.trace("ITC schemaHandler received schema event:",e),await PD(e.message),await FD(e.message)}o(qD,"schemaHandler");async function FD(e){try{if(ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await HD.describeTable({schema:e.schema,table:e.table});break;default:Gh.setSchemaDataToGlobal(qh);break}else Gh.setSchemaDataToGlobal(qh)}catch(t){is.error(t)}}o(FD,"syncSchemaMetadata");function qh(e){e&&is.error(e)}o(qh,"handleErrorCallback");async function xD(e){try{ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Fh(e);if(t){is.error(t);return}is.trace(`ITC userHandler ${We.HDB_ITC_CLIENT_PREFIX}${vD.pid} received user event:`,e),await BD.setUsersToGlobal()}catch(t){is.error(t)}}o(xD,"userHandler");xh.exports=GD});var os=f((FK,kh)=>{"use strict";var vK=p(),au=O(),VD=T(),{ITC_ERRORS:si}=et(),{parentPort:GK,threadId:kD,isMainThread:YD,workerData:qK}=require("worker_threads"),{onMessageFromWorkers:$D,broadcast:KD}=Xr();kh.exports={sendItcEvent:WD,validateEvent:Vh,SchemaEventMsg:QD,UserEventMsg:jD};var ca;$D(e=>{ca=ca||aa(),Vh(e),ca[e.type]&&ca[e.type](e)});function WD(e){!YD&&e.message&&(e.message.originator=kD),KD(e)}o(WD,"sendItcEvent");function Vh(e){if(typeof e!="object")return si.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||au.isEmpty(e.type))return si.MISSING_TYPE;if(!e.hasOwnProperty("message")||au.isEmpty(e.message))return si.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||au.isEmpty(e.message.originator))return si.MISSING_ORIGIN;if(VD.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return si.INVALID_EVENT(e.type)}o(Vh,"validateEvent");function QD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(QD,"SchemaEventMsg");function jD(e){this.originator=e}o(jD,"UserEventMsg")});var ni=f((kK,Wh)=>{"use strict";var Yh=T(),VK=O(),_a=p(),$h=uf(),Ks,{sendItcEvent:Kh}=os();function JD(e){try{_a.trace("signalSchemaChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.SCHEMA,e);Ks.schema(t),Kh(t)}catch(t){_a.error(t)}}o(JD,"signalSchemaChange");function XD(e){try{_a.trace("signalUserChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.USER,e);Ks.user(t),Kh(t)}catch(t){_a.error(t)}}o(XD,"signalUserChange");Wh.exports={signalSchemaChange:JD,signalUserChange:XD}});var ua=f(($K,jh)=>{"use strict";var Qh=O(),ZD=T(),zD=p(),eU=Fo(),tU=qo(),rU=ni(),{SchemaEventMsg:sU}=os(),nU="already exists in";jh.exports=iU;async function iU(e,t,r){if(Qh.isEmptyOrZeroLength(r))return r;let s=[];Qh.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 oU(e,t.schema,t.name,i)})),n}o(iU,"lmdbCheckForNewAttributes");async function oU(e,t,r,s){let n=new tU(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await aU(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(nU))zD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(oU,"createNewAttribute");async function aU(e){let t;return t=await eU(e),rU.signalSchemaChange(new sU(process.pid,ZD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(aU,"createAttribute")});var Ws=f((WK,Jh)=>{"use strict";var la=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}};o(la,"LMDBTransactionObject");Jh.exports=la});var Zh=f((jK,Xh)=>{"use strict";var cU=Ws(),_U=T().OPERATIONS_ENUM,Ea=class extends cU{constructor(t,r,s,n,i=void 0){super(_U.INSERT,r,s,n,i),this.records=t}};o(Ea,"LMDBInsertTransactionObject");Xh.exports=Ea});var eT=f((XK,zh)=>{"use strict";var uU=Ws(),lU=T().OPERATIONS_ENUM,da=class extends uU{constructor(t,r,s,n,i,a=void 0){super(lU.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(da,"LMDBUpdateTransactionObject");zh.exports=da});var rT=f((zK,tT)=>{"use strict";var EU=Ws(),dU=T().OPERATIONS_ENUM,Sa=class extends EU{constructor(t,r,s,n,i,a=void 0){super(dU.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(Sa,"LMDBUpsertTransactionObject");tT.exports=Sa});var nT=f((tW,sT)=>{"use strict";var SU=Ws(),fU=T().OPERATIONS_ENUM,fa=class extends SU{constructor(t,r,s,n,i=void 0){super(fU.DELETE,s,n,t,i),this.original_records=r}};o(fa,"LMDBDeleteTransactionObject");sT.exports=fa});var ii=f((nW,cT)=>{"use strict";var sW=require("path"),iT=k(),hU=Zh(),TU=eT(),RU=rT(),mU=nT(),Qs=de(),oT=O(),{CONFIG_PARAMS:AU}=T(),aT=H();aT.initSync();var ha=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:gU}=K();cT.exports=pU;async function pU(e,t){if(aT.get(AU.LOGGING_AUDITLOG)===!1)return;let r=gU(e.schema,e.table),s=await iT.openEnvironment(r,e.table,!0),n=NU(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){iT.initializeDBIs(s,Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qs.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),oT.isEmpty(n.user_name)||s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(pU,"writeTransaction");function NU(e,t){let r=oT.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ha.INSERT)return new hU(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPDATE)return new TU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPSERT)return new RU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.DELETE)return new mU(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(NU,"createTransactionObject")});var cu=f((aW,_T)=>{"use strict";var OU=xo(),oW=ko(),oi=T(),IU=$o(),CU=jr().insertRecords,bU=k(),LU=p(),yU=ua(),{getSchemaPath:wU}=K(),MU=ii();_T.exports=DU;async function DU(e){try{let{schema_table:t,attributes:r}=OU(e);IU(e,r,t.hash_attribute),e.schema!==oi.SYSTEM_SCHEMA_NAME&&(r.includes(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yU(e.hdb_auth_header,t,r),n=wU(e.schema,e.table),i=await bU.openEnvironment(n,e.table),a=await CU(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await MU(e,a)}catch(c){LU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(DU,"lmdbCreateRecords")});var ET=f((_W,lT)=>{"use strict";var uT=T(),UU=cu(),PU=ko(),HU=require("fs-extra"),{getSchemaPath:BU}=K();lT.exports=vU;async function vU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new PU(uT.SYSTEM_SCHEMA_NAME,uT.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await UU(r),await HU.mkdirp(BU(e.schema))}o(vU,"lmdbCreateSchema")});var ST=f((lW,dT)=>{"use strict";var Ta=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(Ta,"DeleteRecordsResponseObject");dT.exports=Ta});var lu=f((hW,TT)=>{"use strict";var fT=k(),_u=Sr(),uu=et().LMDB_ERRORS_ENUM,GU=de(),hT=p(),dW=O(),qU=require("lmdb"),FU=ST(),xU=T(),{OVERFLOW_MARKER:SW,MAX_SEARCH_KEY_LENGTH:fW}=GU,VU=xU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kU(e,t,r,s){if(_u.validateEnv(e),t===void 0)throw new Error(uu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uu.IDS_REQUIRED):new Error(uu.IDS_MUST_BE_ITERABLE);try{let n=fT.listDBIs(e);fT.initializeDBIs(e,t,n);let i=new FU,a,c=[],_=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[VU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,qU.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],B=R[$];if(B!=null)try{let Ee=_u.getIndexedValues(B);if(Ee)for(let ce=0,cr=Ee.length;ce<cr;ce++)A.remove(Ee[ce],a)}catch{hT.warn(`cannot delete from attribute: ${$}, ${B}:${a}`)}}});c.push(m),_.push(a),i.original_records.push(R)}catch(R){hT.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(c);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=_u.getNextMonotonicTime(),i}catch(n){throw n}}o(kU,"deleteRecords");TT.exports={deleteRecords:kU}});var ai=f((RW,mT)=>{"use strict";var js=O(),YU=lu(),$U=k(),{getSchemaPath:KU}=K(),WU=ii(),QU=p();mT.exports=jU;async function jU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(js.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(js.isEmptyOrZeroLength(e.hash_values)&&!js.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];js.isEmpty(_)||e.hash_values.push(_)}}if(js.isEmptyOrZeroLength(e.hash_values))return RT([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(js.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=KU(e.schema,e.table),i=await $U.openEnvironment(n,e.table),a=await YU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await WU(e,a)}catch(c){QU.error(`unable to write transaction due to ${c.message}`)}return RT(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(jU,"lmdbDeleteRecords");function RT(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}}o(RT,"createDeleteResponse")});var ci=f((gW,NT)=>{var AT=require("lodash"),gT=Fe(),x=require("joi"),JU=O(),{hdb_schema_table:ft,checkValidTable:pT}=Gs(),{handleHDBError:XU,hdb_errors:ZU}=J(),{HTTP_STATUS_CODES:zU}=ZU,AW=x.object({schema:ft,table:ft,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(ft).required()}),eP=x.object({schema:ft,table:ft,search_attribute:ft,search_value:x.any().required(),get_attributes:x.array().min(1).items(ft).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),tP=x.object({schema:ft,table:ft,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(ft).required(),conditions:x.array().min(1).items(x.object({search_attribute:ft,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});NT.exports=function(e,t){let r=null;switch(t){case"value":r=gT.validateBySchema(e,eP);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(pT("schema",e.schema)),i(pT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=gT.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=JU.checkGlobalSchemaTable(e.schema,e.table);if(n)return XU(new Error,n,zU.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=AT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!AT.some(a,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 Eu=f((NW,OT)=>{"use strict";var rP=k(),sP=ci(),{getSchemaPath:nP}=K();OT.exports=iP;function iP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP(e.schema,e.table);return rP.openEnvironment(r,e.table)}o(iP,"initialize")});var du=f((IW,IT)=>{"use strict";var oP=ss(),aP=Eu();IT.exports=cP;async function cP(e){let t=await aP(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oP.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(cP,"lmdbGetDataByHash")});var _i=f((bW,CT)=>{"use strict";var Ra=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ra,"SearchByHashObject");CT.exports=Ra});var LT=f((wW,bT)=>{"use strict";var yW=_i(),_P=ss(),uP=Eu();bT.exports=lP;async function lP(e){let t=await uP(e),r=global.hdb_schema[e.schema][e.table];return _P.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lP,"lmdbSearchByHash")});var ht=f((DW,yT)=>{"use strict";var ma=class{constructor(t,r,s,n,i,a,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=a,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};o(ma,"SearchObject");yT.exports=ma});var Aa=f((PW,HT)=>{"use strict";var Ae=ss(),EP=k(),dP=O(),I=de(),as=T(),SP=jt(),wT=et().LMDB_ERRORS_ENUM,{compareKeys:Js}=require("ordered-binary"),{getSchemaPath:fP}=K(),Zt=as.SEARCH_WILDCARDS;async function hP(e,t,r){let s;e.schema===as.SYSTEM_SCHEMA_NAME?s=SP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=PT(e,s.hash_attribute,r,t);return DT(e,n,s.hash_attribute,r)}o(hP,"prepSearch");async function DT(e,t,r,s){let n=fP(e.schema,e.table),i=await EP.openEnvironment(n,e.table),a=UT(i,e,t,r),c=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(RP(e,r)===!1){let l=e.search_attribute;if(l===r)return s?MT(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?MT(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(c,r,e.get_attributes,u):Ae.batchSearchByHash(c,r,e.get_attributes,u)}o(DT,"executeSearch");function UT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:c,offset:_}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;default:return Object.create(null)}return n}o(UT,"searchByType");function TP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Js(i,s[0])>=0&&Js(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>Js(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Js(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>Js(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Js(n[r],s)<=0;default:return Object.create(null)}}o(TP,"filterByType");function MT(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(MT,"createMapFromIterable");function RP(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}o(RP,"checkToFetchMore");function PT(e,t,r,s){if(dP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Zt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Zt[0])<0&&n.indexOf(Zt[1])<0)return c===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(Zt.indexOf(i)>=0&&Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(Zt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(Zt[0])||n.includes(Zt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(wT.UNKNOWN_SEARCH_TYPE)}else switch(s){case as.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case as.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case as.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case as.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case as.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wT.UNKNOWN_SEARCH_TYPE)}}o(PT,"createSearchTypeFromSearchObject");HT.exports={executeSearch:DT,createSearchTypeFromSearchObject:PT,prepSearch:hP,searchByType:UT,filterByType:TP}});var vT=f((vW,BT)=>{"use strict";var BW=ht(),mP=ci(),AP=O(),gP=T(),pP=Aa();BT.exports=NP;function NP(e,t){if(!AP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mP(e,"value");if(s)throw s;let n=!0;return pP.prepSearch(e,t,n)}o(NP,"lmdbGetDataByValue")});var Xs=f((FW,GT)=>{"use strict";var qW=ht(),OP=ci(),IP=O(),CP=T(),bP=Aa();GT.exports=LP;async function LP(e,t){if(!IP.isEmpty(t)&&CP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OP(e,"value");if(s)throw s;return bP.prepSearch(e,t,!1)}o(LP,"lmdbSearchByValue")});var FT=f((kW,qT)=>{"use strict";var VW=de(),ga=class{constructor(t,r,s,n,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=c}};o(ga,"SearchByConditionsObject");var pa=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(pa,"SearchCondition");var Na=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Na,"SortAttribute");qT.exports={SearchByConditionsObject:ga,SearchCondition:pa,SortAttribute:Na}});var $T=f((KW,YT)=>{"use strict";var $W=FT().SearchByConditionsObject,yP=ht(),wP=ci(),Su=ss(),Oa=de(),kT=Aa(),MP=iu(),DP=require("lodash"),{getSchemaPath:UP}=K(),xT=k(),{handleHDBError:PP,hdb_errors:HP}=J(),{HTTP_STATUS_CODES:BP}=HP,vP=1e8;YT.exports=GP;async function GP(e){let t=wP(e,"conditions");if(t)throw PP(t,t.message,BP.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=UP(e.schema,e.table),s=await xT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)xT.openDBI(s,u.search_attribute);let i=DP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Oa.SEARCH_TYPES.EQUALS?u.estimated_count=Su.count(s,u.search_attribute,u.search_value):l===Oa.SEARCH_TYPES.CONTAINS||l===Oa.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let c=await VT(a,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(kT.filterByType),E=l.length,d=Su.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(_=_.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(S=>MP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await VT(a,e,d,n.hash_attribute);c=c.concat(S)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Su.batchSearchByHash(a,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{a.done()},_}o(GP,"lmdbSearchByConditions");async function VT(e,t,r,s){let n=new yP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Oa.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,kT.searchByType(e,n,i,s).map(a=>a.value)}o(VT,"executeConditionSearch")});var Ca=f((QW,KT)=>{"use strict";var qP=T().OPERATIONS_ENUM,Ia=class{constructor(t,r,s,n=void 0){this.operation=qP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ia,"DeleteObject");KT.exports=Ia});var fu=f((JW,eR)=>{"use strict";var JT=ht(),XT=Ca(),ZT=Xs(),zT=ai(),we=T(),WT=O(),QT=k(),{getTransactionAuditStorePath:FP,getSchemaPath:xP}=K(),jT=p();eR.exports=VP;async function VP(e){try{if(WT.isEmpty(global.hdb_schema[e.schema])||WT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kP(e),await YP(e);let t=xP(e.schema,e.table);try{await QT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FP(e.schema,e.table);await QT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(VP,"lmdbDropTable");async function kP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ZT(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await zT(n)}o(kP,"deleteAttributesFromSystem");async function YP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ZT(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await zT(n)}catch(i){throw i}}o(YP,"dropTableFromSystem")});var rR=f((ZW,tR)=>{"use strict";var $P=require("fs-extra"),KP=ht(),WP=_i(),QP=Ca(),jP=fu(),JP=ai(),XP=du(),ZP=Xs(),zt=T(),{getSchemaPath:zP}=K(),{handleHDBError:eH,hdb_errors:tH}=J(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:sH}=tH;tR.exports=nH;async function nH(e){let t;try{t=await iH(e.schema);let r=new KP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await ZP(r));for(let a=0;a<s.length;a++){let c={schema:t,table:s[a].name};try{await jP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new QP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await JP(n);let i=zP(t);await $P.remove(i)}catch(r){throw r}}o(nH,"lmdbDropSchema");async function iH(e){let t=new WP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await XP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw eH(new Error,rH.SCHEMA_NOT_FOUND(e),sH.NOT_FOUND,void 0,void 0,!0);return s}o(iH,"validateDropSchema")});var La=f((e1,sR)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ba,"CreateTableObject");sR.exports=ba});var Tu=f((s1,nR)=>{"use strict";var oH=require("fs-extra"),ya=k(),{getTransactionAuditStorePath:aH}=K(),hu=de(),r1=La();nR.exports=cH;async function cH(e){let t;try{let r=aH(e.schema,e.table);await oH.mkdirp(r),t=await ya.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{ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ya.createDBI(t,hu.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}o(cH,"createTransactionsAuditEnvironment")});var pu=f((i1,aR)=>{"use strict";var Ru=T(),iR=k(),_H=jr(),{getSystemSchemaPath:uH,getSchemaPath:lH}=K(),EH=jt(),dH=Fo(),mu=qo(),SH=p(),fH=Tu(),gu=EH.hdb_table,oR=[];for(let e=0;e<gu.attributes.length;e++)oR.push(gu.attributes[e].attribute);aR.exports=hH;async function hH(e,t){let r=lH(t.schema,t.table),s=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iR.createEnvironment(r,t.table),e!==void 0){let a=await iR.openEnvironment(uH(),Ru.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _H.insertRecords(a,gu.hash_attribute,oR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Au(s),await Au(n),await Au(i)}await fH(t)}catch(a){throw a}}o(hH,"lmdbCreateTable");async function Au(e){try{await dH(e)}catch(t){SH.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Au,"createAttribute")});var _R=f((a1,cR)=>{"use strict";var TH=xo(),RH=$o(),mH=ua(),ui=T(),AH=jr().updateRecords,gH=k(),{getSchemaPath:pH}=K(),NH=ii(),OH=p();cR.exports=IH;async function IH(e){try{let{schema_table:t,attributes:r}=TH(e);RH(e,r,t.hash_attribute),e.schema!==ui.SYSTEM_SCHEMA_NAME&&(r.includes(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await mH(e.hdb_auth_header,t,r),n=pH(e.schema,e.table),i=await gH.openEnvironment(n,e.table),a=await AH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NH(e,a)}catch(c){OH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(IH,"lmdbUpdateRecords")});var lR=f((_1,uR)=>{"use strict";var CH=T().OPERATIONS_ENUM,wa=class{constructor(t,r,s,n=void 0){this.operation=CH.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(wa,"UpsertObject");uR.exports=wa});var dR=f((E1,ER)=>{"use strict";var l1=lR(),bH=xo(),LH=$o(),yH=ua(),li=T(),wH=jr().upsertRecords,MH=k(),{getSchemaPath:DH}=K(),UH=ii(),PH=p(),{handleHDBError:HH,hdb_errors:BH}=J();ER.exports=vH;async function vH(e){let t;try{t=bH(e)}catch(_){throw HH(_,_.message,BH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;LH(e,s,r.hash_attribute),e.schema!==li.SYSTEM_SCHEMA_NAME&&(s.includes(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await yH(e.hdb_auth_header,r,s),i=DH(e.schema,e.table),a=await MH.openEnvironment(i,e.table),c=await wH(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await UH(e,c)}catch(_){PH.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}}o(vH,"lmdbUpsertRecords")});var mR=f((S1,RR)=>{"use strict";var GH=ht(),SR=O(),fR=p(),qH=Xs(),hR=T(),FH=lu().deleteRecords,xH=k(),{getSchemaPath:VH}=K(),{promisify:kH}=require("util"),YH=kH(setTimeout),TR=1e4,$H=10;RR.exports=KH;async function KH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(SR.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 GH(e.schema,e.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await qH(n,hR.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw fR.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return SR.isEmptyOrZeroLength(s)?(fR.trace("No records found to delete"),{message:"No records found to delete"}):await WH(e,s,t)}o(KH,"lmdbDeleteRecordsBefore");async function WH(e,t,r){let s=VH(e.schema,e.table),n=await xH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,c=t.length;a<c;a+=TR){let _=t.slice(a,a+TR),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await FH(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 YH($H)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(WH,"chunkDeletes")});var gR=f((h1,AR)=>{"use strict";var Ma=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ma,"DeleteBeforeObject");AR.exports=Ma});var NR=f((R1,pR)=>{"use strict";var Da=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Da,"DeleteAuditLogsBeforeResults");pR.exports=Da});var CR=f((g1,IR)=>{"use strict";var Nu=k(),{getTransactionAuditStorePath:QH}=K(),A1=gR(),Ei=de(),jH=O(),OR=NR(),JH=require("util").promisify,XH=JH(setTimeout),ZH=1e4,zH=100;IR.exports=eB;async function eB(e){let t=QH(e.schema,e.table),r=await Nu.openEnvironment(t,e.table,!0),s=Nu.listDBIs(r);Nu.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new OR;do n=await tB(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 XH(zH);while(n.transactions_deleted>0);return i}o(eB,"deleteAuditLogsBefore");async function tB(e,t){let r=new OR;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=a[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];jH.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<a.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ZH)break}return await n,r}catch(s){throw s}}o(tB,"deleteTransactions")});var LR=f((N1,bR)=>{"use strict";var Ua=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(Ua,"DropAttributeObject");bR.exports=Ua});var wR=f((C1,yR)=>{"use strict";var rB=ht(),sB=Ca(),I1=LR(),yt=T(),nB=O(),Ou=k(),iB=jt(),oB=Xs(),aB=ai(),{getSchemaPath:cB}=K();yR.exports=_B;async function _B(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=iB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await lB(e),n=cB(e.schema,e.table),i=await Ou.openEnvironment(n,e.table);return t===!0&&await uB(e,i,r.hash_attribute),Ou.dropDBI(i,e.attribute),s}o(_B,"lmdbDropAttribute");async function uB(e,t,r){let s=Ou.openDBI(t,r),n,i=e.attribute;for(let{key:a,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(a,u,_)}await n}o(uB,"removeAttributeFromAllObjects");async function lB(e){let t=new rB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await oB(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(nB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new sB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return aB(i)}o(lB,"dropAttributeFromSystem")});var BR=f((y1,HR)=>{"use strict";var Iu=k(),Zs=de(),L1=Sr(),Cu=T(),MR=O(),{getTransactionAuditStorePath:EB}=K(),dB=ss(),Pa=Ws(),SB=p();HR.exports=fB;async function fB(e){let t=EB(e.schema,e.table),r=await Iu.openEnvironment(t,e.table,!0),s=Iu.listDBIs(r);Iu.initializeDBIs(r,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DR(r,e.search_values);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,TB(r,e.search_values,n);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return hB(r,e.search_values);default:return DR(r)}}o(fB,"readAuditLog");function DR(e,t=[0,Date.now()]){MR.isEmpty(t[0])&&(t[0]=0),MR.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Pa,n))}o(DR,"searchTransactionsByTimestamp");function hB(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,PR(e,i))}return Object.fromEntries(r)}o(hB,"searchTransactionsByUsername");function TB(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=dB.equals(e,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=PR(e,n),a=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);UR(_,"records",r,l,a),UR(_,"original_records",r,l,a)}return Object.fromEntries(a)}o(TB,"searchTransactionsByHashValues");function UR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],_=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 Pa(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Pa(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}o(UR,"loopRecords");function PR(e,t){let r=[];try{let s=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Pa,i);r.push(a)}}catch(i){SB.warn(i)}return r}catch(s){throw s}}o(PR,"batchSearchTransactions")});var GR=f((M1,vR)=>{"use strict";var{getSchemaPath:RB}=K(),mB=k();vR.exports={writeTransaction:AB};async function AB(e,t,r){let s=RB(e,t);return(await mB.openEnvironment(s,t)).transaction(r)}o(AB,"writeTransaction")});var VR=f((U1,xR)=>{"use strict";var{getSchemaPath:qR}=K(),FR=k();xR.exports={flush:gB,resetReadTxn:pB};async function gB(e,t){return(await FR.openEnvironment(qR(e,t),t.toString())).flushed}o(gB,"flush");async function pB(e,t){try{(await FR.openEnvironment(qR(e,t),t.toString())).resetReadTxn()}catch{}}o(pB,"resetReadTxn")});var $R=f((H1,YR)=>{"use strict";var NB=p(),{handleHDBError:OB}=J(),IB=A_(),CB=Fo(),bB=cu(),LB=ET(),yB=ai(),wB=du(),MB=LT(),DB=vT(),UB=Xs(),PB=$T(),HB=rR(),BB=pu(),vB=_R(),GB=dR(),qB=mR(),FB=CR(),xB=fu(),VB=wR(),kB=BR(),YB=GR(),kR=VR(),Ha=class extends IB{async searchByConditions(t){return PB(t)}async getDataByHash(t){return await wB(t)}async searchByHash(t){return await MB(t)}async getDataByValue(t,r){return await DB(t,r)}async searchByValue(t){return await UB(t)}async createSchema(t){return await LB(t)}async dropSchema(t){return await HB(t)}async createTable(t,r){return await BB(t,r)}async dropTable(t){return await xB(t)}async createAttribute(t){return await CB(t)}async createRecords(t){return await bB(t)}async updateRecords(t){return await vB(t)}async upsertRecords(t){try{return await GB(t)}catch(r){throw OB(r,null,null,NB.ERR,r)}}async deleteRecords(t){return await yB(t)}async deleteRecordsBefore(t){return await qB(t)}async dropAttribute(t){return await VB(t)}async deleteAuditLogsBefore(t){return await FB(t)}async readAuditLog(t){return await kB(t)}writeTransaction(t,r,s){return YB.writeTransaction(t,r,s)}flush(t,r){return kR.flush(t,r)}resetReadTxn(t,r){return kR.resetReadTxn(t,r)}};o(Ha,"LMDBBridge");YR.exports=Ha});var zr=f((v1,WR)=>{"use strict";var $B=$R(),KB=A_(),WB=H();WB.initSync();var KR;function QB(){return KR instanceof KB?KR:new $B}o(QB,"getBridge");WR.exports=QB()});var _s=f((q1,JR)=>{"use strict";var va=m_(),it=O(),jB=require("util"),Ga=zr(),JB=ns(),bu=p(),{handleHDBError:Or,hdb_errors:XB}=J(),{HTTP_STATUS_CODES:cs}=XB,ZB=jB.promisify(JB.getTableSchema),zB="updated",QR="inserted",jR="upserted";JR.exports={insert:tv,update:rv,upsert:sv,validation:ev,flush:nv};async function ev(e){if(it.isEmpty(e))throw new Error("invalid update parameters defined.");if(it.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(it.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ZB(e.schema,e.table),r=va(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&it.isEmptyOrZeroLength(c[s]))throw bu.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(!it.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw bu.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!it.isEmpty(c[s])&&c[s]!==""&&n.has(it.autoCast(c[s]))&&(c.skip=!0),n.add(it.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(ev,"validation");async function tv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.createRecords(e);return Ba(QR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(tv,"insertData");async function rv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.updateRecords(e);return it.isEmpty(s.existing_rows)?Ba(zB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ba(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(rv,"updateData");async function sv(e){if(e.operation!=="upsert")throw Or(new Error,"invalid operation, must be upsert",cs.INTERNAL_SERVER_ERROR);let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);try{let s=await Ga.upsertRecords(e);return Ba(jR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Or(s,null,null,bu.ERR,n)}}o(sv,"upsertData");function Ba(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===QR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===jR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Ba,"returnObject");function nv(e){return Ga.flush(e.schema,e.table)}o(nv,"flush")});var em=f((x1,zR)=>{var iv=Fe(),Lu=require("joi"),{hdb_schema_table:XR}=Gs(),ZR={schema:XR,table:XR},ov={date:Lu.date().iso().required()},av={timestamp:Lu.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};zR.exports=function(e,t){let r=t==="timestamp"?{...ZR,...av}:{...ZR,...ov},s=Lu.object(r);return iv.validateBySchema(e,s)}});var nm=f((V1,sm)=>{var cv=Fe(),tm=require("joi"),{hdb_schema_table:rm}=Gs(),_v=tm.object({schema:rm,table:rm,hash_values:tm.array().required()});sm.exports=function(e){return cv.validateBySchema(e,_v)}});var yu=f((k1,im)=>{"use strict";var qa=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(qa,"InsertObject");var Fa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Fa,"NoSQLSeachObject");var xa=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(xa,"DeleteResponseObject");im.exports={InsertObject:qa,NoSQLSeachObject:Fa,DeleteResponseObject:xa}});var Du=f(($1,um)=>{"use strict";var am=em(),uv=nm(),Va=O(),om=require("moment"),cm=p(),{promisify:lv,callbackify:Ev}=require("util"),us=T(),dv=ns(),wu=lv(dv.getTableSchema),Mu=zr(),{DeleteResponseObject:Sv}=yu(),{handleHDBError:Ir,hdb_errors:fv}=J(),{HDB_ERROR_MSGS:ka,HTTP_STATUS_CODES:Cr}=fv,hv="records successfully deleted",Tv=Ev(_m);um.exports={delete:Tv,deleteRecord:_m,deleteFilesBefore:Rv,deleteAuditLogsBefore:mv};async function Rv(e){let t=am(e,"date");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(!om(e.date,om.ISO_8601).isValid())throw Ir(new Error,ka.INVALID_DATE,Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_DATE,!0);let s=Va.checkSchemaTableExist(e.schema,e.table);if(s)throw Ir(new Error,s,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,s,!0);let n=await Mu.deleteRecordsBefore(e);if(await wu(e.schema,e.table),cm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(Rv,"deleteFilesBefore");async function mv(e){let t=am(e,"timestamp");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ir(new Error,ka.INVALID_VALUE("Timestamp"),Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_VALUE("Timestamp"),!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);let s=await Mu.deleteAuditLogsBefore(e);return await wu(e.schema,e.table),cm.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(mv,"deleteAuditLogsBefore");async function _m(e){let t=uv(e);if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);try{await wu(e.schema,e.table);let s=await Mu.deleteRecords(e);return Va.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hv}`),s}catch(s){if(s.message===us.SEARCH_NOT_FOUND_MESSAGE){let n=new Sv;return n.message=us.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(_m,"deleteRecord")});var Em=f((W1,lm)=>{var Uu=Fe(),ge={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 Av(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Uu.validateObject(e,ge)}o(Av,"addUserValidation");function gv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(gv,"alterUserValidation");function pv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(pv,"dropUserValidation");lm.exports={addUserValidation:Av,alterUserValidation:gv,dropUserValidation:pv}});var Nr=f((J1,bm)=>{"use strict";var Tm="username is required",Rm="nothing to update, must supply active, role or password to update",mm="password cannot be an empty string",Am="If role is specified, it cannot be empty.",gm="active must be true or false";bm.exports={addUser:wv,alterUser:Mv,dropUser:Uv,userInfo:Pv,listUsers:$a,listUsersExternal:Hv,setUsersToGlobal:di,findAndValidateUser:Gv,getClusterUser:qv,USERNAME_REQUIRED:Tm,ALTERUSER_NOTHING_TO_UPDATE:Rm,EMPTY_PASSWORD:mm,EMPTY_ROLE:Am,ACTIVE_BOOLEAN:gm};var pm=_s(),Nv=Du(),Hu=Wo(),Nm=Em(),Om=es(),Bu=ni(),Qe=O(),Im=require("validate.js"),w=p(),{promisify:vu}=require("util"),Gu=Xn(),dm=T(),Sm=ke(),Ov=Ve(),j1=H(),Iv=Vs(),Cv=jt(),{handleHDBError:wt,hdb_errors:bv}=J(),{HTTP_STATUS_CODES:Mt,AUTHENTICATION_ERROR_MSGS:Pu,HDB_ERROR_MSGS:zs}=bv,{UserEventMsg:qu}=os(),fm=require("lodash"),Cm={username:!0,active:!0,role:!0,password:!0},hm=new Map,Ya=vu(Om.searchByValue),Lv=vu(Om.searchByHash),yv=vu(Nv.delete);async function wv(e){let t=Im.cleanAttributes(e,Cm),r=Nm.addUserValidation(t);if(r)throw wt(new Error,r.message,Mt.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 Ya(s),n=n&&Array.from(n)}catch(_){throw w.error("There was an error searching for a role in add user"),w.error(_),_}if(!n||n.length<1)throw wt(new Error,zs.ROLE_NAME_NOT_FOUND(t.role),Mt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw wt(new Error,zs.DUP_ROLES_FOUND(t.role),Mt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await pm.insert(i)}catch(_){throw w.error("There was an error searching for a user."),w.error(_),_}w.debug(a);try{await di()}catch(_){throw w.error("Got an error setting users to global"),w.error(_),_}if(a.skipped_hashes.length===1)throw wt(new Error,zs.USER_ALREADY_EXISTS(t.username),Mt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Bu.signalUserChange(new qu(process.pid)),`${c.username} successfully added`}o(wv,"addUser");async function Mv(e){let t=Im.cleanAttributes(e,Cm);if(Qe.isEmptyOrZeroLength(t.username))throw new Error(Tm);if(Qe.isEmptyOrZeroLength(t.password)&&Qe.isEmptyOrZeroLength(t.role)&&Qe.isEmptyOrZeroLength(t.active))throw new Error(Rm);if(!Qe.isEmpty(t.password)&&Qe.isEmptyOrZeroLength(t.password.trim()))throw new Error(mm);if(!Qe.isEmpty(t.active)&&!Qe.isBoolean(t.active))throw new Error(gm);let r=Dv(t.username);if(!Qe.isEmpty(t.password)&&!Qe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password)),t.role==="")throw new Error(Am);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ya(i)||[])}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!a||a.length===0){let c=zs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),wt(new Error,c,Mt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let c=zs.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),wt(new Error,c,Mt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await pm.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await di()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Bu.signalUserChange(new qu(process.pid)),n}o(Mv,"alterUser");function Dv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Dv,"isClusterUser");async function Uv(e){try{let t=Nm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qe.isEmpty(global.hdb_users.get(e.username)))throw wt(new Error,zs.USER_NOT_EXIST(e.username),Mt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yv(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await di()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Bu.signalUserChange(new qu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(Uv,"dropUser");async function Pv(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 Lv(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(Pv,"userInfo");async function Hv(){let e;try{e=await $a()}catch(t){throw w.error("Got an error listing users."),w.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()]}o(Hv,"listUsersExternal");async function $a(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ya(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=fm.cloneDeep(a);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ya(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=fm.cloneDeep(a),a.role=r[a.role],Bv(a.role),i.set(a.username,a);return(await Iv.getLicense()).enterprise?i:vv(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),Qe.errorizeMessage(e)}return null}o($a,"listUsers");function Bv(e){try{if(!e){w.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(Cv)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(Bv,"appendSystemTablesToRole");function vv(e){try{if(w.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&&(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(n.username,n)):r.set(n.username,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?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(vv,"nonEnterpriseFilter");async function di(){try{let e=await $a();global.hdb_users=e}catch(e){throw w.error(e),e}}o(di,"setUsersToGlobal");async function Gv(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw wt(new Error,Pu.USER_INACTIVE,Mt.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(hm.get(t)===s.password)return n;if(Hu.validate(s.password,t))hm.set(t,s.password);else throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(Gv,"findAndValidateUser");async function qv(){let e=await $a(),t=Ov.getConfigFromFile(dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qe.isEmpty(r)&&r?.role?.role===dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sm.SERVER_SUFFIX.ADMIN,r}o(qv,"getClusterUser")});var ym=f((Z1,Lm)=>{"use strict";var Fv=zr();Lm.exports={writeTransaction:xv};function xv(e,t,r){return Fv.writeTransaction(e,t,r)}o(xv,"writeTransaction")});var Es=f((cQ,Wm)=>{"use strict";var le=H();le.initSync();var Vv=require("fs-extra"),kv=require("semver"),Ri=require("path"),{monotonicFactory:Yv}=require("ulidx"),Yu=Yv(),$v=require("util"),Mm=require("child_process"),Kv=$v.promisify(Mm.exec),Wv=Mm.spawn,v=ke(),V=T(),Ka=O(),br=p(),Wa=Xn(),Qv=ym(),Si=Ve(),{encode:Vu,decode:$u}=require("msgpackr"),{isEmpty:ls}=Ka,Dm=Nr(),Um=12e10,{connect:jv,StorageType:Pm,RetentionPolicy:Hm,AckPolicy:Ku,DeliverPolicy:mi,DiscardPolicy:Jv,NatsConnection:eQ,JetStreamManager:tQ,JetStreamClient:rQ,StringCodec:sQ,JSONCodec:Xv,createInbox:Wu,StreamSource:nQ,headers:Zv,toJsMsg:Bm,nuid:iQ,JetStreamOptions:oQ,ErrorCode:wm,nanos:aQ}=require("nats"),{PACKAGE_ROOT:zv}=T(),eG=Us(),vm=Xv(),tG="clustering",rG=eG.engines[v.NATS_SERVER_NAME],sG=Ri.join(zv,"dependencies"),ku=Ri.join(sG,`${process.platform}-${process.arch}`,v.NATS_BINARY_NAME),Fu,xu,fi,hi,Ti,Tt;Wm.exports={runCommand:Gm,checkNATSServerInstalled:nG,createConnection:Qu,getConnection:Qa,getJetStreamManager:Ai,getJetStream:qm,getNATSReferences:je,getServerList:oG,createLocalStream:ju,listStreams:Fm,deleteLocalStream:aG,getServerConfig:gi,listRemoteStreams:cG,viewStream:_G,viewStreamIterator:uG,publishToStream:lG,createWorkQueueStream:EG,addSourceToWorkStream:Vm,request:dG,removeSourceFromWorkStream:Ym,reloadNATS:Ju,reloadNATSHub:SG,reloadNATSLeaf:fG,extractServerName:km,requestErrorHandler:hG,updateWorkStream:TG,createLocalTableStream:$m,createTableStreams:RG,purgeTableStream:Km,purgeSchemaTableStreams:mG,getStreamInfo:AG,updateLocalStreams:pG,closeConnection:iG,getJsmServerName:pi,addNatsMsgHeader:xm};async function Gm(e,t=void 0){let{stdout:r,stderr:s}=await Kv(e,{cwd:t});if(s)throw new Error(s.replace(`
6
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw _e.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eL(s,r),E_(s);let n=s.toJSON();if(Se=Wr(n),Se.logging_rotation_rotate)for(let i in vd)Se[i]&&_e.error(`Config ${vd[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_e.trace(Qb)}}o(Vd,"initConfig");function eL(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],It.join(r,rt.SCHEMA_DIR_NAME)),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],It.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],It.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_e.trace("Updating config file with missing config params"),tt.writeFileSync(t,String(e)))}o(eL,"checkForUpdatedConfig");function E_(e){let t=e.toJSON(),r=Fb(t);if(r.error)throw uo.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(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams.path)}o(E_,"validateConfig");function tL(e,t){Se===void 0&&(Se={});let r=Kt[e.toLowerCase()];if(r===void 0){_e.trace(`Unable to update config object because config param '${e}' does not exist`);return}Se[r.toLowerCase()]=t}o(tL,"updateConfigObject");function kd(e,t,r=void 0,s=!1,n=!1){Se===void 0&&Vd();let i=xd(Kt.hdb_root),a=It.join(i,rt.HDB_CONFIG_FILE),c=Hs(a),_;if(r===void 0&&e.toLowerCase()===dr.SCHEMAS)_=t;else if(r===void 0){let E=Kt[e.toLowerCase()];if(E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let d=E.split("_"),S=u_(E,t);c.setIn([...d],S)}else for(let E in r){let d=Kt[E.toLowerCase()];if(d===dr.SCHEMAS){_=r[E];continue}if(d!==void 0){let S=d.split("_"),R=u_(d,r[E]);try{c.setIn([...S],R)}catch(m){_e.error(m)}}}_&&Fd(c,_),E_(c);let u=c.getIn(["rootPath"]),l=It.join(u,rt.HDB_CONFIG_FILE);s===!0&&rL(a,u),tt.writeFileSync(l,String(c)),n&&(Se=Wr(c.toJSON())),_e.trace(`Config parameter: ${e} updated with value: ${t}`)}o(kd,"updateConfigValue");function rL(e,t){try{let r=It.join(t,"backup",`${rt.HDB_CONFIG_FILE}.bak`);tt.copySync(e,r),_e.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_e.error(jb),_e.error(r)}}o(rL,"backupConfigFile");var sL=["schemas"];function Wr(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!sL.includes(r)){let s=Wr(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(Wr,"flattenConfig");function u_(e,t){if(e===dr.CLUSTERING_NODENAME||e===dr.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(Vb(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||xe.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 xe.autoCast(t)}o(u_,"castConfigValue");function nL(){let e=xe.getPropsFilePath(),t=l_(e);return Hs(t).toJSON()}o(nL,"getConfiguration");async function iL(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kd(void 0,void 0,n,!0),Xb}catch(i){throw typeof i=="string"||i instanceof String?Yb(i,i,$b.BAD_REQUEST,void 0,void 0,!0):i}}o(iL,"setConfiguration");function d_(){let e=xe.getPropsFilePath();try{tt.accessSync(e,tt.constants.F_OK|tt.constants.R_OK)}catch(s){throw _e.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=l_(e);return Hs(t).toJSON()}o(d_,"readConfigFile");function Hs(e){return xb.parseDocument(tt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Hs,"parseYamlDoc");function oL(){let e=d_(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=xe.isEmptyOrZeroLength(t)?[]:t;let r=Bd(t);if(r)throw uo.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=xe.isEmptyOrZeroLength(s)?[]:s;let n=Bd(s);if(n)throw uo.CONFIG_VALIDATION(n.message);if(!xe.isEmptyOrZeroLength(s)&&!xe.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(c=>c.host===a.host&&c.port===a.port));if(!xe.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw uo.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(oL,"getClusteringRoutes");function Yd(e){let t=Gd(e);Se={};for(let r in Kt){let s=t.get(r.toUpperCase());if(xe.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Kt[r].toLowerCase();n===dr.LOGGING_ROOT?Se[n]=It.dirname(s):Se[n]=s}return Se}o(Yd,"initOldConfig");function aL(e){let t=d_();return kb.get(t,e.replaceAll("_","."))}o(aL,"getConfigFromFile")});var H=f((xY,Wd)=>{"use strict";var S_=require("fs-extra"),Ct=require("path"),cL=require("os"),_L=require("properties-reader"),wn=p(),Bs=O(),L=T(),Eo=Ve(),uL="Error initializing environment manager",So="BOOT_PROPS_FILE_PATH",Kd=!1,lL={[L.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Wt={};Wd.exports={BOOT_PROPS_FILE_PATH:So,getHdbBasePath:EL,setHdbBasePath:dL,get:SL,initSync:hL,setProperty:G,initTestEnvironment:TL};function EL(){return Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(EL,"getHdbBasePath");function dL(e){Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(dL,"setHdbBasePath");function SL(e){let t=Eo.getConfigValue(e);return t===void 0?Wt[e]:t}o(SL,"get");function G(e,t){lL[e]&&(Wt[e]=t),Eo.updateConfigObject(e,t)}o(G,"setProperty");function fL(){let e;try{e=Bs.getPropsFilePath(),S_.accessSync(e,S_.constants.F_OK|S_.constants.R_OK),Kd=!0;let t=_L(e);return Wt[L.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(L.HDB_SETTINGS_NAMES.INSTALL_USER),Wt[L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Wt[So]=e,!0}catch{return wn.trace(`Environment manager found no properties file at ${e}`),!1}}o(fL,"doesPropFileExist");function hL(e=!1){try{(Kd||fL())&&(Eo.initConfig(e),Wt[L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Eo.getConfigValue(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wn.error(uL),wn.error(t),console.error(t),process.exit(1)}}o(hL,"initSync");function TL(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,_=Ct.join(__dirname,"../../","unitTests");Wt[So]=Ct.join(_,"hdb_boot_properties.file"),G(L.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ct.join(_,"settings.test")),G(L.HDB_SETTINGS_NAMES.INSTALL_USER,cL.userInfo().username),G(L.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.HDB_SETTINGS_NAMES.CERT_KEY,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ct.join(_,"envDir","utility","keys","privateKey.pem")),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ct.join(_,"envDir","utility","keys","certificate.pem")),G(L.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),G(L.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ct.join(_,"envDir","log")),G(L.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),G(L.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),G(L.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ct.join(_,"envDir")),G(L.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Bs.isEmpty(n)?!0:n),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Bs.isEmpty(n)?!0:n),G(L.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),G(L.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Bs.isEmpty(i)?!1:i),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Bs.isEmpty(i)?!1:i),G(L.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),G(L.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),G(L.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ct.resolve(__dirname,"../../unitTests/server/customFunctions/custom_functions")),G(L.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Bs.isEmpty(c)?!1:c),a&&(G("CORS_ACCESSLIST",a),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(G(L.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(G(L.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(G(L.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),G(L.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${So}. Please check your boot props and settings files`;wn.fatal(r),wn.error(t)}}o(TL,"initTestEnvironment")});var ke=f((YY,jd)=>{"use strict";var{platform:kY}=require("os"),RL="nats-server.zip",f_="nats-server",mL=process.platform==="win32"?`${f_}.exe`:f_,h_="HDB",AL=/^[^\s.,*>]+$/,Qd="__request__",gL=o(e=>`${e}.${Qd}`,"REQUEST_SUBJECT"),pL={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},NL={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},OL={HUB:"hub.pid",LEAF:"leaf.pid"},IL={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},CL={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:h_,deliver_subject:"__HDB__.WORKQUEUE"},bL={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:h_,deliver_subject:"HDB.SCHEMAQUEUE"},LL={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:h_,deliver_subject:"HDB.USERQUEUE"},yL={SUCCESS:"success",ERROR:"error"},wL={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},ML={TXN:"txn",MSGID:"msgid"},vs={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},DL={[vs.ERR]:1,[vs.WRN]:2,[vs.INF]:3,[vs.DBG]:4,[vs.TRC]:5},UL={debug:"-D",trace:"-DVV"};jd.exports={NATS_SERVER_ZIP:RL,NATS_SERVER_NAME:f_,NATS_BINARY_NAME:mL,PID_FILES:OL,NATS_CONFIG_FILES:NL,SERVER_SUFFIX:IL,WORK_QUEUE_CONSUMER_NAMES:CL,SCHEMA_QUEUE_CONSUMER_NAMES:bL,USER_QUEUE_CONSUMER_NAMES:LL,NATS_TERM_CONSTRAINTS_RX:AL,REQUEST_SUFFIX:Qd,UPDATE_REMOTE_RESPONSE_STATUSES:yL,CLUSTER_STATUS_STATUSES:wL,REQUEST_SUBJECT:gL,SUBJECT_PREFIXES:ML,MSG_HEADERS:pL,LOG_LEVELS:vs,LOG_LEVEL_FLAGS:UL,LOG_LEVEL_HIERARCHY:DL}});var Xd=f((KY,Jd)=>{"use strict";var PL=ke(),fo=class{constructor(t,r,s,n,i,a,c,_,u,l,E,d,S,R){this.port=t,a===null&&(a=void 0),this.server_name=r+PL.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:a,insecure:c,verify:_},this.leafnodes={port:u,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c}},this.cluster={name:l,port:E,routes:d,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c,verify:_}},this.accounts={SYS:{users:S},HDB:{users:R}},this.system_account="SYS"}};o(fo,"HubConfigObject");Jd.exports=fo});var eS=f((QY,zd)=>{"use strict";var Zd=ke(),ho=class{constructor(t,r,s,n,i,a,c,_,u,l,E){this.port=t,E===null&&(E=void 0),this.server_name=r+Zd.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=1e7,this.jetstream={enabled:!0,store_dir:n,domain:r+Zd.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:l,ca_file:E,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:E,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:E,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:_,jetstream:"enabled"}},this.system_account="SYS"}};o(ho,"LeafConfigObject");zd.exports=ho});var rS=f((JY,tS)=>{"use strict";var To=class{constructor(t,r){this.user=t,this.password=r}};o(To,"HdbUserObject");tS.exports=To});var nS=f((ZY,sS)=>{"use strict";var HL=ke(),Ro=class{constructor(t,r){this.user=t+HL.SERVER_SUFFIX.ADMIN,this.password=r}};o(Ro,"SysUserObject");sS.exports=Ro});var Gs=f((e$,aS)=>{"use strict";var oS=O(),iS=T(),Ao=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,T_=require("joi"),mo={schema_format:{pattern:Ao,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},BL=T_.alternatives(T_.string().min(1).max(mo.schema_length.maximum).pattern(Ao).messages({"string.pattern.base":"{:#label} "+mo.schema_format.message}),T_.number()).required();function vL(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mo.schema_length.maximum?`'${e}' maximum of 250 characters`:Ao.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(vL,"checkValidTable");function GL(e,t){return oS.doesSchemaExist(e)?e:t.message(`Schema '${e}' does not exist`)}o(GL,"validateSchemaExists");function qL(e,t){let r=t.state.ancestors[0].schema;return oS.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(qL,"validateTableExists");function FL(e,t){return e.toLowerCase()===iS.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid schema name, '${iS.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(FL,"validateSchemaName");aS.exports={common_validators:mo,schema_regex:Ao,hdb_schema_table:BL,validateSchemaExists:GL,validateTableExists:qL,validateSchemaName:FL,checkValidTable:vL}});var m_=f((r$,_S)=>{var{hdb_schema_table:cS}=Gs(),xL=Fe(),R_=require("joi"),VL={undefined:"undefined",null:"null"},kL=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||VL[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),YL=R_.object({schema:cS,table:cS,records:R_.array().items(R_.object().custom(kL)).required()});_S.exports=function(e){return xL.validateBySchema(e,YL)}});var A_=f((n$,uS)=>{"use strict";var go=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")}};o(go,"BridgeMethods");uS.exports=go});var Sr=f((c$,hS)=>{"use strict";var lS=et().LMDB_ERRORS_ENUM,o$=require("lmdb"),$L=de(),a$=require("buffer").Buffer,{OVERFLOW_MARKER:ES,MAX_SEARCH_KEY_LENGTH:po}=$L,dS=["number","string","symbol","boolean","bigint"];function KL(e){if(e=e?.database||e,!e)throw new Error(lS.ENV_REQUIRED);if(e.constructor.name!=="LMDBStore")throw new Error(lS.INVALID_ENVIRONMENT)}o(KL,"validateEnv");function WL(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(WL,"stringifyData");function QL(e){return e instanceof Date?e.valueOf():e}o(QL,"convertKeyValueToWrite");function jL(e){if(e==null)return;if(dS.includes(typeof e))return e.length>po?[e.slice(0,po)+ES]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];dS.includes(typeof n)&&(n.length>po?t.push(n.slice(0,po)+ES):t.push(n))}}return t}o(jL,"getIndexedValues");var No=0,SS=0;function fS(){SS=Date.now()-performance.now()}o(fS,"adjustStartTime");fS();var JL=6e4;setInterval(fS,JL).unref();function XL(){let e=performance.now()+SS;return e>No?(No=e,e):(No+=488e-6,No)}o(XL,"getNextMonotonicTime");hS.exports={validateEnv:KL,stringifyData:WL,convertKeyValueToWrite:QL,getNextMonotonicTime:XL,getIndexedValues:jL}});var RS=f((u$,TS)=>{"use strict";var Oo=class{constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};o(Oo,"DBIDefinition");TS.exports=Oo});var gS=f((E$,AS)=>{"use strict";var g_=H(),mS=T();g_.initSync();var ZL=g_.get(mS.CONFIG_PARAMS.STORAGE_COMPRESSION),zL=g_.get(mS.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Io=class{constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=ZL&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zL&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0)}};o(Io,"OpenDBIObject");AS.exports=Io});var OS=f((S$,NS)=>{"use strict";var qs=H(),Mn=T();qs.initSync();var ey=qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qs.get(Mn.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",pS=qs.get(Mn.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ty=qs.get(Mn.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Co=class{constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ey,pS!==void 0&&(this.overlappingSync=pS),this.noReadAhead=ty}};o(Co,"OpenEnvironmentObject");NS.exports=Co});var k=f((h$,MS)=>{"use strict";var p_=require("lmdb"),st=require("fs-extra"),lt=require("path"),Lo=Sr(),IS=p(),fe=et().LMDB_ERRORS_ENUM,yo=RS(),N_=gS(),CS=OS(),fr=de(),Et=fr.INTERNAL_DBIS_NAME,bS=fr.DBI_DEFINITION_NAME,ry="data.mdb",sy="lock.mdb",Dn=".mdb",ny="-lock",bo=class{constructor(t,r,s=!1){this.dbi=nt(t,r),this.key_type=this.dbi[fr.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fr.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new p_.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};o(bo,"TransactionCursor");function O_(e,t){if(e===void 0)throw new Error(fe.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(fe.ENV_NAME_REQUIRED)}o(O_,"pathEnvNameValidation");async function I_(e,t,r=!0){try{await st.access(e)}catch(s){throw s.code==="ENOENT"?new Error(fe.INVALID_BASE_PATH):s}try{let s=lt.join(e,t+Dn);return await st.access(s,st.constants.R_OK|st.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await st.access(lt.join(e,t,ry),st.constants.R_OK|st.constants.F_OK),lt.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(fe.INVALID_ENVIRONMENT)}else throw new Error(fe.INVALID_ENVIRONMENT);throw s}}o(I_,"validateEnvironmentPath");function wo(e,t){if(Lo.validateEnv(e),t===void 0)throw new Error(fe.DBI_NAME_REQUIRED)}o(wo,"validateEnvDBIName");async function iy(e,t,r=!1,s=!1){O_(e,t),t=t.toString();try{return await I_(e,t,s),C_(e,t,r)}catch(n){if(n.message===fe.INVALID_ENVIRONMENT){let i=lt.join(e,t);await st.mkdirp(s?i:e);let a=new CS(s?i:i+Dn,!1),c=p_.open(a);c.dbis=Object.create(null);let _=new N_(!1);c.openDB(Et,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let u=b_(e,t,r);return c[fr.ENVIRONMENT_NAME_KEY]=u,global.lmdb_map[u]=c,c}throw n}}o(iy,"createEnvironment");async function oy(e,t,r,s=!0){let n=await C_(e,t);if(r===void 0)throw new Error(fe.DESTINATION_PATH_REQUIRED);try{await st.access(lt.dirname(r))}catch(i){throw i.code==="ENOENT"?new Error(fe.INVALID_DESTINATION_PATH):i}await n.backup(r,s)}o(oy,"copyEnvironment");async function C_(e,t,r=!1){O_(e,t),t=t.toString();let s=b_(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 I_(e,t),i=lt.join(e,t+Dn),a=n!=i,c=new CS(n,a),_=p_.open(c);_.dbis=Object.create(null);let u=yS(_);for(let l=0;l<u.length;l++)nt(_,u[l]);return _[fr.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=_,_}o(C_,"openEnvironment");async function ay(e,t,r=!1){O_(e,t),t=t.toString();let s=lt.join(e,t+Dn),n=await I_(e,t);if(global.lmdb_map!==void 0){let i=b_(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await LS(a),delete global.lmdb_map[i]}}await st.remove(n),await st.remove(n===s?n+ny:lt.join(lt.dirname(n),sy))}o(ay,"deleteEnvironment");async function LS(e){Lo.validateEnv(e);let t=e[fr.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(LS,"closeEnvironment");function b_(e,t,r=!1){let n=`${lt.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(b_,"getCachedEnvironmentName");function cy(e){Lo.validateEnv(e);let t=Object.create(null),r=nt(e,Et);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Et)try{t[s]=Object.assign(new yo,n)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(cy,"listDBIDefinitions");function yS(e){Lo.validateEnv(e);let t=[],r=nt(e,Et);for(let{key:s}of r.getRange({start:!1}))s!==Et&&t.push(s);return t}o(yS,"listDBIs");function _y(e,t){let s=nt(e,Et).getEntry(t),n=new yo;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{IS.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(_y,"getDBIDefinition");function wS(e,t,r,s=!1){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return nt(e,t)}catch(n){if(n.message===fe.DBI_DOES_NOT_EXIST){let i=new N_(r,s===!0),a=e.openDB(t,i),c=new yo(r===!0,s);return a[bS]=c,nt(e,Et).putSync(t,c),e.dbis[t]=a,a}throw n}}o(wS,"createDBI");function nt(e,t){if(wo(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Et?r=_y(e,t):r=new yo,r===void 0)throw new Error(fe.DBI_DOES_NOT_EXIST);let s;try{let n=new N_(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(fe.DBI_DOES_NOT_EXIST):n}return s[bS]=r,e.dbis[t]=s,s}o(nt,"openDBI");function uy(e,t){wo(e,t),t=t.toString();let r=nt(e,t),s=r.getStats();return r[fr.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(uy,"statDBI");async function ly(e,t){try{let r=lt.join(e,t+Dn);return(await st.stat(r)).size}catch{throw new Error(fe.INVALID_ENVIRONMENT)}}o(ly,"environmentDataSize");function Ey(e,t){if(wo(e,t),t=t.toString(),t===Et)throw new Error(fe.CANNOT_DROP_INTERNAL_DBIS_NAME);nt(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],nt(e,Et).removeSync(t)}o(Ey,"dropDBI");function dy(e,t,r){for(let s=0;s<r.length;s++){let n=r[s];if(!e.dbis[n])try{nt(e,n)}catch(i){if(i.message===fe.DBI_DOES_NOT_EXIST)wS(e,n,n!==t,n===t);else throw i}}}o(dy,"initializeDBIs");MS.exports={openDBI:nt,openEnvironment:C_,createEnvironment:iy,listDBIs:yS,listDBIDefinitions:cy,createDBI:wS,dropDBI:Ey,statDBI:uy,deleteEnvironment:ay,initializeDBIs:dy,TransactionCursor:bo,environmentDataSize:ly,copyEnvironment:oy,closeEnvironment:LS}});var US=f((R$,DS)=>{"use strict";var Mo=class{constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};o(Mo,"InsertRecordsResponseObject");DS.exports=Mo});var HS=f((A$,PS)=>{"use strict";var Do=class{constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};o(Do,"UpdateRecordsResponseObject");PS.exports=Do});var vS=f((p$,BS)=>{"use strict";var Uo=class{constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};o(Uo,"UpsertRecordsResponseObject");BS.exports=Uo});var jr=f((b$,FS)=>{"use strict";var Sy=k(),fy=US(),hy=HS(),Ty=vS(),bt=Sr(),Un=et().LMDB_ERRORS_ENUM,Ry=de(),Qt=T(),my=O(),Ay=require("uuid"),O$=require("lmdb"),{handleHDBError:gy,hdb_errors:py}=J(),{OVERFLOW_MARKER:I$,MAX_SEARCH_KEY_LENGTH:C$}=Ry,GS=H();GS.initSync();var Po=GS.get(Qt.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),L_=Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qr=Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ny(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new fy,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_];qS(u,!0,n);let l=Oy(e,t,r,u),E=u[t];a.push(l),c.push(E)}return w_(a,c,s,i,n)}o(Ny,"insertRecords");function Oy(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let c=s[a];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Qt.FUNC_VAL],s[a]=c)}let _=bt.getIndexedValues(c),u=e.dbis[a];if(_){Po&&u.prefetch(_.map(l=>({key:l,value:n})),Ho);for(let l=0,E=_.length;l<E;l++)u.put(_[l],n)}}Po&&e.dbis[t].prefetch([n],Ho),e.dbis[t].put(n,s,s[Qr])})}o(Oy,"insertRecord");function Iy(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(Iy,"removeSkippedRecords");function qS(e,t,r){let s=r>0;(s||!Number.isInteger(e[Qr]))&&(e[Qr]=r||(r=bt.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[L_]))&&(e[L_]=r||bt.getNextMonotonicTime()):delete e[L_]}o(qS,"setTimestamps");function y_(e,t,r){r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Sy.initializeDBIs(e,t,r)}o(y_,"initializeTransaction");async function Cy(e,t,r,s,n=bt.getNextMonotonicTime()){D_(e,t,r,s),y_(e,t,r);let i=new hy,a=[],c=[],_=[];for(let u=0;u<s.length;u++){let l=s[u],E=l[t],d;try{d=M_(e,t,l,E,i,!0,n)}catch{i.skipped_hashes.push(E),a.push(u);continue}c.push(d),_.push(E)}return w_(c,_,s,i,n,a)}o(Cy,"updateRecords");async function by(e,t,r,s,n=bt.getNextMonotonicTime()){try{D_(e,t,r,s)}catch(_){throw gy(_,_.message,py.HTTP_STATUS_CODES.BAD_REQUEST)}y_(e,t,r);let i=new Ty,a=[],c=[];for(let _=0;_<s.length;_++){let u=s[_],l;my.isEmpty(u[t])?(l=Ay.v4(),u[t]=l):l=u[t];let E=M_(e,t,u,l,i,!1,n);a.push(E),c.push(l)}return w_(a,c,s,i,n)}o(by,"upsertRecords");async function w_(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let c=0,_=a.length;c<_;c++)a[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||bt.getNextMonotonicTime(),Iy(r,i),s}o(w_,"finalizeWrite");function M_(e,t,r,s,n,i=!1,a){let c=e.dbis[t],_=c.getEntry(s),u=_?.value,l=u;if(!u){if(i)return!1;u={}}if(qS(r,!l,a),Number.isInteger(r[Qr])&&u[Qr]>r[Qr])return!1;l&&n.original_records.push(u);let E,d=o(()=>{for(let R in r){if(!r.hasOwnProperty(R)||R===t)continue;let m=r[R],b=e.dbis[R];if(b===void 0)continue;let $=u[R];if(typeof m=="function"){let B=m([[u]]);Array.isArray(B)&&(m=B[0][Qt.FUNC_VAL],r[R]=m)}if(m===$)continue;let A=bt.getIndexedValues($);if(A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.remove(A[B],s)}if(A=bt.getIndexedValues(m),A){Po&&b.prefetch(A.map(B=>({key:B,value:s})),Ho);for(let B=0,Ee=A.length;B<Ee;B++)b.put(A[B],s)}}let S=Object.assign({},u,r);c.put(s,S,S[Qr])},"do_put");return _?E=c.ifVersion(s,_.version,d):E=c.ifNoExists(s,d),E.then(S=>S?!0:M_(e,t,r,s,n,i,a))}o(M_,"updateUpsertRecord");function Ly(e,t,r){if(bt.validateEnv(e),t===void 0)throw new Error(Un.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Un.WRITE_ATTRIBUTES_REQUIRED):new Error(Un.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(Ly,"validateBasic");function D_(e,t,r,s){if(Ly(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Un.RECORDS_REQUIRED):new Error(Un.RECORDS_MUST_BE_ARRAY)}o(D_,"validateWrite");function Ho(){}o(Ho,"noop");FS.exports={insertRecords:Ny,updateRecords:Cy,upsertRecords:by}});var K=f((y$,KS)=>{"use strict";var Gn=T(),yy=O(),ye=H(),qn=require("path"),wy=require("minimist"),xS=require("fs-extra"),VS=require("lodash");ye.initSync();var{CONFIG_PARAMS:hr,SCHEMAS_PARAM_CONFIG:Pn,SYSTEM_SCHEMA_NAME:Bo}=Gn,Hn,Bn,vn;function kS(){if(Hn!==void 0)return Hn;if(ye.getHdbBasePath()!==void 0)return Hn=ye.get(hr.STORAGE_PATH)||qn.join(ye.getHdbBasePath(),Gn.SCHEMA_DIR_NAME),Hn}o(kS,"getBaseSchemaPath");function YS(){if(Bn!==void 0)return Bn;if(ye.getHdbBasePath()!==void 0)return Bn=$S(Bo),Bn}o(YS,"getSystemSchemaPath");function My(){if(vn!==void 0)return vn;if(ye.getHdbBasePath()!==void 0)return vn=ye.get(Gn.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||qn.join(ye.getHdbBasePath(),Gn.TRANSACTIONS_DIR_NAME),vn}o(My,"getTransactionAuditStoreBasePath");function Dy(e,t){let r=ye.get(hr.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||qn.join(My(),e.toString())}o(Dy,"getTransactionAuditStorePath");function $S(e,t){e=e.toString(),t=t&&t.toString();let r=ye.get(Gn.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||qn.join(kS(),e)}o($S,"getSchemaPath");function Uy(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,wy(process.argv));let s=r[hr.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!yy.isObject(s))throw a;i=s}for(let a of i){let c=a[Bo];if(!c)continue;let _=ye.get(hr.SCHEMAS);_=_??{};let u=c?.tables?.[t]?.[Pn.PATH];if(u)return VS.set(_,[Bo,Pn.TABLES,t,Pn.PATH],u),ye.setProperty(hr.SCHEMAS,_),u;let l=c?.[Pn.PATH];if(l)return VS.set(_,[Bo,Pn.PATH],l),ye.setProperty(hr.SCHEMAS,_),l}}let n=r[hr.STORAGE_PATH.toUpperCase()];if(n){if(!xS.pathExistsSync(n))throw new Error(n+" does not exist");let i=qn.join(n,e);return xS.mkdirsSync(i),ye.setProperty(hr.STORAGE_PATH,n),i}return YS()}o(Uy,"initSystemSchemaPaths");function Py(){Hn=void 0,Bn=void 0,vn=void 0}o(Py,"resetPaths");KS.exports={getBaseSchemaPath:kS,getSystemSchemaPath:YS,getTransactionAuditStorePath:Dy,getSchemaPath:$S,initSystemSchemaPaths:Uy,resetPaths:Py}});var jt=f((M$,Hy)=>{Hy.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 U_=f((D$,WS)=>{var{common_validators:Tr}=Gs(),Fn=Fe(),dt="is required",W={schema:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},table:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length},hash_attribute:{presence:!0,format:Tr.schema_format,length:Tr.schema_length}};function xn(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}o(xn,"makeAttributesStrings");function By(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence=!1,W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(By,"schema_object");function vy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(vy,"table_object");function Gy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence={message:dt},Fn.validateObject(e,W)}o(Gy,"create_table_object");function qy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence={message:dt},W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(qy,"attribute_object");function Fy(e){return e=xn(e),W.schema.presence={message:dt},W.table.presence={message:dt},W.attribute.presence=!1,W.hash_attribute.presence=!1,Fn.validateObject(e,W)}o(Fy,"describe_table");function xy(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`)}}o(xy,"validateTableResidence");WS.exports={schema_object:By,create_table_object:Gy,table_object:vy,attribute_object:qy,describe_table:Fy,validateTableResidence:xy}});var jS=f((P$,QS)=>{"use strict";var Vy=require("uuid"),vo=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vy.v4(),this.schema_table=`${this.schema}.${this.table}`}};o(vo,"CreateAttributeObject");QS.exports=vo});var qo=f((B$,JS)=>{"use strict";var ky=jS(),Go=class extends ky{constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};o(Go,"LMDBCreateAttributeObject");JS.exports=Go});var ZS=f((G$,XS)=>{"use strict";XS.exports=$y;var Yy="inserted";function $y(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yy?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o($y,"returnObject")});var Fo=f((F$,sf)=>{"use strict";var Ky=T(),P_=k(),Wy=jr(),{getSystemSchemaPath:Qy,getSchemaPath:jy}=K(),Jy=jt(),Xy=U_(),Zy=qo(),zy=ZS(),{handleHDBError:zS,hdb_errors:tf}=J(),ef=O(),{HTTP_STATUS_CODES:ew}=tf,H_=Jy.hdb_attribute,rf=[];for(let e=0;e<H_.attributes.length;e++)rf.push(H_.attributes[e].attribute);var tw="inserted";sf.exports=rw;async function rw(e){let t=Xy.attribute_object(e);if(t)throw zS(new Error,t.message,tf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&ef.checkGlobalSchemaTable(e.schema,e.table);if(r)throw zS(new Error,r,ew.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=ef.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Zy(e.schema,e.table,e.attribute,e.id);try{let i=await P_.openEnvironment(jy(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);P_.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await P_.openEnvironment(Qy(),Ky.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:_}=await Wy.insertRecords(a,H_.hash_attribute,rf,[n]);return zy(tw,c,{records:[n]},_)}catch(i){throw i}}o(rw,"lmdbCreateAttribute")});var xo=f((k$,of)=>{"use strict";var Jt=O(),nf=p(),V$=m_();of.exports=sw;function sw(e){if(Jt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Jt.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(Jt.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(Jt.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(a=>{if(i&&Jt.isEmptyOrZeroLength(a[r]))throw nf.error("a valid hash attribute must be provided with update record:",a),new Error("a valid hash attribute must be provided with update record, check log for more info");if(!Jt.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw nf.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Error(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Jt.isEmpty(a[r])&&a[r]!==""&&s.has(Jt.autoCast(a[r]))&&(a.skip=!0),s.add(Jt.autoCast(a[r]));for(let c in a)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(sw,"insertUpdateValidate")});var ko=f(($$,af)=>{"use strict";var nw=T().OPERATIONS_ENUM,Vo=class{constructor(t,r,s,n,i=void 0){this.operation=nw.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};o(Vo,"InsertObject");af.exports=Vo});var $o=f((Q$,cf)=>{"use strict";var W$=ko(),Yo=T(),v_=O(),B_=p(),iw=require("uuid"),{handleHDBError:Vn,hdb_errors:ow}=J(),{HDB_ERROR_MSGS:kn,HTTP_STATUS_CODES:Yn}=ow;cf.exports=aw;function aw(e,t,r){for(let n=0;n<t.length;n++)cw(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_w(i,r,e.operation)}}o(aw,"processRows");function cw(e){if(Buffer.byteLength(String(e))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vn(new Error,kn.ATTR_NAME_LENGTH_ERR(e),Yn.BAD_REQUEST,void 0,void 0,!0);if(v_.isEmptyOrZeroLength(e)||v_.isEmpty(e.trim()))throw Vn(new Error,kn.ATTR_NAME_NULLISH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(cw,"validateAttribute");function _w(e,t,r){if(!e.hasOwnProperty(t)||v_.isEmptyOrZeroLength(e[t])){if(r===Yo.OPERATIONS_ENUM.INSERT||r===Yo.OPERATIONS_ENUM.UPSERT){e[t]=iw.v4();return}throw B_.error("Update transaction aborted due to record with no hash value:",e),Vn(new Error,kn.RECORD_MISSING_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Yo.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw B_.error(e),Vn(new Error,kn.HASH_VAL_LENGTH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw B_.error(e),Vn(new Error,kn.INVALID_FORWARD_SLASH_IN_HASH_ERR,Yn.BAD_REQUEST,void 0,void 0,!0)}o(_w,"validateHash")});var uf=f((J$,_f)=>{"use strict";var Ko=class{constructor(t,r){this.type=t,this.message=r}};o(Ko,"ITCEventObject");_f.exports=Ko});var Wo=f((Z$,df)=>{var uw=require("crypto"),lf=9;function lw(e){let t=dw(lf),r=Ef(e+t);return t+r}o(lw,"createHash");function Ew(e,t){let r=e.substr(0,lf),s=r+Ef(t+r);return e===s}o(Ew,"validateHash");function dw(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}o(dw,"generateSalt");function Ef(e){return uw.createHash("md5").update(e).digest("hex")}o(Ef,"md5");df.exports={hash:lw,validate:Ew}});var ff=f((eK,Sf)=>{"use strict";var Rr=T(),$n=class{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a){this.exp_date=t,this.storage_type=r,this.api_call=s,this.ram_allocation=n,this.version=i,this.fingerprint=a}};o($n,"BaseLicense");var Qo=class extends $n{constructor(t=0,r=Rr.STORAGE_TYPES_ENUM.LMDB,s=Rr.LICENSE_VALUES.API_CALL_DEFAULT,n=Rr.RAM_ALLOCATION_ENUM.DEFAULT,i=Rr.LICENSE_VALUES.VERSION_DEFAULT,a,c=!1){super(t,r,s,n,i,a),this.enterprise=c}};o(Qo,"ExtendedLicense");Sf.exports={BaseLicense:$n,ExtendedLicense:Qo}});var Vs=f((rK,gf)=>{"use strict";var xs=require("fs-extra"),hf=Wo(),Tf=require("crypto"),Sw=require("moment"),fw=require("uuid").v4,me=p(),q_=require("path"),hw=O(),Ye=T(),Tw=ff().ExtendedLicense,Fs="invalid license key format",Rw="061183",mw="mofi25",Aw="aes-256-cbc",gw=16,pw=32,Rf=H();Rf.initSync();var G_;gf.exports={validateLicense:mf,generateFingerPrint:Ow,licenseSearch:Af,getLicense:bw};function F_(){return q_.join(Rf.getHdbBasePath(),Ye.LICENSE_KEY_DIR_NAME,Ye.LICENSE_FILE_NAME)}o(F_,"getLicenseDirPath");function Nw(){let e=F_();return q_.join(e,Ye.LICENSE_FILE_NAME)}o(Nw,"getLicenseFilePath");function x_(){let e=F_();return q_.join(e,Ye.REG_KEY_FILE_NAME)}o(x_,"getFingerPrintFilePath");async function Ow(){let e=x_();try{return await xs.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Iw();throw me.error(`Error writing fingerprint file to ${e}`),me.error(t),new Error("There was an error generating the fingerprint")}}o(Ow,"generateFingerPrint");async function Iw(){let e=fw(),t=hf.hash(e),r=x_();try{await xs.mkdirp(F_()),await xs.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw me.error(`Error writing fingerprint file to ${r}`),me.error(s),new Error("There was an error generating the fingerprint")}return t}o(Iw,"writeFingerprint");function mf(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,storage_type:Ye.STORAGE_TYPES_ENUM.LMDB,api_call:Ye.LICENSE_VALUES.API_CALL_DEFAULT,ram_allocation:Ye.RAM_ALLOCATION_ENUM.DEFAULT,version:Ye.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return me.error("empty license key passed to validate."),r;let s=x_(),n=!1;try{n=xs.statSync(s)}catch(i){me.error(i)}if(n){let i;try{i=xs.readFileSync(s,"utf8")}catch{me.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(mw),c=a[1];c=Buffer.concat([Buffer.from(c)],gw);let _=Buffer.concat([Buffer.from(i)],pw),u=Tf.createDecipheriv(Aw,_,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=u.update(a[0],"hex","utf8"),l.trim(),l+=u.final("utf8")}catch{let S=Cw(a[0],i);if(S)l=S;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fs),me.error(Fs),new Error(Fs)}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(Fs),me.error(Fs),new Error(Fs)}else r.exp_date=l;r.exp_date<Sw().valueOf()&&(r.valid_date=!1),hf.validate(a[1],`${Rw}${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||me.error("Invalid licence"),r}o(mf,"validateLicense");function Cw(e,t){try{let r=Tf.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{me.warn("Check old license failed")}}o(Cw,"checkOldLicense");function Af(){let e=new Tw;e.api_call=0;let t=[];try{t=xs.readFileSync(Nw(),"utf-8").split(Ye.NEW_LINE)}catch(r){r.code==="ENOENT"?me.info("no license file found"):me.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(hw.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mf(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){me.error("There was an error parsing the license string."),me.error(n),e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT,e.ram_allocation=Ye.RAM_ALLOCATION_ENUM.DEFAULT,e.storage_type=Ye.STORAGE_TYPES_ENUM.LMDB,e.enterprise=!1}}return e.api_call===0&&(e.api_call=Ye.LICENSE_VALUES.API_CALL_DEFAULT),G_=e,e}o(Af,"licenseSearch");async function bw(){return G_||await Af(),G_}o(bw,"getLicense")});var Xr=f((nK,W_)=>{"use strict";var{Worker:Lw,MessageChannel:yw,parentPort:Xt,isMainThread:Of,threadId:ww,workerData:Mw}=require("worker_threads"),{PACKAGE_ROOT:Dw}=T(),{join:Uw,isAbsolute:Pw,extname:Hw}=require("path"),{totalmem:pf}=require("os"),$_=T(),If=H(),Bw=Vs(),jo=p(),vw=T();If.initSync();var Gw=If.get($_.CONFIG_PARAMS.HTTP_THREADS)||1,qw=1024*1024,mr=[],Jr=[],Fw=50,Cf=1e4,bf="restart",Lf="request_thread_info",yf="resource_report",wf="thread_info",Mf="added-port",V_;W_.exports={startWorker:k_,restartWorkers:K_,shutdownWorkers:Vw,workers:mr,setMonitorListener:Ww,onMessageFromWorkers:kw,broadcast:Yw};function k_(e,t={}){let s=Bw.licenseSearch().ram_allocation,n=process.constrainedMemory?.()||pf();n=Math.min(n,pf());let i=Math.min(Math.max(Math.floor(n/qw/(1+Gw/4)),512),s||1/0),a=Math.min(Math.max(i>>7,16),64),c=[];for(let u of Jr){let{port1:l,port2:E}=new yw;u.postMessage({type:Mf,port:l},[l]),c.push(E)}Hw(e)||(e+=".js");let _=new Lw(Pw(e)?e:Uw(Dw,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:i,maxYoungGenerationSizeMb:a},argv:process.argv.slice(2),workerData:{addPorts:c,name:t.name},transferList:c},t));return Jo(_,!0),_.unexpectedRestarts=t.unexpectedRestarts||0,_.startCopy=()=>{k_(e,t)},_.on("error",u=>{console.error("Worker error:",u),jo.error("Worker error:",u)}),_.on("exit",u=>{mr.splice(mr.indexOf(_),1),!_.wasShutdown&&t.autoRestart!==!1&&(_.unexpectedRestarts<Fw?(t.unexpectedRestarts=_.unexpectedRestarts+1,k_(e,t)):jo.error(`Thread has been restarted ${_.restarts} times and will not be restarted`))}),_.on("message",u=>{u.type===bf&&K_(u.workerType),u.type===Lf&&$w(_),u.type===yf&&Kw(_,u)}),mr.push(_),jw(),t.onStarted&&t.onStarted(_),_.name=t.name,_}o(k_,"startWorker");var xw=[$_.THREAD_TYPES.HTTP];async function K_(e=null,t=2,r=!0){if(Of){t<1&&(t=t*mr.length);let s=[];for(let n of mr.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({type:$_.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=xw.indexOf(n.name)>-1,a=new Promise(c=>{let _=setTimeout(()=>n.terminate(),Cf*2).unref();n.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),c()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Xt.postMessage({type:bf,workerType:e})}o(K_,"restartWorkers");function Vw(e){return K_(e,1/0,!1)}o(Vw,"shutdownWorkers");var Df=[];function kw(e){Df.push(e)}o(kw,"onMessageFromWorkers");function Yw(e){for(let t of Jr)try{t.postMessage(e)}catch(r){jo.error("Unable to send message to worker",r)}}o(Yw,"broadcast");function $w(e){e.postMessage({type:wf,workers:Uf()})}o($w,"sendThreadInfo");function Uf(){let e=Date.now();return mr.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(Uf,"getChildWorkerInfo");function Kw(e,t){e.resources=t,e.resources.updated=Date.now()}o(Kw,"recordResourceReport");var Y_;function Ww(e){Y_=e}o(Ww,"setMonitorListener");var Qw=1e3,Nf=!1;function jw(){Nf||(Nf=!0,setInterval(()=>{for(let e of mr){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Y_&&Y_()},Qw).unref())}o(jw,"startMonitoring");var Jw=1e3;if(Xt){Jo(Xt);for(let e of Mw.addPorts)Jo(e);setInterval(()=>{let e=process.memoryUsage();Xt.postMessage({type:yf,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Jw).unref(),V_=o(()=>new Promise((e,t)=>{Xt.on("message",r),Xt.postMessage({type:Lf});function r(s){s.type===wf&&(Xt.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else V_=Uf;W_.exports.getThreadInfo=V_;function Jo(e,t){Jr.push(e),e.on("message",r=>{if(r.type===Mf)Jo(r.port);else for(let s of Df)s(r)}).on("close",()=>{Jr.splice(Jr.indexOf(e),1)}).on("exit",()=>{Jr.splice(Jr.indexOf(e),1)}),t||e.unref()}o(Jo,"addPort");Of||Xt.on("message",async e=>{let{type:t}=e;t===vw.ITC_EVENT_TYPES.SHUTDOWN&&(Xt.unref(),setTimeout(()=>{jo.warn("Thread did not voluntarily terminate",ww),process.exit(0)},Cf).unref())})});var Bf=f((oK,Hf)=>{"use strict";var Q_=k(),Xw=p(),Pf=et().LMDB_ERRORS_ENUM;Hf.exports=Zw;async function Zw(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Q_.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==Pf.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Q_.closeEnvironment(global.lmdb_map[s]),await Q_.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Pf.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){Xw.error(t)}}o(Zw,"cleanLMDBMap")});var jf=f((_K,Qf)=>{"use strict";var j_=require("recursive-iterator"),zw=require("alasql"),J_=require("clone"),vf=O(),{handleHDBError:Gf,hdb_errors:eM}=J(),{HDB_ERROR_MSGS:qf,HTTP_STATUS_CODES:Ff}=eM,tM=["DISTINCT_ARRAY"],xf=Symbol("validateTables"),X_=Symbol("validateTable"),cK=Symbol("getAllColumns"),Vf=Symbol("validateAllColumns"),Xo=Symbol("findColumn"),kf=Symbol("validateOrderBy"),Kn=Symbol("validateSegment"),Z_=Symbol("validateColumn"),Yf=Symbol("setColumnsForTable"),$f=Symbol("checkColumnsForAsterisk"),Kf=Symbol("validateGroupBy"),Wf=Symbol("hasColumns"),Zo=class{constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xf](),this[$f](),this[Vf]()}[xf](){if(this[Wf]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[X_](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[X_](t.table)})}}[Wf](){let t=!1,r=new j_(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[X_](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;if(!global.hdb_schema[t.databaseid])throw Gf(new Error,qf.SCHEMA_NOT_FOUND(t.databaseid),Ff.NOT_FOUND);if(!global.hdb_schema[t.databaseid][t.tableid])throw Gf(new Error,qf.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ff.NOT_FOUND);global.hdb_schema[t.databaseid][t.tableid].attributes.forEach(s=>{let n=J_(s);n.table=J_(t),this.attributes.push(n)})}[Xo](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)}[$f](){let t=new j_(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yf](r.tableid)}[Yf](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new zw.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Vf](){this[Kn](this.statement.columns,!1),this[Kn](this.statement.joins,!1),this[Kn](this.statement.where,!1),this[Kf](this.statement.group,!1),this[Kn](this.statement.order,!0)}[Kn](t,r){if(!t)return;let s=new j_(t),n=[];for(let{node:i,path:a}of s)!vf.isEmpty(i)&&!vf.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[kf](i):n.push(this[Z_](i)));return n}[Kf](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tM.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=J_(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Xo](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[Xo](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,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`}[kf](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[Z_](t)}[Z_](t){let r=this[Xo](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]}};o(Zo,"SelectValidator");Qf.exports=Zo});var zf=f((lK,Zf)=>{"use strict";var Jf=require("lodash"),Wn=require("mathjs"),rM=require("jsonata"),Xf=O();Zf.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Jf.uniqWith(e,Jf.isEqual):e,searchJSON:sM,mad:Qn.bind(null,Wn.mad),mean:Qn.bind(null,Wn.mean),mode:Qn.bind(null,Wn.mode),prod:Qn.bind(null,Wn.prod),median:Qn.bind(null,Wn.median)};function Qn(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}o(Qn,"aggregateFunction");function sM(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(Xf.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Xf.isEmpty(this.__ala__.res[r])){let s=rM(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(sM,"searchJSON")});var th=f((dK,eh)=>{"use strict";var re=require("moment"),z_="YYYY-MM-DDTHH:mm:ss.SSSZZ";re.suppressDeprecationWarnings=!0;eh.exports={current_date:()=>re().utc().format("YYYY-MM-DD"),current_time:()=>re().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return re(e).utc().format("YYYY");case"month":return re(e).utc().format("MM");case"day":return re(e).utc().format("DD");case"hour":return re(e).utc().format("HH");case"minute":return re(e).utc().format("mm");case"second":return re(e).utc().format("ss");case"millisecond":return re(e).utc().format("SSS");default:break}},date:e=>re(e).utc().format(z_),date_format:(e,t)=>re(e).utc().format(t),date_add:(e,t,r)=>re(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>re(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=re(e).utc(),n=re(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>re().utc().valueOf(),get_server_time:()=>re().format(z_),offset_utc:(e,t)=>re(e).utc().utcOffset(t).format(z_)}});var ih=f((SK,nh)=>{"use strict";var nM=require("@turf/area"),iM=require("@turf/length"),oM=require("@turf/circle"),aM=require("@turf/difference"),cM=require("@turf/distance"),_M=require("@turf/boolean-contains"),uM=require("@turf/boolean-equal"),lM=require("@turf/boolean-disjoint"),EM=require("@turf/helpers"),rh=T(),U=O();nh.exports={geoArea:dM,geoLength:SM,geoCircle:fM,geoDifference:hM,geoDistance:sh,geoNear:TM,geoContains:RM,geoEqual:mM,geoCrosses:AM,geoConvert:gM};var eu="geo1 is required",tu="geo2 is required";function dM(e){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),nM.default(e)}o(dM,"geoArea");function SM(e,t){if(U.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),iM.default(e,{units:t||"kilometers"})}o(SM,"geoLength");function fM(e,t,r){if(U.isEmpty(e))throw new Error("point is required");if(U.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),oM.default(e,t,{units:r||"kilometers"})}o(fM,"geoCircle");function hM(e,t){if(U.isEmpty(e))throw new Error("poly1 is required");if(U.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),aM(e,t)}o(hM,"geoDifference");function sh(e,t,r){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),cM.default(e,t,{units:r||"kilometers"})}o(sh,"geoDistance");function TM(e,t,r,s){if(U.isEmpty(e))throw new Error("point1 is required");if(U.isEmpty(t))throw new Error("point2 is required");if(U.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return sh(e,t,s)<=r}o(TM,"geoNear");function RM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),_M.default(e,t)}o(RM,"geoContains");function mM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),uM.default(e,t)}o(mM,"geoEqual");function AM(e,t){if(U.isEmpty(e))throw new Error(eu);if(U.isEmpty(e))throw new Error(tu);return typeof e=="string"&&(e=U.autoCastJSON(e)),typeof t=="string"&&(t=U.autoCastJSON(t)),!lM.default(e,t)}o(AM,"geoCrosses");function gM(e,t,r){if(U.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(U.isEmpty(t))throw new Error("geo_type is required");if(U.isEmpty(rh.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(rh.GEO_CONVERSION_ENUM).join(",")}`);return EM[t](e,r)}o(gM,"geoConvert")});var ah=f((hK,oh)=>{var Zr=zf(),$e=th(),Lt=ih();oh.exports=e=>{e.aggr.mad=e.aggr.MAD=Zr.mad,e.aggr.mean=e.aggr.MEAN=Zr.mean,e.aggr.mode=e.aggr.MODE=Zr.mode,e.aggr.prod=e.aggr.PROD=Zr.prod,e.aggr.median=e.aggr.MEDIAN=Zr.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Zr.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Zr.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=$e.current_date,e.fn.current_time=e.fn.CURRENT_TIME=$e.current_time,e.fn.extract=e.fn.EXTRACT=$e.extract,e.fn.date=e.fn.DATE=$e.date,e.fn.date_format=e.fn.DATE_FORMAT=$e.date_format,e.fn.date_add=e.fn.DATE_ADD=$e.date_add,e.fn.date_sub=e.fn.DATE_SUB=$e.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=$e.date_diff,e.fn.now=e.fn.NOW=$e.now,e.fn.offset_utc=e.fn.OFFSET_UTC=$e.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=$e.get_server_time,e.fn.getdate=e.fn.GETDATE=$e.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=$e.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Lt.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Lt.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Lt.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Lt.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Lt.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Lt.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Lt.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Lt.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Lt.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Lt.geoNear}});var uh=f((TK,_h)=>{"use strict";var jn=require("lodash"),he=require("alasql");he.options.cache=!1;var pM=ah(),ch=require("clone"),zo=require("recursive-iterator"),y=p(),D=O(),ks=zr(),NM=T(),{hdb_errors:OM}=J(),IM="IS NULL",St="There was a problem performing this search. Please check the logs and try again.";pM(he);var ea=class{constructor(t,r){if(D.isEmpty(t))throw y.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(),D.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!D.isEmptyOrZeroLength(s))return y.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw y.error("Error thrown from checkEmptySQL in SQLSearch class method search."),y.error(s),new Error(St)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw y.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),y.error(s),new Error(St)}if(Object.keys(this.data).length===0)return y.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw y.error("Error thrown from processJoins in SQLSearch class method search."),y.error(s),new Error(St)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw y.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),y.error(s),new Error(St)}try{return t=await this._finalSQL(),t}catch(s){throw y.error("Error thrown from finalSQL in SQLSearch class method search."),y.error(s),new Error(St)}}_getColumns(){let t=new zo(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(ch(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=jn.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(D.isEmpty(this.statement.where)){y.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new zo(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!D.isEmpty(r)&&r.right)if(D.isNotEmptyAndHasValue(r.right.value)){let s=D.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new he.yy.LogicValue({value:s}):r.right instanceof he.yy.StringValue&&!D.isEmpty(s)&&D.autoCasterIsNumberCheck(s.toString())&&(r.right=new he.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=D.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new he.yy.LogicValue({value:i}):s instanceof he.yy.StringValue&&D.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new he.yy.NumValue({value:i}))});if(t){y.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new zo(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!D.isEmpty(NM.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(D.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(D.isEmptyOrZeroLength(r.left.columnid)||D.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(D.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!D.isEmpty(r.right.value)||!D.isEmpty(r.left.value)?s.add(D.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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...s])}}}_setAliasesForColumns(){if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from)&&D.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&&jn.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(D.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);D.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(D.isEmptyOrZeroLength(this.all_table_attributes)&&!D.isEmptyOrZeroLength(this.columns.columns))return t;if(D.isEmptyOrZeroLength(this.all_table_attributes)&&D.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await he.promise(r)}catch(r){throw y.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),y.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(ch(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(D.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(IM)>-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=jn.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=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===a&&(_=!0),!D.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!D.isEmptyOrZeroLength(this.exact_search_values[u].values))if(_)try{c.hash_values=Array.from(this.exact_search_values[u].values);let l=await ks.getDataByHash(c);for(let E of c.hash_values)l.get(E)&&!this.data[i].__merged_data[E]&&(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,E))}catch(l){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}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 ks.getDataByValue(E);for(let[S,R]of d)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,R[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(S)))}))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),y.error(l),new Error(St)}else if(!D.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!D.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 R=await ks.getDataByValue(c,S.operation);if(_)for(let[m]of R)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(m)));else for(let[m,b]of R)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,b[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(m)))}}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),y.error(l),new Error(St)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await ks.getDataByValue(c);if(_)for(let[E]of l)this.data[i].__merged_data[E]||(this.data[i].__merged_data[E]=[...s[i]],this._setMergedHashAttribute(i,D.autoCast(E)));else for(let[E,d]of l)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,d[n.attribute]),this._setMergedHashAttribute(i,D.autoCast(E)))}catch(l){throw y.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),y.error(l),new Error(St)}}}_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 he.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,a=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===a});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 he.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new he.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 he.yy.FuncValue:new he.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 R=S.joinmode+" JOIN ? AS "+(S.as?S.as:S.table.tableid);S.on&&(R+=" ON "+S.on.toString()),i.push(R),t.push(Object.values(this.data[`${S.table.databaseid_orig}_${S.table.as?S.table.as_orig:S.table.tableid_orig}`].__merged_data))});let a=[],c={};n.forEach(S=>{let R=this.data[`${S.databaseid_orig}_${S.as?S.as_orig:S.tableid_orig}`].__hash_name,m=S.as?S.as_orig:S.tableid_orig;a.push({key:`'${m}.${R}'`,schema:S.databaseid_orig,table:S.as?S.as_orig:S.tableid_orig,keys:new Set}),r.push(`${S.as?S.as:S.tableid}.\`${R}\` AS "${m}.${R}"`),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}`,R=this._convertColumnsToIndexes(S,n);d=await he.promise(R,t),t=null}catch(S){throw y.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),y.error(S),new Error("There was a problem processing the data.")}if(d&&d.length>0){for(let S=0,R=d.length;S<R;S++){let m=d[S];a.forEach(b=>{m[b.key]!==null&&m[b.key]!==void 0&&b.keys.add(m[b.key])})}a.forEach(S=>{let R=Object.keys(this.data[`${S.schema}_${S.table}`].__merged_data),m=jn.difference(R,[...S.keys].map(b=>b.toString()));for(let b=0,$=m.length;b<$;b++){let A=m[b];delete this.data[`${S.schema}_${S.table}`].__merged_data[A]}})}return{existing_attributes:c,joined_length:d?d.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new zo(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&s.push(a)}}s=jn.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){throw y.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),y.error(i),new Error(St)}}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,a=[];for(let l in i)a.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},_=await ks.getDataByHash(c),u=n.columns.length;for(let l=0,E=a.length;l<E;l++){let d=a[l],S=_.get(d);for(let R=0;R<u;R++){let m=n.columns[R],b=S[m]===void 0?null:S[m];this.data[s].__merged_data[d].push(b)}}}}catch(r){throw y.error("Error thrown from getDataByHash function in SQLSearch class method getData."),y.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(a=>{let c=a.aggregatorid?a.expression:a,_=a.aggregatorid?a.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();y.trace(`Final SQL: ${n}`),s=await he.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),y.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw y.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),y.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 y.error(OM.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),y.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((a,c)=>{let _=n[i],u=new RegExp(`${_}.\`${a}\``,"g"),l=`${_}.[${c}]`;s=s.replace(u,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let _=new RegExp(`\`${a}\``,"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 a=await ks.getDataByValue(i);for(let[c,_]of a)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]]=_[s.attribute]}catch(a){throw y.error("There was an error when processing this SQL operation. Check your logs"),y.error(a),new Error(St)}}return Object.values(Object.values(this.data)[0].__merged_data)}};o(ea,"SQLSearch");_h.exports=ea});var es=f((mK,Eh)=>{"use strict";var CM=jf();Eh.exports={searchByConditions:wM,searchByHash:MM,searchByValue:DM,search:UM};var ru=zr(),lh=require("util"),bM=lh.callbackify(ru.searchByHash),LM=lh.callbackify(ru.searchByValue),yM=uh();async function wM(e){return ru.searchByConditions(e)}o(wM,"searchByConditions");function MM(e,t){try{bM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(MM,"searchByHash");function DM(e,t){try{e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc),LM(e,(r,s)=>{if(r){t(r);return}t(null,s)})}catch(r){return t(r)}}o(DM,"searchByValue");function UM(e,t){try{let r=new CM(e);r.validate(),new yM(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(UM,"search")});var Xn=f((gK,hh)=>{"use strict";var Jn=require("crypto"),Sh="aes-256-cbc",PM=32,HM=16,su=64,fh=32,BM=su+fh,dh=new Map;hh.exports={encrypt:vM,decrypt:GM,createNatsTableStreamName:qM};function vM(e){let t=Jn.randomBytes(PM),r=Jn.randomBytes(HM),s=Jn.createCipheriv(Sh,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=n.toString("hex");return i+a+c}o(vM,"encrypt");function GM(e){let t=e.substr(0,su),r=e.substr(su,fh),s=e.substr(BM,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=Jn.createDecipheriv(Sh,Buffer.from(t,"hex"),n),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(GM,"decrypt");function qM(e,t){let r=`${e}.${t}`,s=dh.get(r);return s||(s=Jn.createHash("md5").update(`${e}.${t}`).digest("hex"),dh.set(r,s)),s}o(qM,"createNatsTableStreamName")});var iu=f((OK,Th)=>{"use strict";var FM=T(),NK=Sr();function nu(e,t){let r=Object.create(null);if(t.length===1&&FM.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}o(nu,"parseRow");function xM(e,t,r,s){let n=nu(r,e);s.push(n)}o(xM,"searchAll");function VM(e,t,r,s){let n=nu(r,e);s[t]=n}o(VM,"searchAllToMap");function kM(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(kM,"iterateDBI");function ts(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(ts,"pushResults");function YM(e,t,r,s,n,i){t.toString().endsWith(e)&&ts(t,r,s,n,i)}o(YM,"endsWith");function $M(e,t,r,s,n,i){t.toString().includes(e)&&ts(t,r,s,n,i)}o($M,"contains");function KM(e,t,r,s,n,i){t>e&&ts(t,r,s,n,i)}o(KM,"greaterThanCompare");function WM(e,t,r,s,n,i){t>=e&&ts(t,r,s,n,i)}o(WM,"greaterThanEqualCompare");function QM(e,t,r,s,n,i){t<e&&ts(t,r,s,n,i)}o(QM,"lessThanCompare");function jM(e,t,r,s,n,i){t<=e&&ts(t,r,s,n,i)}o(jM,"lessThanEqualCompare");Th.exports={parseRow:nu,searchAll:xM,searchAllToMap:VM,iterateDBI:kM,endsWith:YM,contains:$M,greaterThanCompare:KM,greaterThanEqualCompare:WM,lessThanCompare:QM,lessThanEqualCompare:jM,pushResults:ts}});var ss=f((yK,Oh)=>{"use strict";var Ar=k(),CK=p(),Ke=Sr(),ta=de(),ee=et().LMDB_ERRORS_ENUM,bK=O(),JM=T(),ra=iu(),{parseRow:XM}=ra,LK=require("lmdb"),{OVERFLOW_MARKER:Rh,MAX_SEARCH_KEY_LENGTH:ZM}=ta;function mh(e,t,r,s=!1,n=void 0,i=void 0){return rs(e,t,r,(a,c)=>c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o(mh,"iterateFullIndex");function Zn(e,t,r,s,n,i=!1,a=void 0,c=void 0,_=!1,u=!1){return rs(e,t,r,(l,E,d,S)=>{let A={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!_:!u,exclusiveStart:i===!0?u:_};return S===r?(A.values=!1,E.getRange(A).map(B=>({value:B}))):E.getRange(A)})}o(Zn,"iterateRangeBetween");function rs(e,t,r,s){let n=e.database||e,i=Ar.openDBI(n,r);i[ta.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ar.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=s(a,i,n,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(rs,"setupTransaction");function Ah(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(Rh)){if(!n)if(r)n=Ar.openDBI(e,r);else{let _=Ar.listDBIs(e);for(let u=0,l=_.length;u<l&&(n=Ar.openDBI(e,_[u]),!n[ta.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(Ah,"getOverflowCheck");function zM(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return rs(e,t,t,(a,c,_)=>(sa(r),r=zn(_,r),c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(u=>XM(u.value,r))))}o(zM,"searchAll");function eD(e,t,r,s=!1,n=void 0,i=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);sa(r),r=zn(e.database||e,r);let a=new Map;for(let{key:c,value:_}of mh(e,t,t,s,n,i))a.set(c,ra.parseRow(_,r));return a}o(eD,"searchAllToMap");function tD(e,t,r=!1,s=void 0,n=void 0){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=mh(e,void 0,t,r,s,n),c=a.transaction,_=Ah(c.database,c,void 0,t);for(let{key:u,value:l}of a){let E=_(u,l);i[E]===void 0&&(i[E]=[]),i[E].push(l)}return i}o(tD,"iterateDBI");function rD(e,t){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);return Ar.statDBI(e,t).entryCount}o(rD,"countAll");function sD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,t,r,(c,_,u,l)=>(s=Ke.convertKeyValueToWrite(s),l===r?_.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:_.getValues(s,{transaction:c,reverse:n,limit:i,offset:a}).map(E=>({key:s,value:E}))))}o(sD,"equals");function nD(e,t,r){return gr(e,t,r),Ar.openDBI(e,t).getValuesCount(r)}o(nD,"count");function iD(e,t,r,s,n=!1,i=void 0,a=void 0){return gr(e,r,s),rs(e,null,r,(c,_)=>{s=Ke.convertKeyValueToWrite(s);let u=!0;typeof s=="number"&&(u=!1);let l;if(n===!0){let E;for(let d of _.getKeys({transaction:c,start:s}))if(!d.startsWith(s)){E=d;break}return E!==void 0&&(Number.isInteger(a)?a++:i++),l=_.getRange({transaction:c,start:E,end:void 0,reverse:n,limit:i,offset:a}).map(d=>{let{key:S}=d;if(S!==E){if(S.toString().startsWith(s))return d;if(u===!0)return l.DONE}}),l.filter(d=>d)}else return l=_.getRange({transaction:c,start:s,reverse:n,limit:i,offset:a}).map(E=>{if(E.key.toString().startsWith(s))return E;if(u===!0)return l.DONE}),u?l:l.filter(E=>E)})}o(iD,"startsWith");function oD(e,t,r,s,n=!1,i=void 0,a=void 0){return gh(e,t,r,s,n,i,a,!0)}o(oD,"endsWith");function gh(e,t,r,s,n=!1,i=void 0,a=void 0,c=!1){return gr(e,r,s),rs(e,null,r,(_,u,l,E)=>{let d=Ah(l,_,E,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:_,end:n?!1:void 0,reverse:n}).flatMap(S=>{let R=S.toString();return R.endsWith(Rh)?u.getValues(S,{transaction:_}).map(m=>{let b=d(S,m);if(c?b.endsWith(s):b.includes(s))return{key:b,value:m}}).filter(m=>m):(c?R.endsWith(s):R.includes(s))?u[ta.DBI_DEFINITION_NAME].is_hash_attribute?{key:S,value:S}:u.getValues(S,{transaction:_}).map(m=>({key:S,value:m})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(gh,"contains");function aD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!0,!1)}o(aD,"greaterThan");function cD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\uFFFF":c==="number"?_=1/0:c==="boolean"&&(_=!0),Zn(e,t,r,s,_,n,i,a,!1,!1)}o(cD,"greaterThanEqual");function _D(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!0)}o(_D,"lessThan");function uD(e,t,r,s,n=!1,i=void 0,a=void 0){gr(e,r,s);let c=typeof s,_;return c==="string"?_="\0":c==="number"?_=-1/0:c==="boolean"&&(_=!1),Zn(e,t,r,_,s,n,i,a,!1,!1)}o(uD,"lessThanEqual");function lD(e,t,r,s,n,i=!1,a=void 0,c=void 0){if(Ke.validateEnv(e),r===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ee.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ee.END_VALUE_REQUIRED);if(s=Ke.convertKeyValueToWrite(s),n=Ke.convertKeyValueToWrite(n),s>n)throw new Error(ee.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Zn(e,t,r,s,n,i,a,c)}o(lD,"between");function ED(e,t,r,s){Ke.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),r=zn(n,r),s===void 0)throw new Error(ee.ID_REQUIRED);let a=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(a=ra.parseRow(c,r)),a}o(ED,"searchByHash");function dD(e,t,r){Ke.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(dD,"checkHashExists");function SD(e,t,r,s,n=[]){return Nh(e,t,r,s,n),ph(e,t,r,s,n).map(i=>i[1])}o(SD,"batchSearchByHash");function fD(e,t,r,s,n=[]){Nh(e,t,r,s,n);let i=new Map;for(let[a,c]of ph(e,t,r,s,n))i.set(a,c);return i}o(fD,"batchSearchByHashToMap");function ph(e,t,r,s,n=[]){return rs(e,t,t,(i,a,c)=>{r=zn(c,r);let _=r.length<3;return s.map(u=>{let l=c.dbis[t].get(u,{transaction:i,lazy:_});if(l)return[u,ra.parseRow(l,r)];n.push(u)}).filter(u=>u)})}o(ph,"batchHashSearch");function Nh(e,t,r,s,n){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.HASH_ATTRIBUTE_REQUIRED);if(sa(r),s==null)throw new Error(ee.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ee.IDS_MUST_BE_ITERABLE)}o(Nh,"initializeBatchSearchByHash");function sa(e){if(!Array.isArray(e))throw e===void 0?new Error(ee.FETCH_ATTRIBUTES_REQUIRED):new Error(ee.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(sa,"validateFetchAttributes");function gr(e,t,r){if(Ke.validateEnv(e),t===void 0)throw new Error(ee.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ee.SEARCH_VALUE_REQUIRED);if(r?.length>ZM)throw new Error(ee.SEARCH_VALUE_TOO_LARGE)}o(gr,"validateComparisonFunctions");function zn(e,t){return t.length===1&&JM.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ar.listDBIs(e)),t}o(zn,"setGetWholeRowAttributes");Oh.exports={searchAll:zM,searchAllToMap:eD,count:nD,countAll:rD,equals:sD,startsWith:iD,endsWith:oD,contains:gh,searchByHash:ED,setGetWholeRowAttributes:zn,batchSearchByHash:SD,batchSearchByHashToMap:fD,checkHashExists:dD,iterateDBI:tD,greaterThan:aD,greaterThanEqual:cD,lessThan:_D,lessThanEqual:uD,between:lD}});var ti=f((MK,Dh)=>{"use strict";var Ch=es(),pr=p(),bh=U_(),hD=require("lodash"),TD=Xn(),Lh=O(),{promisify:yh}=require("util"),Q=T(),{handleHDBError:na,hdb_errors:RD}=J(),{HDB_ERROR_MSGS:ia,HTTP_STATUS_CODES:wh}=RD,mD=H();mD.initSync();var Ih=k(),AD=ss(),{getSchemaPath:gD}=K(),ei=yh(Ch.searchByValue),pD=yh(Ch.searchByHash),Ys="name",Mh="hash_attribute",ou="schema",ND="schema_table",OD="attribute";Dh.exports={describeAll:ID,describeTable:oa,describeSchema:bD};async function ID(e){try{let t=Lh.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,search_attribute:Ys,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Ys]},i=await ei(n),a={},c={};for(let d of i)a[d.name]=!0,!t&&!s&&(c[d.name]=r[d.name].describe);let _={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,search_attribute:Q.ID_ATTRIBUTE_STRING,search_value:Q.WILDCARD_SEARCH_VALUE,get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},u=await ei(_),l=[];for(let d of u)try{let S;if(t||s)S=await oa({schema:d.schema,table:d.name});else if(r&&r[d.schema].describe&&r[d.schema].tables[d.name].describe){let R=r[d.schema].tables[d.name].attribute_permissions;S=await oa({schema:d.schema,table:d.name},R)}S&&l.push(S)}catch(S){pr.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],a[l[d].schema]&&delete a[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],a[l[d].schema]&&delete a[l[d].schema]);for(let d in a)t||s?E[d]={}:c[d]&&(E[d]={});return E}catch(t){return pr.error("Got an error in describeAll"),pr.error(t),na(new Error,ia.DESCRIBE_ALL_ERR)}}o(ID,"describeAll");async function oa(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={},a=bh.describe_table(e);if(a)throw a;if(r===Q.SYSTEM_SCHEMA_NAME)return global.hdb_schema[Q.SYSTEM_SCHEMA_NAME][s];let c={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:Ys,search_value:s,hash_values:[],get_attributes:[Q.WILDCARD_SEARCH_VALUE]},_=Array.from(await ei(c));if(!_||_.length===0)throw na(new Error,ia.TABLE_NOT_FOUND(e.schema,e.table),wh.NOT_FOUND);for await(let u of _)try{if(u.schema!==r)continue;if(i=u,!i.hash_attribute)throw na(new Error,ia.INVALID_TABLE_ERR(i));let l={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.ATTRIBUTE_TABLE_HASH_ATTRIBUTE,search_attribute:ND,search_value:r+"."+s,get_attributes:[OD]},E=Array.from(await ei(l));E=hD.uniqBy(E,d=>d.attribute),n&&n.length>0&&(E=CD(n)),i.attributes=E,i.clustering_stream_name=TD.createNatsTableStreamName(u.schema,u.name);try{let d=gD(i.schema,i.name),S=await Ih.openEnvironment(d,i.name),R=Ih.statDBI(S,i.hash_attribute);i.record_count=R.entryCount;for(let{key:m}of AD.lessThan(S,i.hash_attribute,Q.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,1/0,!0,1,0))i.last_updated_record=m}catch(d){pr.warn(`unable to stat table dbi due to ${d}`)}}catch(l){pr.error(`There was an error getting attributes for table '${u.name}'`),pr.error(l)}return i}o(oa,"descTable");function CD(e){return e.reduce((t,r)=>(r.describe&&t.push({attribute:r.attribute_name}),t),[])}o(CD,"getAttrsByPerms");async function bD(e){let t=bh.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),n={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.TABLE_TABLE_HASH_ATTRIBUTE,search_attribute:ou,search_value:s,hash_values:[],get_attributes:[Mh,Q.ID_ATTRIBUTE_STRING,Ys,ou]},i=Array.from(await ei(n));if(i&&i.length<1){let a={schema:Q.SYSTEM_SCHEMA_NAME,table:Q.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,hash_attribute:Q.SYSTEM_TABLE_HASH_ATTRIBUTES.SCHEMA_TABLE_HASH_ATTRIBUTE,hash_values:[s],get_attributes:[Ys]},c=Array.from(await pD(a));if(c&&c.length<1)throw na(new Error,ia.SCHEMA_NOT_FOUND(e.schema),wh.NOT_FOUND);return{}}else{let a={};return await Promise.all(i.map(async c=>{try{let _;if(r&&r.tables[c.name]&&(_=r.tables[c.name]),Lh.isEmpty(_)||_.describe){let u=await oa({schema:e.schema,table:c.name},_?_.attribute_permissions:null);u&&(a[u.name]=u)}}catch(_){pr.error(`Error describing schema table '${e.schema}.${c}'`),pr.error(_)}})),a}}o(bD,"describeSchema")});var ns=f((UK,vh)=>{var $s=jt(),{callbackify:Hh,promisify:LD}=require("util");vh.exports={setSchemaDataToGlobal:Uh,getTableSchema:MD,getSystemSchema:UD,setSchemaDataToGlobalAsync:LD(Uh)};var Bh=ti(),yD=Hh(Bh.describeAll),wD=Hh(Bh.describeTable);function Uh(e){yD(null,(t,r)=>{if(t){e(t);return}r.system||(r.system=$s),global.hdb_schema=r,e(null,null)})}o(Uh,"setSchemaDataToGlobal");function Ph(e,t){return e==="system"?$s[t]:global.hdb_schema[e][t]}o(Ph,"returnSchema");function MD(e,t,r){!global.hdb_schema||!global.hdb_schema[e]||!global.hdb_schema[e][t]?DD(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,Ph(e,t))}):r(null,Ph(e,t))}o(MD,"getTableSchema");function DD(e,t,r){let s={table:t,schema:e};if(e==="system"){global.hdb_schema?global.hdb_schema.system=$s:global.hdb_schema={system:$s},r();return}wD(s,(n,i)=>{if(n){r(n);return}if(!i.schema&&!i.name){r();return}global.hdb_schema||(global.hdb_schema={system:$s}),global.hdb_schema[e]||(global.hdb_schema[e]={}),global.hdb_schema[e][t]=i,r()})}o(DD,"setTableDataToGlobal");function UD(){return $s}o(UD,"getSystemSchema")});var aa=f((HK,xh)=>{"use strict";var is=p(),We=T(),PD=Bf(),Gh=ns(),HD=ti(),BD=Nr(),{validateEvent:Fh}=os(),ri=zr(),vD=require("process"),GD={[We.ITC_EVENT_TYPES.SCHEMA]:qD,[We.ITC_EVENT_TYPES.USER]:xD};async function qD(e){let t=Fh(e);if(t){is.error(t);return}is.trace("ITC schemaHandler received schema event:",e),await PD(e.message),await FD(e.message)}o(qD,"schemaHandler");async function FD(e){try{if(ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME),global.hdb_schema!==void 0&&typeof global.hdb_schema=="object"&&e.operation!==void 0)switch(e.operation){case"drop_schema":delete global.hdb_schema[e.schema];break;case"drop_table":global.hdb_schema[e.schema]!==void 0&&delete global.hdb_schema[e.schema][e.table];break;case"create_schema":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={});break;case"create_table":case"create_attribute":global.hdb_schema[e.schema]===void 0&&(global.hdb_schema[e.schema]={}),global.hdb_schema[e.schema][e.table]=await HD.describeTable({schema:e.schema,table:e.table});break;default:Gh.setSchemaDataToGlobal(qh);break}else Gh.setSchemaDataToGlobal(qh)}catch(t){is.error(t)}}o(FD,"syncSchemaMetadata");function qh(e){e&&is.error(e)}o(qh,"handleErrorCallback");async function xD(e){try{ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ri.resetReadTxn(We.SYSTEM_SCHEMA_NAME,We.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME);let t=Fh(e);if(t){is.error(t);return}is.trace(`ITC userHandler ${We.HDB_ITC_CLIENT_PREFIX}${vD.pid} received user event:`,e),await BD.setUsersToGlobal()}catch(t){is.error(t)}}o(xD,"userHandler");xh.exports=GD});var os=f((FK,kh)=>{"use strict";var vK=p(),au=O(),VD=T(),{ITC_ERRORS:si}=et(),{parentPort:GK,threadId:kD,isMainThread:YD,workerData:qK}=require("worker_threads"),{onMessageFromWorkers:$D,broadcast:KD}=Xr();kh.exports={sendItcEvent:WD,validateEvent:Vh,SchemaEventMsg:QD,UserEventMsg:jD};var ca;$D(e=>{ca=ca||aa(),Vh(e),ca[e.type]&&ca[e.type](e)});function WD(e){!YD&&e.message&&(e.message.originator=kD),KD(e)}o(WD,"sendItcEvent");function Vh(e){if(typeof e!="object")return si.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||au.isEmpty(e.type))return si.MISSING_TYPE;if(!e.hasOwnProperty("message")||au.isEmpty(e.message))return si.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||au.isEmpty(e.message.originator))return si.MISSING_ORIGIN;if(VD.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return si.INVALID_EVENT(e.type)}o(Vh,"validateEvent");function QD(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(QD,"SchemaEventMsg");function jD(e){this.originator=e}o(jD,"UserEventMsg")});var ni=f((kK,Wh)=>{"use strict";var Yh=T(),VK=O(),_a=p(),$h=uf(),Ks,{sendItcEvent:Kh}=os();function JD(e){try{_a.trace("signalSchemaChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.SCHEMA,e);Ks.schema(t),Kh(t)}catch(t){_a.error(t)}}o(JD,"signalSchemaChange");function XD(e){try{_a.trace("signalUserChange called with message:",e),Ks=Ks||aa();let t=new $h(Yh.ITC_EVENT_TYPES.USER,e);Ks.user(t),Kh(t)}catch(t){_a.error(t)}}o(XD,"signalUserChange");Wh.exports={signalSchemaChange:JD,signalUserChange:XD}});var ua=f(($K,jh)=>{"use strict";var Qh=O(),ZD=T(),zD=p(),eU=Fo(),tU=qo(),rU=ni(),{SchemaEventMsg:sU}=os(),nU="already exists in";jh.exports=iU;async function iU(e,t,r){if(Qh.isEmptyOrZeroLength(r))return r;let s=[];Qh.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 oU(e,t.schema,t.name,i)})),n}o(iU,"lmdbCheckForNewAttributes");async function oU(e,t,r,s){let n=new tU(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await aU(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(nU))zD.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(oU,"createNewAttribute");async function aU(e){let t;return t=await eU(e),rU.signalSchemaChange(new sU(process.pid,ZD.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(aU,"createAttribute")});var Ws=f((WK,Jh)=>{"use strict";var la=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}};o(la,"LMDBTransactionObject");Jh.exports=la});var Zh=f((jK,Xh)=>{"use strict";var cU=Ws(),_U=T().OPERATIONS_ENUM,Ea=class extends cU{constructor(t,r,s,n,i=void 0){super(_U.INSERT,r,s,n,i),this.records=t}};o(Ea,"LMDBInsertTransactionObject");Xh.exports=Ea});var eT=f((XK,zh)=>{"use strict";var uU=Ws(),lU=T().OPERATIONS_ENUM,da=class extends uU{constructor(t,r,s,n,i,a=void 0){super(lU.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};o(da,"LMDBUpdateTransactionObject");zh.exports=da});var rT=f((zK,tT)=>{"use strict";var EU=Ws(),dU=T().OPERATIONS_ENUM,Sa=class extends EU{constructor(t,r,s,n,i,a=void 0){super(dU.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};o(Sa,"LMDBUpsertTransactionObject");tT.exports=Sa});var nT=f((t1,sT)=>{"use strict";var SU=Ws(),fU=T().OPERATIONS_ENUM,fa=class extends SU{constructor(t,r,s,n,i=void 0){super(fU.DELETE,s,n,t,i),this.original_records=r}};o(fa,"LMDBDeleteTransactionObject");sT.exports=fa});var ii=f((n1,cT)=>{"use strict";var s1=require("path"),iT=k(),hU=Zh(),TU=eT(),RU=rT(),mU=nT(),Qs=de(),oT=O(),{CONFIG_PARAMS:AU}=T(),aT=H();aT.initSync();var ha=T().OPERATIONS_ENUM,{getTransactionAuditStorePath:gU}=K();cT.exports=pU;async function pU(e,t){if(aT.get(AU.LOGGING_AUDITLOG)===!1)return;let r=gU(e.schema,e.table),s=await iT.openEnvironment(r,e.table,!0),n=NU(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){iT.initializeDBIs(s,Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qs.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),oT.isEmpty(n.user_name)||s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Qs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(pU,"writeTransaction");function NU(e,t){let r=oT.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ha.INSERT)return new hU(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPDATE)return new TU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.UPSERT)return new RU(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ha.DELETE)return new mU(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(NU,"createTransactionObject")});var cu=f((a1,_T)=>{"use strict";var OU=xo(),o1=ko(),oi=T(),IU=$o(),CU=jr().insertRecords,bU=k(),LU=p(),yU=ua(),{getSchemaPath:wU}=K(),MU=ii();_T.exports=DU;async function DU(e){try{let{schema_table:t,attributes:r}=OU(e);IU(e,r,t.hash_attribute),e.schema!==oi.SYSTEM_SCHEMA_NAME&&(r.includes(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await yU(e.hdb_auth_header,t,r),n=wU(e.schema,e.table),i=await bU.openEnvironment(n,e.table),a=await CU(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await MU(e,a)}catch(c){LU.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(DU,"lmdbCreateRecords")});var ET=f((_1,lT)=>{"use strict";var uT=T(),UU=cu(),PU=ko(),HU=require("fs-extra"),{getSchemaPath:BU}=K();lT.exports=vU;async function vU(e){let t=[{name:e.schema,createddate:Date.now()}],r=new PU(uT.SYSTEM_SCHEMA_NAME,uT.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await UU(r),await HU.mkdirp(BU(e.schema))}o(vU,"lmdbCreateSchema")});var ST=f((l1,dT)=>{"use strict";var Ta=class{constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};o(Ta,"DeleteRecordsResponseObject");dT.exports=Ta});var lu=f((h1,TT)=>{"use strict";var fT=k(),_u=Sr(),uu=et().LMDB_ERRORS_ENUM,GU=de(),hT=p(),d1=O(),qU=require("lmdb"),FU=ST(),xU=T(),{OVERFLOW_MARKER:S1,MAX_SEARCH_KEY_LENGTH:f1}=GU,VU=xU.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kU(e,t,r,s){if(_u.validateEnv(e),t===void 0)throw new Error(uu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uu.IDS_REQUIRED):new Error(uu.IDS_MUST_BE_ITERABLE);try{let n=fT.listDBIs(e);fT.initializeDBIs(e,t,n);let i=new FU,a,c=[],_=[];for(let d=0,S=r.length;d<S;d++)try{a=r[d];let R=e.dbis[t].get(a);if(!R||s&&R[VU]>s){i.skipped.push(a);continue}let m=e.dbis[t].ifVersion(a,qU.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let b=0;b<n.length;b++){let $=n[b];if(!R.hasOwnProperty($)||$===t)continue;let A=e.dbis[$],B=R[$];if(B!=null)try{let Ee=_u.getIndexedValues(B);if(Ee)for(let ce=0,cr=Ee.length;ce<cr;ce++)A.remove(Ee[ce],a)}catch{hT.warn(`cannot delete from attribute: ${$}, ${B}:${a}`)}}});c.push(m),_.push(a),i.original_records.push(R)}catch(R){hT.warn(R),i.skipped.push(a)}let u=[],l=await Promise.all(c);for(let d=0,S=l.length;d<S;d++)l[d]===!0?i.deleted.push(_[d]):(i.skipped.push(_[d]),u.push(d));let E=0;for(let d=0;d<u.length;d++){let S=u[d];i.original_records.splice(S-E,1),E++}return i.txn_time=_u.getNextMonotonicTime(),i}catch(n){throw n}}o(kU,"deleteRecords");TT.exports={deleteRecords:kU}});var ai=f((R1,mT)=>{"use strict";var js=O(),YU=lu(),$U=k(),{getSchemaPath:KU}=K(),WU=ii(),QU=p();mT.exports=jU;async function jU(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(js.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(js.isEmptyOrZeroLength(e.hash_values)&&!js.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let _=e.records[c][s];js.isEmpty(_)||e.hash_values.push(_)}}if(js.isEmptyOrZeroLength(e.hash_values))return RT([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(js.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=KU(e.schema,e.table),i=await $U.openEnvironment(n,e.table),a=await YU.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await WU(e,a)}catch(c){QU.error(`unable to write transaction due to ${c.message}`)}return RT(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(jU,"lmdbDeleteRecords");function RT(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}}o(RT,"createDeleteResponse")});var ci=f((g1,NT)=>{var AT=require("lodash"),gT=Fe(),x=require("joi"),JU=O(),{hdb_schema_table:ft,checkValidTable:pT}=Gs(),{handleHDBError:XU,hdb_errors:ZU}=J(),{HTTP_STATUS_CODES:zU}=ZU,A1=x.object({schema:ft,table:ft,hash_values:x.array().min(0).items(x.alternatives(x.string(),x.number())).required(),get_attributes:x.array().min(1).items(ft).required()}),eP=x.object({schema:ft,table:ft,search_attribute:ft,search_value:x.any().required(),get_attributes:x.array().min(1).items(ft).required(),desc:x.bool(),limit:x.number().integer().min(1),offset:x.number().integer().min(0)}),tP=x.object({schema:ft,table:ft,operator:x.string().valid("and","or").default("and").lowercase(),offset:x.number().integer().min(0),limit:x.number().integer().min(1),get_attributes:x.array().min(1).items(ft).required(),conditions:x.array().min(1).items(x.object({search_attribute:ft,search_type:x.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:x.when("search_type",{switch:[{is:"equals",then:x.any()},{is:"between",then:x.array().items(x.alternatives([x.string(),x.number()])).length(2)}],otherwise:x.alternatives(x.string(),x.number())}).required()})).required()});NT.exports=function(e,t){let r=null;switch(t){case"value":r=gT.validateBySchema(e,eP);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(pT("schema",e.schema)),i(pT("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=gT.validateBySchema(e,tP);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=JU.checkGlobalSchemaTable(e.schema,e.table);if(n)return XU(new Error,n,zU.NOT_FOUND);let a=global.hdb_schema[e.schema][e.table].attributes,c=[...e.get_attributes];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let u=0,l=e.conditions.length;u<l;u++){let E=e.conditions[u];c.push(E.search_attribute)}let _=AT.filter(c,u=>u!=="*"&&u.attribute!=="*"&&!AT.some(a,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 Eu=f((N1,OT)=>{"use strict";var rP=k(),sP=ci(),{getSchemaPath:nP}=K();OT.exports=iP;function iP(e){let t=sP(e,"hashes");if(t)throw t;let r=nP(e.schema,e.table);return rP.openEnvironment(r,e.table)}o(iP,"initialize")});var du=f((I1,IT)=>{"use strict";var oP=ss(),aP=Eu();IT.exports=cP;async function cP(e){let t=await aP(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oP.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(cP,"lmdbGetDataByHash")});var _i=f((b1,CT)=>{"use strict";var Ra=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};o(Ra,"SearchByHashObject");CT.exports=Ra});var LT=f((w1,bT)=>{"use strict";var y1=_i(),_P=ss(),uP=Eu();bT.exports=lP;async function lP(e){let t=await uP(e),r=global.hdb_schema[e.schema][e.table];return _P.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(lP,"lmdbSearchByHash")});var ht=f((D1,yT)=>{"use strict";var ma=class{constructor(t,r,s,n,i,a,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=a,this.end_value=c,this.reverse=_,this.limit=u,this.offset=l}};o(ma,"SearchObject");yT.exports=ma});var Aa=f((P1,HT)=>{"use strict";var Ae=ss(),EP=k(),dP=O(),I=de(),as=T(),SP=jt(),wT=et().LMDB_ERRORS_ENUM,{compareKeys:Js}=require("ordered-binary"),{getSchemaPath:fP}=K(),Zt=as.SEARCH_WILDCARDS;async function hP(e,t,r){let s;e.schema===as.SYSTEM_SCHEMA_NAME?s=SP[e.table]:s=global.hdb_schema[e.schema][e.table];let n=PT(e,s.hash_attribute,r,t);return DT(e,n,s.hash_attribute,r)}o(hP,"prepSearch");async function DT(e,t,r,s){let n=fP(e.schema,e.table),i=await EP.openEnvironment(n,e.table),a=UT(i,e,t,r),c=a.transaction||i;if([I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,I.SEARCH_TYPES.SEARCH_ALL,I.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(RP(e,r)===!1){let l=e.search_attribute;if(l===r)return s?MT(a,()=>!0):a.map(d=>({[r]:d.key}));let E=o(d=>({[r]:d.value,[l]:d.key}),"toObject");return s?MT(a,E):a.map(E)}let u=e.search_attribute===r?a.map(l=>l.key):a.map(l=>l.value);return s===!0?Ae.batchSearchByHashToMap(c,r,e.get_attributes,u):Ae.batchSearchByHash(c,r,e.get_attributes,u)}o(DT,"executeSearch");function UT(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:c,offset:_}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,_=Number.isInteger(_)?_:void 0,r){case I.SEARCH_TYPES.EQUALS:n=Ae.equals(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.CONTAINS:n=Ae.contains(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:n=Ae.endsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:n=Ae.startsWith(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ae.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ae.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case I.SEARCH_TYPES.SEARCH_ALL:return Ae.searchAll(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ae.searchAllToMap(e,s,t.get_attributes,a,c,_);case I.SEARCH_TYPES.BETWEEN:n=Ae.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:n=Ae.greaterThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ae.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:n=Ae.lessThan(e,i,t.search_attribute,t.search_value,a,c,_);break;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ae.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,_);break;default:return Object.create(null)}return n}o(UT,"searchByType");function TP(e){let t=e.search_type,r=e.search_attribute,s=e.search_value;switch(t){case I.SEARCH_TYPES.EQUALS:return n=>n[r]===s;case I.SEARCH_TYPES.CONTAINS:return n=>typeof n[r]=="string"&&n[r].includes(s);case I.SEARCH_TYPES.ENDS_WITH:case I.SEARCH_TYPES._ENDS_WITH:return n=>typeof n[r]=="string"&&n[r].endsWith(s);case I.SEARCH_TYPES.STARTS_WITH:case I.SEARCH_TYPES._STARTS_WITH:return n=>typeof n[r]=="string"&&n[r].startsWith(s);case I.SEARCH_TYPES.BETWEEN:return n=>{let i=n[r];return Js(i,s[0])>=0&&Js(i,s[1])<=0};case I.SEARCH_TYPES.GREATER_THAN:case I.SEARCH_TYPES._GREATER_THAN:return n=>Js(n[r],s)>0;case I.SEARCH_TYPES.GREATER_THAN_EQUAL:case I.SEARCH_TYPES._GREATER_THAN_EQUAL:return n=>Js(n[r],s)>=0;case I.SEARCH_TYPES.LESS_THAN:case I.SEARCH_TYPES._LESS_THAN:return n=>Js(n[r],s)<0;case I.SEARCH_TYPES.LESS_THAN_EQUAL:case I.SEARCH_TYPES._LESS_THAN_EQUAL:return n=>Js(n[r],s)<=0;default:return Object.create(null)}}o(TP,"filterByType");function MT(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(MT,"createMapFromIterable");function RP(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}o(RP,"checkToFetchMore");function PT(e,t,r,s){if(dP.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Zt.indexOf(n)>-1)return r===!0?I.SEARCH_TYPES.SEARCH_ALL_TO_MAP:I.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Zt[0])<0&&n.indexOf(Zt[1])<0)return c===!0?r===!0?I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:I.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:I.SEARCH_TYPES.EQUALS;if(Zt.indexOf(i)>=0&&Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),I.SEARCH_TYPES.CONTAINS;if(Zt.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),I.SEARCH_TYPES.ENDS_WITH;if(Zt.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),I.SEARCH_TYPES.STARTS_WITH;if(n.includes(Zt[0])||n.includes(Zt[1]))return I.SEARCH_TYPES.EQUALS;throw new Error(wT.UNKNOWN_SEARCH_TYPE)}else switch(s){case as.VALUE_SEARCH_COMPARATORS.BETWEEN:return I.SEARCH_TYPES.BETWEEN;case as.VALUE_SEARCH_COMPARATORS.GREATER:return I.SEARCH_TYPES.GREATER_THAN;case as.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return I.SEARCH_TYPES.GREATER_THAN_EQUAL;case as.VALUE_SEARCH_COMPARATORS.LESS:return I.SEARCH_TYPES.LESS_THAN;case as.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return I.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wT.UNKNOWN_SEARCH_TYPE)}}o(PT,"createSearchTypeFromSearchObject");HT.exports={executeSearch:DT,createSearchTypeFromSearchObject:PT,prepSearch:hP,searchByType:UT,filterByType:TP}});var vT=f((v1,BT)=>{"use strict";var B1=ht(),mP=ci(),AP=O(),gP=T(),pP=Aa();BT.exports=NP;function NP(e,t){if(!AP.isEmpty(t)&&gP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=mP(e,"value");if(s)throw s;let n=!0;return pP.prepSearch(e,t,n)}o(NP,"lmdbGetDataByValue")});var Xs=f((F1,GT)=>{"use strict";var q1=ht(),OP=ci(),IP=O(),CP=T(),bP=Aa();GT.exports=LP;async function LP(e,t){if(!IP.isEmpty(t)&&CP.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OP(e,"value");if(s)throw s;return bP.prepSearch(e,t,!1)}o(LP,"lmdbSearchByValue")});var FT=f((k1,qT)=>{"use strict";var V1=de(),ga=class{constructor(t,r,s,n,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=c}};o(ga,"SearchByConditionsObject");var pa=class{constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}};o(pa,"SearchCondition");var Na=class{constructor(t,r){this.attribute=t,this.desc=r}};o(Na,"SortAttribute");qT.exports={SearchByConditionsObject:ga,SearchCondition:pa,SortAttribute:Na}});var $T=f((K1,YT)=>{"use strict";var $1=FT().SearchByConditionsObject,yP=ht(),wP=ci(),Su=ss(),Oa=de(),kT=Aa(),MP=iu(),DP=require("lodash"),{getSchemaPath:UP}=K(),xT=k(),{handleHDBError:PP,hdb_errors:HP}=J(),{HTTP_STATUS_CODES:BP}=HP,vP=1e8;YT.exports=GP;async function GP(e){let t=wP(e,"conditions");if(t)throw PP(t,t.message,BP.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=UP(e.schema,e.table),s=await xT.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)xT.openDBI(s,u.search_attribute);let i=DP.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let l=u.search_type;l===Oa.SEARCH_TYPES.EQUALS?u.estimated_count=Su.count(s,u.search_attribute,u.search_value):l===Oa.SEARCH_TYPES.CONTAINS||l===Oa.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=vP}return u.estimated_count}),a=s.useReadTransaction();a.database=s;let c=await VT(a,e,i[0],n.hash_attribute),_;if(!e.operator||e.operator.toLowerCase()==="and"){let u=s.dbis[n.hash_attribute],l=i.slice(1).map(kT.filterByType),E=l.length,d=Su.setGetWholeRowAttributes(s,e.get_attributes);_=c.map(S=>u.get(S,{transaction:a,lazy:!0})),E>0&&(_=_.filter(S=>{for(let R=0;R<E;R++)if(!l[R](S))return!1;return!0})),(e.offset||e.limit!==void 0)&&(_=_.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),_=_.map(S=>MP.parseRow(S,d))}else{for(let E=1;E<i.length;E++){let d=i[E],S=await VT(a,e,d,n.hash_attribute);c=c.concat(S)}let u=new Set,l=e.offset||0;c=c.filter(E=>u.has(E)?!1:(u.add(E),!0)).slice(l,e.limit&&e.limit+l),_=Su.batchSearchByHash(a,n.hash_attribute,e.get_attributes,c)}return _.onDone=()=>{a.done()},_}o(GP,"lmdbSearchByConditions");async function VT(e,t,r,s){let n=new yP(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Oa.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,kT.searchByType(e,n,i,s).map(a=>a.value)}o(VT,"executeConditionSearch")});var Ca=f((Q1,KT)=>{"use strict";var qP=T().OPERATIONS_ENUM,Ia=class{constructor(t,r,s,n=void 0){this.operation=qP.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};o(Ia,"DeleteObject");KT.exports=Ia});var fu=f((J1,eR)=>{"use strict";var JT=ht(),XT=Ca(),ZT=Xs(),zT=ai(),we=T(),WT=O(),QT=k(),{getTransactionAuditStorePath:FP,getSchemaPath:xP}=K(),jT=p();eR.exports=VP;async function VP(e){try{if(WT.isEmpty(global.hdb_schema[e.schema])||WT.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kP(e),await YP(e);let t=xP(e.schema,e.table);try{await QT.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=FP(e.schema,e.table);await QT.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")jT.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(VP,"lmdbDropTable");async function kP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ZT(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await zT(n)}o(kP,"deleteAttributesFromSystem");async function YP(e){let t=new JT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,we.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ZT(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new XT(we.SYSTEM_SCHEMA_NAME,we.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await zT(n)}catch(i){throw i}}o(YP,"dropTableFromSystem")});var rR=f((Z1,tR)=>{"use strict";var $P=require("fs-extra"),KP=ht(),WP=_i(),QP=Ca(),jP=fu(),JP=ai(),XP=du(),ZP=Xs(),zt=T(),{getSchemaPath:zP}=K(),{handleHDBError:eH,hdb_errors:tH}=J(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:sH}=tH;tR.exports=nH;async function nH(e){let t;try{t=await iH(e.schema);let r=new KP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await ZP(r));for(let a=0;a<s.length;a++){let c={schema:t,table:s[a].name};try{await jP(c)}catch(_){if(_.message!=="invalid environment")throw _}}let n=new QP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await JP(n);let i=zP(t);await $P.remove(i)}catch(r){throw r}}o(nH,"lmdbDropSchema");async function iH(e){let t=new WP(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await XP(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw eH(new Error,rH.SCHEMA_NOT_FOUND(e),sH.NOT_FOUND,void 0,void 0,!0);return s}o(iH,"validateDropSchema")});var La=f((eW,sR)=>{"use strict";var ba=class{constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};o(ba,"CreateTableObject");sR.exports=ba});var Tu=f((sW,nR)=>{"use strict";var oH=require("fs-extra"),ya=k(),{getTransactionAuditStorePath:aH}=K(),hu=de(),rW=La();nR.exports=cH;async function cH(e){let t;try{let r=aH(e.schema,e.table);await oH.mkdirp(r),t=await ya.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{ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),ya.createDBI(t,hu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),ya.createDBI(t,hu.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}o(cH,"createTransactionsAuditEnvironment")});var pu=f((iW,aR)=>{"use strict";var Ru=T(),iR=k(),_H=jr(),{getSystemSchemaPath:uH,getSchemaPath:lH}=K(),EH=jt(),dH=Fo(),mu=qo(),SH=p(),fH=Tu(),gu=EH.hdb_table,oR=[];for(let e=0;e<gu.attributes.length;e++)oR.push(gu.attributes[e].attribute);aR.exports=hH;async function hH(e,t){let r=lH(t.schema,t.table),s=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mu(t.schema,t.table,Ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mu(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iR.createEnvironment(r,t.table),e!==void 0){let a=await iR.openEnvironment(uH(),Ru.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await _H.insertRecords(a,gu.hash_attribute,oR,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Au(s),await Au(n),await Au(i)}await fH(t)}catch(a){throw a}}o(hH,"lmdbCreateTable");async function Au(e){try{await dH(e)}catch(t){SH.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Au,"createAttribute")});var _R=f((aW,cR)=>{"use strict";var TH=xo(),RH=$o(),mH=ua(),ui=T(),AH=jr().updateRecords,gH=k(),{getSchemaPath:pH}=K(),NH=ii(),OH=p();cR.exports=IH;async function IH(e){try{let{schema_table:t,attributes:r}=TH(e);RH(e,r,t.hash_attribute),e.schema!==ui.SYSTEM_SCHEMA_NAME&&(r.includes(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ui.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await mH(e.hdb_auth_header,t,r),n=pH(e.schema,e.table),i=await gH.openEnvironment(n,e.table),a=await AH(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NH(e,a)}catch(c){OH.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(IH,"lmdbUpdateRecords")});var lR=f((_W,uR)=>{"use strict";var CH=T().OPERATIONS_ENUM,wa=class{constructor(t,r,s,n=void 0){this.operation=CH.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(wa,"UpsertObject");uR.exports=wa});var dR=f((EW,ER)=>{"use strict";var lW=lR(),bH=xo(),LH=$o(),yH=ua(),li=T(),wH=jr().upsertRecords,MH=k(),{getSchemaPath:DH}=K(),UH=ii(),PH=p(),{handleHDBError:HH,hdb_errors:BH}=J();ER.exports=vH;async function vH(e){let t;try{t=bH(e)}catch(_){throw HH(_,_.message,BH.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;LH(e,s,r.hash_attribute),e.schema!==li.SYSTEM_SCHEMA_NAME&&(s.includes(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(li.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await yH(e.hdb_auth_header,r,s),i=DH(e.schema,e.table),a=await MH.openEnvironment(i,e.table),c=await wH(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await UH(e,c)}catch(_){PH.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}}o(vH,"lmdbUpsertRecords")});var mR=f((SW,RR)=>{"use strict";var GH=ht(),SR=O(),fR=p(),qH=Xs(),hR=T(),FH=lu().deleteRecords,xH=k(),{getSchemaPath:VH}=K(),{promisify:kH}=require("util"),YH=kH(setTimeout),TR=1e4,$H=10;RR.exports=KH;async function KH(e){let t=global.hdb_schema[e.schema][e.table].hash_attribute;if(SR.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 GH(e.schema,e.table,hR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,r,void 0,[t]);s=Array.from(await qH(n,hR.VALUE_SEARCH_COMPARATORS.LESS))}catch(n){throw fR.error(`Error searching for date: ${e.date} in schema: ${e.schema} table: ${e.table}`),n}return SR.isEmptyOrZeroLength(s)?(fR.trace("No records found to delete"),{message:"No records found to delete"}):await WH(e,s,t)}o(KH,"lmdbDeleteRecordsBefore");async function WH(e,t,r){let s=VH(e.schema,e.table),n=await xH.openEnvironment(s,e.table),i={message:"",deleted_hashes:[],skipped_hashes:[]};for(let a=0,c=t.length;a<c;a+=TR){let _=t.slice(a,a+TR),u=[];for(let l=0,E=_.length;l<E;l++)u.push(_[l][r]);try{let l=await FH(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 YH($H)}return i.message=`${i.deleted_hashes.length} of ${i.deleted_hashes.length+i.skipped_hashes.length} records successfully deleted`,i}o(WH,"chunkDeletes")});var gR=f((hW,AR)=>{"use strict";var Ma=class{constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};o(Ma,"DeleteBeforeObject");AR.exports=Ma});var NR=f((RW,pR)=>{"use strict";var Da=class{constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};o(Da,"DeleteAuditLogsBeforeResults");pR.exports=Da});var CR=f((gW,IR)=>{"use strict";var Nu=k(),{getTransactionAuditStorePath:QH}=K(),AW=gR(),Ei=de(),jH=O(),OR=NR(),JH=require("util").promisify,XH=JH(setTimeout),ZH=1e4,zH=100;IR.exports=eB;async function eB(e){let t=QH(e.schema,e.table),r=await Nu.openEnvironment(t,e.table,!0),s=Nu.listDBIs(r);Nu.initializeDBIs(r,Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new OR;do n=await tB(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 XH(zH);while(n.transactions_deleted>0);return i}o(eB,"deleteAuditLogsBefore");async function tB(e,t){let r=new OR;try{let s=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=a[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];jH.isEmpty(c)||(n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let _=0;_<a.hash_values.length;_++)n=e.dbis[Ei.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[_],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>ZH)break}return await n,r}catch(s){throw s}}o(tB,"deleteTransactions")});var LR=f((NW,bR)=>{"use strict";var Ua=class{constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};o(Ua,"DropAttributeObject");bR.exports=Ua});var wR=f((CW,yR)=>{"use strict";var rB=ht(),sB=Ca(),IW=LR(),yt=T(),nB=O(),Ou=k(),iB=jt(),oB=Xs(),aB=ai(),{getSchemaPath:cB}=K();yR.exports=_B;async function _B(e,t=!0){let r;e.schema===yt.SYSTEM_SCHEMA_NAME?r=iB[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await lB(e),n=cB(e.schema,e.table),i=await Ou.openEnvironment(n,e.table);return t===!0&&await uB(e,i,r.hash_attribute),Ou.dropDBI(i,e.attribute),s}o(_B,"lmdbDropAttribute");async function uB(e,t,r){let s=Ou.openDBI(t,r),n,i=e.attribute;for(let{key:a,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(a,u,_)}await n}o(uB,"removeAttributeFromAllObjects");async function lB(e){let t=new rB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await oB(t)).filter(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(nB.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[yt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new sB(yt.SYSTEM_SCHEMA_NAME,yt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return aB(i)}o(lB,"dropAttributeFromSystem")});var BR=f((yW,HR)=>{"use strict";var Iu=k(),Zs=de(),LW=Sr(),Cu=T(),MR=O(),{getTransactionAuditStorePath:EB}=K(),dB=ss(),Pa=Ws(),SB=p();HR.exports=fB;async function fB(e){let t=EB(e.schema,e.table),r=await Iu.openEnvironment(t,e.table,!0),s=Iu.listDBIs(r);Iu.initializeDBIs(r,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DR(r,e.search_values);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,TB(r,e.search_values,n);case Cu.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return hB(r,e.search_values);default:return DR(r)}}o(fB,"readAuditLog");function DR(e,t=[0,Date.now()]){MR.isEmpty(t[0])&&(t[0]=0),MR.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Pa,n))}o(DR,"searchTransactionsByTimestamp");function hB(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,PR(e,i))}return Object.fromEntries(r)}o(hB,"searchTransactionsByUsername");function TB(e,t,r){let s=new Map;for(let c=0,_=t.length;c<_;c++){let u=t[c],l=dB.equals(e,Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zs.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:E}of l){let d=Number(E);s.has(d)?s.get(d).push(u.toString()):s.set(d,[u.toString()])}}let n=Array.from(s.keys()),i=PR(e,n),a=new Map;for(let c=0;c<i.length;c++){let _=i[c],u=_.timestamp,l=s.get(u);UR(_,"records",r,l,a),UR(_,"original_records",r,l,a)}return Object.fromEntries(a)}o(TB,"searchTransactionsByHashValues");function UR(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],_=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 Pa(e.operation,e.user_name,i,void 0);E[t]=[c],u.push(E)}}else{let u=new Pa(e.operation,e.user_name,i,void 0);u[t]=[c],n.set(_,[u])}}}o(UR,"loopRecords");function PR(e,t){let r=[];try{let s=e.dbis[Zs.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Pa,i);r.push(a)}}catch(i){SB.warn(i)}return r}catch(s){throw s}}o(PR,"batchSearchTransactions")});var GR=f((MW,vR)=>{"use strict";var{getSchemaPath:RB}=K(),mB=k();vR.exports={writeTransaction:AB};async function AB(e,t,r){let s=RB(e,t);return(await mB.openEnvironment(s,t)).transaction(r)}o(AB,"writeTransaction")});var VR=f((UW,xR)=>{"use strict";var{getSchemaPath:qR}=K(),FR=k();xR.exports={flush:gB,resetReadTxn:pB};async function gB(e,t){return(await FR.openEnvironment(qR(e,t),t.toString())).flushed}o(gB,"flush");async function pB(e,t){try{(await FR.openEnvironment(qR(e,t),t.toString())).resetReadTxn()}catch{}}o(pB,"resetReadTxn")});var $R=f((HW,YR)=>{"use strict";var NB=p(),{handleHDBError:OB}=J(),IB=A_(),CB=Fo(),bB=cu(),LB=ET(),yB=ai(),wB=du(),MB=LT(),DB=vT(),UB=Xs(),PB=$T(),HB=rR(),BB=pu(),vB=_R(),GB=dR(),qB=mR(),FB=CR(),xB=fu(),VB=wR(),kB=BR(),YB=GR(),kR=VR(),Ha=class extends IB{async searchByConditions(t){return PB(t)}async getDataByHash(t){return await wB(t)}async searchByHash(t){return await MB(t)}async getDataByValue(t,r){return await DB(t,r)}async searchByValue(t){return await UB(t)}async createSchema(t){return await LB(t)}async dropSchema(t){return await HB(t)}async createTable(t,r){return await BB(t,r)}async dropTable(t){return await xB(t)}async createAttribute(t){return await CB(t)}async createRecords(t){return await bB(t)}async updateRecords(t){return await vB(t)}async upsertRecords(t){try{return await GB(t)}catch(r){throw OB(r,null,null,NB.ERR,r)}}async deleteRecords(t){return await yB(t)}async deleteRecordsBefore(t){return await qB(t)}async dropAttribute(t){return await VB(t)}async deleteAuditLogsBefore(t){return await FB(t)}async readAuditLog(t){return await kB(t)}writeTransaction(t,r,s){return YB.writeTransaction(t,r,s)}flush(t,r){return kR.flush(t,r)}resetReadTxn(t,r){return kR.resetReadTxn(t,r)}};o(Ha,"LMDBBridge");YR.exports=Ha});var zr=f((vW,WR)=>{"use strict";var $B=$R(),KB=A_(),WB=H();WB.initSync();var KR;function QB(){return KR instanceof KB?KR:new $B}o(QB,"getBridge");WR.exports=QB()});var _s=f((qW,JR)=>{"use strict";var va=m_(),it=O(),jB=require("util"),Ga=zr(),JB=ns(),bu=p(),{handleHDBError:Or,hdb_errors:XB}=J(),{HTTP_STATUS_CODES:cs}=XB,ZB=jB.promisify(JB.getTableSchema),zB="updated",QR="inserted",jR="upserted";JR.exports={insert:tv,update:rv,upsert:sv,validation:ev,flush:nv};async function ev(e){if(it.isEmpty(e))throw new Error("invalid update parameters defined.");if(it.isEmptyOrZeroLength(e.schema))throw new Error("invalid schema specified.");if(it.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ZB(e.schema,e.table),r=va(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&it.isEmptyOrZeroLength(c[s]))throw bu.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(!it.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw bu.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!it.isEmpty(c[s])&&c[s]!==""&&n.has(it.autoCast(c[s]))&&(c.skip=!0),n.add(it.autoCast(c[s]));for(let _ in c)i[_]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(ev,"validation");async function tv(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.createRecords(e);return Ba(QR,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(tv,"insertData");async function rv(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);let s=await Ga.updateRecords(e);return it.isEmpty(s.existing_rows)?Ba(zB,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ba(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(rv,"updateData");async function sv(e){if(e.operation!=="upsert")throw Or(new Error,"invalid operation, must be upsert",cs.INTERNAL_SERVER_ERROR);let t=va(e);if(t)throw Or(new Error,t.message,cs.BAD_REQUEST);let r=it.checkSchemaTableExist(e.schema,e.table);if(r)throw Or(new Error,r,cs.BAD_REQUEST);try{let s=await Ga.upsertRecords(e);return Ba(jR,s.written_hashes,e,[],s.new_attributes,s.txn_time)}catch(s){let n=`There was an error during an upsert op: ${s}`;throw Or(s,null,null,bu.ERR,n)}}o(sv,"upsertData");function Ba(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===QR?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===jR?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Ba,"returnObject");function nv(e){return Ga.flush(e.schema,e.table)}o(nv,"flush")});var em=f((xW,zR)=>{var iv=Fe(),Lu=require("joi"),{hdb_schema_table:XR}=Gs(),ZR={schema:XR,table:XR},ov={date:Lu.date().iso().required()},av={timestamp:Lu.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};zR.exports=function(e,t){let r=t==="timestamp"?{...ZR,...av}:{...ZR,...ov},s=Lu.object(r);return iv.validateBySchema(e,s)}});var nm=f((VW,sm)=>{var cv=Fe(),tm=require("joi"),{hdb_schema_table:rm}=Gs(),_v=tm.object({schema:rm,table:rm,hash_values:tm.array().required()});sm.exports=function(e){return cv.validateBySchema(e,_v)}});var yu=f((kW,im)=>{"use strict";var qa=class{constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}};o(qa,"InsertObject");var Fa=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}};o(Fa,"NoSQLSeachObject");var xa=class{constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};o(xa,"DeleteResponseObject");im.exports={InsertObject:qa,NoSQLSeachObject:Fa,DeleteResponseObject:xa}});var Du=f(($W,um)=>{"use strict";var am=em(),uv=nm(),Va=O(),om=require("moment"),cm=p(),{promisify:lv,callbackify:Ev}=require("util"),us=T(),dv=ns(),wu=lv(dv.getTableSchema),Mu=zr(),{DeleteResponseObject:Sv}=yu(),{handleHDBError:Ir,hdb_errors:fv}=J(),{HDB_ERROR_MSGS:ka,HTTP_STATUS_CODES:Cr}=fv,hv="records successfully deleted",Tv=Ev(_m);um.exports={delete:Tv,deleteRecord:_m,deleteFilesBefore:Rv,deleteAuditLogsBefore:mv};async function Rv(e){let t=am(e,"date");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(!om(e.date,om.ISO_8601).isValid())throw Ir(new Error,ka.INVALID_DATE,Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_DATE,!0);let s=Va.checkSchemaTableExist(e.schema,e.table);if(s)throw Ir(new Error,s,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,s,!0);let n=await Mu.deleteRecordsBefore(e);if(await wu(e.schema,e.table),cm.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(Rv,"deleteFilesBefore");async function mv(e){let t=am(e,"timestamp");if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e.timestamp))throw Ir(new Error,ka.INVALID_VALUE("Timestamp"),Cr.BAD_REQUEST,us.LOG_LEVELS.ERROR,ka.INVALID_VALUE("Timestamp"),!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);let s=await Mu.deleteAuditLogsBefore(e);return await wu(e.schema,e.table),cm.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(mv,"deleteAuditLogsBefore");async function _m(e){let t=uv(e);if(t)throw Ir(t,t.message,Cr.BAD_REQUEST,void 0,void 0,!0);let r=Va.checkSchemaTableExist(e.schema,e.table);if(r)throw Ir(new Error,r,Cr.NOT_FOUND,us.LOG_LEVELS.ERROR,r,!0);try{await wu(e.schema,e.table);let s=await Mu.deleteRecords(e);return Va.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${hv}`),s}catch(s){if(s.message===us.SEARCH_NOT_FOUND_MESSAGE){let n=new Sv;return n.message=us.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(_m,"deleteRecord")});var Em=f((WW,lm)=>{var Uu=Fe(),ge={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 Av(e){return ge.password.presence=!0,ge.username.presence=!0,ge.role.presence=!0,ge.active.presence=!0,Uu.validateObject(e,ge)}o(Av,"addUserValidation");function gv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(gv,"alterUserValidation");function pv(e){return ge.password.presence=!1,ge.username.presence=!0,ge.role.presence=!1,ge.active.presence=!1,Uu.validateObject(e,ge)}o(pv,"dropUserValidation");lm.exports={addUserValidation:Av,alterUserValidation:gv,dropUserValidation:pv}});var Nr=f((JW,bm)=>{"use strict";var Tm="username is required",Rm="nothing to update, must supply active, role or password to update",mm="password cannot be an empty string",Am="If role is specified, it cannot be empty.",gm="active must be true or false";bm.exports={addUser:wv,alterUser:Mv,dropUser:Uv,userInfo:Pv,listUsers:$a,listUsersExternal:Hv,setUsersToGlobal:di,findAndValidateUser:Gv,getClusterUser:qv,USERNAME_REQUIRED:Tm,ALTERUSER_NOTHING_TO_UPDATE:Rm,EMPTY_PASSWORD:mm,EMPTY_ROLE:Am,ACTIVE_BOOLEAN:gm};var pm=_s(),Nv=Du(),Hu=Wo(),Nm=Em(),Om=es(),Bu=ni(),Qe=O(),Im=require("validate.js"),w=p(),{promisify:vu}=require("util"),Gu=Xn(),dm=T(),Sm=ke(),Ov=Ve(),jW=H(),Iv=Vs(),Cv=jt(),{handleHDBError:wt,hdb_errors:bv}=J(),{HTTP_STATUS_CODES:Mt,AUTHENTICATION_ERROR_MSGS:Pu,HDB_ERROR_MSGS:zs}=bv,{UserEventMsg:qu}=os(),fm=require("lodash"),Cm={username:!0,active:!0,role:!0,password:!0},hm=new Map,Ya=vu(Om.searchByValue),Lv=vu(Om.searchByHash),yv=vu(Nv.delete);async function wv(e){let t=Im.cleanAttributes(e,Cm),r=Nm.addUserValidation(t);if(r)throw wt(new Error,r.message,Mt.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 Ya(s),n=n&&Array.from(n)}catch(_){throw w.error("There was an error searching for a role in add user"),w.error(_),_}if(!n||n.length<1)throw wt(new Error,zs.ROLE_NAME_NOT_FOUND(t.role),Mt.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw wt(new Error,zs.DUP_ROLES_FOUND(t.role),Mt.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await pm.insert(i)}catch(_){throw w.error("There was an error searching for a user."),w.error(_),_}w.debug(a);try{await di()}catch(_){throw w.error("Got an error setting users to global"),w.error(_),_}if(a.skipped_hashes.length===1)throw wt(new Error,zs.USER_ALREADY_EXISTS(t.username),Mt.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Bu.signalUserChange(new qu(process.pid)),`${c.username} successfully added`}o(wv,"addUser");async function Mv(e){let t=Im.cleanAttributes(e,Cm);if(Qe.isEmptyOrZeroLength(t.username))throw new Error(Tm);if(Qe.isEmptyOrZeroLength(t.password)&&Qe.isEmptyOrZeroLength(t.role)&&Qe.isEmptyOrZeroLength(t.active))throw new Error(Rm);if(!Qe.isEmpty(t.password)&&Qe.isEmptyOrZeroLength(t.password.trim()))throw new Error(mm);if(!Qe.isEmpty(t.active)&&!Qe.isBoolean(t.active))throw new Error(gm);let r=Dv(t.username);if(!Qe.isEmpty(t.password)&&!Qe.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Gu.encrypt(t.password)),t.password=Hu.hash(t.password)),t.role==="")throw new Error(Am);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await Ya(i)||[])}catch(c){throw w.error("Got an error searching for a role."),w.error(c),c}if(!a||a.length===0){let c=zs.ALTER_USER_ROLE_NOT_FOUND(t.role);throw w.error(c),wt(new Error,c,Mt.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let c=zs.ALTER_USER_DUP_ROLES(t.role);throw w.error(c),wt(new Error,c,Mt.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await pm.update(s)}catch(i){throw w.error("Error during update."),w.error(i),i}try{await di()}catch(i){throw w.error("Got an error setting users to global"),w.error(i),i}return Bu.signalUserChange(new qu(process.pid)),n}o(Mv,"alterUser");function Dv(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Dv,"isClusterUser");async function Uv(e){try{let t=Nm.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Qe.isEmpty(global.hdb_users.get(e.username)))throw wt(new Error,zs.USER_NOT_EXIST(e.username),Mt.NOT_FOUND,void 0,void 0,!0);let s;try{s=await yv(r)}catch(n){throw w.error("Got an error deleting a user."),w.error(n),n}w.debug(s);try{await di()}catch(n){throw w.error("Got an error setting users to global."),w.error(n),n}return Bu.signalUserChange(new qu(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(Uv,"dropUser");async function Pv(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 Lv(r)}catch(n){throw w.error("Got an error searching for a role."),w.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw w.error(r),r}return t}o(Pv,"userInfo");async function Hv(){let e;try{e=await $a()}catch(t){throw w.error("Got an error listing users."),w.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()]}o(Hv,"listUsersExternal");async function $a(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ya(e)}catch(a){throw w.error("Got an error searching for roles."),w.error(a),a}let r={};for(let a of t)r[a.id]=fm.cloneDeep(a);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Ya(s)}catch(a){throw w.error("Got an error searching for users."),w.error(a),a}let i=new Map;for(let a of n)a=fm.cloneDeep(a),a.role=r[a.role],Bv(a.role),i.set(a.username,a);return(await Iv.getLicense()).enterprise?i:vv(Array.from(i.values()))}catch(e){throw w.error("got an error listing users"),w.error(e),Qe.errorizeMessage(e)}return null}o($a,"listUsers");function Bv(e){try{if(!e){w.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(Cv)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){w.error("Got an error trying to set system permissions."),w.error(t)}}o(Bv,"appendSystemTablesToRole");function vv(e){try{if(w.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&&(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(n.username,n)):r.set(n.username,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?(w.warn("No roles found with active users."),new Map):(r=new Map([...r,...t[s.role]]),r)}catch(t){return w.error("error filtering users."),w.error(t),new Map}}o(vv,"nonEnterpriseFilter");async function di(){try{let e=await $a();global.hdb_users=e}catch(e){throw w.error(e),e}}o(di,"setUsersToGlobal");async function Gv(e,t,r=!0){global.hdb_users||await di();let s=global.hdb_users.get(e);if(!s)throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw wt(new Error,Pu.USER_INACTIVE,Mt.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(hm.get(t)===s.password)return n;if(Hu.validate(s.password,t))hm.set(t,s.password);else throw wt(new Error,Pu.GENERIC_AUTH_FAIL,Mt.UNAUTHORIZED,void 0,void 0,!0)}return n}o(Gv,"findAndValidateUser");async function qv(){let e=await $a(),t=Ov.getConfigFromFile(dm.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Qe.isEmpty(r)&&r?.role?.role===dm.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Gu.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Sm.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Sm.SERVER_SUFFIX.ADMIN,r}o(qv,"getClusterUser")});var ym=f((ZW,Lm)=>{"use strict";var Fv=zr();Lm.exports={writeTransaction:xv};function xv(e,t,r){return Fv.writeTransaction(e,t,r)}o(xv,"writeTransaction")});var Es=f((cQ,Wm)=>{"use strict";var le=H();le.initSync();var Vv=require("fs-extra"),kv=require("semver"),Ri=require("path"),{monotonicFactory:Yv}=require("ulidx"),Yu=Yv(),$v=require("util"),Mm=require("child_process"),Kv=$v.promisify(Mm.exec),Wv=Mm.spawn,v=ke(),V=T(),Ka=O(),br=p(),Wa=Xn(),Qv=ym(),Si=Ve(),{encode:Vu,decode:$u}=require("msgpackr"),{isEmpty:ls}=Ka,Dm=Nr(),Um=12e10,{connect:jv,StorageType:Pm,RetentionPolicy:Hm,AckPolicy:Ku,DeliverPolicy:mi,DiscardPolicy:Jv,NatsConnection:eQ,JetStreamManager:tQ,JetStreamClient:rQ,StringCodec:sQ,JSONCodec:Xv,createInbox:Wu,StreamSource:nQ,headers:Zv,toJsMsg:Bm,nuid:iQ,JetStreamOptions:oQ,ErrorCode:wm,nanos:aQ}=require("nats"),{PACKAGE_ROOT:zv}=T(),eG=Us(),vm=Xv(),tG="clustering",rG=eG.engines[v.NATS_SERVER_NAME],sG=Ri.join(zv,"dependencies"),ku=Ri.join(sG,`${process.platform}-${process.arch}`,v.NATS_BINARY_NAME),Fu,xu,fi,hi,Ti,Tt;Wm.exports={runCommand:Gm,checkNATSServerInstalled:nG,createConnection:Qu,getConnection:Qa,getJetStreamManager:Ai,getJetStream:qm,getNATSReferences:je,getServerList:oG,createLocalStream:ju,listStreams:Fm,deleteLocalStream:aG,getServerConfig:gi,listRemoteStreams:cG,viewStream:_G,viewStreamIterator:uG,publishToStream:lG,createWorkQueueStream:EG,addSourceToWorkStream:Vm,request:dG,removeSourceFromWorkStream:Ym,reloadNATS:Ju,reloadNATSHub:SG,reloadNATSLeaf:fG,extractServerName:km,requestErrorHandler:hG,updateWorkStream:TG,createLocalTableStream:$m,createTableStreams:RG,purgeTableStream:Km,purgeSchemaTableStreams:mG,getStreamInfo:AG,updateLocalStreams:pG,closeConnection:iG,getJsmServerName:pi,addNatsMsgHeader:xm};async function Gm(e,t=void 0){let{stdout:r,stderr:s}=await Kv(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
8
  `,"")}o(Gm,"runCommand");async function nG(){try{await Vv.access(ku)}catch{return!1}let e=await Gm(`${ku} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kv.eq(t,rG)}o(nG,"checkNATSServerInstalled");async function Qu(e,t,r,s=!0,n="127.0.0.1"){return jv({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,tls:{keyFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:le.get(V.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}})}o(Qu,"createConnection");async function iG(){Tt&&(await Tt.drain(),Tt=void 0)}o(iG,"closeConnection");async function Qa(){if(!Tt){let e=await Dm.getClusterUser();if(ls(e))throw new Error("Unable to get nats connection. Cluster user is undefined.");let t=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT);Tt=await Qu(t,e.username,e.decrypt_hash)}return Tt}o(Qa,"getConnection");async function Ai(){if(hi)return hi;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return hi=await Tt.jetstreamManager({domain:e}),hi}o(Ai,"getJetStreamManager");async function qm(){if(Ti)return Ti;ls(Tt)&&await Qa();let{domain:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ls(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ti=Tt.jetstream({domain:e}),Ti}o(qm,"getJetStream");async function je(){let e=Tt||await Qa(),t=hi||await Ai(),r=Ti||await qm();return{connection:e,jsm:t,js:r}}o(je,"getNATSReferences");async function oG(e){let t=le.get(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Dm.getClusterUser(),n=await Qu(t,r,s),i=Wu(),a=n.subscribe(i),c=[],_,u=(async()=>{for await(let l of a){let E=vm.decode(l.data);E.response_time=Date.now()-_,c.push(E)}})();return _=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Ka.async_set_timeout(e),await a.drain(),await n.close(),await u,c}o(oG,"getServerList");async function ju(e,t){let{jsm:r}=await je(),s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Pm.File,retention:Hm.Limits,subjects:t,discard:Jv.Old,duplicate_window:Um,max_msgs:n,max_bytes:i,max_age:s})}o(ju,"createLocalStream");async function Fm(){let{jsm:e}=await je(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(Fm,"listStreams");async function aG(e){let{jsm:t}=await je();await t.streams.delete(e)}o(aG,"deleteLocalStream");async function cG(e){let{connection:t}=await je(),r=[],s=Wu(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(vm.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(cG,"listRemoteStreams");async function _G(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a=[],c={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(c.deliver_policy=mi.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=Bm(l),d=$u(E.data),S={nats_timestamp:E.info.timestampNanos,nats_sequence:E.info.streamSequence,entry:d};E.headers&&(S.origin=E.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=E.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),a.push(S),u.getPending()===1&&E.info.pending===0&&u.stop()}return await s.consumers.delete(e,i),a}catch(_){if(await s.consumers.delete(e,i),_.code==="TIMEOUT")return a;throw _}}o(_G,"viewStream");async function*uG(e,t=void 0,r=void 0){let{jsm:s,connection:n}=await je(),i=Yu(),a={ack_policy:Ku.None,durable_name:i,deliver_subject:i,deliver_policy:mi.All};t&&(a.deliver_policy=mi.StartTime,a.opt_start_time=new Date(t).toISOString());try{await s.consumers.add(e,a);let c={timeout:2e3};r&&(c.max=r);let _=await n.subscribe(i,c);for await(let u of _){let l=Bm(u),E=$u(l.data);E[0]||(E=[E]);for(let d of E){let S={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(S.origin=l.headers.get(v.MSG_HEADERS.ORIGIN),S.nats_msg_id=l.headers.get(v.MSG_HEADERS.NATS_MSG_ID)),yield S}_.getPending()===1&&l.info.pending===0&&_.stop()}await s.consumers.delete(e,i)}catch(c){if(await s.consumers.delete(e,i),c.code==="TIMEOUT")return[];throw c}}o(uG,"viewStreamIterator");async function lG(e,t,r,s){br.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s);let n=!0;le.get(V.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)===!1&&r&&r.has(v.MSG_HEADERS.NATS_MSG_ID)&&(n=!1),r=xm(s,r);let{js:i}=await je(),a=await pi(),c=`${e}.${a}`;try{br.trace(`publishToStream publishing to subject: ${c}, data:`,s),n&&await i.publish(c,Vu(s),{headers:r})}catch(_){if(_.code&&_.code.toString()==="503")br.trace(`publishToStream creating stream: ${t}`),await ju(t,[c]),n&&await i.publish(c,Vu(s),{headers:r});else throw _}}o(lG,"publishToStream");function xm(e,t){t===void 0&&(t=Zv());let r=le.get(V.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(v.MSG_HEADERS.NATS_MSG_ID)){let s=Ka.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Yu()}`;t.append(v.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(v.MSG_HEADERS.ORIGIN)||t.append(v.MSG_HEADERS.ORIGIN,r),t}o(xm,"addNatsMsgHeader");function gi(e){e=e.toLowerCase();let t=Ri.join(le.get(V.CONFIG_PARAMS.ROOTPATH),tG);if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ls(xu)&&(xu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.HUB,config_file:v.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ri.join(t,v.PID_FILES.HUB),hdb_nats_path:t}),xu;if(e===V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ls(Fu)&&(Fu={port:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,config_file:v.NATS_CONFIG_FILES.LEAF_SERVER,domain:Si.getConfigFromFile(V.CONFIG_PARAMS.CLUSTERING_NODENAME)+v.SERVER_SUFFIX.LEAF,pid_file_path:Ri.join(t,v.PID_FILES.LEAF),hdb_nats_path:t}),Fu;br.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(gi,"getServerConfig");async function EG(e){let{jsm:t}=await je(),r=await pi();try{await t.streams.add({name:e.stream_name,storage:Pm.File,retention:Hm.Workqueue,duplicate_window:Um,subjects:[`${v.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Ku.Explicit,deliver_subject:`${e.deliver_subject}.${r}`,durable_name:e.durable_name,deliver_policy:mi.All,max_ack_pending:1e4,deliver_group:e.deliver_group});else throw s}}o(EG,"createWorkQueueStream");async function Vm(e,t,r){let{jsm:s}=await je(),n=await s.streams.info(t),i=km(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:_}=r,u=Wa.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 m=0,b=n.config.sources.length;m<b;m++)if(E=n.config.sources[m],d=m,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===a)return;n.config.sources.splice(d,1),await s.streams.update(t,n.config)}let R={name:u,opt_start_time:a,filter_subject:`${v.SUBJECT_PREFIXES.TXN}.>`};l||(R.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(R),await s.streams.update(t,n.config)}o(Vm,"addSourceToWorkStream");function km(e){return e.split(".")[1]}o(km,"extractServerName");async function Ym(e,t,r){let{schema:s,table:n}=r,i=Wa.createNatsTableStreamName(s,n),{jsm:a}=await je(),c=await a.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 a.streams.update(t,c.config)}o(Ym,"removeSourceFromWorkStream");async function dG(e,t,r=2e3,s=Wu()){if(!Ka.isObject(t))throw new Error("data param must be an object");let n=Vu(t),{connection:i}=await je(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let c=await i.request(e,n,a);return $u(c.data)}o(dG,"request");function Ju(e){return new Promise(async(t,r)=>{let s=Wv(ku,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(Ju,"reloadNATS");async function SG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Ju(e)}o(SG,"reloadNATSHub");async function fG(){let{pid_file_path:e}=gi(V.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Ju(e)}o(fG,"reloadNATSLeaf");function hG(e,t,r){let s;switch(e.code){case wm.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case wm.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(hG,"requestErrorHandler");async function TG(e,t){let r=t+v.SERVER_SUFFIX.LEAF;await Qv.writeTransaction(V.SYSTEM_SCHEMA_NAME,V.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,async()=>{e.subscribe===!0?await Vm(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Ym(r,v.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(TG,"updateWorkStream");async function $m(e,t){let r=Wa.createNatsTableStreamName(e,t),s=await pi(),n=gG(e,t,s);await ju(r,[n])}o($m,"createLocalTableStream");async function RG(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await $m(s,n)}}o(RG,"createTableStreams");async function Km(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Wa.createNatsTableStreamName(e,t),{jsm:s}=await je();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")br.warn(r);else throw r}}o(Km,"purgeTableStream");async function mG(e,t){if(le.get(V.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await Km(e,t[r])}o(mG,"purgeSchemaTableStreams");async function AG(e){return(await Ai()).streams.info(e)}o(AG,"getStreamInfo");function gG(e,t,r){return`${v.SUBJECT_PREFIXES.TXN}.${e}.${t}.${r}`}o(gG,"createSubjectName");async function pi(){if(fi)return fi;if(fi=(await Ai())?.nc?.info?.server_name,fi===void 0)throw new Error("Unable to get jetstream manager server name");return fi}o(pi,"getJsmServerName");async function pG(){let e=await Ai(),t=await pi(),r=await Fm();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=NG(s),c=i.split(".");if(!(c[c.length-1]===t&&!a)){if(n.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u}else if(n.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name){let u=`${v.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;br.trace(`Updating stream subject name from: ${i} to: ${u}`),n.subjects[0]=u,await e.consumers.update(v.WORK_QUEUE_CONSUMER_NAMES.stream_name,v.WORK_QUEUE_CONSUMER_NAMES.durable_name,{deliver_subject:`${v.WORK_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`})}else{let u=i.split(".");u[u.length-1]=t;let l=u.join(".");br.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}o(pG,"updateLocalStreams");function NG(e){let{config:t}=e,r=!1;if(t.name===v.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===v.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=le.get(V.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(NG,"updateStreamLimits")});var tc=f((uQ,Jm)=>{"use strict";var Ni=require("path"),Za=require("fs-extra"),OG=Xd(),IG=eS(),CG=rS(),bG=nS(),Xu=Nr(),en=O(),Me=Ve(),Xa=T(),ja=ke(),{CONFIG_PARAMS:se}=Xa,Ii=p(),za=H(),Qm=Xn(),Zu=Es(),Oi="clustering",LG=1e4,jm=5;Jm.exports={generateNatsConfig:yG,removeNatsConfig:wG};async function yG(e=!1,t=void 0){za.initSync();let r=za.get(se.ROOTPATH),s=Ni.join(r,Oi,ja.PID_FILES.HUB),n=Ni.join(r,Oi,ja.PID_FILES.LEAF),i=Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.HUB_SERVER),c=Ni.join(r,Oi,ja.NATS_CONFIG_FILES.LEAF_SERVER),_=Me.getConfigFromFile(se.CLUSTERING_TLS_CERTIFICATE),u=Me.getConfigFromFile(se.CLUSTERING_TLS_PRIVATEKEY),l=Me.getConfigFromFile(se.CLUSTERING_TLS_CERT_AUTH),E=Me.getConfigFromFile(se.CLUSTERING_TLS_INSECURE),d=Me.getConfigFromFile(se.CLUSTERING_TLS_VERIFY),S=Me.getConfigFromFile(se.CLUSTERING_NODENAME),R=Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Zu.checkNATSServerInstalled()||ec("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await Xu.listUsers(),b=Me.getConfigFromFile(se.CLUSTERING_USER),$=await Xu.getClusterUser();(en.isEmpty($)||$.active!==!0)&&ec(`Invalid cluster user '${b}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await Ja(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await Ja(se.CLUSTERING_HUBSERVER_NETWORK_PORT),await Ja(se.CLUSTERING_LEAFSERVER_NETWORK_PORT));let A=[],B=[];for(let[mn,ws]of m.entries())ws.role.role===Xa.ROLE_TYPES_ENUM.CLUSTER_USER&&ws.active&&(A.push(new bG(ws.username,Qm.decrypt(ws.hash))),B.push(new CG(ws.username,Qm.decrypt(ws.hash))));let Ee=[],{hub_routes:ce}=Me.getClusteringRoutes();if(!en.isEmptyOrZeroLength(ce))for(let mn of ce)Ee.push(`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@${mn.host}:${mn.port}`);let cr=new OG(Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_NETWORK_PORT),S,s,_,u,l,E,d,R,Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NAME),Me.getConfigFromFile(se.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Ee,A,B);l==null&&(delete cr.tls.ca_file,delete cr.leafnodes.tls.ca_file),t=en.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Za.writeJson(a,cr),Ii.trace(`Hub server config written to ${a}`));let Rn=`tls://${$.sys_name_encoded}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,ji=`tls://${$.uri_encoded_name}:${$.uri_encoded_d_hash}@0.0.0.0:${R}`,Vr=new IG(Me.getConfigFromFile(se.CLUSTERING_LEAFSERVER_NETWORK_PORT),S,n,i,[Rn],[ji],A,B,_,u,l,E);l==null&&delete Vr.tls.ca_file,(t===void 0||t===Xa.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Za.writeJson(c,Vr),Ii.trace(`Leaf server config written to ${c}`))}o(yG,"generateNatsConfig");async function Ja(e){let t=za.get(e);return en.isEmpty(t)&&ec(`port undefined for '${e}'`),await en.isPortTaken(t)&&ec(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(Ja,"isPortAvailable");function ec(e){let t=`Error generating clustering config: ${e}`;Ii.error(t),console.error(t),process.exit(1)}o(ec,"generateNatsConfigError");async function wG(e){let{port:t,config_file:r}=Zu.getServerConfig(e),{username:s,decrypt_hash:n}=await Xu.getClusterUser(),i=0,a=500;for(;i<jm;){try{let u=await Zu.createConnection(t,s,n,!1);if(u.protocol.connected===!0){u.close();break}}catch(u){Ii.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${u}`)}if(i++,i>=jm)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await en.async_set_timeout(a*i)}let c="0".repeat(LG),_=Ni.join(za.get(se.ROOTPATH),Oi,r);await Za.writeFile(_,c),await Za.remove(_),Ii.notify(e,"started.")}o(wG,"removeNatsConfig")});var rA=f((EQ,tA)=>{"use strict";var Je=H(),MG=Vs(),P=T(),Ci=ke(),er=require("path"),{PACKAGE_ROOT:rc}=T(),Xm=H(),tn="/dev/null",DG=er.join(rc,"launchServiceScripts"),Zm=er.join(rc,"utility/scripts"),UG=er.join(Zm,P.HDB_RESTART_SCRIPT),zm=er.resolve(rc,"dependencies",`${process.platform}-${process.arch}`,Ci.NATS_BINARY_NAME);function eA(){let t=MG.licenseSearch().ram_allocation||P.RAM_ALLOCATION_ENUM.DEFAULT,r=P.MEM_SETTING_KEY+t;return{name:P.PROCESS_DESCRIPTORS.HDB,script:P.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0},node_args:r,cwd:rc}}o(eA,"generateMainServerConfig");var PG=9930;function HG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.HUB_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==PG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(HG,"generateNatsHubServerConfig");var BG=9940;function vG(){Je.initSync(!0);let e=Je.get(P.CONFIG_PARAMS.ROOTPATH),t=er.join(e,"clustering",Ci.NATS_CONFIG_FILES.LEAF_SERVER),r=er.join(Je.get(P.HDB_SETTINGS_NAMES.LOG_PATH_KEY),P.LOG_NAMES.HDB),s=Xm.get(P.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ci.LOG_LEVEL_FLAGS[Je.get(P.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==BG?"-"+s:""),script:zm,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=tn,i.error_file=tn),i}o(vG,"generateNatsLeafServerConfig");function GG(){Je.initSync();let e=er.join(Je.get(P.CONFIG_PARAMS.LOGGING_ROOT),P.LOG_NAMES.HDB),t={name:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:P.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:DG,autorestart:!1};return Je.get(P.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=tn,t.error_file=tn),t}o(GG,"generateClusteringUpgradeV4ServiceConfig");function qG(){return{...{name:P.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:{[P.PROCESS_NAME_ENV_PROP]:P.PROCESS_DESCRIPTORS.RESTART_HDB},instances:1,autorestart:!1,cwd:Zm},script:UG}}o(qG,"generateRestart");function FG(){return{apps:[eA()]}}o(FG,"generateAllServiceConfigs");tA.exports={generateAllServiceConfigs:FG,generateMainServerConfig:eA,generateRestart:qG,generateNatsHubServerConfig:HG,generateNatsLeafServerConfig:vG,generateClusteringUpgradeV4ServiceConfig:GG}});var nA=f((SQ,sA)=>{var xG=Fe(),VG={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};sA.exports=function(e){return xG.validateObject(e,VG)}});var zu=f((fQ,iA)=>{"use strict";var kG=T().OPERATIONS_ENUM,sc=class{constructor(t,r,s,n=void 0){this.operation=kG.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(sc,"UpdateObject");iA.exports=sc});var aA=f((TQ,oA)=>{"use strict";var YG={OPERATION:"operation",REFRESH:"refresh"},nc=class{constructor(t,r){this.operation_token=t,this.refresh_token=r}};o(nc,"JWTTokens");var ic=class{constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};o(ic,"JWTRSAKeys");oA.exports={JWTTokens:nc,TOKEN_TYPE_ENUM:YG,JWTRSAKeys:ic}});var EA=f((mQ,lA)=>{"use strict";var Li=require("jsonwebtoken"),el=require("fs-extra"),tl=O(),ot=T(),{handleHDBError:De,hdb_errors:$G}=J(),{HTTP_STATUS_CODES:Ue,AUTHENTICATION_ERROR_MSGS:Pe}=$G,bi=p(),cA=Wo(),nl=Nr(),KG=_s().update,WG=zu(),QG=ni(),{UserEventMsg:jG}=os(),Lr=H();Lr.initSync();var rl=require("path"),{JWTTokens:JG,JWTRSAKeys:XG,TOKEN_TYPE_ENUM:oc}=aA(),ZG=Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",zG=Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Lr.get(ot.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ac="RS256",sl;lA.exports={createTokens:eq,validateOperationToken:rq,refreshOperationToken:tq,validateRefreshToken:uA};async function eq(e){if(tl.isEmpty(e)||typeof e!="object")throw De(new Error,Pe.INVALID_AUTH_OBJECT,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.username))throw De(new Error,Pe.USERNAME_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);if(tl.isEmpty(e.password))throw De(new Error,Pe.PASSWORD_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await nl.findAndValidateUser(e.username,e.password),!t)throw De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}catch(d){throw bi.error(d),De(new Error,Pe.INVALID_CREDENTIALS,Ue.UNAUTHORIZED,void 0,void 0,!0)}let r=await cc(),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},a=await _A(i,r.private_key,r.passphrase),c=await Li.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:zG,algorithm:ac,subject:oc.REFRESH}),_=cA.hash(c),u=new WG(ot.SYSTEM_SCHEMA_NAME,ot.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:_}]),l,E;try{l=await KG(u)}catch(d){bi.error(d),E=d}if(E!==void 0||l.skipped_hashes.length>0)throw De(new Error,Pe.REFRESH_TOKEN_SAVE_FAILED,Ue.INTERNAL_SERVER_ERROR);return QG.signalUserChange(new jG(process.pid)),new JG(a,c)}o(eq,"createTokens");async function _A(e,t,r){return await Li.sign(e,{key:t,passphrase:r},{expiresIn:ZG,algorithm:ac,subject:oc.OPERATION})}o(_A,"signOperationToken");async function cc(){if(sl===void 0)try{let e=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PASSPHRASE_NAME),t=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=rl.join(Lr.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await el.readFile(e)).toString(),n=(await el.readFile(t)).toString(),i=(await el.readFile(r)).toString();sl=new XG(i,n,s)}catch(e){throw bi.error(e),De(new Error,Pe.NO_ENCRYPTION_KEYS,Ue.INTERNAL_SERVER_ERROR)}return sl}o(cc,"getJWTRSAKeys");async function tq(e){if(!e)throw De(new Error,Pe.INVALID_BODY,Ue.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw De(new Error,Pe.REFRESH_TOKEN_REQUIRED,Ue.BAD_REQUEST,void 0,void 0,!0);await uA(e.refresh_token);let t=await cc(),r=await Li.decode(e.refresh_token);return{operation_token:await _A({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(tq,"refreshOperationToken");async function rq(e){try{let t=await cc(),r=await Li.verify(e,t.public_key,{algorithms:ac,subject:oc.OPERATION});return await nl.findAndValidateUser(r.username,void 0,!1)}catch(t){throw bi.warn(t),t.name&&t.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}}o(rq,"validateOperationToken");async function uA(e){let t;try{let r=await cc(),s=await Li.verify(e,r.public_key,{algorithms:ac,subject:oc.REFRESH});t=await nl.findAndValidateUser(s.username,void 0,!1)}catch(r){throw bi.warn(r),r.name&&r.name==="TokenExpiredError"?De(new Error,Pe.TOKEN_EXPIRED,Ue.FORBIDDEN):De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED)}if(!cA.validate(t.refresh_token,e))throw De(new Error,Pe.INVALID_TOKEN,Ue.UNAUTHORIZED);return t}o(uA,"validateRefreshToken")});var hA=f((pQ,fA)=>{"use strict";var sq=nA(),rn=require("passport"),nq=require("passport-local").Strategy,iq=require("passport-http").BasicStrategy,oq=require("util"),aq=Nr(),SA=oq.callbackify(aq.findAndValidateUser),gQ=et(),cq=T(),dA=EA();rn.use(new nq(function(e,t,r){SA(e,t,r)}));rn.use(new iq(function(e,t,r){SA(e,t,r)}));rn.serializeUser(function(e,t){t(null,e)});rn.deserializeUser(function(e,t){t(null,e)});function _q(e,t,r){let s,n;if(e.headers&&e.headers.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("User not found")}switch(o(i,"handleResponse"),s){case"Basic":rn.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body&&e.body.operation&&e.body.operation===cq.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?dA.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):dA.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:rn.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(_q,"authorize");function uq(e,t){let r=sq(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,s)}o(uq,"checkPermissions");fA.exports={authorize:_q,checkPermissions:uq}});var RA=f((OQ,TA)=>{"use strict";var _c=class{constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}};o(_c,"Node");var uc=class{constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};o(uc,"NodeSubscription");TA.exports={Node:_c,NodeSubscription:uc}});var AA=f((CQ,mA)=>{"use strict";var lq=T().OPERATIONS_ENUM,lc=class{constructor(t,r,s,n=void 0){this.operation=lq.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};o(lc,"UpsertObject");mA.exports=lc});var il=f((LQ,gA)=>{"use strict";var Ec=class{constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}};o(Ec,"RemotePayloadObject");var dc=class{constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a}};o(dc,"RemotePayloadSubscription");gA.exports={RemotePayloadObject:Ec,RemotePayloadSubscription:dc}});var NA=f((wQ,pA)=>{"use strict";var Sc=class{constructor(t,r,s=0,n=0,i=0,a=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=a}};o(Sc,"TableSizeObject");pA.exports=Sc});var IA=f((DQ,OA)=>{"use strict";var Eq=NA(),dq=de(),sn=k(),Sq=p(),{getSchemaPath:fq,getTransactionAuditStorePath:hq}=K();OA.exports=Tq;async function Tq(e){let t=new Eq;try{let r=fq(e.schema,e.name),s=await sn.openEnvironment(r,e.name),n=sn.statDBI(s,e.hash_attribute),i=hq(e.schema,e.name),a=await sn.openEnvironment(i,e.name,!0),c=sn.statDBI(a,dq.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP),_=await sn.environmentDataSize(r,e.name),u=await sn.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){Sq.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tq,"lmdbGetTableSize")});var bA=f((PQ,CA)=>{"use strict";var fc=class{constructor(t,r,s,n,i,a,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=c}};o(fc,"SystemInformationObject");CA.exports=fc});var nn=f((BQ,MA)=>{"use strict";var Rq=require("fs-extra"),mq=require("path"),pe=require("systeminformation"),yr=p(),ol=T(),Aq=IA(),yA=ti(),{getThreadInfo:LA}=Xr(),wA=H();wA.initSync();var gq=bA(),{openEnvironment:pq}=k(),{getSchemaPath:Nq}=K(),hc;MA.exports={getHDBProcessInfo:ul,getNetworkInfo:El,getDiskInfo:ll,getMemoryInfo:_l,getCPUInfo:cl,getTimeInfo:al,getSystemInformation:dl,systemInformation:Oq,getTableSize:Sl,getMetrics:fl};function al(){return pe.time()}o(al,"getTimeInfo");async function cl(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:c,socket:_,cache:u,...l}=await pe.cpu();l.cpu_speed=await pe.cpuCurrentSpeed();let{raw_currentload:E,raw_currentload_idle:d,raw_currentload_irq:S,raw_currentload_nice:R,raw_currentload_system:m,raw_currentload_user:b,cpus:$,...A}=await pe.currentLoad();return A.cpus=[],$.forEach(B=>{let{raw_load:Ee,raw_load_idle:ce,raw_load_irq:cr,raw_load_nice:Rn,raw_load_system:ji,raw_load_user:Vr,...mn}=B;A.cpus.push(mn)}),l.current_load=A,l}catch(e){return yr.error(`error in getCPUInfo: ${e}`),{}}}o(cl,"getCPUInfo");async function _l(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await pe.mem();return Object.assign(n,process.memoryUsage())}catch(e){return yr.error(`error in getMemoryInfo: ${e}`),{}}}o(_l,"getMemoryInfo");async function ul(){let e={core:[],clustering:[]};try{let t=await pe.processes(),r;try{r=Number.parseInt(await Rq.readFile(mq.join(wA.get(ol.CONFIG_PARAMS.ROOTPATH),ol.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===ol.NODE_ERROR_CODES.ENOENT)yr.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}return t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)}),e}catch(t){return yr.error(`error in getHDBProcessInfo: ${t}`),e}}o(ul,"getHDBProcessInfo");async function ll(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await pe.disksIO();e.io=i;let{rx_sec:a,tx_sec:c,wx_sec:_,...u}=await pe.fsStats();return e.read_write=u,e.size=await pe.fsSize(),e}catch(t){return yr.error(`error in getDiskInfo: ${t}`),e}}o(ll,"getDiskInfo");async function El(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await pe.networkInterfaceDefault(),e.latency=await pe.inetChecksite("google.com"),(await pe.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:a,dhcp:c,dnsSuffix:_,ieee8021xAuth:u,ieee8021xState:l,carrier_changes:E,...d}=s;e.interfaces.push(d)}),(await pe.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:a,...c}=s;e.stats.push(c)}),e}catch(t){return yr.error(`error in getNetworkInfo: ${t}`),e}}o(El,"getNetworkInfo");async function dl(){if(hc!==void 0)return hc;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,...c}=await pe.osInfo();e=c;let _=await pe.versions("node, npm");return e.node_version=_.node,e.npm_version=_.npm,hc=e,hc}catch(t){return yr.error(`error in getSystemInformation: ${t}`),e}}o(dl,"getSystemInformation");async function Sl(){let e=[],t=await yA.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await Aq(s));return e}o(Sl,"getTableSize");async function fl(){let e=await yA.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=Nq(r,n),c=(await pq(i,n)).getStats();s[n]={puts:c.puts,deletes:c.deletes,txns:c.txns,pageFlushes:c.pageFlushes,writes:c.writes,pagesWritten:c.pagesWritten,timeDuringTxns:c.timeDuringTxns,timeStartTxns:c.timeStartTxns,timePageFlushes:c.timePageFlushes,timeSync:c.timeSync}}catch(i){yr.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(fl,"getMetrics");async function Oq(e){let t=new gq;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await dl(),t.time=al(),t.cpu=await cl(),t.memory=await _l(),t.disk=await ll(),t.network=await El(),t.harperdb_processes=await ul(),t.table_size=await Sl(),t.metrics=await fl(),t.threads=await LA(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await dl();break;case"time":t.time=al();break;case"cpu":t.cpu=await cl();break;case"memory":t.memory=await _l();break;case"disk":t.disk=await ll();break;case"network":t.network=await El();break;case"harperdb_processes":t.harperdb_processes=await ul();break;case"table_size":t.table_size=await Sl();break;case"database_metrics":case"metrics":t.metrics=await fl();break;case"threads":t.threads=await LA();break;default:break}return t}o(Oq,"systemInformation")});var Tc=f((FQ,HA)=>{"use strict";var Iq=_s(),hl=O(),Tl=require("util"),ds=T(),DA=H();DA.initSync();var Cq=hA(),UA=es(),{Node:GQ,NodeSubscription:qQ}=RA(),bq=_i(),Lq=AA(),{RemotePayloadObject:yq,RemotePayloadSubscription:wq}=il(),{handleHDBError:Mq,hdb_errors:Dq}=J(),{HTTP_STATUS_CODES:Uq,HDB_ERROR_MSGS:Pq}=Dq,Hq=ht(),Bq=nn(),vq=Yr(),Gq=Tl.promisify(Cq.authorize),qq=Tl.promisify(UA.searchByHash),Fq=Tl.promisify(UA.searchByValue);HA.exports={authHeaderToUser:xq,isEmpty:Vq,getNodeRecord:kq,upsertNodeRecord:Yq,buildNodePayloads:$q,checkClusteringEnabled:Kq,getAllNodeRecords:Wq,getSystemInfo:Qq,reverseSubscription:PA};async function xq(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Gq(t,null),e}o(xq,"authHeaderToUser");function Vq(e){return e==null}o(Vq,"isEmpty");async function kq(e){let t=new bq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qq(t)}o(kq,"getNodeRecord");async function Yq(e){let t=new Lq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Iq.upsert(t)}o(Yq,"upsertNodeRecord");function PA(e){if(hl.isEmpty(e.subscribe)||hl.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}o(PA,"reverseSubscription");function $q(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:_,table:u}=c,l=hl.getTableHashAttribute(_,u),{subscribe:E,publish:d}=PA(c),S=new wq(_,u,l,d,E,c.start_time);n.push(S)}return new yq(r,t,n,s)}o($q,"buildNodePayloads");function Kq(){if(!DA.get(ds.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mq(new Error,Pq.CLUSTERING_NOT_ENABLED,Uq.BAD_REQUEST,void 0,void 0,!0)}o(Kq,"checkClusteringEnabled");async function Wq(){let e=new Hq(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fq(e))}o(Wq,"getAllNodeRecords");async function Qq(){let e=await Bq.getSystemInformation();return{hdb_version:vq.version(),node_version:e.node_version,platform:e.platform}}o(Qq,"getSystemInfo")});var on=f((QQ,jA)=>{"use strict";var q=T(),vA=O(),yi=tc(),Rc=Es(),Dt=ke(),F=require("pm2"),wr=rA(),mc=H(),tr=p(),jq=Tc(),{startWorker:Rl,onMessageFromWorkers:Jq}=Xr(),VQ=nn(),Xq=require("util"),GA=require("child_process"),{execFile:Zq}=GA,kQ=Xq.promisify(GA.exec),YQ=require("systeminformation");jA.exports={enterPM2Mode:zq,start:Ss,stop:ml,reload:qA,restart:FA,list:Al,describe:gl,connect:rr,kill:nF,startAllServices:iF,startService:pl,getUniqueServicesList:VA,restartAllServices:oF,isServiceRegistered:kA,reloadStopStart:YA,restartHdb:xA,deleteProcess:rF,startClusteringProcesses:WA,startClusteringThreads:QA,isHdbRestartRunning:sF,isClusteringRunning:cF,stopClustering:aF,reloadClustering:_F};var{PACKAGE_ROOT:$Q}=T(),KQ=T(),{loggerWithTag:WQ}=tr,wi=!1;Jq(e=>{e.type==="restart"&&mc.initSync(!0)});function zq(){wi=!0}o(zq,"enterPM2Mode");function rr(){return new Promise((e,t)=>{F.connect((r,s)=>{tr.setupConsoleLogging(),r&&t(r),e(s)})})}o(rr,"connect");var He,eF=10,BA;function Ss(e){if(wi)return tF(e);let t=Zq(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=He.indexOf(t);i>-1&&He.splice(i,1),!BA&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<eF&&Ss(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=mc.get(q.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,c,_=0,u;for(;c=a.exec(n);){if(c.index&&Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let d=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",d,r,n.slice(_,c.index).trim())}let[l,E]=c;_=c.index+l.length,u=Dt.LOG_LEVELS[E]}if(Dt.LOG_LEVEL_HIERARCHY[i]>=Dt.LOG_LEVEL_HIERARCHY[u||"info"]){let l=u===Dt.LOG_LEVELS.ERR||u===Dt.LOG_LEVELS.WRN?tr.OUTPUTS.STDERR:tr.OUTPUTS.STDOUT;tr.logCustomLevel(u||"info",l,r,n.slice(_).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!He){He=[];let n=o(()=>{BA=!0,He&&(He.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}He.push(t)}o(Ss,"start");function tF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.start(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(tF,"startWithPM2");function ml(e){if(!wi){for(let t of He||[])t.name===e&&(He.splice(He.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.stop(e,async(s,n)=>{s&&(F.disconnect(),r(s)),F.delete(e,(i,a)=>{i&&(F.disconnect(),r(s)),F.disconnect(),t(a)})})})}o(ml,"stop");function qA(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.reload(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(qA,"reload");function FA(e){if(!wi)for(let t of He||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.restart(e,(s,n)=>{F.disconnect(),t(n)})})}o(FA,"restart");function rF(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.delete(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(rF,"deleteProcess");async function xA(){await Ss(wr.generateRestart())}o(xA,"restartHdb");async function sF(){let e=await Al();for(let t in e)if(e[t].name===q.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(sF,"isHdbRestartRunning");function Al(){return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.list((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(Al,"list");function gl(e){return new Promise(async(t,r)=>{try{await rr()}catch(s){r(s)}F.describe(e,(s,n)=>{s&&(F.disconnect(),r(s)),F.disconnect(),t(n)})})}o(gl,"describe");function nF(){if(!wi){for(let e of He||[])e.kill();He=[];return}return new Promise(async(e,t)=>{try{await rr()}catch(r){t(r)}F.killDaemon((r,s)=>{r&&(F.disconnect(),t(r)),F.disconnect(),e(s)})})}o(nF,"kill");async function iF(){try{await WA(),await QA(),await Ss(wr.generateAllServiceConfigs())}catch(e){throw F.disconnect(),e}}o(iF,"startAllServices");async function pl(e){try{let t;switch(e=e.toLowerCase(),e){case q.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=wr.generateMainServerConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=wr.generateNatsIngestServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=wr.generateNatsReplyServiceConfig();break;case q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=wr.generateNatsHubServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=wr.generateNatsLeafServerConfig(),await Ss(t),await yi.removeNatsConfig(e);return;case q.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=wr.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ss(t)}catch(t){throw F.disconnect(),t}}o(pl,"startService");async function VA(){try{let e=await Al(),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 F.disconnect(),e}}o(VA,"getUniqueServicesList");async function oF(e=[]){try{let t=!1,r=await VA();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===q.PROCESS_DESCRIPTORS.HDB?t=!0:await FA(a))}t&&await YA(q.PROCESS_DESCRIPTORS.HDB)}catch(t){throw F.disconnect(),t}}o(oF,"restartAllServices");async function kA(e){return He?.find(t=>t.name===e)?!0:!vA.isEmptyOrZeroLength(await gl(e))}o(kA,"isServiceRegistered");async function YA(e){let t=e===q.PROCESS_DESCRIPTORS.HDB?mc.get(q.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):mc.get(q.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await gl(e),s=vA.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await ml(e),await pl(e)):e===q.PROCESS_DESCRIPTORS.HDB?await xA():await qA(e)}o(YA,"reloadStopStart");var $A,KA;async function WA(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];await pl(t)}}o(WA,"startClusteringProcesses");async function QA(){$A=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE}),KA=Rl(q.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:q.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Rc.createWorkQueueStream(Dt.WORK_QUEUE_CONSUMER_NAMES),await Rc.updateLocalStreams();let e=await jq.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===q.PRE_4_0_0_VERSION){tr.info("Starting clustering upgrade 4.0.0 process"),Rl(q.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(QA,"startClusteringThreads");async function aF(){for(let e in q.CLUSTERING_PROCESSES)if(e===q.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)await $A.terminate();else if(e===q.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await KA.terminate();else{let t=q.CLUSTERING_PROCESSES[e];await ml(t)}}o(aF,"stopClustering");async function cF(){for(let e in q.CLUSTERING_PROCESSES){let t=q.CLUSTERING_PROCESSES[e];if(await kA(t)===!1)return!1}return!0}o(cF,"isClusteringRunning");async function _F(){await yi.generateNatsConfig(!0),await Rc.reloadNATSHub(),await Rc.reloadNATSLeaf(),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yi.removeNatsConfig(q.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(_F,"reloadClustering")});var yl=f((JQ,tg)=>{"use strict";var uF=require("minimist"),{isMainThread:Il,parentPort:ZA}=require("worker_threads"),z=T(),{PROCESS_DESCRIPTORS_VALIDATE:Mi}=z,Ut=p(),Cl=O(),Ac=tc(),an=Es(),Nl=ke(),zA=Ve(),Pt=on(),JA=nn(),lF=kr(),{restartWorkers:gc,onMessageFromWorkers:EF}=Xr(),{handleHDBError:dF,hdb_errors:SF}=J(),{HTTP_STATUS_CODES:fF}=SF,pc=H();pc.initSync();var Di=`Restarting HarperDB. This may take up to ${z.RESTART_TIMEOUT_MS/1e3} seconds.`,hF="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XA="Clustering is not enabled so cannot be restarted",TF="Invalid service",fs,Rt;tg.exports={restart:eg,restartService:bl};Il&&EF(e=>{e.type===z.ITC_EVENT_TYPES.RESTART&&(e.workerType?bl({service:e.workerType}):eg({operation:"restart"}))});async function eg(e){Rt=Object.keys(e).length===0,fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR);let t=uF(process.argv);if(t.service){await bl(t);return}if(Rt&&!fs){console.error(hF);return}if(Rt&&console.log(Di),fs){Pt.enterPM2Mode(),Ut.notify(Di);let r=lF(Object.keys(z.CONFIG_PARAM_MAP),!0);return Cl.isEmptyOrZeroLength(Object.keys(r))||zA.updateConfigValue(void 0,void 0,r,!0,!0),mF(),Di}return Il?(Ut.notify(Di),await Ll(),setTimeout(()=>{gc()},50)):ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART}),Di}o(eg,"restart");async function bl(e){let{service:t}=e;if(z.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw dF(new Error,TF,fF.BAD_REQUEST,void 0,void 0,!0);if(fs=await Pt.isServiceRegistered(z.HDB_PROC_DESCRIPTOR),!Il)return ZA.postMessage({type:z.ITC_EVENT_TYPES.RESTART,workerType:t}),`Restarting ${t}`;let r;switch(t){case Mi.clustering:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering"),Ut.notify("Restarting clustering"),await Ll();break;case Mi.clustering_config:case Mi["clustering config"]:if(!pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XA;break}Rt&&console.log("Restarting clustering_config"),Ut.notify("Restarting clustering_config"),await Pt.reloadClustering();break;case"custom_functions":case"custom functions":case Mi.harperdb:case Mi.http_workers:if(Rt&&!fs){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Rt&&console.log("Restarting http_workers"),Ut.notify("Restarting http_workers"),fs?await Pt.restart(z.HDB_PROC_DESCRIPTOR):setTimeout(()=>{gc("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ut.error(r),Rt&&console.error(r),r):`Restarting ${t}`}o(bl,"restartService");async function RF(){await an.publishToStream(`${Nl.SUBJECT_PREFIXES.TXN}.${Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Nl.WORK_QUEUE_CONSUMER_NAMES.stream_name,an.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(RF,"postDummyNatsMsg");async function mF(){await Ll(),await Pt.restart(z.HDB_PROC_DESCRIPTOR),await Cl.async_set_timeout(2e3),pc.get(z.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Ol(),Rt&&(await an.closeConnection(),process.exit(0))}o(mF,"restartPM2Mode");async function Ll(){if(!zA.getConfigFromFile(z.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await JA.getHDBProcessInfo()).clustering.length===0)Ut.trace("Clustering not running, restart will start clustering services"),await Ac.generateNatsConfig(!0),await Pt.startClusteringProcesses(),await Pt.startClusteringThreads(),await Ol(),Rt&&await an.closeConnection();else{await RF(),await Ac.generateNatsConfig(!0),fs?(Ut.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Pt.restart(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await JA.getHDBProcessInfo()).clustering.forEach(n=>{Ut.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await Cl.async_set_timeout(3e3),await Ol(),await an.updateLocalStreams(),Rt&&await an.closeConnection(),Ut.trace("Restart clustering restarting ingest and reply service threads");let t=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=gc(z.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(Ll,"restartClustering");async function Ol(){await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ac.removeNatsConfig(z.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(Ol,"removeNatsConfig")});var Ml=f((ZQ,rg)=>{"use strict";var Ui=H();Ui.initSync();var cn=require("fs-extra"),wl=require("path"),_n=T(),AF=require("crypto"),gF=require("uuid").v4;rg.exports=pF;function pF(){if(Ui.getHdbBasePath()!==void 0){let e=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=wl.join(Ui.getHdbBasePath(),_n.LICENSE_KEY_DIR_NAME,_n.JWT_ENUM.JWT_PASSPHRASE_NAME);try{cn.accessSync(r),cn.accessSync(e),cn.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=gF(),i=AF.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});cn.writeFileSync(r,n),cn.writeFileSync(e,i.privateKey),cn.writeFileSync(t,i.publicKey)}else throw s}}}o(pF,"checkJWTTokenExist")});var ng=f((ej,sg)=>{"use strict";var Nc=class{constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};o(Nc,"HdbInfoInsertObject");sg.exports={HdbInfoInsertObject:Nc}});var ag=f((rj,og)=>{"use strict";var ig=T(),Oc=class{constructor(t,r){this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[ig.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};o(Oc,"UpgradeObject");og.exports={UpgradeObject:Oc}});var Ic=f((nj,_g)=>{"use strict";var at=require("prompt"),un=require("chalk"),cg=p(),mt=require("os"),Dl=kr(),Ul=["yes","y"];async function NF(e){let t=`${mt.EOL}`+un.bold.green("Your current HarperDB version requires that we complete an update process.")+`${mt.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}${mt.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${mt.EOL}`;at.override=Dl(["CONFIRM_UPGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_UPGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await at.get([r])}catch(n){return cg.error("There was an error when prompting user about an upgrade."),cg.error(n),!1}return Ul.includes(s.CONFIRM_UPGRADE)}o(NF,"forceUpdatePrompt");async function OF(e){let t=`${mt.EOL}`+un.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${mt.EOL}`);at.override=Dl(["CONFIRM_DOWNGRADE"]),at.start(),at.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:un.magenta(`${mt.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await at.get([r]);return Ul.includes(s.CONFIRM_DOWNGRADE)}o(OF,"forceDowngradePrompt");async function IF(){let e=`${mt.EOL}`+un.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");at.override=Dl(["GENERATE_CERTS"]),at.start(),at.message=e;let t={properties:{GENERATE_CERTS:{description:un.magenta(`${mt.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await at.get([t]);return Ul.includes(r.GENERATE_CERTS)}o(IF,"upgradeCertsPrompt");_g.exports={forceUpdatePrompt:NF,forceDowngradePrompt:OF,upgradeCertsPrompt:IF}});var Pl=f((oj,ug)=>{"use strict";var Cc=class{constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};o(Cc,"UpgradeDirective");ug.exports=Cc});var Eg=f((Ej,lg)=>{"use strict";var CF=O(),bF=Ve(),cj=p(),_j=require("path"),uj=require("fs"),lj=T();lg.exports={getOldPropsValue:LF};function LF(e,t,r=!1){let s=t.getRaw(e);return CF.isNotEmptyAndHasValue(s)?s:r?bF.getDefaultConfig(e):""}o(LF,"getOldPropsValue")});var hg=f((Sj,fg)=>{"use strict";var Mr=require("path"),Dr=require("fs-extra"),yF=require("properties-reader"),wF=Pl(),ne=p(),{getOldPropsValue:j}=Eg(),{HDB_SETTINGS_NAMES:N,CONFIG_PARAMS:hs}=T(),Ts=Ve(),bc=H(),dg=O(),Ht=T(),Hl=new wF("3.1.0"),Sg=[];function MF(){let e=yF(bc.get(N.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ne.info(t);let r=` ;Settings for the HarperDB process.
9
9