harperdb 4.2.0-alpha.11 → 4.2.0-alpha.13

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/lite.js CHANGED
@@ -1,31 +1,31 @@
1
- var tH=Object.create;var Wo=Object.defineProperty;var rH=Object.getOwnPropertyDescriptor;var sH=Object.getOwnPropertyNames;var nH=Object.getPrototypeOf,iH=Object.prototype.hasOwnProperty;var a=(e,t)=>Wo(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ye=(e,t)=>{for(var r in t)Wo(e,r,{get:t[r],enumerable:!0})},TR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of sH(t))!iH.call(e,n)&&n!==r&&Wo(e,n,{get:()=>t[n],enumerable:!(s=rH(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?tH(nH(e)):{},TR(t||!e||!e.__esModule?Wo(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>TR(Wo({},"__esModule",{value:!0}),e);var g=m((rre,MR)=>{"use strict";var mr=require("path"),oH=require("fs"),{relative:ere,join:tre}=mr,{existsSync:aH}=oH;function cH(){let e=__dirname;for(;!aH(mr.join(e,"package.json"));){let t=mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(cH,"getHDBPackageRoot");var an=cH(),RR="js",_u=RR,uH="harperdb-config.yaml",lH="defaultConfig.yaml",_H="hdb",gR=`harperdb.${_u}`,AR=`customFunctionsServer.${_u}`,dH=`restartHdb.${_u}`,TE="HarperDB",lu="Custom Functions",du="Clustering Hub",Eu="Clustering Leaf",EH="Clustering Ingest Service",fH="Clustering Reply Service",hH="foreground.pid",mH="hdb.pid",SH="data",pH={HDB:TE,CLUSTERING_HUB:du,CLUSTERING_LEAF:Eu,CLUSTERING_INGEST_SERVICE:EH,CLUSTERING_REPLY_SERVICE:fH,CUSTOM_FUNCTIONS:lu,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"},TH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},RH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},gH={harperdb:TE,"clustering hub":du,"clustering leaf":Eu,"custom functions":lu,custom_functions:lu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},AH={CLUSTERING_HUB_PROC_DESCRIPTOR:du,CLUSTERING_LEAF_PROC_DESCRIPTOR:Eu},pE={HDB:mr.join(an,"server/harperdb"),CUSTOM_FUNCTIONS:mr.join(an,"server/customFunctions"),CLUSTERING_HUB:mr.join(an,"server/nats"),CLUSTERING_LEAF:mr.join(an,"server/nats")},OH={HDB:mr.join(pE.HDB,gR),CUSTOM_FUNCTIONS:mr.join(pE.CUSTOM_FUNCTIONS,AR)},NH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:mr.join(an,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:mr.join(an,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:mr.join(an,"launchServiceScripts/launchUpdateNodes4-0-0.js")},bH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},OR="support@harperdb.io",yH="customer-success@harperdb.io",NR=1,IH=4141,bR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",wH="https://www.harperdb.io/product",CH=`For support, please submit a request at ${bR} or contact ${OR}`,yR=`For license support, please contact ${yH}`,UH="None of the specified records were found.",DH="hash attribute not found",LH=`Your current license only supports ${NR} role. ${yR}`,MH="Your current license only supports 3 connections to a node.",PH="127.0.0.1",vH=1,BH=/^\.$/,HH=/^\.\.$/,qH="U+002E",FH=/\//g,GH="U+002F",xH=/U\+002F/g,kH=/^U\+002E$/,VH=/^U\+002EU\+002E$/,$H="d",YH=999999,KH="*",WH="--max-old-space-size=",QH="system",zH="__hdb_hash",JH=".harperdb",XH=".hdb",ZH="keys",jH="hdb_boot_properties.file",e0=".updateConfig.json",t0="SIGTSTP",r0=24,s0=6e4,n0=448,i0="blob",o0="trash",a0="database",c0="schema",u0="transactions",l0=".count",_0="id",d0="PROCESS_NAME",IR={SETTINGS_PATH_KEY:"settings_path"},wR=require("lodash"),E0={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"},f0={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},h0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},m0={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"},S0={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"},tr="hdb_internal:",p0={CREATE_SCHEMA:tr+"create_schema",CREATE_TABLE:tr+"create_table",CREATE_ATTRIBUTE:tr+"create_attribute",ADD_USER:tr+"add_user",ALTER_USER:tr+"alter_user",DROP_USER:tr+"drop_user",HDB_NODES:tr+"hdb_nodes",HDB_USERS:tr+"hdb_users",HDB_WORKERS:tr+"hdb_workers",CATCHUP:tr+"catchup",SCHEMA_CATCHUP:tr+"schema_catchup",WORKER_ROOM:tr+"cluster_workers"},T0={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"},R0="060493.ks",g0=".license",A0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",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_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",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",LOGIN:"login",LOGOUT:"logout",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",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",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",GET_BACKUP:"get_backup"},O0={CSV:".csv",JSON:".json"},N0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},b0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Qo={};Qo[$.INSERT]=$.INSERT;Qo[$.UPDATE]=$.UPDATE;Qo[$.UPSERT]=$.UPSERT;Qo[$.DELETE]=$.DELETE;var Ae=Object.create(null);Ae[$.DESCRIBE_ALL]=$.DESCRIBE_ALL;Ae[$.DESCRIBE_TABLE]=$.DESCRIBE_TABLE;Ae[$.DESCRIBE_SCHEMA]=$.DESCRIBE_SCHEMA;Ae[$.READ_LOG]=$.READ_LOG;Ae[$.ADD_NODE]=$.ADD_NODE;Ae[$.LIST_USERS]=$.LIST_USERS;Ae[$.LIST_ROLES]=$.LIST_ROLES;Ae[$.USER_INFO]=$.USER_INFO;Ae[$.SQL]=$.SQL;Ae[$.GET_JOB]=$.GET_JOB;Ae[$.SEARCH_JOBS_BY_START_DATE]=$.SEARCH_JOBS_BY_START_DATE;Ae[$.DELETE_FILES_BEFORE]=$.DELETE_FILES_BEFORE;Ae[$.EXPORT_LOCAL]=$.EXPORT_LOCAL;Ae[$.EXPORT_TO_S3]=$.EXPORT_TO_S3;Ae[$.CLUSTER_STATUS]=$.CLUSTER_STATUS;Ae[$.REMOVE_NODE]=$.REMOVE_NODE;Ae[$.RESTART]=$.RESTART;Ae[$.CUSTOM_FUNCTIONS_STATUS]=$.CUSTOM_FUNCTIONS_STATUS;Ae[$.GET_CUSTOM_FUNCTIONS]=$.GET_CUSTOM_FUNCTIONS;Ae[$.GET_CUSTOM_FUNCTION]=$.GET_CUSTOM_FUNCTION;Ae[$.SET_CUSTOM_FUNCTION]=$.SET_CUSTOM_FUNCTION;Ae[$.DROP_CUSTOM_FUNCTION]=$.DROP_CUSTOM_FUNCTION;Ae[$.ADD_CUSTOM_FUNCTION_PROJECT]=$.ADD_CUSTOM_FUNCTION_PROJECT;Ae[$.DROP_CUSTOM_FUNCTION_PROJECT]=$.DROP_CUSTOM_FUNCTION_PROJECT;Ae[$.PACKAGE_CUSTOM_FUNCTION_PROJECT]=$.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[$.DEPLOY_CUSTOM_FUNCTION_PROJECT]=$.DEPLOY_CUSTOM_FUNCTION_PROJECT;var y0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},I0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},CR={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"},w0=wR.invert(CR),R={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",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",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",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",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",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",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},UR={settings_path:IR.SETTINGS_PATH_KEY,hdb_root_key:R.ROOTPATH,hdb_root:R.ROOTPATH,server_port_key:R.OPERATIONSAPI_NETWORK_PORT,server_port:R.OPERATIONSAPI_NETWORK_PORT,cert_key:R.OPERATIONSAPI_TLS_CERTIFICATE,certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:R.OPERATIONSAPI_NETWORK_HTTPS,https_on:R.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:R.OPERATIONSAPI_NETWORK_CORS,cors_on:R.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:R.LOGGING_LEVEL,log_level:R.LOGGING_LEVEL,log_path_key:R.LOGGING_ROOT,log_path:R.LOGGING_ROOT,props_env_key:R.OPERATIONSAPI_NODEENV,node_env:R.OPERATIONSAPI_NODEENV,clustering_node_name_key:R.CLUSTERING_NODENAME,node_name:R.CLUSTERING_NODENAME,clustering_enabled_key:R.CLUSTERING_ENABLED,clustering:R.CLUSTERING_ENABLED,max_http_threads:R.HTTP_THREADS,max_hdb_processes:R.HTTP_THREADS,server_timeout_key:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:R.LOGGING_AUDITLOG,disable_transaction_log:R.LOGGING_AUDITLOG,operation_token_timeout_key:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:R.CUSTOMFUNCTIONS_ENABLED,custom_functions:R.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:R.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:R.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:R.HTTP_THREADS,log_to_file:R.LOGGING_FILE,log_to_stdstreams:R.LOGGING_STDSTREAMS,run_in_foreground:R.OPERATIONSAPI_FOREGROUND,local_studio_on:R.LOCALSTUDIO_ENABLED,clustering_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:R.CLUSTERING_USER,clustering_enabled:R.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:R.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:R.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:R.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:R.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:R.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:R.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:R.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:R.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:R.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:R.CLUSTERING_NODENAME,clustering_tls_certificate:R.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:R.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:R.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:R.CLUSTERING_TLS_INSECURE,clustering_tls_verify:R.CLUSTERING_TLS_VERIFY,clustering_loglevel:R.CLUSTERING_LOGLEVEL,clustering_republishmessages:R.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:R.CLUSTERING_DATABASELEVEL,customfunctions_enabled:R.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:R.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:R.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:R.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:R.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:R.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:R.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:R.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:R.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:R.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:R.CUSTOMFUNCTIONS_NODEENV,http_threads:R.HTTP_THREADS,http_session_affinity:R.HTTP_SESSION_AFFINITY,customfunctions_processes:R.HTTP_THREADS,customfunctions_root:R.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:R.LOCALSTUDIO_ENABLED,logging_file:R.LOGGING_FILE,logging_level:R.LOGGING_LEVEL,logging_root:R.LOGGING_ROOT,logging_rotation_enabled:R.LOGGING_ROTATION_ENABLED,logging_rotation_compress:R.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:R.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:R.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:R.LOGGING_ROTATION_PATH,logging_stdstreams:R.LOGGING_STDSTREAMS,logging_auditlog:R.LOGGING_AUDITLOG,logging_auditretention:R.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:R.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:R.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:R.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:R.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:R.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:R.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:R.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:R.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:R.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:R.OPERATIONSAPI_NODEENV,operationsapi_root:R.ROOTPATH,schemas:R.SCHEMAS,storage_path:R.STORAGE_PATH,ignorescripts:R.IGNORE_SCRIPTS,mqtt_network_port:R.MQTT_NETWORK_PORT,mqtt_websocket:R.MQTT_WEBSOCKET,mqtt_network_secureport:R.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:R.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:R.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:R.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:R.AUTHENTICATION_CACHETTL,authentication_enablesessions:R.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in R){let t=R[e];UR[t.toLowerCase()]=t}var C0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},U0={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.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"},D0={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"},L0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},M0={VERSION_DEFAULT:"2.2.0"},P0={DEVELOPMENT:8192,DEFAULT:512},v0={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"},B0={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"},H0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},DR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},q0=Symbol("metadata"),F0="__clustering__",G0=Object.values(DR),x0=15984864e5,LR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},k0=wR.invert(LR),V0={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"},$0=111,Y0=`\r
2
- `,K0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},W0=["*","%"],Q0="unauthorized_access",z0="func_val",J0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},X0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Z0={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"},j0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},eq={HTTP:"http"},tq={STOPPED:"stopped",ONLINE:"online"},rq="3.x.x",sq={SUCCESS:"success",FAILURE:"failure"},nq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};MR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:OR,HDB_SUPPORT_URL:bR,HDB_PRICING_URL:wH,SUPPORT_HELP_MSG:CH,LICENSE_HELP_MSG:yR,HDB_PROC_NAME:gR,HDB_PROC_DESCRIPTOR:TE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Eu,CLUSTERING_HUB_PROC_DESCRIPTOR:du,SYSTEM_SCHEMA_NAME:QH,HASH_FOLDER_NAME:zH,HDB_HOME_DIR_NAME:JH,UPDATE_FILE_NAME:e0,LICENSE_KEY_DIR_NAME:ZH,BOOT_PROPS_FILE_NAME:jH,JOB_TYPE_ENUM:U0,JOB_STATUS_ENUM:A0,SYSTEM_TABLE_NAMES:m0,SYSTEM_TABLE_HASH_ATTRIBUTES:S0,OPERATIONS_ENUM:$,VALID_S3_FILE_TYPES:O0,S3_BUCKET_AUTH_KEYS:N0,VALID_SQL_OPS_ENUM:b0,GEO_CONVERSION_ENUM:I0,HDB_SETTINGS_NAMES:CR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:w0,SERVICE_ACTIONS_ENUM:y0,CLUSTER_MESSAGE_TYPE_ENUM:D0,CLUSTER_CONNECTION_DIRECTION_ENUM:L0,CLUSTER_EVENTS_DEFS_ENUM:v0,PERIOD_REGEX:BH,DOUBLE_PERIOD_REGEX:HH,UNICODE_PERIOD:qH,FORWARD_SLASH_REGEX:FH,UNICODE_FORWARD_SLASH:GH,ESCAPED_FORWARD_SLASH_REGEX:xH,ESCAPED_PERIOD_REGEX:kH,ESCAPED_DOUBLE_PERIOD_REGEX:VH,REG_KEY_FILE_NAME:R0,RESTART_TIMEOUT_MS:s0,HDB_FILE_PERMISSIONS:n0,DATABASES_DIR_NAME:a0,LEGACY_DATABASES_DIR_NAME:c0,TRANSACTIONS_DIR_NAME:u0,LIMIT_COUNT_NAME:l0,ID_ATTRIBUTE_STRING:_0,INSERT_MODULE_ENUM:f0,UPGRADE_JSON_FIELD_NAMES_ENUM:h0,RESTART_CODE:t0,RESTART_CODE_NUM:r0,CLUSTER_OPERATIONS:Qo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:T0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:p0,CLUSTERING_MESSAGE_TYPES:V0,HDB_FILE_SUFFIX:XH,BLOB_FOLDER_NAME:i0,HDB_TRASH_DIR:o0,ORIGINATOR_SET_VALUE:$0,LICENSE_VALUES:M0,RAM_ALLOCATION_ENUM:P0,TIME_STAMP_NAMES_ENUM:DR,TIME_STAMP_NAMES:G0,PERMS_UPDATE_RELEASE_TIMESTAMP:x0,SEARCH_NOT_FOUND_MESSAGE:UH,SEARCH_ATTRIBUTE_NOT_FOUND:DH,LICENSE_ROLE_DENIED_RESPONSE:LH,LICENSE_MAX_CONNS_REACHED:MH,BASIC_LICENSE_MAX_NON_CU_ROLES:NR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:IH,VALUE_SEARCH_COMPARATORS:LR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:k0,LICENSE_FILE_NAME:g0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:B0,NEW_LINE:Y0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:vH,MOMENT_DAYS_TAG:$H,API_TURNOVER_SEC:YH,LOOPBACK:PH,CODE_EXTENSION:_u,WILDCARD_SEARCH_VALUE:KH,NODE_ERROR_CODES:H0,JAVASCRIPT_EXTENSION:RR,PERMS_CRUD_ENUM:K0,UNAUTHORIZED_PERMISSION_NAME:Q0,SEARCH_WILDCARDS:W0,FUNC_VAL:z0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:J0,JWT_ENUM:X0,CLUSTERING_FLAG:F0,ITC_EVENT_TYPES:Z0,CUSTOM_FUNCTION_PROC_NAME:AR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:lu,SERVICES:j0,THREAD_TYPES:eq,MEM_SETTING_KEY:WH,HDB_RESTART_SCRIPT:dH,PROCESS_DESCRIPTORS:pH,SERVICE_SERVERS:OH,SERVICE_SERVERS_CWD:pE,PROCESS_DESCRIPTORS_VALIDATE:gH,LAUNCH_SERVICE_SCRIPTS:NH,LOG_LEVELS:RH,PROCESS_NAME_ENV_PROP:d0,LOG_NAMES:TH,PM2_PROCESS_STATUSES:tq,CONFIG_PARAM_MAP:UR,CONFIG_PARAMS:R,HDB_CONFIG_FILE:uH,HDB_DEFAULT_CONFIG_FILE:lH,ROLE_TYPES_ENUM:bH,BOOT_PROP_PARAMS:IR,INSTALL_PROMPTS:E0,HDB_ROOT_DIR_NAME:_H,CLUSTERING_PROCESSES:AH,FOREGROUND_PID_FILE:hH,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:rq,SCHEMAS_PARAM_CONFIG:C0,METADATA_PROPERTY:q0,AUTH_AUDIT_STATUS:sq,AUTH_AUDIT_TYPES:nq,HDB_PID_FILE:mH,DEFAULT_DATABASE_NAME:SH};RE()});var RE=m((nre,vR)=>{var iq=require("fast-glob"),{statSync:gE,existsSync:AE,readFileSync:oq,writeFileSync:aq}=require("fs"),{spawnSync:cq,spawn:uq}=require("child_process"),{isMainThread:lq}=require("worker_threads"),{join:Ns,relative:PR}=require("path"),{PACKAGE_ROOT:Sr}=g(),{tmpdir:_q}=require("os");require("source-map-support").install();var dq=["resources","server","dataLayer"],zo="ts-build",OE,Eq=__filename.endsWith("tsBuild.js");if(Eq){if(lq){let r;try{gE(Ns(Sr,zo)),r=!0}catch{}if(r)for(let s of iq.sync(dq.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=gE(Ns(Sr,s)).mtimeMs-5e3,i=gE(Ns(Sr,zo,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),OE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),OE=!0;if(OE){let s=cq(process.argv[0],[Ns(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Ns(_q(),"harperdb-tsc.pid"),i;if(AE(n))try{process.kill(+oq(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=uq(process.argv[0],[Ns(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});aq(n,o.pid.toString()),o.unref()}}}}let e=vR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=PR(Sr,s[0]),o;i.startsWith(zo)?o=Ns(Sr,PR(zo,i)):o=Ns(Sr,zo,i);let c=Ns(o,r),u=c+".js";if(AE(u))return u;if(c.includes(".")&&AE(c))return c}return t(r,s,n)}}});var fu={};Ye(fu,{server:()=>Et});var BR,Et,bs=pe(()=>{BR=require("../index"),Et={};(0,BR._assignPackageExport)("server",Et)});var NE=m((ire,FR)=>{"use strict";var HR=require("minimist");FR.exports=fq;function fq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=qR(process.env),s=qR(HR(process.argv))):(r=process.env,s=HR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(fq,"assignCMDENVVariables");function qR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(qR,"objKeysToLowerCase")});var F=m((are,DE)=>{"use strict";var kn=require("fs-extra"),{workerData:hq,threadId:mq}=require("worker_threads"),ws=require("path"),kR=require("yaml"),VR=require("properties-reader"),je=g(),GR=NE(),Sq=require("os"),{PACKAGE_ROOT:yE}=g(),{_assignPackageExport:pq}=require("../index"),Xo={};for(let e in console)Xo[e]||(Xo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},$R={STDOUT:"stdOut",STDERR:"stdErr"},Tq=ws.join(yE,"logs"),Rq=ws.join(yE,"config/yaml/",je.HDB_DEFAULT_CONFIG_FILE),gq=1e4,ys,Is,Lt,hu,mu,Zo,Bi,Jo;Jo===void 0&&YR();DE.exports={notify:QR,fatal:zR,error:jo,warn:UE,info:Su,debug:CE,trace:wE,setLogLevel:wq,log_level:Lt,loggerWithTag:Aq,suppressLogging:Oq,initLogSettings:YR,setupConsoleLogging:KR,logCustomLevel:yq,closeLogFile:IE,getLogFilePath:()=>Zo,OUTPUTS:$R,AuthAuditLog:Dq};pq("logger",DE.exports);function YR(e=!1){try{if(Jo===void 0||e){IE();let t=Iq(),r=GR(["ROOTPATH"]);try{Jo=VR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!kn.pathExistsSync(ws.join(r.ROOTPATH,je.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:mu,to_file:ys,to_stream:Is}=Cq(r.ROOTPATH?ws.join(r.ROOTPATH,je.HDB_CONFIG_FILE):Jo.get("settings_path"))),hu=je.LOG_NAMES.HDB,Zo=ws.join(mu,hu)}}catch(t){if(Jo=void 0,t.code===je.NODE_ERROR_CODES.ENOENT){let r=GR(Object.keys(je.CONFIG_PARAM_MAP),!0);for(let o in r){let c=je.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===je.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===je.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===je.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Uq();ys=ys===void 0?n:ys,ys=xR(ys),Is=Is===void 0?i:Is,Is=xR(Is),Lt=Lt===void 0?s:Lt,mu=Tq,hu=je.LOG_NAMES.INSTALL,Zo=ws.join(mu,hu);return}throw jo("Error initializing log settings"),jo(t),t}KR()}a(YR,"initLogSettings");var bE=!0;function KR(){vi("error",jo),vi("warn",UE),vi("log",Su),vi("info",Su),vi("debug",CE),vi("trace",wE)}a(KR,"setupConsoleLogging");function vi(e,t){console[e]=function(...r){if(bE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Xo[e](...r)}}a(vi,"logConsole");function Aq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(QR),fatal:r(zR),error:r(jo),warn:r(UE),info:r(Su),debug:r(CE),trace:r(wE)};function r(s){return function(...n){return s(t,...n)}}}a(Aq,"loggerWithTag");function Oq(e){try{bE=!1,e()}finally{bE=!0}}a(Oq,"suppressLogging");var Nq=hq?.name?.replace(/ /g,"-")||"main";function Cs(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Nq+"/"+mq);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(Cs,"createLogRecord");function ea(e){ys&&WR(e),Is&&process.stdout.write(e)}a(ea,"logStdOut");function pu(e){ys&&WR(e),Is&&process.stderr.write(e)}a(pu,"logStdErr");function WR(e){bq(),Bi?kn.appendFileSync(Bi,e):Xo.log(e)}a(WR,"logToFile");function IE(){try{kn.closeSync(Bi)}catch{}Bi=null}a(IE,"closeLogFile");function bq(){if(!Bi){try{if(!Zo)debugger;Bi=kn.openSync(Zo,"a")}catch(e){Xo.error(e)}setTimeout(()=>{IE()},gq).unref()}}a(bq,"openLogFile");function Su(...e){Mt[Lt]<=Mt.info&&ea(Cs("info",e))}a(Su,"info");function wE(...e){Mt[Lt]<=Mt.trace&&ea(Cs("trace",e))}a(wE,"trace");function jo(...e){Mt[Lt]<=Mt.error&&pu(Cs("error",e))}a(jo,"error");function CE(...e){Mt[Lt]<=Mt.debug&&ea(Cs("debug",e))}a(CE,"debug");function QR(...e){Mt[Lt]<=Mt.notify&&ea(Cs("notify",e))}a(QR,"notify");function zR(...e){Mt[Lt]<=Mt.fatal&&pu(Cs("fatal",e))}a(zR,"fatal");function UE(...e){Mt[Lt]<=Mt.warn&&pu(Cs("warn",e))}a(UE,"warn");function yq(e,t,...r){t===$R.STDERR?pu(Cs(e,r)):ea(Cs(e,r))}a(yq,"logCustomLevel");function Iq(){let e;try{e=Sq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,je.HDB_HOME_DIR_NAME,je.BOOT_PROPS_FILE_NAME);return kn.existsSync(t)||(t=ws.join(yE,"utility/hdb_boot_properties.file")),t}a(Iq,"getPropsFilePath");function wq(e){Lt=e}a(wq,"setLogLevel");function xR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xR,"autoCastBoolean");function Cq(e){try{if(e.includes("config/settings.js")){let o=VR(e);return{level:o.get(je.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(je.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(je.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(je.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=kR.parseDocument(kn.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===je.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Cq,"getLogConfig");function Uq(){try{let e=kR.parseDocument(kn.readFileSync(Rq,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(Uq,"getDefaultConfig");function Dq(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(Dq,"AuthAuditLog")});var XR=m((ure,JR)=>{"use strict";var Lq=require("util"),Mq=require("path"),Pq=require("child_process"),vq=Lq.promisify(Pq.execFile),Bq=1e3*1e3*10;JR.exports={findPs:Hq};async function Hq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await vq("ps",["wwxo",`pid,${r}`],{maxBuffer:Bq});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:Mq.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Hq,"findPs")});var xe=m((_re,jR)=>{"use strict";var qq="__dbis__",Fq="__txns__",Gq="__environment_name__",xq="__dbi_defintion__",kq={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"},Vq=["__createdtime__","__updatedtime__"],$q="\uFFFF",ZR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Yq=Object.values(ZR);jR.exports={AUDIT_STORE_NAME:Fq,INTERNAL_DBIS_NAME:qq,DBI_DEFINITION_NAME:xq,SEARCH_TYPES:kq,TIMESTAMP_NAMES:Vq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Gq,TRANSACTIONS_DBI_NAMES_ENUM:ZR,TRANSACTIONS_DBIS:Yq,OVERFLOW_MARKER:$q}});var rr=m((dre,cg)=>{"use strict";var eg=g(),tg=xe(),rg={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},sg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ng={500:sg("There was an error processing your request."),400:"Invalid request"},Kq=ng[rg.INTERNAL_SERVER_ERROR],Wq={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.`},Qq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},zq={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"},Jq={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 ${tg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${tg.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"},Xq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${eg.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 ${eg.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"},ig={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"},Zq={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database 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' database, tables and records are used internally by HarperDB and cannot be updated or removed."},jq={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 database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.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`},eF={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=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},tF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},rF={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`},og={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.`},ag={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}`},sF={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 fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},nF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},iF={...ig,...zq,...Wq,...Zq,...jq,...eF,...tF,...rF,...Xq,...og,...ag,...sF,...nF,...Qq};cg.exports={CHECK_LOGS_WRAPPER:sg,HDB_ERROR_MSGS:iF,DEFAULT_ERROR_MSGS:ng,DEFAULT_ERROR_RESP:Kq,HTTP_STATUS_CODES:rg,LMDB_ERRORS_ENUM:Jq,AUTHENTICATION_ERROR_MSGS:ig,VALIDATION_ERROR_MSGS:og,ITC_ERRORS:ag}});var W=m((fre,_g)=>{"use strict";var Hi=rr(),oF=F(),aF=g(),Tu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,ug),this.http_resp_code=s||Hi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Hi.DEFAULT_ERROR_MSGS[s]?Hi.DEFAULT_ERROR_MSGS[s]:Hi.DEFAULT_ERROR_MSGS[Hi.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&&oF[n](i)}},LE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.http_resp_code=r||400,t;super(t),this.http_resp_code=r||400}},ME=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function ug(e,t,r,s=aF.LOG_LEVELS.ERROR,n=null,i=!1){if(lg(e))return e;let o=new Tu(e,t,r,s,n);return i&&delete o.stack,o}a(ug,"handleHDBError");function lg(e){return e.__proto__.constructor.name===Tu.name}a(lg,"isHDBError");_g.exports={isHDBError:lg,handleHDBError:ug,ClientError:LE,ServerError:ME,hdb_errors:Hi}});var x=m((Sre,bg)=>{"use strict";var cn=require("path"),mg=require("fs-extra"),Pt=F(),dg=require("fs-extra"),Ru=require("os"),cF=require("net"),uF=require("recursive-iterator"),Pe=g(),lF=XR(),Eg=require("papaparse"),gu=require("moment"),{inspect:_F}=require("util"),fg=require("is-number"),mre=require("lodash"),dF=require("minimist"),EF=require("https"),fF=require("http"),{hdb_errors:Au}=W(),hF=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Sg=require("util").promisify(setTimeout),mF=100,SF=5,pF="",TF=4,hg={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};bg.exports={isEmpty:sr,isEmptyOrZeroLength:Jr,arrayHasEmptyValues:AF,arrayHasEmptyOrZeroLengthValues:OF,buildFolderPath:NF,isBoolean:pg,errorizeMessage:RF,stripFileExtension:yF,autoCast:IF,autoCastJSON:Tg,autoCastJSONDeep:vE,removeDir:wF,compareVersions:CF,isCompatibleDataVersion:UF,escapeRawValue:DF,unescapeValue:LF,stringifyProps:MF,timeoutPromise:vF,isClusterOperation:HF,getClusterUser:FF,checkGlobalSchemaTable:qF,getHomeDir:gg,getPropsFilePath:PF,promisifyPapaParse:GF,removeBOM:Ag,createEventPromise:xF,checkProcessRunning:kF,checkSchemaTableExist:VF,checkSchemaExists:Og,checkTableExists:Ng,getStartOfTomorrowInSeconds:$F,getLimitKey:YF,isObject:bF,isNotEmptyAndHasValue:gF,autoCasterIsNumberCheck:Rg,backtickASTSchemaItems:KF,isPortTaken:BF,createForkArgs:WF,autoCastBoolean:QF,async_set_timeout:Sg,getTableHashAttribute:zF,doesSchemaExist:JF,doesTableExist:XF,stringifyObj:ZF,ms_to_time:jF,changeExtension:eG,getEnvCliRootPath:BE,noBootFile:tG,httpRequest:rG,transformReq:sG,convertToMS:nG,PACKAGE_ROOT:Pe.PACKAGE_ROOT};function RF(e){return e instanceof Error?e:new Error(e)}a(RF,"errorizeMessage");function sr(e){return e==null}a(sr,"isEmpty");function gF(e){return!sr(e)&&(e||e===0||e===""||pg(e))}a(gF,"isNotEmptyAndHasValue");function Jr(e){return sr(e)||e.length===0||e.size===0}a(Jr,"isEmptyOrZeroLength");function AF(e){if(sr(e))return!0;for(let t=0;t<e.length;t++)if(sr(e[t]))return!0;return!1}a(AF,"arrayHasEmptyValues");function OF(e){if(Jr(e))return!0;for(let t=0;t<e.length;t++)if(Jr(e[t]))return!0;return!1}a(OF,"arrayHasEmptyOrZeroLengthValues");function NF(...e){try{return e.join(cn.sep)}catch{console.error(e)}}a(NF,"buildFolderPath");function pg(e){return sr(e)?!1:e===!0||e===!1}a(pg,"isBoolean");function bF(e){return sr(e)?!1:typeof e=="object"}a(bF,"isObject");function yF(e){return Jr(e)?pF:e.slice(0,-TF)}a(yF,"stripFileExtension");function IF(e){return sr(e)||e===""||typeof e!="string"?e:hg[e]!==void 0?hg[e]:Rg(e)===!0?Number(e):hF.test(e)?new Date(e):e}a(IF,"autoCast");function Tg(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Tg,"autoCastJSON");function vE(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=vE(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=vE(r);s!==r&&(e[t]=s)}return e}else return Tg(e)}a(vE,"autoCastJSONDeep");function Rg(e){if(e.startsWith("0.")&&fg(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&fg(e))}a(Rg,"autoCasterIsNumberCheck");async function wF(e){if(Jr(e))throw new Error(`Directory path: ${e} does not exist`);try{await dg.emptyDir(e),await dg.remove(e)}catch(t){throw Pt.error(`Error removing files in ${e} -- ${t}`),t}}a(wF,"removeDir");function CF(e,t){if(Jr(e)){Pt.info("Invalid current version sent as parameter.");return}if(Jr(t)){Pt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(CF,"compareVersions");function UF(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(UF,"isCompatibleDataVersion");function DF(e){if(sr(e))return e;let t=String(e);return t==="."?Pe.UNICODE_PERIOD:t===".."?Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD:t.replace(Pe.FORWARD_SLASH_REGEX,Pe.UNICODE_FORWARD_SLASH)}a(DF,"escapeRawValue");function LF(e){if(sr(e))return e;let t=String(e);return t===Pe.UNICODE_PERIOD?".":t===Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD?"..":String(e).replace(Pe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(LF,"unescapeValue");function MF(e,t){if(sr(e))return Pt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Ru.EOL}!Jr(s)&&s[0]===";"?r+=" "+s+n+Ru.EOL:Jr(s)||(r+=s+"="+n+Ru.EOL)}catch{Pt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(MF,"stringifyProps");function gg(){let e;try{e=Ru.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(gg,"getHomeDir");function PF(){let e=cn.join(gg(),Pe.HDB_HOME_DIR_NAME,Pe.BOOT_PROPS_FILE_NAME);return mg.existsSync(e)||(e=cn.join(__dirname,"../","hdb_boot_properties.file")),e}a(PF,"getPropsFilePath");function vF(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(vF,"timeoutPromise");async function BF(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=cF.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(BF,"isPortTaken");function HF(e){try{return Pe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(HF,"isClusterOperation");function qF(e,t){let r=(de(),te(Ne)).getDatabases();if(!r[e])return Au.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Au.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(qF,"checkGlobalSchemaTable");function FF(e,t){if(sr(t)){Pt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sr(e)||Jr(e)){Pt.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){Pt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Pt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(FF,"getClusterUser");function GF(){Eg.parsePromise=function(e,t,r){return new Promise(function(s,n){Eg.parse(e,{header:!0,transformHeader:Ag,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(GF,"promisifyPapaParse");function Ag(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Ag,"removeBOM");function xF(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Pt.info(`Got cluster status event response: ${_F(n)}`);try{i.cancel()}catch{Pt.error("Error trying to cancel timeout.")}s(n)})})}a(xF,"createEventPromise");async function kF(e){let t=!0,r=0;do await Sg(mF*r++),(await lF.findPs(e)).length>0&&(t=!1);while(t&&r<SF);if(t)throw new Error(`process ${e} was not started`)}a(kF,"checkProcessRunning");function VF(e,t){let r=Og(e);if(r)return r;let s=Ng(e,t);if(s)return s}a(VF,"checkSchemaTableExist");function Og(e){let{getDatabases:t}=(de(),te(Ne));if(!t()[e])return Au.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Og,"checkSchemaExists");function Ng(e,t){let{getDatabases:r}=(de(),te(Ne));if(!r()[e][t])return Au.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ng,"checkTableExists");function $F(){let e=gu().utc().add(1,Pe.MOMENT_DAYS_TAG).startOf(Pe.MOMENT_DAYS_TAG).unix(),t=gu().utc().unix();return e-t}a($F,"getStartOfTomorrowInSeconds");function YF(){return gu().utc().format("DD-MM-YYYY")}a(YF,"getLimitKey");function KF(e){try{let t=new uF(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){Pt.error("Got an error back ticking items."),Pt.error(t)}}a(KF,"backtickASTSchemaItems");function WF(e){return[e]}a(WF,"createForkArgs");function QF(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(QF,"autoCastBoolean");function zF(e,t){let{getDatabases:r}=(de(),te(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(zF,"getTableHashAttribute");function JF(e){let{getDatabases:t}=(de(),te(Ne));return t()[e]!==void 0}a(JF,"doesSchemaExist");function XF(e,t){let{getDatabases:r}=(de(),te(Ne));return r()[e]?.[t]!==void 0}a(XF,"doesTableExist");function ZF(e){try{return JSON.stringify(e)}catch{return e}}a(ZF,"stringifyObj");function jF(e){let t=gu.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(jF,"ms_to_time");function eG(e,t){let r=cn.basename(e,cn.extname(e));return cn.join(cn.dirname(e),r+t)}a(eG,"changeExtension");function BE(){if(process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=dF(process.argv);if(e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(BE,"getEnvCliRootPath");var PE;function tG(){if(PE)return PE;let e=BE();BE()&&mg.pathExistsSync(cn.join(e,Pe.HDB_CONFIG_FILE))&&(PE=!0)}a(tG,"noBootFile");function rG(e,t){let r;return e.protocol==="http:"?r=fF:r=EF,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(rG,"httpRequest");function sG(e){if(!e.schema&&!e.database){e.schema=Pe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(sG,"transformReq");function nG(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(nG,"convertToMS")});var Ig=m((Tre,yg)=>{"use strict";var iG={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))},oG="certificate.pem",aG="privateKey.pem",cG="ca.pem";yg.exports={CERTIFICATE_VALUES:iG,CERTIFICATE_PEM_NAME:oG,PRIVATEKEY_PEM_NAME:aG,CA_PEM_NAME:cG}});var ve=m((Rre,wg)=>{"use strict";var vt=require("validate.js");vt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||vt.validators.type.checks[t](e)?null:` must be a '${t}' value`};vt.validators.type.checks={Object:function(e){return vt.isObject(e)&&!vt.isArray(e)},Array:vt.isArray,Integer:vt.isInteger,Number:vt.isNumber,String:vt.isString,Date:vt.isDate,Boolean:function(e){return typeof e=="boolean"}};vt.validators.hasValidFileExt=function(e,t){return vt.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};wg.exports={validateObject:uG,validateObjectAsync:lG,validateBySchema:_G};function uG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vt(e,t,{format:"flat"});return r?new Error(r):null}a(uG,"validateObject");async function lG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(lG,"validateObjectAsync");function _G(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_G,"validateBySchema")});var qE=m((Ore,Pg)=>{"use strict";var Lg=require("fs-extra"),j=require("joi"),dG=require("os"),{boolean:Se,string:Ds,number:nr,array:HE}=j.types(),{totalmem:Cg}=require("os"),qi=require("path"),EG=F(),Nu=x(),Are=Ig(),Ug=g(),fG=ve(),Dg="log",hG="components",mG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",SG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",TG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",RG="rootPath config parameter is undefined",gG="clustering.enabled config parameter is undefined",Us=nr.min(0).required(),bu=HE.items({host:Ds.required(),port:Us}).empty(null),Ls;Pg.exports={configValidator:AG,routesValidator:wG,route_constraints:bu};function AG(e){if(Ls=e.rootPath,Nu.isEmpty(Ls))throw RG;let t=Se.required(),r=j.valid("production","development").required(),s=nr.min(0).max(1e3).empty(null).default(IG),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Ou),i=j.custom(OG).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=j.string().empty(null).default(Ou),u=j.custom(NG).empty(null).default(Ou),l=e.clustering?.enabled;if(Nu.isEmpty(l))throw gG;let _;return l===!0?_=j.object({enabled:t,hubServer:j.object({cluster:j.object({name:j.required().empty(null),network:j.object({port:Us,routes:bu}).required()}).required(),leafNodes:j.object({network:j.object({port:Us}).required()}).required(),network:j.object({port:Us}).required()}).required(),leafServer:j.object({network:j.object({port:Us,routes:bu}).required(),streams:j.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:j.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Se.optional(),databaseLevel:Se.optional(),tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required(),verify:Se.optional()}),user:Ds.optional().empty(null)}).required():_=j.object({enabled:t,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required()})}).required(),j.object({authentication:j.object({authorizeLocal:Se,cacheTTL:nr.required(),enableSessions:Se,operationTokenTimeout:j.required(),refreshTokenTimeout:j.required()}),analytics:j.object({aggregatePeriod:nr}),clustering:_,customFunctions:j.object({enabled:t,network:j.object({cors:Se.required(),corsAccessList:HE.required(),headersTimeout:nr.min(1).required(),https:Se.required(),keepAliveTimeout:nr.min(1).required(),port:Us,timeout:nr.min(1).required()}),nodeEnv:r,root:n,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:j.object({enabled:t}).required(),logging:j.object({auditAuthEvents:j.object({logFailed:Se,logSuccessful:Se}),file:Se.required(),level:j.valid("notify","fatal","error","warn","info","debug","trace"),rotation:j.object({enabled:Se.optional(),compress:Se.optional(),interval:Ds.custom(yG).optional().empty(null),maxSize:Ds.custom(bG).optional().empty(null),path:Ds.optional().empty(null).default(Ou)}).required(),root:n,stdStreams:Se.required(),auditLog:Se.required()}).required(),operationsApi:j.object({foreground:Se.required(),network:j.object({cors:Se.required(),corsAccessList:HE.required(),headersTimeout:nr.min(1).required(),https:Se.required(),keepAliveTimeout:nr.min(1).required(),port:Us,timeout:nr.min(1).required()}).required(),nodeEnv:r,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:j.object({network:j.object({port:Us,securePort:Us}).required(),webSocket:Se.optional(),requireAuthentication:Se.optional()}),http:j.object({threads:s}).required(),storage:j.object({writeAsync:Se.required(),overlappingSync:Se.optional(),caching:Se.optional(),compression:Se.optional(),noReadAhead:Se.optional(),path:u,prefetchWrites:Se.optional()}).required(),ignoreScripts:Se.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(AG,"configValidator");function Mg(e){return Lg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Mg,"doesPathExist");function OG(e,t){if(e===null)return;let r=Mg(e);return r?t.message(r):e}a(OG,"validatePemFile");function NG(e,t){j.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Mg(e);if(r)return t.message(r)}a(NG,"validatePath");function bG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pG):e}a(bG,"validateRotationMaxSize");function yG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(SG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TG):e}a(yG,"validateRotationInterval");function IG(e,t){let r=t.state.path.join("."),s=dG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Cg();return i=Math.round(Math.min(i,Cg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),EG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(IG,"setDefaultThreads");function Ou(e,t){if(!Nu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Nu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return qi.join(Ls,hG);case"logging.root":return qi.join(Ls,Dg);case"clustering.leafServer.streams.path":return qi.join(Ls,"clustering","leaf");case"storage.path":let s=qi.join(Ls,Ug.LEGACY_DATABASES_DIR_NAME);return Lg.existsSync(s)?s:qi.join(Ls,Ug.DATABASES_DIR_NAME);case"logging.rotation.path":return qi.join(Ls,Dg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Ou,"setDefaultRoot");function wG(e){let t=j.object({routes:bu});return fG.validateBySchema({routes:e},t)}a(wG,"routesValidator")});var Tr=m((yre,$g)=>{"use strict";var pr=g(),lt=x(),et=F(),{configValidator:CG,routesValidator:vg}=qE(),Bt=require("fs-extra"),UG=require("yaml"),Lr=require("path"),DG=require("is-number"),Hg=require("properties-reader"),LG=require("lodash"),{handleHDBError:MG}=W(),{HTTP_STATUS_CODES:PG,HDB_ERROR_MSGS:yu}=rr(),bre=require("minimist"),{SCHEMAS_PARAM_CONFIG:ta,CONFIG_PARAMS:un,CONFIG_PARAM_MAP:Ms}=pr,vG="Unable to get config value because config is uninitialized",BG="Config successfully initialized",HG="Error backing up config file",qG="Empty parameter sent to getConfigValue",qg=Lr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),FG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Bg={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"},Iu,ft;$g.exports={createConfigFile:GG,getDefaultConfig:xG,getConfigValue:Gg,initConfig:xg,flattenConfig:$n,updateConfigValue:kg,updateConfigObject:VG,getConfiguration:KG,setConfiguration:WG,readConfigFile:xE,getClusteringRoutes:QG,initOldConfig:Vg,getConfigFromFile:zG,getConfigFilePath:Vn,addConfig:JG,deleteConfigFromFile:XG};function GG(e){let t=ln(qg);Iu=$n(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===un.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=FE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){et.error(_)}}}r&&Fg(t,r),GE(t);let s=t.toJSON();ft=$n(s);let n=t.getIn(["rootPath"]),i=Lr.join(n,pr.HDB_CONFIG_FILE);Bt.createFileSync(i),Bt.writeFileSync(i,String(t)),et.trace(`Config file written to ${i}`)}a(GG,"createConfigFile");function Fg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ta.TABLES))for(let i in s[n][ta.TABLES])for(let o in s[n][ta.TABLES][i]){let c=s[n][ta.TABLES][i][o],u=[un.SCHEMAS,n,ta.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[un.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){et.error("Error parsing schemas CLI/env config arguments",s)}}a(Fg,"setSchemasConfig");function xG(e){if(Iu===void 0){let r=ln(qg);Iu=$n(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Iu[t.toLowerCase()]}a(xG,"getDefaultConfig");function Gg(e){if(e==null){et.error(qG);return}if(ft===void 0){et.trace(vG);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(Gg,"getConfigValue");function Vn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Lr.join(t,pr.HDB_CONFIG_FILE):Hg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Vn,"getConfigFilePath");function xg(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{Bt.accessSync(t,Bt.constants.F_OK|Bt.constants.R_OK)}catch(i){throw et.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Vn(t),s;if(r.includes("config/settings.js"))try{Vg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ln(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){et.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw et.error(i),new Error(`Error reading HarperDB config file at ${r}`)}kG(s,r),GE(s);let n=s.toJSON();if(ft=$n(n),ft.logging_rotation_rotate)for(let i in Bg)ft[i]&&et.error(`Config ${Bg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);et.trace(BG)}}a(xg,"initConfig");function kG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Lr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Lr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Lr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(et.trace("Updating config file with missing config params"),Bt.writeFileSync(t,String(e)))}a(kG,"checkForUpdatedConfig");function GE(e){let t=e.toJSON(),r=CG(t);if(r.error)throw yu.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)}a(GE,"validateConfig");function VG(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){et.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(VG,"updateConfigObject");function kg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&xg();let o=Gg(Ms.hdb_root),c=Lr.join(o,pr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=FE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=FE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(S){et.error(S)}}}l&&Fg(u,l),GE(u);let _=u.getIn(["rootPath"]),d=Lr.join(_,pr.HDB_CONFIG_FILE);s===!0&&$G(c,_),Bt.writeFileSync(d,String(u)),n&&(ft=$n(u.toJSON())),et.trace(`Config parameter: ${e} updated with value: ${t}`)}a(kg,"updateConfigValue");function $G(e,t){try{let r=Lr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);Bt.copySync(e,r),et.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){et.error(HG),et.error(r)}}a($G,"backupConfigFile");var YG=["schemas"];function $n(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!YG.includes(r)){let s=$n(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a($n,"flattenConfig");function FE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.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(DG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(FE,"castConfigValue");function KG(){let e=lt.getPropsFilePath(),t=Vn(e);return ln(t).toJSON()}a(KG,"getConfiguration");async function WG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kg(void 0,void 0,n,!0),FG}catch(i){throw typeof i=="string"||i instanceof String?MG(i,i,PG.BAD_REQUEST,void 0,void 0,!0):i}}a(WG,"setConfiguration");function xE(){let e=lt.getPropsFilePath();try{Bt.accessSync(e,Bt.constants.F_OK|Bt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw et.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Vn(e);return ln(t).toJSON()}a(xE,"readConfigFile");function ln(e){return UG.parseDocument(Bt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function QG(){let e=xE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=vg(t);if(r)throw yu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=vg(s);if(n)throw yu.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw yu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(QG,"getClusteringRoutes");function Vg(e){let t=Hg(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===un.LOGGING_ROOT?ft[n]=Lr.dirname(s):ft[n]=s}return ft}a(Vg,"initOldConfig");function zG(e){let t=xE();return LG.get(t,e.replaceAll("_","."))}a(zG,"getConfigFromFile");async function JG(e,t){let r=ln(Vn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Bt.writeFile(Vn(),String(r))}a(JG,"addConfig");function XG(e){let t=Vn(lt.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Lr.join(s,pr.HDB_CONFIG_FILE);Bt.writeFileSync(n,String(r))}a(XG,"deleteConfigFromFile")});var Q=m((wre,Wg)=>{"use strict";var kE=require("fs-extra"),Mr=require("path"),Yg=require("os"),ZG=require("properties-reader"),ra=F(),Yn=x(),ee=g(),wu=Tr(),jG="Error initializing environment manager",Cu="BOOT_PROPS_FILE_PATH",Kg=!1,ex={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};Wg.exports={BOOT_PROPS_FILE_PATH:Cu,getHdbBasePath:tx,setHdbBasePath:rx,get:sx,initSync:ix,setProperty:Ee,initTestEnvironment:ox};function tx(){return Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(tx,"getHdbBasePath");function rx(e){Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(rx,"setHdbBasePath");function sx(e){let t=wu.getConfigValue(e);return t===void 0?Ps[e]:t}a(sx,"get");function Ee(e,t){ex[e]&&(Ps[e]=t),wu.updateConfigObject(e,t)}a(Ee,"setProperty");function nx(){let e;try{e=Yn.getPropsFilePath(),kE.accessSync(e,kE.constants.F_OK|kE.constants.R_OK),Kg=!0;let t=ZG(e);return Ps[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Cu]=e,!0}catch{return ra.trace(`Environment manager found no properties file at ${e}`),!1}}a(nx,"doesPropFileExist");function ix(e=!1){try{(Kg||nx()||Yn.noBootFile())&&(wu.initConfig(e),Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=wu.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ra.error(jG),ra.error(t),console.error(t),process.exit(1)}}a(ix,"initSync");function ox(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Mr.join(__dirname,"../../","unitTests");Ps[Cu]=Mr.join(u,"hdb_boot_properties.file"),Ee(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mr.join(u,"settings.test")),Ee(ee.HDB_SETTINGS_NAMES.INSTALL_USER,Yg.userInfo()?Yg.userInfo().username:void 0),Ee(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.HDB_SETTINGS_NAMES.CERT_KEY,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mr.join(u,"envDir","log")),Ee(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mr.join(u,"envDir")),Ee(ee.CONFIG_PARAMS.STORAGE_PATH,Mr.join(u,"envDir")),Ee(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Yn.isEmpty(n)?!0:n),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Yn.isEmpty(n)?!0:n),Ee(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yn.isEmpty(i)?!1:i),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Yn.isEmpty(i)?!1:i),Ee(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Cu}. Please check your boot props and settings files`;ra.fatal(r),ra.error(t)}}a(ox,"initTestEnvironment")});var we=m((Ure,eA)=>{"use strict";var aa=g(),ax=x(),Ht=Q(),ca=require("path"),cx=require("minimist"),Qg=require("fs-extra"),zg=require("lodash");Ht.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:sa,SYSTEM_SCHEMA_NAME:Uu}=aa,na,ia,oa;function Jg(){if(na!==void 0)return na;if(Ht.getHdbBasePath()!==void 0)return na=Ht.get(_n.STORAGE_PATH)||ca.join(Ht.getHdbBasePath(),aa.DATABASES_DIR_NAME),na}a(Jg,"getBaseSchemaPath");function Xg(){if(ia!==void 0)return ia;if(Ht.getHdbBasePath()!==void 0)return ia=jg(Uu),ia}a(Xg,"getSystemSchemaPath");function Zg(){if(oa!==void 0)return oa;if(Ht.getHdbBasePath()!==void 0)return oa=Ht.get(aa.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ca.join(Ht.getHdbBasePath(),aa.TRANSACTIONS_DIR_NAME),oa}a(Zg,"getTransactionAuditStoreBasePath");function ux(e,t){let r=Ht.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ca.join(Zg(),e.toString())}a(ux,"getTransactionAuditStorePath");function jg(e,t){e=e.toString(),t=t&&t.toString();let r=Ht.get(aa.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ca.join(Jg(),e)}a(jg,"getSchemaPath");function lx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cx(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ax.isObject(s))throw o;i=s}for(let o of i){let c=o[Uu];if(!c)continue;let u=Ht.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[sa.PATH];if(l)return zg.set(u,[Uu,sa.TABLES,t,sa.PATH],l),Ht.setProperty(_n.SCHEMAS,u),l;let _=c?.[sa.PATH];if(_)return zg.set(u,[Uu,sa.PATH],_),Ht.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!Qg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ca.join(n,e);return Qg.mkdirsSync(i),Ht.setProperty(_n.STORAGE_PATH,n),i}return Xg()}a(lx,"initSystemSchemaPaths");function _x(){na=void 0,ia=void 0,oa=void 0}a(_x,"resetPaths");eA.exports={getBaseSchemaPath:Jg,getSystemSchemaPath:Xg,getTransactionAuditStorePath:ux,getTransactionAuditStoreBasePath:Zg,getSchemaPath:jg,initSystemSchemaPaths:lx,resetPaths:_x}});var qt=m((Pre,iA)=>{"use strict";var dx=rr().LMDB_ERRORS_ENUM,Lre=require("lmdb"),Ex=xe(),Mre=require("buffer").Buffer,{OVERFLOW_MARKER:tA,MAX_SEARCH_KEY_LENGTH:Du}=Ex,rA=["number","string","symbol","boolean","bigint"];function fx(e){if(e=e?.primaryStore||e,!e)throw new Error(dx.ENV_REQUIRED)}a(fx,"validateEnv");function hx(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(hx,"stringifyData");function mx(e){return e instanceof Date?e.valueOf():e}a(mx,"convertKeyValueToWrite");function Sx(e){if(e==null)return;if(rA.includes(typeof e))return e.length>Du?[e.slice(0,Du)+tA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(rA.includes(typeof n))n.length>Du?t.push(n.slice(0,Du)+tA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Sx,"getIndexedValues");var Lu=0,sA=0;function nA(){sA=Date.now()-performance.now()}a(nA,"adjustStartTime");nA();var px=6e4;setInterval(nA,px).unref();function Tx(){let e=performance.now()+sA;return e>Lu?(Lu=e,e):(Lu+=488e-6,Lu)}a(Tx,"getNextMonotonicTime");iA.exports={validateEnv:fx,stringifyData:hx,convertKeyValueToWrite:mx,getNextMonotonicTime:Tx,getIndexedValues:Sx}});var oA,Xr,VE,ua=pe(()=>{oA=require("events"),Xr=class extends oA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new VE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},VE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function la(e){return e[ht]||(e[ht]=Object.create(null))}function Hu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=aA(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){la(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Mu.ClientError)(`${c} must be a string, attempt to assign ${l}`);la(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Mu.ClientError)(`${c} must be a string, attempt to assign ${l}`);la(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Mu.ClientError("Can not add a property to a sealed table schema");la(this)[o]=c}),i("deleteProperty",function(o){la(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function aA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ce]=n}},Hu(r,t)),new r(e)):new Pu(e);case Array:let s=new Bu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=aA(o,t?.elements)),s[n]=o}return s}}function qu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=qu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function _a(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=_a(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=_a(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function vu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Kn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(vu(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(vu(n))return!0}else return!0}else return!0}}return!1}var Mu,ht,Pu,Kn,Bu,Fu=pe(()=>{Zr();Mu=D(W()),ht=Symbol("own-data");a(la,"getChanges");a(Hu,"assignTrackedAccessors");a(aA,"trackObject");Pu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Hu(Pu,{});a(qu,"collapseData");a(_a,"deepFreeze");a(vu,"hasChanges");Kn=Symbol.for("has-array-changes"),Bu=class extends Array{static{a(this,"TrackedArray")}[Kn];constructor(t){super(t)}splice(...t){return this[Kn]=!0,super.splice(...t)}push(...t){return this[Kn]=!0,super.push(...t)}pop(){return this[Kn]=!0,super.pop()}unshift(...t){return this[Kn]=!0,super.unshift(...t)}shift(){return this[Kn]=!0,super.shift()}};Bu.prototype.constructor=Array});function Ke(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new $E;e.timestamp&&(r.timestamp=e.timestamp),r[Oe]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var cA,uA,$E,Wn=pe(()=>{cA=D(qt()),uA=require("../index");Zr();a(Ke,"transaction");(0,uA._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};$E=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,cA.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function WE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(gx[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=es.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let S=o;o=c,c=S,S=!l,l=!u,u=S}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new YE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=QE(e);if(!S)throw new YE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:y,value:O})=>new Promise(H=>setImmediate(()=>H(S(O)?y:_A.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:S})=>S)}function QE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Gu(e){if(!e)return;let t=new KE,r,s,n,i,o;for(;r=lA.exec(e);){i=lA.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=Rx[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var YE,_t,es,_A,lA,Rx,gx,KE,xu=pe(()=>{YE=D(W()),_t=D(xe()),es=require("ordered-binary"),_A=require("lmdb"),lA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Rx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(WE,"idsForCondition");gx={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(QE,"filterByType");a(jr,"attributeComparator");a(Gu,"parseQuery");KE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var XE={};Ye(XE,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ie,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>SA,snake_case:()=>Ox});function Ox(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function dA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new JE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ie]??l[this.primaryKey]??null):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let d of n){if(typeof d=="object"&&d)break;c.push(d)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let d=c.indexOf("?");if(d>-1){let f=this.parseQuery(c.slice(d+1));u?u=Object.assign(f,u):u=f,c=c.slice(0,d)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;if(o||(o={}),t.allowInvalidated&&(o.allowInvalidated=!0),o.transaction){let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)}else return Ke(o,()=>{let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[SA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?d.allowRead(o.user,o):t.type==="update"?d.doesExist?.()===!1?d.allowCreate(o.user,o):d.allowUpdate(o.user,o):t.type==="create"?d.allowCreate(o.user,o):d.allowDelete(o.user,o);if(E?.then)return E.then(f=>{if(!f)throw new ku(o.user);return typeof l?.then=="function"?l.then(h=>e(d,u,o,h)):e(d,u,o,l)});if(!E)throw new ku(o.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,o,E)):e(d,u,o,l)}a(_,"authorizeActionOnResource")}}function vr(e,t){let r=new mA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function zE(e){let t=e[ce];if(t){let r=e[ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function EA(e){if(typeof e=="string")return t=>zE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=zE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=zE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var fA,hA,mA,Oe,ie,vs,SA,ce,Ax,mt,ku,JE,Zr=pe(()=>{fA=require("crypto");ua();hA=require("../index"),mA=D(W());Fu();Wn();xu();Oe=Symbol.for("context"),ie=Symbol.for("primary-key"),vs=Symbol("is-collection"),SA=Symbol("save-updates"),ce=Symbol("stored-record"),Ax={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Oe];[ie];static transactions;constructor(t,r){this[ie]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=EA(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,fA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static post=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(r):vr(t,"connect")},{type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(s):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=EA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):vr(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ie],t,this[Oe]);vr(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return Gu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&Ax[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:dA(t,this)}}return dA(t,this)}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ie]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ie],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[vs]=!0),n}connect(t){let r=new Xr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ie]}getContext(){return this[Oe]}};mt.prototype[Oe]=null;(0,hA._assignPackageExport)("Resource",mt);a(Ox,"snake_case");ku=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.http_resp_code=403):(super("Must login"),this.http_resp_code=401)}};a(dA,"pathToId");JE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(zE,"selectFromObject");a(EA,"transformForSelect")});function rf(e){let t=e.auditStore=e.openDB(AA.AUDIT_STORE_NAME,bx);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,NA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{jE||(jE=setTimeout(()=>{if(jE=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-pA,0]})){if((n[0]&15)===tf){let i=s[1];r[i]?.(s[2])}t.remove(s)}},pA/10).unref())}),t}function Yu(e,t,r){let s=IA[r.type],n=3;if(t?t.length>80?(s|=Vu,n=(0,Bs.writeKey)(t,ts,e?14:6),ZE.setUint16(2,n)):(n=(0,Bs.writeKey)(t,ts,e?11:3),ts[1]=n):ts[1]=0,e){s|=yA;let i=s&Vu?6:3;ZE.setFloat64(i,e),t||(n=i+8)}return ts[0]=s,s&Vu?ZE.setUint16(4,0):ts[2]=0,r.value?Buffer.concat([ts.slice(0,n),r.value]):ts.subarray(0,n)}function dn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Vu,i=n?6:3,o;r&yA&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&ef?t.decoder.decode(e.subarray(c||i)):void 0;return{type:IA[r&7],value:u,lastVersion:o,get user(){return c?(0,Bs.readKey)(e,i,c):void 0}}}var Bs,$u,AA,OA,NA,bA,ts,ZE,Nx,bx,pA,jE,ef,TA,tf,RA,gA,Vu,yA,IA,da=pe(()=>{Bs=require("ordered-binary"),$u=D(Q()),AA=D(xe()),OA=D(g()),NA=D(tt()),bA=D(x());(0,$u.initSync)();ts=Buffer.alloc(1024),ZE=new DataView(ts.buffer,ts.byteOffset,1024),Nx={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,Bs.writeKey)(e[2],t,r+12)}else return(0,Bs.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,Bs.readKey)(e,t+12,r)]}else return(0,Bs.readKey)(e,t,r)}},bx={encoding:"binary",keyEncoder:Nx},pA=(0,bA.convertToMS)((0,$u.get)(OA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,jE=null;a(rf,"openAuditStore");ef=16,TA=1,tf=2,RA=3,gA=4,Vu=128,yA=64,IA={put:TA|ef,[TA]:"put",delete:tf,[tf]:"delete",message:RA|ef,[RA]:"message",invalidate:gA,[gA]:"invalidate"};a(Yu,"createAuditEntry");a(dn,"readAuditEntry")});var sf,Qn,yx,Ea,Ku,wA=pe(()=>{sf=D(qt());da();Qn=Symbol("completion"),yx=100,Ea=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,sf.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Qn]&&(i||(i=[]),i.push(d[Qn])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Yu(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<yx>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},Ku=class extends Ea{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,sf.getNextMonotonicTime)())}getReadTxn(){}}});var CA={};Ye(CA,{Resources:()=>Wu,keyArrayToString:()=>Fi,resetResources:()=>Ix,resources:()=>En});function Ix(){return En=new Wu}function Fi(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Wu,En,fa=pe(()=>{Wn();Wu=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Ix,"resetResources");a(Fi,"keyArrayToString")});function MA(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;xi||((0,zn.onMessageByType)(DA,d=>{let E=d.auditIds;of(d.path,E,d.txnId)}),(0,zn.onMessageByType)(LA,d=>{(0,rs.trace)("confirming to proceed with txn",d.txnId)}),xi=Object.create(null));let c=xi[i]||(xi[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Fi(t);let l=new nf(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function of(e,t,r,s){if(!xi)return;let n=xi[e];if(n){if(Gi&&Gi+1!==r){(0,rs.trace)("Waiting to ensure latest txn id",Gi,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Qu)o<r&&((0,rs.trace)("Txn",r,"waiting for txn",o),await c);if(Gi+1!==r){await(0,zn.broadcastWithAcknowledgement)({type:LA,txnId:r});for(let[o,c]of Qu)o<r&&((0,rs.trace)("Txn",r,"waiting for txn",o),await c)}Qu.delete(r),(0,rs.trace)("Proceeding with txn id",r),Gi=r-1,of(e,t,r,s)})();return Qu.set(r,i),i}(0,rs.trace)("Notifying with txn id",r,s),Gi=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,UA.writeKey)(i,Cx,0);let _=i[3];_&&(i.length=3);let d,E=Fi(u),f;do{let h=l.get(E);if(h){for(let S of h)if(!(f&&!S.includeDescendants)){if(S.startTime>=o){(0,rs.info)("omitting",u,S.startTime,o);continue}try{if(S.crossThreads===!1&&!s)continue;if(d===void 0){let y=n.auditStore.get(i);if(!y||(d=dn(y,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}S.listener(u,d,o)}catch(y){console.error(y),(0,rs.info)(y)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function PA(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&wx)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,zn.broadcast)({type:DA,path:n,auditIds:l,txnId:c,start:u}),of(n,l,c,!0))})}}var rs,zn,UA,DA,LA,wx,xi,Cx,nf,Gi,Qu,vA=pe(()=>{rs=D(F()),zn=D(tt()),UA=require("ordered-binary");ua();fa();da();DA="transaction",LA="transaction-await",wx=67108864,Cx=Buffer.alloc(4096);a(MA,"addSubscription");nf=class extends Xr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t}end(){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}}toJSON(){return{name:"subscription"}}},Qu=new Map;a(of,"notifyFromTransactionData");a(PA,"listenToCommits")});var HA=m((lse,BA)=>{"use strict";var af=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};BA.exports=af});var FA=m((dse,qA)=>{"use strict";var cf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qA.exports=cf});var zu=m((fse,GA)=>{"use strict";var lf=Q(),_f=g();lf.initSync();var Ux=lf.get(_f.CONFIG_PARAMS.STORAGE_COMPRESSION),Dx=lf.get(_f.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Lx=_f.UPDATES_PROPERTY,uf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Ux&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Dx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===Lx)}};GA.exports=uf});var Xu=m((mse,kA)=>{"use strict";var ki=Q(),ha=g();ki.initSync();var Mx=ki.get(ha.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||ki.get(ha.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||ki.get(ha.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xA=ki.get(ha.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Px=ki.get(ha.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ju=class{static{a(this,"OpenEnvironmentObject")}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=Mx,this.noFSAccess=!0,xA!==void 0&&(this.overlappingSync=xA),this.noReadAhead=Px}};kA.exports=Ju;Ju.MAX_DBS=1e4});var ye=m((pse,ZA)=>{"use strict";var Ef=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Zu=qt(),YA=F(),Ft=rr().LMDB_ERRORS_ENUM,ju=FA(),ff=zu(),KA=Xu(),fn=xe(),VA=g(),{table:vx,resetDatabases:Bx}=(de(),te(Ne)),$A=Q(),Hr=fn.INTERNAL_DBIS_NAME,WA=fn.DBI_DEFINITION_NAME,Hx="data.mdb",qx="lock.mdb",ma=".mdb",Fx="-lock",df=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Rr(t,r),this.key_type=this.dbi[fn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ef.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function el(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(el,"pathEnvNameValidation");async function hf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+ma);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,Hx),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(hf,"validateEnvironmentPath");function tl(e,t){if(Zu.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a(tl,"validateEnvDBIName");async function Gx(e,t,r=!1,s=!1){el(e,t);let n=ir.basename(e);t=t.toString();let i=$A.get(VA.CONFIG_PARAMS.SCHEMAS);i||$A.setProperty(VA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await hf(e,t,s),QA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new KA(s?c:c+ma,!1),l=Ef.open(u);l.dbis=Object.create(null);let _=new ff(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=mf(e,t,r);return l[fn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Gx,"createEnvironment");async function xx(e,t,r,s=!0){el(e,t),t=t.toString();let n=ir.join(e,t);return vx({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(xx,"copyEnvironment");async function QA(e,t,r=!1){el(e,t),t=t.toString();let s=mf(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 hf(e,t),i=ir.join(e,t+ma),o=n!=i,c=new KA(n,o),u=Ef.open(c);u.dbis=Object.create(null);let l=JA(u);for(let _=0;_<l.length;_++)Rr(u,l[_]);return u[fn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(QA,"openEnvironment");async function kx(e,t,r=!1){el(e,t),t=t.toString();let s=ir.join(e,t+ma),n=await hf(e,t);if(global.lmdb_map!==void 0){let i=mf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await zA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+Fx:ir.join(ir.dirname(n),qx))}a(kx,"deleteEnvironment");async function zA(e){Zu.validateEnv(e);let t=e[fn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(zA,"closeEnvironment");function mf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mf,"getCachedEnvironmentName");function Vx(e){Zu.validateEnv(e);let t=Object.create(null),r=Rr(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new ju,n)}catch{YA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Vx,"listDBIDefinitions");function JA(e){Zu.validateEnv(e);let t=[],r=Rr(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(JA,"listDBIs");function $x(e,t){let s=Rr(e,Hr).getEntry(t),n=new ju;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{YA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a($x,"getDBIDefinition");function XA(e,t,r,s=!r){if(tl(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Rr(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new ff(r,s===!0),o=e.openDB(t,i),c=new ju(r===!0,s);return o[WA]=c,Rr(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(XA,"createDBI");function Rr(e,t){if(tl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=$x(e,t):r=new ju,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new ff(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(Ft.DBI_DOES_NOT_EXIST):n}return s[WA]=r,e.dbis[t]=s,s}a(Rr,"openDBI");function Yx(e,t){tl(e,t),t=t.toString();let r=Rr(e,t),s=r.getStats();return r[fn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Yx,"statDBI");async function Kx(e,t){try{let r=ir.join(e,t+ma);return(await Br.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(Kx,"environmentDataSize");function Wx(e,t){if(tl(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Rr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Rr(e,Hr).removeSync(t)}a(Wx,"dropDBI");function Qx(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Rr(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)XA(e,i,i!==t,i===t),s=!0;else throw o}}s&&Bx()}a(Qx,"initializeDBIs");ZA.exports={openDBI:Rr,openEnvironment:QA,createEnvironment:Gx,listDBIs:JA,listDBIDefinitions:Vx,createDBI:XA,dropDBI:Wx,statDBI:Yx,deleteEnvironment:kx,initializeDBIs:Qx,TransactionCursor:df,environmentDataSize:Kx,copyEnvironment:xx,closeEnvironment:zA}});var tO=m((Rse,eO)=>{"use strict";var Sf=ye(),zx=F(),jA=rr().LMDB_ERRORS_ENUM;eO.exports=Jx;async function Jx(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Sf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==jA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Sf.closeEnvironment(global.lmdb_map[s]),await Sf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==jA.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){zx.error(t)}}a(Jx,"cleanLMDBMap")});var Jn=m((Ase,Xx)=>{Xx.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_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var fO=m((Nse,EO)=>{"use strict";var pf=require("recursive-iterator"),Zx=require("alasql"),Tf=require("clone"),rO=x(),{handleHDBError:sO,hdb_errors:jx}=W(),{HDB_ERROR_MSGS:nO,HTTP_STATUS_CODES:iO}=jx,{getDatabases:ek}=(de(),te(Ne)),tk=["DISTINCT_ARRAY"],oO=Symbol("validateTables"),Rf=Symbol("validateTable"),Ose=Symbol("getAllColumns"),aO=Symbol("validateAllColumns"),rl=Symbol("findColumn"),cO=Symbol("validateOrderBy"),Sa=Symbol("validateSegment"),gf=Symbol("validateColumn"),uO=Symbol("setColumnsForTable"),lO=Symbol("checkColumnsForAsterisk"),_O=Symbol("validateGroupBy"),dO=Symbol("hasColumns"),Af=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[oO](),this[lO](),this[aO]()}[oO](){if(this[dO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Rf](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Rf](t.table)})}}[dO](){let t=!1,r=new pf(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Rf](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ek();if(!r[t.databaseid])throw sO(new Error,nO.SCHEMA_NOT_FOUND(t.databaseid),iO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw sO(new Error,nO.TABLE_NOT_FOUND(t.databaseid,t.tableid),iO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Tf(n);i.table=Tf(t),this.attributes.push(i)})}[rl](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)}[lO](){let t=new pf(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[uO](r.tableid)}[uO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Zx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[aO](){this[Sa](this.statement.columns,!1),this[Sa](this.statement.joins,!1),this[Sa](this.statement.where,!1),this[_O](this.statement.group,!1),this[Sa](this.statement.order,!0)}[Sa](t,r){if(!t)return;let s=new pf(t),n=[];for(let{node:i,path:o}of s)!rO.isEmpty(i)&&!rO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[cO](i):n.push(this[gf](i)));return n}[_O](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&tk.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Tf(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[rl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[rl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[cO](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[gf](t)}[gf](t){let r=this[rl](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]}};EO.exports=Af});var mO=m((yse,hO)=>{"use strict";var Of=class{static{a(this,"BridgeMethods")}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")}};hO.exports=Of});var pO=m((wse,SO)=>{"use strict";var Nf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};SO.exports=Nf});var RO=m((Use,TO)=>{"use strict";var bf=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};TO.exports=bf});var AO=m((Lse,gO)=>{"use strict";var yf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};gO.exports=yf});var Vi=m((Hse,bO)=>{"use strict";var rk=ye(),sk=pO(),nk=RO(),ik=AO(),ss=qt(),pa=rr().LMDB_ERRORS_ENUM,ok=xe(),Hs=g(),ak=x(),ck=require("uuid"),Pse=require("lmdb"),{handleHDBError:uk,hdb_errors:lk}=W(),{OVERFLOW_MARKER:vse,MAX_SEARCH_KEY_LENGTH:Bse}=ok,OO=Q();OO.initSync();var sl=OO.get(Hs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),If=Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xn=Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _k(e,t,r,s,n=ss.getNextMonotonicTime()){Df(e,t,r,s),wf(e,t,r);let i=new sk,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];NO(l,!0,n);let _=dk(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Cf(o,c,s,i,n)}a(_k,"insertRecords");function dk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][Hs.FUNC_VAL],s[o]=c)}let u=ss.getIndexedValues(c),l=e.dbis[o];if(u){sl&&l.prefetch(u.map(_=>({key:_,value:n})),nl);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}sl&&e.dbis[t].prefetch([n],nl),e.dbis[t].put(n,s,s[Xn])})}a(dk,"insertRecord");function Ek(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ek,"removeSkippedRecords");function NO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Xn]))&&(e[Xn]=r||(r=ss.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[If]))&&(e[If]=r||ss.getNextMonotonicTime()):delete e[If]}a(NO,"setTimestamps");function wf(e,t,r){r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),rk.initializeDBIs(e,t,r)}a(wf,"initializeTransaction");async function fk(e,t,r,s,n=ss.getNextMonotonicTime()){Df(e,t,r,s),wf(e,t,r);let i=new nk,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Uf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Cf(c,u,s,i,n,o)}a(fk,"updateRecords");async function hk(e,t,r,s,n=ss.getNextMonotonicTime()){try{Df(e,t,r,s)}catch(u){throw uk(u,u.message,lk.HTTP_STATUS_CODES.BAD_REQUEST)}wf(e,t,r);let i=new ik,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;ak.isEmpty(l[t])?(_=ck.v4(),l[t]=_):_=l[t];let d=Uf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Cf(o,c,s,i,n)}a(hk,"upsertRecords");async function Cf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ss.getNextMonotonicTime(),Ek(r,i),s}a(Cf,"finalizeWrite");function Uf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(NO(r,!_,o),Number.isInteger(r[Xn])&&l[Xn]>r[Xn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],S=e.dbis[h];if(S===void 0)continue;let y=l[h];if(typeof T=="function"){let H=T([[l]]);Array.isArray(H)&&(T=H[0][Hs.FUNC_VAL],r[h]=T)}if(T===y)continue;let O=ss.getIndexedValues(y);if(O){sl&&S.prefetch(O.map(H=>({key:H,value:s})),nl);for(let H=0,Y=O.length;H<Y;H++)S.remove(O[H],s)}if(O=ss.getIndexedValues(T),O){sl&&S.prefetch(O.map(H=>({key:H,value:s})),nl);for(let H=0,Y=O.length;H<Y;H++)S.put(O[H],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Xn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Uf(e,t,r,s,n,i,o))}a(Uf,"updateUpsertRecord");function mk(e,t,r){if(ss.validateEnv(e),t===void 0)throw new Error(pa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(pa.WRITE_ATTRIBUTES_REQUIRED):new Error(pa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(mk,"validateBasic");function Df(e,t,r,s){if(mk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(pa.RECORDS_REQUIRED):new Error(pa.RECORDS_MUST_BE_ARRAY)}a(Df,"validateWrite");function nl(){}a(nl,"noop");bO.exports={insertRecords:_k,updateRecords:fk,upsertRecords:hk}});var ns=m((Fse,wO)=>{"use strict";var IO=x(),yO=g(),$i=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,qs=require("joi"),hn={schema_format:{pattern:$i,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Sk=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern($i).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()).required(),pk=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern($i).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()),Tk=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern($i).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()).required();function Rk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>hn.schema_length.maximum?`'${e}' maximum of 250 characters`:$i.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Rk,"checkValidTable");function gk(e,t){return IO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(gk,"validateSchemaExists");function Ak(e,t){let r=t.state.ancestors[0].schema;return IO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Ak,"validateTableExists");function Ok(e,t){return e.toLowerCase()===yO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${yO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Ok,"validateSchemaName");wO.exports={common_validators:hn,schema_regex:$i,hdb_schema_table:Sk,validateSchemaExists:gk,validateTableExists:Ak,validateSchemaName:Ok,checkValidTable:Rk,hdb_database:pk,hdb_table:Tk}});var il=m((xse,CO)=>{var{common_validators:is}=ns(),Ra=ve(),Ta="is required",We={database:{presence:!1,format:is.schema_format,length:is.schema_length},schema:{presence:!1,format:is.schema_format,length:is.schema_length},table:{presence:!0,format:is.schema_format,length:is.schema_length},attribute:{presence:!0,format:is.schema_format,length:is.schema_length},hash_attribute:{presence:!0,format:is.schema_format,length:is.schema_length}};function ga(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ga,"makeAttributesStrings");function Nk(e){return e=ga(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,Ra.validateObject(e,We)}a(Nk,"schema_object");function bk(e){return e=ga(e),We.table.presence={message:Ta},We.attribute.presence=!1,We.hash_attribute.presence=!1,Ra.validateObject(e,We)}a(bk,"table_object");function yk(e){return e=ga(e),We.table.presence={message:Ta},We.attribute.presence=!1,Ra.validateObject(e,We)}a(yk,"create_table_object");function Ik(e){return e=ga(e),We.table.presence={message:Ta},We.attribute.presence={message:Ta},We.hash_attribute.presence=!1,Ra.validateObject(e,We)}a(Ik,"attribute_object");function wk(e){return e=ga(e),We.table.presence={message:Ta},We.attribute.presence=!1,We.hash_attribute.presence=!1,Ra.validateObject(e,We)}a(wk,"describe_table");function Ck(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(Ck,"validateTableResidence");CO.exports={schema_object:Nk,create_table_object:yk,table_object:bk,attribute_object:Ik,describe_table:wk,validateTableResidence:Ck}});var DO=m((Vse,UO)=>{"use strict";var Uk=require("uuid"),Lf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Uk.v4(),this.schema_table=`${this.schema}.${this.table}`}};UO.exports=Lf});var ol=m((Yse,LO)=>{"use strict";var Dk=DO(),Mf=class extends Dk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};LO.exports=Mf});var PO=m((Wse,MO)=>{"use strict";MO.exports=Mk;var Lk="inserted";function Mk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Lk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Mk,"returnObject")});var al=m((zse,FO)=>{"use strict";var Pk=g(),Pf=ye(),vk=Vi(),{getSystemSchemaPath:Bk,getSchemaPath:Hk}=we(),qk=Jn(),Fk=il(),Gk=ol(),xk=PO(),{handleHDBError:vO,hdb_errors:HO}=W(),BO=x(),{HTTP_STATUS_CODES:kk}=HO,vf=qk.hdb_attribute,qO=[];for(let e=0;e<vf.attributes.length;e++)qO.push(vf.attributes[e].attribute);var Vk="inserted";FO.exports=$k;async function $k(e){let t=Fk.attribute_object(e);if(t)throw vO(new Error,t.message,HO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&BO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw vO(new Error,r,kk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=BO.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 Gk(e.schema,e.table,e.attribute,e.id);try{let i=await Pf.openEnvironment(Hk(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}`);Pf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Pf.openEnvironment(Bk(),Pk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await vk.insertRecords(o,vf.hash_attribute,qO,[n]);return xk(Vk,c,{records:[n]},u)}catch(i){throw i}}a($k,"lmdbCreateAttribute")});var Hf=m((Xse,xO)=>{var{hdb_table:Yk,hdb_database:GO}=ns(),Kk=ve(),Bf=require("joi"),Wk={undefined:"undefined",null:"null"},Qk=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||Wk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),zk=Bf.object({database:GO,schema:GO,table:Yk,records:Bf.array().items(Bf.object().custom(Qk)).required()});xO.exports=function(e){return Kk.validateBySchema(e,zk)}});var Aa=m((ene,VO)=>{"use strict";var Fs=x(),kO=F(),jse=Hf(),{getDatabases:Jk}=(de(),te(Ne)),{ClientError:Zn}=W();VO.exports=Xk;function Xk(e){if(Fs.isEmpty(e))throw new Zn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Zn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Zn("invalid table specified.");if(!Array.isArray(e.records))throw new Zn("records must be an array");let t=Jk()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Zn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Fs.isEmptyOrZeroLength(o[r]))throw kO.error("a valid hash attribute must be provided with update record:",o),new Zn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw kO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Zn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Fs.isEmpty(o[r])&&o[r]!==""&&s.has(Fs.autoCast(o[r]))&&(o.skip=!0),s.add(Fs.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Xk,"insertUpdateValidate")});var Oa=m((rne,$O)=>{"use strict";var Zk=g().OPERATIONS_ENUM,qf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Zk.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};$O.exports=qf});var Ia=m((ine,YO)=>{"use strict";var nne=Oa(),cl=g(),Gf=x(),Ff=F(),jk=require("uuid"),{handleHDBError:Na,hdb_errors:eV}=W(),{HDB_ERROR_MSGS:ba,HTTP_STATUS_CODES:ya}=eV;YO.exports=tV;function tV(e,t,r){for(let n=0;n<t.length;n++)rV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];sV(i,r,e.operation)}}a(tV,"processRows");function rV(e){if(Buffer.byteLength(String(e))>cl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Na(new Error,ba.ATTR_NAME_LENGTH_ERR(e),ya.BAD_REQUEST,void 0,void 0,!0);if(Gf.isEmptyOrZeroLength(e)||Gf.isEmpty(e.trim()))throw Na(new Error,ba.ATTR_NAME_NULLISH_ERR,ya.BAD_REQUEST,void 0,void 0,!0)}a(rV,"validateAttribute");function sV(e,t,r){if(!e.hasOwnProperty(t)||Gf.isEmptyOrZeroLength(e[t])){if(r===cl.OPERATIONS_ENUM.INSERT||r===cl.OPERATIONS_ENUM.UPSERT){e[t]=jk.v4();return}throw Ff.error("Update transaction aborted due to record with no hash value:",e),Na(new Error,ba.RECORD_MISSING_HASH_ERR,ya.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>cl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ff.error(e),Na(new Error,ba.HASH_VAL_LENGTH_ERR,ya.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Ff.error(e),Na(new Error,ba.INVALID_FORWARD_SLASH_IN_HASH_ERR,ya.BAD_REQUEST,void 0,void 0,!0)}a(sV,"validateHash")});var ul=m((ane,WO)=>{"use strict";var KO=x(),nV=g(),iV=F(),oV=al(),aV=ol(),cV=Gs(),{SchemaEventMsg:uV}=qr(),lV="already exists in";WO.exports=_V;async function _V(e,t,r){if(KO.isEmptyOrZeroLength(r))return r;let s=[];KO.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 dV(e,t.schema,t.name,i)})),n}a(_V,"lmdbCheckForNewAttributes");async function dV(e,t,r,s){let n=new aV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await EV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(lV))iV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(dV,"createNewAttribute");async function EV(e){let t;return t=await oV(e),cV.signalSchemaChange(new uV(process.pid,nV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(EV,"createAttribute")});var Yi=m((une,QO)=>{"use strict";var xf=class{static{a(this,"LMDBTransactionObject")}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}};QO.exports=xf});var JO=m((_ne,zO)=>{"use strict";var fV=Yi(),hV=g().OPERATIONS_ENUM,kf=class extends fV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(hV.INSERT,r,s,n,i),this.records=t}};zO.exports=kf});var ZO=m((Ene,XO)=>{"use strict";var mV=Yi(),SV=g().OPERATIONS_ENUM,Vf=class extends mV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(SV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};XO.exports=Vf});var eN=m((hne,jO)=>{"use strict";var pV=Yi(),TV=g().OPERATIONS_ENUM,$f=class extends pV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(TV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};jO.exports=$f});var rN=m((Sne,tN)=>{"use strict";var RV=Yi(),gV=g().OPERATIONS_ENUM,Yf=class extends RV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(gV.DELETE,s,n,t,i),this.original_records=r}};tN.exports=Yf});var wa=m((Rne,oN)=>{"use strict";var Tne=require("path"),sN=ye(),AV=JO(),OV=ZO(),NV=eN(),bV=rN(),Ki=xe(),nN=x(),{CONFIG_PARAMS:yV}=g(),iN=Q();iN.initSync();var ll=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:IV}=we();oN.exports=wV;async function wV(e,t){if(iN.get(yV.LOGGING_AUDITLOG)===!1)return;let r=IV(e.schema,e.table),s=await sN.openEnvironment(r,e.table,!0),n=CV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){sN.initializeDBIs(s,Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ki.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),nN.isEmpty(n.user_name)||s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(wV,"writeTransaction");function CV(e,t){let r=nN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ll.INSERT)return new AV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.UPDATE)return new OV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.UPSERT)return new NV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.DELETE)return new bV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(CV,"createTransactionObject")});var Kf=m((One,aN)=>{"use strict";var UV=Aa(),Ane=Oa(),Ca=g(),DV=Ia(),LV=Vi().insertRecords,MV=ye(),PV=F(),vV=ul(),{getSchemaPath:BV}=we(),HV=wa();aN.exports=qV;async function qV(e){try{let{schema_table:t,attributes:r}=UV(e);DV(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vV(e.hdb_auth_header,t,r),n=BV(e.schema,e.table),i=await MV.openEnvironment(n,e.table),o=await LV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HV(e,o)}catch(c){PV.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(qV,"lmdbCreateRecords")});var lN=m((bne,uN)=>{"use strict";var cN=g(),FV=Kf(),GV=Oa(),xV=require("fs-extra"),{getSchemaPath:kV}=we();uN.exports=VV;async function VV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new GV(cN.SYSTEM_SCHEMA_NAME,cN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FV(r),await xV.mkdirp(kV(e.schema))}a(VV,"lmdbCreateSchema")});var dN=m((Ine,_N)=>{"use strict";var Wf=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};_N.exports=Wf});var mN=m((Lne,hN)=>{"use strict";var EN=ye(),Qf=qt(),zf=rr().LMDB_ERRORS_ENUM,$V=xe(),fN=F(),Cne=x(),YV=require("lmdb"),KV=dN(),WV=g(),{OVERFLOW_MARKER:Une,MAX_SEARCH_KEY_LENGTH:Dne}=$V,QV=WV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zV(e,t,r,s){if(Qf.validateEnv(e),t===void 0)throw new Error(zf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(zf.IDS_REQUIRED):new Error(zf.IDS_MUST_BE_ITERABLE);try{let n=EN.listDBIs(e);EN.initializeDBIs(e,t,n);let i=new KV,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[QV]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,YV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let y=n[S];if(!h.hasOwnProperty(y)||y===t)continue;let O=e.dbis[y],H=h[y];if(H!=null)try{let Y=Qf.getIndexedValues(H);if(Y)for(let A=0,w=Y.length;A<w;A++)O.remove(Y[A],o)}catch{fN.warn(`cannot delete from attribute: ${y}, ${H}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){fN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Qf.getNextMonotonicTime(),i}catch(n){throw n}}a(zV,"deleteRecords");hN.exports={deleteRecords:zV}});var Ua=m((Pne,pN)=>{"use strict";var Wi=x(),JV=mN(),XV=ye(),{getSchemaPath:ZV}=we(),jV=wa(),e$=F();pN.exports=t$;async function t$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wi.isEmptyOrZeroLength(e.hash_values)&&!Wi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Wi.isEmpty(u)||e.hash_values.push(u)}}if(Wi.isEmptyOrZeroLength(e.hash_values))return SN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wi.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=ZV(e.schema,e.table),i=await XV.openEnvironment(n,e.table),o=await JV.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jV(e,o)}catch(c){e$.error(`unable to write transaction due to ${c.message}`)}return SN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(t$,"lmdbDeleteRecords");function SN(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(SN,"createDeleteResponse")});var Xf=m((Hne,TN)=>{"use strict";var r$=g(),Bne=qt();function Jf(e,t){let r=Object.create(null);if(t.length===1&&r$.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Jf,"parseRow");function s$(e,t,r,s){let n=Jf(r,e);s.push(n)}a(s$,"searchAll");function n$(e,t,r,s){let n=Jf(r,e);s[t]=n}a(n$,"searchAllToMap");function i$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(i$,"iterateDBI");function jn(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(jn,"pushResults");function o$(e,t,r,s,n,i){t.toString().endsWith(e)&&jn(t,r,s,n,i)}a(o$,"endsWith");function a$(e,t,r,s,n,i){t.toString().includes(e)&&jn(t,r,s,n,i)}a(a$,"contains");function c$(e,t,r,s,n,i){t>e&&jn(t,r,s,n,i)}a(c$,"greaterThanCompare");function u$(e,t,r,s,n,i){t>=e&&jn(t,r,s,n,i)}a(u$,"greaterThanEqualCompare");function l$(e,t,r,s,n,i){t<e&&jn(t,r,s,n,i)}a(l$,"lessThanCompare");function _$(e,t,r,s,n,i){t<=e&&jn(t,r,s,n,i)}a(_$,"lessThanEqualCompare");TN.exports={parseRow:Jf,searchAll:s$,searchAllToMap:n$,iterateDBI:i$,endsWith:o$,contains:a$,greaterThanCompare:c$,greaterThanEqualCompare:u$,lessThanCompare:l$,lessThanEqualCompare:_$,pushResults:jn}});var Qi=m((kne,yN)=>{"use strict";var mn=ye(),Fne=F(),or=qt(),_l=xe(),ke=rr().LMDB_ERRORS_ENUM,Gne=x(),d$=g(),dl=Xf(),{parseRow:E$}=dl,xne=require("lmdb"),{OVERFLOW_MARKER:RN,MAX_SEARCH_KEY_LENGTH:f$}=_l;function gN(e,t,r,s=!1,n=void 0,i=void 0){return ei(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(gN,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ei(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(H=>({value:H}))):d.getRange(O)})}a(Da,"iterateRangeBetween");function ei(e,t,r,s){let n=e.database||e,i=mn.openDBI(n,r);i[_l.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&mn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ei,"setupTransaction");function AN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(RN)){if(!n)if(r)n=mn.openDBI(e,r);else{let u=mn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=mn.openDBI(e,u[l]),!n[_l.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(AN,"getOverflowCheck");function h$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ei(e,t,t,(o,c,u)=>(El(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>E$(l.value,r))))}a(h$,"searchAll");function m$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);El(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of gN(e,t,t,s,n,i))o.set(c,dl.parseRow(u,r));return o}a(m$,"searchAllToMap");function S$(e,t,r=!1,s=void 0,n=void 0){if(or.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=gN(e,void 0,t,r,s,n),c=o.transaction,u=AN(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(S$,"iterateDBI");function p$(e,t){if(or.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return mn.statDBI(e,t).entryCount}a(p$,"countAll");function T$(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,t,r,(c,u,l,_)=>(s=or.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(T$,"equals");function R$(e,t,r){return Sn(e,t,r),mn.openDBI(e,t).getValuesCount(r)}a(R$,"count");function g$(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,null,r,(c,u)=>{s=or.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(g$,"startsWith");function A$(e,t,r,s,n=!1,i=void 0,o=void 0){return ON(e,t,r,s,n,i,o,!0)}a(A$,"endsWith");function ON(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Sn(e,r,s),ei(e,null,r,(u,l,_,d)=>{let E=AN(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(RN)?l.getValues(f,{transaction:u}).map(T=>{let S=E(f,T);if(c?S.endsWith(s):S.includes(s))return{key:S,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[_l.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ON,"contains");function O$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!0,!1)}a(O$,"greaterThan");function N$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!1,!1)}a(N$,"greaterThanEqual");function b$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!0)}a(b$,"lessThan");function y$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!1)}a(y$,"lessThanEqual");function I$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(or.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=or.convertKeyValueToWrite(s),n=or.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Da(e,t,r,s,n,i,o,c)}a(I$,"between");function w$(e,t,r,s){or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(El(r),r=La(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=dl.parseRow(c,r)),o}a(w$,"searchByHash");function C$(e,t,r){or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(C$,"checkHashExists");function U$(e,t,r,s,n=[]){return bN(e,t,r,s,n),NN(e,t,r,s,n).map(i=>i[1])}a(U$,"batchSearchByHash");function D$(e,t,r,s,n=[]){bN(e,t,r,s,n);let i=new Map;for(let[o,c]of NN(e,t,r,s,n))i.set(o,c);return i}a(D$,"batchSearchByHashToMap");function NN(e,t,r,s,n=[]){return ei(e,t,t,(i,o,c)=>{r=La(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,dl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(NN,"batchHashSearch");function bN(e,t,r,s,n){if(or.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(El(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(bN,"initializeBatchSearchByHash");function El(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(El,"validateFetchAttributes");function Sn(e,t,r){if(or.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>f$)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Sn,"validateComparisonFunctions");function La(e,t){return t.length===1&&d$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=mn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");yN.exports={searchAll:h$,searchAllToMap:m$,count:R$,countAll:p$,equals:T$,startsWith:g$,endsWith:A$,contains:ON,searchByHash:w$,setGetWholeRowAttributes:La,batchSearchByHash:U$,batchSearchByHashToMap:D$,checkHashExists:C$,iterateDBI:S$,greaterThan:O$,greaterThanEqual:N$,lessThan:b$,lessThanEqual:y$,between:I$}});var zi=m(($ne,DN)=>{var IN=require("lodash"),wN=ve(),Ce=require("joi"),L$=x(),{hdb_schema_table:fl,checkValidTable:CN,hdb_table:UN,hdb_database:hl}=ns(),{handleHDBError:M$,hdb_errors:P$}=W(),{getDatabases:v$}=(de(),te(Ne)),{HTTP_STATUS_CODES:B$}=P$,H$=Ce.object({database:hl,schema:hl,table:UN,search_attribute:fl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(fl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),q$=Ce.object({database:hl,schema:hl,table:UN,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(fl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:fl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});DN.exports=function(e,t){let r=null;switch(t){case"value":r=wN.validateBySchema(e,H$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(CN("database",e.schema)),i(CN("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=wN.validateBySchema(e,q$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=L$.checkGlobalSchemaTable(e.schema,e.table);if(n)return M$(new Error,n,B$.NOT_FOUND);let o=v$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=IN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!IN.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Zf=m((Kne,LN)=>{"use strict";var F$=ye(),G$=zi(),{getSchemaPath:x$}=we();LN.exports=k$;function k$(e){let t=G$(e,"hashes");if(t)throw t;let r=x$(e.schema,e.table);return F$.openEnvironment(r,e.table)}a(k$,"initialize")});var jf=m((Qne,MN)=>{"use strict";var V$=Qi(),$$=Zf();MN.exports=Y$;async function Y$(e){let t=await $$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return V$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Y$,"lmdbGetDataByHash")});var Ji=m((Jne,PN)=>{"use strict";var eh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};PN.exports=eh});var BN=m((jne,vN)=>{"use strict";var Zne=Ji(),K$=Qi(),W$=Zf();vN.exports=Q$;async function Q$(e){let t=await W$(e),r=global.hdb_schema[e.schema][e.table];return K$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Q$,"lmdbSearchByHash")});var os=m((tie,HN)=>{"use strict";var th=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=l,this.offset=_}};HN.exports=th});var ml=m((sie,VN)=>{"use strict";var It=Qi(),z$=ye(),J$=x(),oe=xe(),ti=g(),X$=Jn(),qN=rr().LMDB_ERRORS_ENUM,{getSchemaPath:Z$}=we(),xs=ti.SEARCH_WILDCARDS;async function j$(e,t,r){let s;e.schema===ti.SYSTEM_SCHEMA_NAME?s=X$[e.table]:s=global.hdb_schema[e.schema][e.table];let n=kN(e,s.hash_attribute,r,t);return GN(e,n,s.hash_attribute,r)}a(j$,"prepSearch");async function GN(e,t,r,s){let n=Z$(e.schema,e.table),i=await z$.openEnvironment(n,e.table),o=xN(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(eY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?FN(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?FN(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?It.batchSearchByHashToMap(c,r,e.get_attributes,l):It.batchSearchByHash(c,r,e.get_attributes,l)}a(GN,"executeSearch");function xN(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case oe.SEARCH_TYPES.EQUALS:n=It.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=It.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=It.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=It.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return It.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return It.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return It.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return It.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=It.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=It.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=It.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=It.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=It.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(xN,"searchByType");function FN(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(FN,"createMapFromIterable");function eY(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(eY,"checkToFetchMore");function kN(e,t,r,s){if(J$.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),xs.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(xs[0])<0&&n.indexOf(xs[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(xs.indexOf(i)>=0&&xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(xs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(xs[0])||n.includes(xs[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(qN.UNKNOWN_SEARCH_TYPE)}else switch(s){case ti.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case ti.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case ti.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case ti.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case ti.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(qN.UNKNOWN_SEARCH_TYPE)}}a(kN,"createSearchTypeFromSearchObject");VN.exports={executeSearch:GN,createSearchTypeFromSearchObject:kN,prepSearch:j$,searchByType:xN}});var YN=m((oie,$N)=>{"use strict";var iie=os(),tY=zi(),rY=x(),sY=g(),nY=ml();$N.exports=iY;function iY(e,t){if(!rY.isEmpty(t)&&sY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=tY(e,"value");if(s)throw s;let n=!0;return nY.prepSearch(e,t,n)}a(iY,"lmdbGetDataByValue")});var Ma=m((uie,KN)=>{"use strict";var cie=os(),oY=zi(),aY=x(),cY=g(),uY=ml();KN.exports=lY;async function lY(e,t){if(!aY.isEmpty(t)&&cY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=oY(e,"value");if(s)throw s;return uY.prepSearch(e,t,!1)}a(lY,"lmdbSearchByValue")});var QN=m((die,WN)=>{"use strict";var _ie=xe(),rh=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},sh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},nh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};WN.exports={SearchByConditionsObject:rh,SearchCondition:sh,SortAttribute:nh}});var jN=m((mie,ZN)=>{"use strict";var fie=QN().SearchByConditionsObject,_Y=os(),dY=zi(),ih=Qi(),Sl=xe(),{Resource:hie}=(Zr(),te(XE)),XN=ml(),EY=Xf(),fY=require("lodash"),{getSchemaPath:hY}=we(),zN=ye(),{handleHDBError:mY,hdb_errors:SY}=W(),{HTTP_STATUS_CODES:pY}=SY,TY=1e8;ZN.exports=RY;async function RY(e){let t=dY(e,"conditions");if(t)throw mY(t,t.message,pY.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=hY(e.schema,e.table),s=await zN.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)zN.openDBI(s,l.search_attribute);let i=fY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Sl.SEARCH_TYPES.EQUALS?l.estimated_count=ih.count(s,l.search_attribute,l.search_value):_===Sl.SEARCH_TYPES.CONTAINS||_===Sl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=TY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await JN(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(XN.filterByType),d=_.length,E=ih.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>EY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await JN(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=ih.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(RY,"lmdbSearchByConditions");async function JN(e,t,r,s){let n=new _Y(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Sl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,XN.searchByType(e,n,i,s).map(o=>o.value)}a(JN,"executeConditionSearch")});var Pa=m((pie,eb)=>{"use strict";var gY=g().OPERATIONS_ENUM,oh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=gY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};eb.exports=oh});var ah=m((Rie,cb)=>{"use strict";var nb=os(),ib=Pa(),ob=Ma(),ab=Ua(),Gt=g(),tb=x(),rb=ye(),{getTransactionAuditStorePath:AY,getSchemaPath:OY}=we(),sb=F();cb.exports=NY;async function NY(e){try{if(tb.isEmpty(global.hdb_schema[e.schema])||tb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await bY(e),await yY(e);let t=OY(e.schema,e.table);try{await rb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")sb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=AY(e.schema,e.table);await rb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")sb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(NY,"lmdbDropTable");async function bY(e){let t=new nb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ob(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new ib(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await ab(n)}a(bY,"deleteAttributesFromSystem");async function yY(e){let t=new nb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ob(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new ib(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await ab(n)}catch(i){throw i}}a(yY,"dropTableFromSystem")});var lb=m((Aie,ub)=>{"use strict";var IY=require("fs-extra"),wY=os(),CY=Ji(),UY=Pa(),DY=ah(),LY=Ua(),MY=jf(),PY=Ma(),ks=g(),{getSchemaPath:vY}=we(),{handleHDBError:BY,hdb_errors:HY}=W(),{HDB_ERROR_MSGS:qY,HTTP_STATUS_CODES:FY}=HY;ub.exports=GY;async function GY(e){let t;try{t=await xY(e.schema);let r=new wY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await PY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await DY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new UY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LY(n);let i=vY(t);await IY.remove(i)}catch(r){throw r}}a(GY,"lmdbDropSchema");async function xY(e){let t=new CY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await MY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw BY(new Error,qY.SCHEMA_NOT_FOUND(e),FY.NOT_FOUND,void 0,void 0,!0);return s}a(xY,"validateDropSchema")});var uh=m((Nie,_b)=>{"use strict";var ch=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};_b.exports=ch});var Eb=m((Iie,db)=>{"use strict";var kY=require("fs-extra"),pl=ye(),{getTransactionAuditStorePath:VY}=we(),lh=xe(),yie=uh();db.exports=$Y;async function $Y(e){let t;try{let r=VY(e.schema,e.table);await kY.mkdirp(r),t=await pl.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{pl.createDBI(t,lh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pl.createDBI(t,lh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pl.createDBI(t,lh.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a($Y,"createTransactionsAuditEnvironment")});var Sb=m((Cie,mb)=>{"use strict";var _h=g(),fb=ye(),YY=Vi(),{getSystemSchemaPath:KY,getSchemaPath:WY}=we(),QY=Jn(),zY=al(),dh=ol(),JY=F(),XY=Eb(),fh=QY.hdb_table,hb=[];for(let e=0;e<fh.attributes.length;e++)hb.push(fh.attributes[e].attribute);mb.exports=ZY;async function ZY(e,t){let r=WY(t.schema,t.table),s=new dh(t.schema,t.table,_h.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new dh(t.schema,t.table,_h.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new dh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await fb.createEnvironment(r,t.table),e!==void 0){let o=await fb.openEnvironment(KY(),_h.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YY.insertRecords(o,fh.hash_attribute,hb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Eh(s),await Eh(n),await Eh(i)}await XY(t)}catch(o){throw o}}a(ZY,"lmdbCreateTable");async function Eh(e){try{await zY(e)}catch(t){JY.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Eh,"createAttribute")});var Tb=m((Die,pb)=>{"use strict";var jY=Aa(),eK=Ia(),tK=ul(),va=g(),rK=Vi().updateRecords,sK=ye(),{getSchemaPath:nK}=we(),iK=wa(),oK=F();pb.exports=aK;async function aK(e){try{let{schema_table:t,attributes:r}=jY(e);eK(e,r,t.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(r.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await tK(e.hdb_auth_header,t,r),n=nK(e.schema,e.table),i=await sK.openEnvironment(n,e.table),o=await rK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iK(e,o)}catch(c){oK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(aK,"lmdbUpdateRecords")});var gb=m((Mie,Rb)=>{"use strict";var cK=g().OPERATIONS_ENUM,hh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=cK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Rb.exports=hh});var Ob=m((Bie,Ab)=>{"use strict";var vie=gb(),uK=Aa(),lK=Ia(),_K=ul(),Ba=g(),dK=Vi().upsertRecords,EK=ye(),{getSchemaPath:fK}=we(),hK=wa(),mK=F(),{handleHDBError:SK,hdb_errors:pK}=W();Ab.exports=TK;async function TK(e){let t;try{t=uK(e)}catch(u){throw SK(u,u.message,pK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lK(e,s,r.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(s.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _K(e.hdb_auth_header,r,s),i=fK(e.schema,e.table),o=await EK.openEnvironment(i,e.table),c=await dK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await hK(e,c)}catch(u){mK.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(TK,"lmdbUpsertRecords")});var bb=m((qie,Nb)=>{"use strict";var mh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Nb.exports=mh});var Ib=m((Gie,yb)=>{"use strict";var Sh=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};yb.exports=Sh});var Ub=m((Vie,Cb)=>{"use strict";var ph=ye(),{getTransactionAuditStorePath:RK}=we(),kie=bb(),Ha=xe(),gK=x(),wb=Ib(),AK=require("util").promisify,OK=AK(setTimeout),NK=1e4,bK=100;Cb.exports=yK;async function yK(e){let t=RK(e.schema,e.table),r=await ph.openEnvironment(t,e.table,!0),s=ph.listDBIs(r);ph.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new wb;do n=await IK(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 OK(bK);while(n.transactions_deleted>0);return i}a(yK,"deleteAuditLogsBefore");async function IK(e,t){let r=new wb;try{let s=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];gK.isEmpty(c)||(n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>NK)break}return await n,r}catch(s){throw s}}a(IK,"deleteTransactions")});var Lb=m((Yie,Db)=>{"use strict";var Th=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};Db.exports=Th});var Pb=m((Qie,Mb)=>{"use strict";var wK=os(),CK=Pa(),Wie=Lb(),as=g(),UK=x(),Rh=ye(),DK=Jn(),LK=Ma(),MK=Ua(),{getSchemaPath:PK}=we();Mb.exports=vK;async function vK(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=DK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await HK(e),n=PK(e.schema,e.table),i=await Rh.openEnvironment(n,e.table);return t===!0&&await BK(e,i,r.hash_attribute),Rh.dropDBI(i,e.attribute),s}a(vK,"lmdbDropAttribute");async function BK(e,t,r){let s=Rh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(BK,"removeAttributeFromAllObjects");async function HK(e){let t=new wK(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await LK(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(UK.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new CK(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return MK(i)}a(HK,"dropAttributeFromSystem")});var Gb=m((Xie,Fb)=>{"use strict";var gh=ye(),Xi=xe(),Jie=qt(),Ah=g(),vb=x(),{getTransactionAuditStorePath:qK}=we(),FK=Qi(),Tl=Yi(),GK=F();Fb.exports=xK;async function xK(e){let t=qK(e.schema,e.table),r=await gh.openEnvironment(t,e.table,!0),s=gh.listDBIs(r);gh.initializeDBIs(r,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ah.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Bb(r,e.search_values);case Ah.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,VK(r,e.search_values,n);case Ah.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return kK(r,e.search_values);default:return Bb(r)}}a(xK,"readAuditLog");function Bb(e,t=[0,Date.now()]){vb.isEmpty(t[0])&&(t[0]=0),vb.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Xi.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 Tl,n))}a(Bb,"searchTransactionsByTimestamp");function kK(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Xi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,qb(e,i))}return Object.fromEntries(r)}a(kK,"searchTransactionsByUsername");function VK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=FK.equals(e,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=qb(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Hb(u,"records",r,_,o),Hb(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(VK,"searchTransactionsByHashValues");function Hb(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new Tl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Tl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Hb,"loopRecords");function qb(e,t){let r=[];try{let s=e.dbis[Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Tl,i);r.push(o)}}catch(i){GK.warn(i)}return r}catch(s){throw s}}a(qb,"batchSearchTransactions")});var kb=m((toe,xb)=>{"use strict";var{getSchemaPath:jie}=we(),eoe=ye(),{database:$K}=(de(),te(Ne));xb.exports={writeTransaction:YK};async function YK(e,t,r){return $K({database:e,table:t}).transaction(r)}a(YK,"writeTransaction")});var Kb=m((soe,Yb)=>{"use strict";var{getSchemaPath:Vb}=we(),$b=ye();Yb.exports={flush:KK,resetReadTxn:WK};async function KK(e,t){return(await $b.openEnvironment(Vb(e,t),t.toString())).flushed}a(KK,"flush");async function WK(e,t){try{(await $b.openEnvironment(Vb(e,t),t.toString())).resetReadTxn()}catch{}}a(WK,"resetReadTxn")});var Jb=m((ioe,zb)=>{"use strict";var{Readable:QK}=require("stream"),{getDatabases:zK}=(de(),te(Ne)),{readSync:JK,openSync:XK,createReadStream:Wb}=require("fs"),{open:ZK}=require("lmdb"),Qb=zu(),jK=Xu(),{INTERNAL_DBIS_NAME:e1}=xe();zb.exports=r1;var Oh=32768,t1=100;async function r1(e){let t=e.database||e.schema||"data",r=zK()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=ZK({noSync:!0,maxDbs:jK.MAX_DBS}),E,f=d.openDB(e1,new Qb(!1)),h=_.useReadTransaction(),T=0;for(let{key:y,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(H=>y.startsWith?.(H+"/"))){f.put(y,O);let[,H]=y.split("/"),Y=!H,A=new Qb(!Y,Y);A.encoding="binary";let w=d.openDB(y,A),G=_.openDB(y,A);for(let{key:k,version:X,value:ge}of G.getRange({transaction:h,versions:Y}))E=w.put(k,ge,X),T++%t1===0&&await new Promise(ut=>setTimeout(ut,20))}await E;let S=Wb(d.path);return S.headers=u(),S.on("close",()=>{h.done(),d.close()}),S}let o=r[Object.keys(r)[0]].primaryStore,c=XK(o.path);return o.transaction(()=>{let l=Buffer.alloc(Oh);JK(c,l,0,Oh);let _=o.useReadTransaction(),d=Wb(null,{fd:c,start:Oh}),E=new QK.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(r1,"getBackup")});var jb=m((aoe,Zb)=>{"use strict";var s1=F(),{handleHDBError:n1}=W(),i1=mO(),o1=al(),a1=Kf(),c1=lN(),u1=Ua(),l1=jf(),_1=BN(),d1=YN(),E1=Ma(),f1=jN(),h1=lb(),m1=Sb(),S1=Tb(),p1=Ob(),T1=Ub(),R1=ah(),g1=Pb(),A1=Gb(),O1=kb(),Xb=Kb(),N1=Jb(),Nh=class extends i1{static{a(this,"LMDBBridge")}async searchByConditions(t){return f1(t)}async getDataByHash(t){return await l1(t)}async searchByHash(t){return await _1(t)}async getDataByValue(t,r){return await d1(t,r)}async searchByValue(t){return await E1(t)}async createSchema(t){return await c1(t)}async dropSchema(t){return await h1(t)}async createTable(t,r){return await m1(t,r)}async dropTable(t){return await R1(t)}async createAttribute(t){return await o1(t)}async createRecords(t){return await a1(t)}async updateRecords(t){return await S1(t)}async upsertRecords(t){try{return await p1(t)}catch(r){throw n1(r,null,null,s1.ERR,r)}}async deleteRecords(t){return await u1(t)}async dropAttribute(t){return await g1(t)}async deleteAuditLogsBefore(t){return await T1(t)}async readAuditLog(t){return await A1(t)}writeTransaction(t,r,s){return O1.writeTransaction(t,r,s)}flush(t,r){return Xb.flush(t,r)}resetReadTxn(t,r){return Xb.resetReadTxn(t,r)}getBackup(t){return N1(t)}};Zb.exports=Nh});var cy={};Ye(cy,{ResourceBridge:()=>Ih});function wh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function ty(e,t){let r=cs(e),s=wh(e,r);if(!r)throw new Fr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ke(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&qu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||y1,r=Gr()[t];if(!r)throw(0,Fr.handleHDBError)(new Error,b1.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function ry(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}}async function*sy(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,timestamp:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var ny,Rl,Fr,iy,oy,xr,bh,yh,ay,b1,y1,I1,w1,ey,Ih,uy=pe(()=>{"use strict";ny=D(jb()),Rl=D(zi()),Fr=D(W());de();iy=D(Aa()),oy=D(Ia()),xr=D(g()),bh=D(Gs()),yh=D(qr()),ay=D(x());Wn();Fu();({HDB_ERROR_MSGS:b1}=Fr.hdb_errors),y1="data",I1=1e4,w1=10,Ih=class extends ny.default{static{a(this,"ResourceBridge")}constructor(t){super(t),ey=this}async searchByConditions(t){let r=(0,Rl.default)(t,"conditions");if(r)throw(0,Fr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Fr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:wh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Fr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}rt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return qa({database:t.schema,table:null}),bh.signalSchemaChange(new yh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Ch(t.schema),bh.signalSchemaChange(new yh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,ey.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,iy.default)(t);(0,oy.default)(t,s,r.primaryKey);let n,i=Gr()[t.schema][t.table],o={user:t.hdb_user};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=qu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=Gr()[t.schema][t.table],s={user:t.hdb_user};return Ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return ry(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Gr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Fr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:xr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,ay.async_set_timeout)(w1),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%I1===0&&await l();return u.length>0&&await l(),n?ry(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Rl.default)(t,"hashes");if(r)throw r;return ty(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of ty(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&xr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Rl.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Fr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===xr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:wh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of sy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return sy(r,t.search_values?.[0],t.search_values?.[1])}}};a(wh,"getSelect");a(ty,"getRecords");a(cs,"getTable");a(ry,"createDeleteResponse");a(sy,"groupRecordsInHistory")});var kr=m((Eoe,ly)=>{"use strict";var{ResourceBridge:C1}=(uy(),te(cy)),U1=Q();U1.initSync();var gl;function D1(){return gl||(gl=new C1,gl)}a(D1,"getBridge");ly.exports=D1()});var fy=m((hoe,Ey)=>{"use strict";var _y=require("lodash"),Fa=require("mathjs"),L1=require("jsonata"),dy=x();Ey.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?_y.uniqWith(e,_y.isEqual):e,searchJSON:M1,mad:Ga.bind(null,Fa.mad),mean:Ga.bind(null,Fa.mean),mode:Ga.bind(null,Fa.mode),prod:Ga.bind(null,Fa.prod),median:Ga.bind(null,Fa.median)};function Ga(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Ga,"aggregateFunction");function M1(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(dy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),dy.isEmpty(this.__ala__.res[r])){let s=L1(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(M1,"searchJSON")});var my=m((Soe,hy)=>{"use strict";var Qe=require("moment"),Uh="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;hy.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format(Uh),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format(Uh),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format(Uh)}});var Ry=m((poe,Ty)=>{"use strict";var P1=require("@turf/area"),v1=require("@turf/length"),B1=require("@turf/circle"),H1=require("@turf/difference"),q1=require("@turf/distance"),F1=require("@turf/boolean-contains"),G1=require("@turf/boolean-equal"),x1=require("@turf/boolean-disjoint"),k1=require("@turf/helpers"),Sy=g(),ue=x();Ty.exports={geoArea:V1,geoLength:$1,geoCircle:Y1,geoDifference:K1,geoDistance:py,geoNear:W1,geoContains:Q1,geoEqual:z1,geoCrosses:J1,geoConvert:X1};var Dh="geo1 is required",Lh="geo2 is required";function V1(e){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),P1.default(e)}a(V1,"geoArea");function $1(e,t){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),v1.default(e,{units:t||"kilometers"})}a($1,"geoLength");function Y1(e,t,r){if(ue.isEmpty(e))throw new Error("point is required");if(ue.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),B1.default(e,t,{units:r||"kilometers"})}a(Y1,"geoCircle");function K1(e,t){if(ue.isEmpty(e))throw new Error("poly1 is required");if(ue.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),H1(e,t)}a(K1,"geoDifference");function py(e,t,r){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),q1.default(e,t,{units:r||"kilometers"})}a(py,"geoDistance");function W1(e,t,r,s){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return py(e,t,s)<=r}a(W1,"geoNear");function Q1(e,t){if(ue.isEmpty(e))throw new Error(Dh);if(ue.isEmpty(e))throw new Error(Lh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),F1.default(e,t)}a(Q1,"geoContains");function z1(e,t){if(ue.isEmpty(e))throw new Error(Dh);if(ue.isEmpty(e))throw new Error(Lh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),G1.default(e,t)}a(z1,"geoEqual");function J1(e,t){if(ue.isEmpty(e))throw new Error(Dh);if(ue.isEmpty(e))throw new Error(Lh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),!x1.default(e,t)}a(J1,"geoCrosses");function X1(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(Sy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Sy.GEO_CONVERSION_ENUM).join(",")}`);return k1[t](e,r)}a(X1,"geoConvert")});var Al=m((Roe,gy)=>{var ri=fy(),ar=my(),us=Ry();gy.exports=e=>{e.aggr.mad=e.aggr.MAD=ri.mad,e.aggr.mean=e.aggr.MEAN=ri.mean,e.aggr.mode=e.aggr.MODE=ri.mode,e.aggr.prod=e.aggr.PROD=ri.prod,e.aggr.median=e.aggr.MEDIAN=ri.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ri.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ri.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ar.current_time,e.fn.extract=e.fn.EXTRACT=ar.extract,e.fn.date=e.fn.DATE=ar.date,e.fn.date_format=e.fn.DATE_FORMAT=ar.date_format,e.fn.date_add=e.fn.DATE_ADD=ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ar.date_diff,e.fn.now=e.fn.NOW=ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ar.get_server_time,e.fn.getdate=e.fn.GETDATE=ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var by=m((goe,Ny)=>{"use strict";var xa=require("lodash"),St=require("alasql");St.options.cache=!1;var Z1=Al(),Ay=require("clone"),Ol=require("recursive-iterator"),se=F(),ne=x(),Zi=kr(),j1=g(),{hdb_errors:eW}=W(),{getDatabases:Oy}=(de(),te(Ne)),tW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";Z1(St);var Mh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new Ol(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(Ay(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=xa.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=Oy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ol(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new St.yy.LogicValue({value:s}):r.right instanceof St.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new St.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new St.yy.LogicValue({value:i}):s instanceof St.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new St.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ol(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ne.isEmpty(j1.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&xa.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await St.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(Ay(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(ne.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(tW)>-1&&this.tables.forEach(n=>{let i={columnid:Oy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=xa.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await Zi.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await Zi.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Zi.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,S]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await Zi.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_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 St.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new St.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new St.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 St.yy.FuncValue:new St.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await St.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(S=>{T[S.key]!==null&&T[S.key]!==void 0&&S.keys.add(T[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=xa.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,y=T.length;S<y;S++){let O=T[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ol(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=xa.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Zi.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],S=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(S)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).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();se.trace(`Final SQL: ${n}`),s=await St.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(eW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Zi.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ny.exports=Mh});var gr=m((Ooe,yy)=>{"use strict";var rW=fO();yy.exports={searchByConditions:nW,searchByHash:iW,searchByValue:oW,search:aW};var Ph=kr(),{transformReq:vh}=x(),sW=by();async function nW(e){return vh(e),Ph.searchByConditions(e)}a(nW,"searchByConditions");async function iW(e){vh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Ph.searchByHash(e))r&&t.push(r);return t}a(iW,"searchByHash");async function oW(e){vh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Ph.searchByValue(e))t.push(r);return t}a(oW,"searchByValue");function aW(e,t){try{let r=new rW(e);r.validate(),new sW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(aW,"search")});var Vs=m((boe,Uy)=>{"use strict";var ka=require("crypto"),cW=Q(),{CONFIG_PARAMS:uW}=g(),wy="aes-256-cbc",lW=32,_W=16,Bh=64,Cy=32,dW=Bh+Cy,Iy=new Map;Uy.exports={encrypt:EW,decrypt:fW,createNatsTableStreamName:hW};function EW(e){let t=ka.randomBytes(lW),r=ka.randomBytes(_W),s=ka.createCipheriv(wy,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(EW,"encrypt");function fW(e){let t=e.substr(0,Bh),r=e.substr(Bh,Cy),s=e.substr(dW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ka.createDecipheriv(wy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(fW,"decrypt");function hW(e,t){let r=cW.get(uW.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=Iy.get(r);return s||(s=ka.createHash("md5").update(r).digest("hex"),Iy.set(r,s)),s}a(hW,"createNatsTableStreamName")});var si=m((woe,Ly)=>{"use strict";var Ioe=gr(),Nl=F(),Dy=il(),mW=Vs(),bl=x(),{handleHDBError:yl,hdb_errors:SW}=W(),{HDB_ERROR_MSGS:Il,HTTP_STATUS_CODES:Hh}=SW,pW=Q();pW.initSync();var{getDatabases:qh}=(de(),te(Ne));Ly.exports={describeAll:TW,describeTable:wl,describeSchema:RW};async function TW(e){try{let t=bl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=qh(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await wl({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await wl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Nl.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return Nl.error("Got an error in describeAll"),Nl.error(t),yl(new Error,Il.DESCRIBE_ALL_ERR)}}a(TW,"describeAll");async function wl(e,t){bl.transformReq(e);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=Dy.describe_table(e);if(i)throw i;let c=qh()[r];if(!c)throw yl(new Error,Il.SCHEMA_NOT_FOUND(e.schema),Hh.NOT_FOUND);let u=c[s];if(!u)throw yl(new Error,Il.TABLE_NOT_FOUND(e.schema,e.table),Hh.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=mW.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){Nl.warn(`unable to stat table dbi due to ${d}`)}return _}a(wl,"descTable");async function RW(e){bl.transformReq(e);let t=Dy.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(),i=qh()[s];if(!i)throw yl(new Error,Il.SCHEMA_NOT_FOUND(e.schema),Hh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),bl.isEmpty(u)||u.describe){let l=await wl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(RW,"describeSchema")});var pn=m((Loe,Hy)=>{var gW=Jn(),{callbackify:Py,promisify:AW}=require("util"),{getDatabases:vy}=(de(),te(Ne));Hy.exports={setSchemaDataToGlobal:My,getTableSchema:OW,getSystemSchema:NW,setSchemaDataToGlobalAsync:AW(My)};var By=si(),Uoe=Py(By.describeAll),Doe=Py(By.describeTable);function My(e){global.hdb_schema=vy(),e&&e()}a(My,"setSchemaDataToGlobal");function OW(e,t,r){let s=vy()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(OW,"getTableSchema");function NW(){return gW}a(NW,"getSystemSchema")});var Ar=m((Poe,xy)=>{"use strict";var Ul=Hf(),pt=x(),bW=require("util"),Dl=kr(),yW=pn(),qy=F(),{handleHDBError:ni,hdb_errors:IW}=W(),{HTTP_STATUS_CODES:ii}=IW,wW=bW.promisify(yW.getTableSchema),CW="updated",Fy="inserted",Gy="upserted";xy.exports={insert:DW,update:LW,upsert:MW,validation:UW,flush:PW};async function UW(e){if(pt.isEmpty(e))throw new Error("invalid update parameters defined.");if(pt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(pt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await wW(e.schema,e.table),r=Ul(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&pt.isEmptyOrZeroLength(c[s]))throw qy.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(!pt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw qy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!pt.isEmpty(c[s])&&c[s]!==""&&n.has(pt.autoCast(c[s]))&&(c.skip=!0),n.add(pt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(UW,"validation");async function DW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ul(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await Dl.createRecords(e);return Cl(Fy,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(DW,"insertData");async function LW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ul(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await Dl.updateRecords(e);return pt.isEmpty(s.existing_rows)?Cl(CW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Cl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LW,"updateData");async function MW(e){if(e.operation!=="upsert")throw ni(new Error,"invalid operation, must be upsert",ii.INTERNAL_SERVER_ERROR);let t=Ul(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await Dl.upsertRecords(e);return Cl(Gy,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(MW,"upsertData");function Cl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===Fy?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Gy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Cl,"returnObject");function PW(e){return pt.transformReq(e),Dl.flush(e.schema,e.table)}a(PW,"flush")});var Gh=m((Boe,$y)=>{var vW=ve(),Fh=require("joi"),{hdb_table:BW,hdb_database:ky}=ns(),Vy={schema:ky,database:ky,table:BW},HW={date:Fh.date().iso().required()},qW={timestamp:Fh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};$y.exports=function(e,t){let r=t==="timestamp"?{...Vy,...qW}:{...Vy,...HW},s=Fh.object(r);return vW.validateBySchema(e,s)}});var Wy=m((Hoe,Ky)=>{var FW=ve(),xh=require("joi"),{hdb_table:GW,hdb_database:Yy}=ns(),xW=xh.object({schema:Yy,database:Yy,table:GW,hash_values:xh.array().required(),ids:xh.array()});Ky.exports=function(e){return FW.validateBySchema(e,xW)}});var zy=m((qoe,Qy)=>{"use strict";var kh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Vh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},$h=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Qy.exports={InsertObject:kh,NoSQLSeachObject:Vh,DeleteResponseObject:$h}});var ci=m((Goe,eI)=>{"use strict";var Xy=Gh(),kW=Wy(),oi=x(),Jy=require("moment"),Zy=F(),{promisify:VW,callbackify:$W}=require("util"),ai=g(),YW=pn(),Yh=VW(YW.getTableSchema),Kh=kr(),{DeleteResponseObject:KW}=zy(),{handleHDBError:Tn,hdb_errors:WW}=W(),{HDB_ERROR_MSGS:Ll,HTTP_STATUS_CODES:Rn}=WW,QW="records successfully deleted",zW=$W(jy);eI.exports={delete:zW,deleteRecord:jy,deleteFilesBefore:JW,deleteAuditLogsBefore:XW};async function JW(e){let t=Xy(e,"date");if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(oi.transformReq(e),!Jy(e.date,Jy.ISO_8601).isValid())throw Tn(new Error,Ll.INVALID_DATE,Rn.BAD_REQUEST,ai.LOG_LEVELS.ERROR,Ll.INVALID_DATE,!0);let s=oi.checkSchemaTableExist(e.schema,e.table);if(s)throw Tn(new Error,s,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,s,!0);let n=await Kh.deleteRecordsBefore(e);if(await Yh(e.schema,e.table),Zy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(JW,"deleteFilesBefore");async function XW(e){let t=Xy(e,"timestamp");if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(oi.transformReq(e),isNaN(e.timestamp))throw Tn(new Error,Ll.INVALID_VALUE("Timestamp"),Rn.BAD_REQUEST,ai.LOG_LEVELS.ERROR,Ll.INVALID_VALUE("Timestamp"),!0);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Tn(new Error,r,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,r,!0);let s=await Kh.deleteAuditLogsBefore(e);return await Yh(e.schema,e.table),Zy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(XW,"deleteAuditLogsBefore");async function jy(e){e.ids&&(e.hash_values=e.ids);let t=kW(e);if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);oi.transformReq(e);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Tn(new Error,r,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,r,!0);try{await Yh(e.schema,e.table);let s=await Kh.deleteRecords(e);return oi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${QW}`),s}catch(s){if(s.message===ai.SEARCH_NOT_FOUND_MESSAGE){let n=new KW;return n.message=ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(jy,"deleteRecord")});var Ml=m((koe,sI)=>{var ZW=require("crypto"),tI=9;function jW(e){let t=tQ(tI),r=rI(e+t);return t+r}a(jW,"createHash");function eQ(e,t){let r=e.substr(0,tI),s=r+rI(t+r);return e===s}a(eQ,"validateHash");function tQ(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(tQ,"generateSalt");function rI(e){return ZW.createHash("md5").update(e).digest("hex")}a(rI,"md5");sI.exports={hash:jW,validate:eQ}});var iI=m(($oe,nI)=>{var Wh=ve(),wt={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 rQ(e){return wt.password.presence=!0,wt.username.presence=!0,wt.role.presence=!0,wt.active.presence=!0,Wh.validateObject(e,wt)}a(rQ,"addUserValidation");function sQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Wh.validateObject(e,wt)}a(sQ,"alterUserValidation");function nQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Wh.validateObject(e,wt)}a(nQ,"dropUserValidation");nI.exports={addUserValidation:rQ,alterUserValidation:sQ,dropUserValidation:nQ}});var Be=m((Woe,aI)=>{"use strict";var{platform:Koe}=require("os"),iQ="nats-server.zip",Qh="nats-server",oQ=process.platform==="win32"?`${Qh}.exe`:Qh,zh="HDB",aQ=/^[^\s.,*>]+$/,oI="__request__",cQ=a(e=>`${e}.${oI}`,"REQUEST_SUBJECT"),uQ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},lQ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},_Q={HUB:"hub.pid",LEAF:"leaf.pid"},dQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},EQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:zh,deliver_subject:"__HDB__.WORKQUEUE"},fQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:zh,deliver_subject:"HDB.SCHEMAQUEUE"},hQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:zh,deliver_subject:"HDB.USERQUEUE"},mQ={SUCCESS:"success",ERROR:"error"},SQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},pQ={TXN:"txn",MSGID:"msgid"},ji={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},TQ={[ji.ERR]:1,[ji.WRN]:2,[ji.INF]:3,[ji.DBG]:4,[ji.TRC]:5},RQ={debug:"-D",trace:"-DVV"};aI.exports={NATS_SERVER_ZIP:iQ,NATS_SERVER_NAME:Qh,NATS_BINARY_NAME:oQ,PID_FILES:_Q,NATS_CONFIG_FILES:lQ,SERVER_SUFFIX:dQ,WORK_QUEUE_CONSUMER_NAMES:EQ,SCHEMA_QUEUE_CONSUMER_NAMES:fQ,USER_QUEUE_CONSUMER_NAMES:hQ,NATS_TERM_CONSTRAINTS_RX:aQ,REQUEST_SUFFIX:oI,UPDATE_REMOTE_RESPONSE_STATUSES:mQ,CLUSTER_STATUS_STATUSES:SQ,REQUEST_SUBJECT:cQ,SUBJECT_PREFIXES:pQ,MSG_HEADERS:uQ,LOG_LEVELS:ji,LOG_LEVEL_FLAGS:RQ,LOG_LEVEL_HIERARCHY:TQ}});var uI=m((zoe,cI)=>{"use strict";var Pl=g(),vl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Pl.RAM_ALLOCATION_ENUM.DEFAULT,s=Pl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Jh=class extends vl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Pl.RAM_ALLOCATION_ENUM.DEFAULT,s=Pl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};cI.exports={BaseLicense:vl,ExtendedLicense:Jh}});var Va=m((Xoe,hI)=>{"use strict";var to=require("fs-extra"),lI=Ml(),_I=require("crypto"),gQ=require("moment"),AQ=require("uuid").v4,Ct=F(),Zh=require("path"),OQ=x(),gn=g(),NQ=uI().ExtendedLicense,eo="invalid license key format",bQ="061183",yQ="mofi25",IQ="aes-256-cbc",wQ=16,CQ=32,dI=Q();dI.initSync();var Xh;hI.exports={validateLicense:EI,generateFingerPrint:DQ,licenseSearch:fI,getLicense:PQ};function jh(){return Zh.join(dI.getHdbBasePath(),gn.LICENSE_KEY_DIR_NAME,gn.LICENSE_FILE_NAME)}a(jh,"getLicenseDirPath");function UQ(){let e=jh();return Zh.join(e,gn.LICENSE_FILE_NAME)}a(UQ,"getLicenseFilePath");function em(){let e=jh();return Zh.join(e,gn.REG_KEY_FILE_NAME)}a(em,"getFingerPrintFilePath");async function DQ(){let e=em();try{return await to.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await LQ();throw Ct.error(`Error writing fingerprint file to ${e}`),Ct.error(t),new Error("There was an error generating the fingerprint")}}a(DQ,"generateFingerPrint");async function LQ(){let e=AQ(),t=lI.hash(e),r=em();try{await to.mkdirp(jh()),await to.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ct.error(`Error writing fingerprint file to ${r}`),Ct.error(s),new Error("There was an error generating the fingerprint")}return t}a(LQ,"writeFingerprint");function EI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:gn.RAM_ALLOCATION_ENUM.DEFAULT,version:gn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ct.error("empty license key passed to validate."),r;let s=em(),n=!1;try{n=to.statSync(s)}catch(i){Ct.error(i)}if(n){let i;try{i=to.readFileSync(s,"utf8")}catch{Ct.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(yQ),c=o[1];c=Buffer.concat([Buffer.from(c)],wQ);let u=Buffer.concat([Buffer.from(i)],CQ),l=_I.createDecipheriv(IQ,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=MQ(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(eo),Ct.error(eo),new Error(eo)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(eo),Ct.error(eo),new Error(eo)}else r.exp_date=_;r.exp_date<gQ().valueOf()&&(r.valid_date=!1),lI.validate(o[1],`${bQ}${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||Ct.error("Invalid licence"),r}a(EI,"validateLicense");function MQ(e,t){try{let r=_I.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ct.warn("Check old license failed")}}a(MQ,"checkOldLicense");function fI(){let e=new NQ,t=[];try{t=to.readFileSync(UQ(),"utf-8").split(gn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ct.info("no license file found"):Ct.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(OQ.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=EI(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.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ct.error("There was an error parsing the license string."),Ct.error(n),e.ram_allocation=gn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Xh=e,e}a(fI,"licenseSearch");async function PQ(){return Xh||await fI(),Xh}a(PQ,"getLicense")});var Or=m((rae,DI)=>{"use strict";var RI="username is required",gI="nothing to update, must supply active, role or password to update",AI="password cannot be an empty string",OI="If role is specified, it cannot be empty.",NI="active must be true or false";DI.exports={addUser:VQ,alterUser:$Q,dropUser:KQ,getSuperUser:JQ,userInfo:WQ,listUsers:Hl,listUsersExternal:QQ,setUsersToGlobal:so,findAndValidateUser:UI,getClusterUser:XQ,USERNAME_REQUIRED:RI,ALTERUSER_NOTHING_TO_UPDATE:gI,EMPTY_PASSWORD:AI,EMPTY_ROLE:OI,ACTIVE_BOOLEAN:NI};var bI=Ar(),vQ=ci(),rm=Ml(),yI=iI(),II=gr(),sm=Gs(),cr=x(),wI=require("validate.js"),le=F(),{promisify:BQ}=require("util"),nm=Vs(),mI=g(),SI=Be(),HQ=Tr(),joe=Q(),eae=Va(),qQ=Jn(),{table:tae}=(de(),te(Ne)),{handleHDBError:ls,hdb_errors:FQ}=W(),{HTTP_STATUS_CODES:_s,AUTHENTICATION_ERROR_MSGS:tm,HDB_ERROR_MSGS:ro}=FQ,{UserEventMsg:im}=qr(),pI=require("lodash"),{_assignPackageExport:GQ}=require("../index");GQ("getUser",UI);var CI={username:!0,active:!0,role:!0,password:!0},TI=new Map,Bl=II.searchByValue,xQ=II.searchByHash,kQ=BQ(vQ.delete);async function VQ(e){let t=wI.cleanAttributes(e,CI),r=yI.addUserValidation(t);if(r)throw ls(new Error,r.message,_s.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 Bl(s),n=n&&Array.from(n)}catch(u){throw le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw ls(new Error,ro.ROLE_NAME_NOT_FOUND(t.role),_s.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ls(new Error,ro.DUP_ROLES_FOUND(t.role),_s.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=nm.encrypt(t.password)),t.password=rm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await bI.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await so()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw ls(new Error,ro.USER_ALREADY_EXISTS(t.username),_s.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],sm.signalUserChange(new im(process.pid)),`${c.username} successfully added`}a(VQ,"addUser");async function $Q(e){let t=wI.cleanAttributes(e,CI);if(cr.isEmptyOrZeroLength(t.username))throw new Error(RI);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(gI);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(AI);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(NI);let r=YQ(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=nm.encrypt(t.password)),t.password=rm.hash(t.password)),t.role==="")throw new Error(OI);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Bl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=ro.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),ls(new Error,c,_s.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ro.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),ls(new Error,c,_s.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await bI.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await so()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return sm.signalUserChange(new im(process.pid)),n}a($Q,"alterUser");function YQ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(YQ,"isClusterUser");async function KQ(e){try{let t=yI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw ls(new Error,ro.USER_NOT_EXIST(e.username),_s.NOT_FOUND,void 0,void 0,!0);let s;try{s=await kQ(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await so()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return sm.signalUserChange(new im(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(KQ,"dropUser");async function WQ(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 xQ(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(WQ,"userInfo");async function QQ(){let e;try{e=await Hl()}catch(t){throw le.error("Got an error listing users."),le.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(QQ,"listUsersExternal");async function Hl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Bl(e)}catch(o){throw le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=pI.cloneDeep(o);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 Bl(s)}catch(o){throw le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=pI.cloneDeep(o),o.role=r[o.role],zQ(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(Hl,"listUsers");function zQ(e){try{if(!e){le.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(qQ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(zQ,"appendSystemTablesToRole");async function so(){try{let e=await Hl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(so,"setUsersToGlobal");async function UI(e,t,r=!0){global.hdb_users||await so();let s=global.hdb_users.get(e);if(!s)throw ls(new Error,tm.GENERIC_AUTH_FAIL,_s.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ls(new Error,tm.USER_INACTIVE,_s.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(TI.get(t)===s.password)return n;if(rm.validate(s.password,t))TI.set(t,s.password);else throw ls(new Error,tm.GENERIC_AUTH_FAIL,_s.UNAUTHORIZED,void 0,void 0,!0)}return n}a(UI,"findAndValidateUser");async function JQ(){global.hdb_users||await so();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(JQ,"getSuperUser");async function XQ(){let e=await Hl(),t=HQ.getConfigFromFile(mI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.isEmpty(r)&&r?.role?.role===mI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=nm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+SI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+SI.SERVER_SUFFIX.ADMIN,r}a(XQ,"getClusterUser")});var Ya=m((oae,vI)=>{"use strict";var ui=F(),ur=g(),ZQ=tO(),nae=pn(),iae=si(),jQ=Or(),{validateEvent:LI}=qr(),$a=kr(),ez=require("process"),{resetDatabases:tz}=(de(),te(Ne)),rz={[ur.ITC_EVENT_TYPES.SCHEMA]:sz,[ur.ITC_EVENT_TYPES.USER]:PI};async function sz(e){let t=LI(e);if(t){ui.error(t);return}ui.trace("ITC schemaHandler received schema event:",e),await ZQ(e.message),await nz(e.message)}a(sz,"schemaHandler");async function nz(e){try{$a.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),$a.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),$a.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=tz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ui.error(t)}}a(nz,"syncSchemaMetadata");var MI=[];async function PI(e){try{try{$a.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),$a.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ui.warn(r)}let t=LI(e);if(t){ui.error(t);return}ui.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${ez.pid} received user event:`,e),await jQ.setUsersToGlobal();for(let r of MI)r()}catch(t){ui.error(t)}}a(PI,"userHandler");PI.addListener=function(e){MI.push(e)};vI.exports=rz});var qr=m((dae,HI)=>{"use strict";var cae=F(),om=x(),iz=g(),{ITC_ERRORS:Ka}=rr(),{parentPort:uae,threadId:oz,isMainThread:az,workerData:lae}=require("worker_threads"),{onMessageFromWorkers:cz,broadcast:_ae,broadcastWithAcknowledgement:uz}=tt();HI.exports={sendItcEvent:lz,validateEvent:BI,SchemaEventMsg:_z,UserEventMsg:dz};var ql;cz(async(e,t)=>{ql=ql||Ya(),BI(e),ql[e.type]&&await ql[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function lz(e){return!az&&e.message&&(e.message.originator=oz),uz(e)}a(lz,"sendItcEvent");function BI(e){if(typeof e!="object")return Ka.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||om.isEmpty(e.type))return Ka.MISSING_TYPE;if(!e.hasOwnProperty("message")||om.isEmpty(e.message))return Ka.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||om.isEmpty(e.message.originator))return Ka.MISSING_ORIGIN;if(iz.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ka.INVALID_EVENT(e.type)}a(BI,"validateEvent");function _z(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(_z,"SchemaEventMsg");function dz(e){this.originator=e}a(dz,"UserEventMsg")});var Gs=m((hae,xI)=>{"use strict";var qI=g(),fae=x(),Fl=F(),FI=HA(),no,{sendItcEvent:GI}=qr();function Ez(e){try{Fl.trace("signalSchemaChange called with message:",e),no=no||Ya();let t=new FI(qI.ITC_EVENT_TYPES.SCHEMA,e);return no.schema(t),GI(t)}catch(t){Fl.error(t)}}a(Ez,"signalSchemaChange");function fz(e){try{Fl.trace("signalUserChange called with message:",e),no=no||Ya();let t=new FI(qI.ITC_EVENT_TYPES.USER,e);return no.user(t),GI(t)}catch(t){Fl.error(t)}}a(fz,"signalUserChange");xI.exports={signalSchemaChange:Ez,signalUserChange:fz}});var um={};Ye(um,{coerceType:()=>Gl,makeTable:()=>kl,setServerUtilities:()=>Tz});function kl(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),PA(i,u);let T=0,S,y,O={},H,Y,A,w;for(let z of h)(z.assignCreatedTime||z.name==="__createdtime__")&&(H=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(Y=z),z.expiresAt&&(A=z),z.isPrimaryKey&&(O=z);let G;E&&pR();class k extends mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=H;static updatedTimeProperty=Y;static dbisDB=_;static schemaDefined=l;static sourcedFrom(p,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(p,this.sourceOptions);else if(p.mergeSource)this.Source=p.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=p;return(async()=>{let L=!1,b=a(async C=>{let v=C.value,U=C.table?He[c][C.table]:k;if(c===$r.SYSTEM_SCHEMA_NAME&&(C.table===$r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=v[U.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let M=await U.getResource(C.id,C,Wa);switch(C.type){case"put":return M._writeUpdate(v,Wa);case"delete":return M._writeDelete(Wa);case"publish":return M._writePublish(v,Wa);case"invalidate":return M.invalidate(Wa);default:di.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe&&(!p.subscribe.reliesOnPrototype||p.prototype.subscribe);C&&f==null&&(f=!0);let v=p.subscribeOnThisThread?p.subscribeOnThisThread((0,_i.getWorkerIndex)()):(0,_i.getWorkerIndex)()===0,U=C&&v&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U)for await(let M of U)try{if(!(M.type==="transaction"?M.writes[0]:M)){console.error("Bad subscription event");continue}let J=Ke(M,()=>{if(M.type==="transaction"){let Z=[];for(let K of M.writes){K[Oe]=M;try{Z.push(b(K))}catch(re){throw re.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(M),re}}return Promise.all(Z)}else if(M.type==="define_schema"){let Z=this.attributes.slice(0),K;for(let re of M.attributes)Z.find(De=>De.name===re.name)||(Z.push(re),K=!0);K&&(rt({table:n,database:c,attributes:Z,origin:"cluster"}),Ja.signalSchemaChange(new Xa.SchemaEventMsg(process.pid,$r.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(M)});M.onCommit&&(J?.then&&L&&Ja.signalUserChange(new Xa.UserEventMsg(process.pid)),J?.then?J.then(M.onCommit):M.onCommit())}catch(V){console.error("error in subscription handler",V)}}catch(C){console.error(C)}})(),this}static getResource(p,N,L){let b=super.getResource(p,N,L);if(p!=null)try{if(b.hasOwnProperty(ce))return b;let C=b._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let v,U,V={transaction:C?.getReadTxn()},J;return ut(p,N,V,(Z,K)=>{K?U(K):(b[ce]=Z?.value,b[xt]=Z?.version,J=!0,v?.(b))}),J?b:new Promise((Z,K)=>{v=Z,U=K})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return b}static setTTLExpiration(p){(0,_i.getWorkerIndex)()===0&&(d=p*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:L,version:b}of this.primaryStore.getRange({start:!1,versions:!0}))b<Date.now()-d&&b>0&&L?.__invalidated__==null&&k.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,pR(),k.audit=!0}static coerceId(p){return p===""?null:Gl(p,O)}static async dropTable(){if(delete He[c][n],c===o){for(let p in r)_.remove(k.tableName+"/"+p),r[p].drop();_.remove(k.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Ja.signalSchemaChange(new Xa.SchemaEventMsg(process.pid,$r.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(p,N){return p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(p,N)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[vs])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.read){let b=L[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let v=am(b,"read");N.select=C.filter(U=>v[U])}else N.select=b.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(p,N,L){if(!p)return!1;let b=p.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let v=am(C,"update");for(let U in N)if(!v[U])return!1;if(L)for(let U of C){let M=U.attribute_name;!U.update&&!(M in N)&&(N[M]=this.getProperty(M))}}else return!0}}allowCreate(p,N){return this.allowUpdate(p,{})}static allowCreate(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let b=L[n].attribute_permissions;if(b){let C=am(b,"insert");for(let v in N)if(!C[v])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let N=p.role.permission;if(N.super_user||N[n]?.delete)return!0}update(p,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;if(typeof p=="object"&&p){if(N)for(let C in this[ce])p[C]===void 0&&(p[C]=void 0);b=this[ht],b&&(p=Object.assign(b,p)),this[ht]=b=p}return!this[ce]&&t&&!(b||(b=this[ht]))?.[t]&&(b||(b=this[ht]=Object.create(null)),b[t]=this[ie]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ie],store:i,invalidated:!0,lastVersion:this[xt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let V in r)C[V]=this.getProperty(V);let v=k.Source,U,M=this[ie];return p?.isNotification||v?.invalidate&&(!v.invalidate.reliesOnPrototype||v.prototype.invalidate)&&(U=v.invalidate(M,this)),i.put(this[ie],C,L),{type:E&&"invalidate",[Qn]:U}}})}static evict(p,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let v=i.getEntry(p);if(!v)return;N=v.value,L=v.version}if(N)for(let v in r)C||(C={__invalidated__:0}),C[v]=N[v];return C?i.put(p,C,L,L):i.remove(p,L)}else return i.remove(p,L)}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=n,p.schema||=c,zI.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let L=this._txnForRequest();if(this[ie]===void 0)throw new Error("Can not save record without an id");let b=this[ce],C,v,U=this[ie];b||(this[ce]={}),L.addWrite({key:U,store:i,lastVersion:this[xt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(M,V)=>{let J;if(V){if(C)return;let K=i.getEntry(U);b=K?.value;let re=this[Oe];re&&K?.version>(re.lastModified||0)&&(re.lastModified=K.version)}if(!v){if(v=!0,N?.isNotification)p=_a(p);else{if(p[$I]&&(C=!vu(p),C))return;t&&p[t]!==U&&(p[t]=U),Y&&(p[Y.name]=Y.type==="Date"?new Date(M):Y.type==="String"?new Date(M).toISOString():M),H&&(b?p[H.name]=b[H.name]:p[H.name]=H.type==="Date"?new Date(M):H.type==="String"?new Date(M).toISOString():M),p=_a(p);let K=k.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(J=K.put(U,p,this))}if(p[ce])throw new Error("Can not assign a record with a record property");this[ce]=p}if(di.trace("Checking timestamp for put",U,this[xt]>M,this[xt],M),this[xt]>M)return E&&{type:"put",value:i.encoder.encode(p)};let Z=i.encoder.encode(p);return i.put(this[ie],(0,io.asBinary)(Z),M),ge(this[ie],b,p),b===null&&!V&&xn(-1),{type:E&&"put",value:Z,[Qn]:J}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ce]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),L,b=this[ie],C;return N.addWrite({key:b,store:i,lastVersion:this[xt],nodeName:this[Oe]?.nodeName,commit:(v,U)=>{let M=this[ce];if(U){let V=i.getEntry(b);M=V?.value;let J=this[Oe];J&&V?.version>(J.lastModified||0)&&(J.lastModified=V.version)}if(!L&&(L=!0,!p?.isNotification)){let V=k.Source;V?.delete&&(!V.delete.reliesOnPrototype||V.prototype.delete)&&(C=V.delete(b,this))}if(!(this[xt]>v))return ge(this[ie],M),di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ie],null,v),E||SR(),U||xn(1)):i.remove(this[ie]),{type:E&&"delete",[Qn]:C}}}),!0}search(p){let N=this._txnForRequest();if(!p)throw new Error("No query provided");let L=p.reverse===!0,b=p.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ie]&&(b=[{attribute:null,comparator:"prefix",value:this[ie]}].concat(b));for(let K of b){let re=K[0]??K.attribute,De=re==null?O:h.find(on=>on.name==re);if(De)De.type&&(K[1]===void 0?K.value=C(K.value,De):K[1]=C(K[1],De));else if(re!=null)throw(0,li.handleHDBError)(new Error,`${re} is not a defined attribute`,404)}function C(K,re){return Array.isArray(K)?K.map(De=>Gl(De,re)):Gl(K,re)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,WI.sortBy)(b,K=>{if(K.estimated_count===void 0){let re=K.comparator||K.search_type;if(re===Qa.SEARCH_TYPES.EQUALS){let De=K[0]??K.attribute;if(De==null||De===t)K.estimated_count=1;else{let on=r[De];K.estimated_count=on?on.getValuesCount(K[1]??K.value):1/0}}else re===Qa.SEARCH_TYPES.CONTAINS||re===Qa.SEARCH_TYPES.ENDS_WITH||re==="ne"?K.estimated_count=1/0:re===Qa.SEARCH_TYPES.STARTS_WITH||re==="prefix"?K.estimated_count=mz:K.estimated_count=hz}return K.estimated_count}));let v=N.getReadTxn();v.use();let U=p.select,M=b[0],V;if(!M)V=i.getRange(L?{end:!1,reverse:!0,transaction:v,lazy:U?.length<4}:{start:!1,transaction:v,lazy:U?.length<4}).map(({value:K})=>K?new Promise(re=>setImmediate(()=>re(K))):io.SKIP);else{let K=WE(M,v,L,k,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let re=b.slice(1).map(QE);V=Z(K,re)}else{for(let De=1;De<b.length;De++){let on=b[De],fE=WE(on,v,L,k,p.allowFullScan);K=K.concat(fE)}let re=new Set;K=K.filter(De=>re.has(De)?!1:(re.add(De),!0)),V=Z(K)}}(p.offset||p.limit!==void 0)&&(V=V.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),V.onDone=()=>{v.done()};let J=this[Oe];function Z(K,re){let De=re?.length,on={transaction:v,lazy:De>0||U?.length<4,alwaysPrefetch:!0};return K.map(fE=>new Promise(hE=>ut(fE,J,on,eH=>{let mE=eH?.value;if(!mE)return hE(io.SKIP);for(let SE=0;SE<De;SE++)if(!re[SE](mE))return hE(io.SKIP);hE(mE)})))}return a(Z,"idsToRecords"),V}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||rt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=MA(k,this[ie]??null,function(v,U,M){try{this.send({id:v,timestamp:M,...U})}catch(V){console.error(V)}},p.startTime,this[vs]),L=this[ie],b=p.previousCount;b>1e3&&(b=1e3);let C=p.startTime;if(this[vs]){if(C){if(b)throw new li.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:U}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[M,V,J]=v;if(v.length>3&&(J=v.slice(2)),V!==s)continue;let Z=dn(U,i);(L==null||KI(L,J))&&N.send({id:J,timestamp:M,...Z}),N.startTime=M}}else if(b){let v=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[V,J,Z]=U;if(U.length>3&&(Z=U.slice(2)),J!==s)continue;if(L==null||KI(L,Z)){let K=dn(M,i);if(v.push({id:Z,timestamp:V,...K}),--b<=0)break}}catch(V){di.error("Error getting history entry",U,V)}for(let U=v.length;U>0;)N.send(v[--U]);v[0]&&(N.startTime=v[0].timestamp)}else if(!p.omitCurrent)for(let{key:v,value:U,version:M}of i.getRange({start:L??!1,end:L==null?void 0:[L,QI.MAXIMUM_KEY],versions:!0}))U&&N.send({id:v,timestamp:M,value:U})}else{b&&!C&&(C=0);let v=this[xt];if(C<v){let U=[],M=v;do{let V=[M,s,L],J=u.get(V);if(J){p.omitCurrent=!0;let Z=dn(J,i);U.push({id:L,timestamp:M,...Z}),M=Z.lastVersion}else break;b&&b--}while(M>C&&b!==0);for(let V=U.length;V>0;)N.send(U[--V]);N.startTime=v}!p.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[xt],value:this})}return p.listener&&N.on("data",p.listener),N}doesExist(){return!!this[ce]}async publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let L=this._txnForRequest(),b=this[ie]||null,C,v;L.addWrite({store:i,key:b,lastVersion:this[xt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(U,M)=>{if(this.validate(p),!v&&(v=!0,!N?.isNotification)){let Z=k.Source;Z?.publish&&(!Z.publish.reliesOnPrototype||Z.prototype.publish)&&(C=Z.publish(b,p,this))}let V=M>0?i.get(b):this[ce];V===void 0&&!M&&(E||f)&&(E||SR(),xn(1));let J={type:"message",value:i.encoder.encode(p),[Qn]:C};return!L.hasWrittenTime&&this[xt]>U&&(U=J.newTxnTime=this[xt]+.001),i.put(b,V??null,U),J}})}_txnForRequest(){let p=this[Oe],N=p?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new Ea(i,p.user,u)),L}else return new Ku(i,p.user,u)}validate(p){let N;for(let L=0,b=h.length;L<b;L++){let C=h[L];if(C.type){let v=p[C.name];if(v!=null)switch(C.type){case"Int":case"Float":(typeof v!="number"||C.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(U=>typeof U=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${C.name} must be a string`)}}C.required&&p[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new li.ClientError(N.join(". "))}getUpdatedTime(){return this[xt]}static async addAttributes(p){let N=h.slice(0);for(let L of p){if(!L.name)throw new li.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new li.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static async removeAttributes(p){let N=h.filter(L=>!p.includes(L.name));return rt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static getRecordCount(){let p=0;for(let{key:N,value:L}of i.getRange({end:!1}))p++,N[0]?.description==="deletions"&&(p+=L||0);return i.getStats().entryCount-p}static updatedAttributes(){Hu(this,this)}static async deleteHistory(p=0){let N;for(let{key:L,value:b}of u.getRange({start:[0,0],end:[p,0]})){await new Promise(M=>setImmediate(M));let[C,v,U]=L;L.length>3&&(U=L.slice(2)),v===s&&(N=i.remove(U))}await N}static async*getHistory(p=0,N=1/0){for(let{key:L,value:b}of u.getRange({start:[p,0],end:[N,0]})){await new Promise(V=>setImmediate(V));let[C,v,U]=L;if(L.length>3&&(U=L.slice(2)),v!==s)continue;let M=dn(b,i);M.id=U,M.timestamp=C,yield M}}static async getHistoryOfRecord(p){let N=[],L=i.getEntry(p);if(!L)return N;let b=L.version,C=0;do{await new Promise(M=>setImmediate(M));let v=[b,s,p],U=u.get(v);if(U){let M=dn(U,i);M.timestamp=b,N.push(M),b=M.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){G?.remove()}}k.updatedAttributes();let X=k.prototype;return X[$I]=!0,d&&k.setTTLExpiration(d/1e3),A&&jB(),k;function ge(z,p,N){let L;for(let b in r){let C=r[b],v=C.isIndexing,U=N?.[b],M=p?.[b];if(U===M&&!v)continue;L=!0;let V=(0,za.getIndexedValues)(M);if(V){kI&&C.prefetch(V.map(J=>({key:J,value:z})),YI);for(let J=0,Z=V.length;J<Z;J++)C.remove(V[J],z)}if(V=(0,za.getIndexedValues)(U),V){kI&&C.prefetch(V.map(J=>({key:J,value:z})),YI);for(let J=0,Z=V.length;J<Z;J++)C.put(V[J],z)}}return L}a(ge,"updateIndices");function ut(z,p,N,L){let b=a(()=>{let C=N.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let v;C&&!C.hasRunLoadRecord&&(v=!0,C.hasRunLoadRecord=!0);let U;try{U=i.getEntry(z,N)}catch(Z){throw Z.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+v,console.error(Z),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),Z}let M,V,J;if(U?(p&&U?.version>(p.lastModified||0)&&(p.lastModified=U.version),V=U.version,M=U.value,(V<0||!M||typeof M.__invalidated__=="number"||d&&V<Date.now()-d)&&(J=!0)):J=!0,J&&!N?.allowInvalidated){let Z=k.Source;if(Z&&Z.get&&(!Z.get.reliesOnPrototype||Z.prototype.get))return Ko(z,M,V,p).then(re=>{if(re?.value?.[ce])throw new Error("Can not assign a record with a record property");L(re)},re=>{L(null,re)})}if(U?.value?.[ce])throw new Error("Can not assign a record with a record property");L(U)},"whenPrefetched");if(!N.alwaysPrefetch&&(z==null||i.cache?.get(z)))return b();i.prefetch([z],b)}a(ut,"loadRecord");function Pi(){w=new Set,(0,_i.onMessageByType)("transaction",z),i.on("aftercommit",z);function z(){for(let p of w)p()}a(z,"onCommit")}a(Pi,"setupCommitListeners");async function Ko(z,p=null,N,L){if(N<0){let U;return w||Pi(),await new Promise(M=>{let V,J=a(()=>{if(U=i.getEntry(z),!U||U.version>0){if(clearTimeout(V),w.delete(J),typeof U?.value?.__invalidated__=="number")return M(Ko(z,U.value,U.version,L));M(U)}},"listener");w.add(J),V=setTimeout(()=>{w.delete(J),M(Ko(z,U?.value,void 0,L))},1e4).unref()})}let b=p?.__invalidated__,C=-(N||1);i.put(z,p,C,N);let v={transaction:L?.transaction};try{let U=await k.Source.get(z,v),M=v.lastModified||N;(!M||d&&M<Date.now()-d)&&(M=(0,za.getNextMonotonicTime)());let J=ge(z,p,U)&&N||b>0;return U?(t&&(U[t]=z),typeof U.toJSON=="function"&&(U=U.toJSON()),i.put(z,U,M,C)):i.remove(z,C),J&&E&&u.put([M,s,z],Yu(b,null,U?{type:"put",value:i.encoder.encode(U)}:{type:"delete"})),{version:M,value:U}}catch(U){throw i.put(z,p,N,C),U}}a(Ko,"getFromSource");function xn(z){T||(T=i.get([VI,cm.threadId])||0),T+=z,y||(y=setTimeout(()=>{y=null,i.rootStore.status==="open"&&i.put([VI,cm.threadId],T)},50))}a(xn,"recordDeletion");function SR(){S||(S=setTimeout(()=>{if(S=null,i.rootStore.status==="open"){for(let{key:z,value:p}of i.getRange({start:!0}))if(p===null){let N=i.getEntry(z);N?.value===null&&i.remove(z,N.version),xn(-1)}}},k.getRecordCount()*100+pz).unref())}a(SR,"enqueueDeletionCleanup");function pR(){G=u?.addDeleteRemovalCallback(s,z=>{let p=i.getEntry(z);p?.value===null&&i.remove(z,p.version),xn(-1)})}a(pR,"addDeleteRemoval");function jB(){(0,_i.getWorkerIndex)()===0&&setInterval(async()=>{try{let z=A.name,p=r[z];if(!p)throw new Error(`expiresAt attribute ${A} must be indexed`);for(let{value:N}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(N);L.value?.[z]<Date.now()&&k.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(z){di.error("Error in evicting old records",z)}},Sz).unref()}a(jB,"runRecordExpirationEviction")}function am(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function YI(){}function Tz(e){zI=e}function Gl(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Rz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,xl.autoCast)(e)}function KI(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var $r,io,za,WI,cm,Qa,Za,li,Ja,Xa,di,QI,_i,xl,zI,hz,mz,Sz,kI,VI,xt,$I,Iae,Wa,pz,Rz,Vl=pe(()=>{$r=D(g()),io=require("lmdb"),za=D(qt()),WI=require("lodash"),cm=require("worker_threads");Zr();wA();Qa=D(xe()),Za=D(Q());vA();li=D(W()),Ja=D(Gs()),Xa=D(qr());de();xu();di=D(F());Fu();Wn();QI=require("ordered-binary"),_i=D(tt());da();xl=D(x()),hz=1e8,mz=1e7,Sz=6e4;Za.initSync();kI=Za.get($r.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),VI=Symbol.for("deletions"),xt=Symbol.for("version"),$I=Symbol.for("incremental-update"),Iae=Symbol("source-resource"),Wa={isNotification:!0,allowInvalidated:!0},pz=(0,xl.convertToMS)(Za.get($r.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(kl,"makeTable");a(am,"attributesAsObject");a(YI,"noop");a(Tz,"setServerUtilities");Rz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Gl,"coerceType");a(KI,"isDescendantId")});var Ne={};Ye(Ne,{database:()=>qa,databases:()=>He,dropDatabase:()=>Ch,dropTableMeta:()=>yz,getDatabases:()=>Gr,getTables:()=>gz,onUpdatedTable:()=>fm,readMetaDb:()=>ja,resetDatabases:()=>Az,table:()=>rt,tables:()=>_r});function gz(){return Wl||Gr(),_r||{}}function Gr(){if(Wl)return He;Wl=!0,uo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),t=(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,lr.existsSync)(e)?e:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,lr.existsSync)(e))for(let r of(0,lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ja((0,Me.join)(e,r.name),null,s)}if((0,lr.existsSync)((0,co.getBaseSchemaPath)())){for(let r of(0,lr.readdirSync)((0,co.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,co.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,co.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ja((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,lr.existsSync)(n))for(let o of(0,lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ja((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,lr.existsSync)(u)&&ja(u,o,r,null,!0)}}for(let r in He){let s=uo.get(r);if(s){let n=He[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete He[r],r==="data"){for(let n in _r)delete _r[n];delete _r[Ql]}}return uo=null,He}}function Az(){Wl=!1;for(let[,e]of An)e.needsDeletion=!0;Gr();for(let[e,t]of An)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),An.delete(e));return He}function ja(e,t,r=dm,s,n){let i=new lm.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=An.get(e);o?o.needsDeletion=!1:(o=(0,$l.open)(i),An.set(e,o));let c=new Ei.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(oo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,lr.existsSync)(s)&&(i.path=s,l=(0,$l.open)(i),l.isLegacy=!0):l=rf(o));let _=jI(r),d=_[Ql],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,S]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),S===""?S=h.name:S||(S=T,T=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(T);let y=E.get(T);y||E.set(T,y={attributes:[]}),(S==null||h.is_hash_attribute)&&(y.primary=h),S!=null&&y.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:S}=h;if(!S){for(let X of T)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let y=_[f],O={},H=[],Y,A,w=typeof S.audit=="boolean"?S.audit:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),G=S.trackDeletes,k=S.expiration;if(y)O=y.indices,H=y.attributes,y.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ao)||0)&&u.putSync(ao,Y+1):(S.tableId=Y=u.get(ao),Y||(Y=1),u.putSync(ao,Y+1),u.putSync(S.key,S));let X=new Ei.default(!S.is_hash_attribute,S.is_hash_attribute);Le.trace(`openDB ${S.key} from ${r}`),A=o.openDB(S.key,X),A.rootStore=o,A.tableId=Y}for(let X of T){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!O[X.name]){let ut=new Ei.default(!X.is_hash_attribute,X.is_hash_attribute);Le.trace(`openDB ${X.key} from ${r}`),O[X.name]=o.openDB(X.key,ut)}let ge=H.find(ut=>ut.name===X.name);ge?H.splice(H.indexOf(ge),1,X):H.push(X)}}catch(ge){Le.error("Error trying to update attribute",X,H,O,ge)}}if(!y){Le.trace(`creating table class ${f}`,Object.keys(_)),y=ew(_,f,kl({primaryStore:A,auditStore:l,audit:w,expirationMS:k&&k*1e3,trackDeletes:G,tableName:f,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:S.schemaDefined,dbisDB:u})),y.schemaVersion=1;for(let X of Em)X(y)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function jI(e){let t=He[e];if(t||(e==="data"?t=He[e]=_r:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),uo&&!uo.has(e)){let r=new Set;t[Ql]=r,uo.set(e,r)}return t}function ew(e,t,r){return e[t]=r,r}function qa({database:e,table:t}){e||(e=dm),Gr();let r=jI(e),s=(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||((0,lr.existsSync)(s)?s:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=An.get(i);if(!o){let c=new lm.default(i,!1);o=(0,$l.open)(c),An.set(i,o)}return o}async function Ch(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e];for(let r in t){let n=t[r].primaryStore.rootStore;An.delete(n.path),n.status==="open"&&(await n.close(),await JI.remove(n.path))}if(e==="data"){for(let r in _r)delete _r[r];delete _r[Ql]}delete He[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=dm);let u=qa({database:t,table:e}),l=He[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Ei.default(!1);for(let A of s)A.attribute?(A.name=A.attribute,A.indexed=!0):A.attribute=A.name,A.expiresAt&&(A.indexed=!0);let S,y;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let A=u.auditStore;A||(A=rf(u)),E=s.find(X=>X.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let w=new Ei.default(!1,!0),G=e+"/";Le.trace(`openDB ${G} from ${t}`);let k=u.openDB(G,w);k.rootStore=u,Le.trace(`openDB ${oo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(oo.INTERNAL_DBIS_NAME,T),k.tableId=h.get(ao),k.tableId||(k.tableId=1),h.putSync(ao,k.tableId+1),E.tableId=k.tableId,_=ew(l,e,kl({primaryStore:k,auditStore:A,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,S=!0,Y(),h.put(G,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${oo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(oo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:A,value:w}of h.getRange({start:!0})){let[G,k]=A.toString().split("/");if(k===""&&(k=w.name),k){if(G!==e)continue}else k=G;if(!s.find(ge=>ge.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){Y(),S=!0,h.remove(A);let ge=_.indices[G];ge&&O.push(ge)}}Le.trace(`${e} table loading, comparing atributes`);let H=[];try{for(let A of s||[]){let w=e+"/"+(A.name||"");Object.defineProperty(A,"key",{value:w,configurable:!0});let G=h.get(w);if(A.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),G||(w=e+"/",G=h.get(w));let X=Object.assign({},G,{audit:!0});S=!0,Y(),h.put(w,X)}continue}G?.attribute&&!G.name&&(G.indexed=!0);let k=!G||G.type!==A.type||G.indexed!==A.indexed||JSON.stringify(G.attributes)!==JSON.stringify(A.attributes)||JSON.stringify(G.elements)!==JSON.stringify(A.elements);if(A.indexed){let X=new Ei.default(!0,!1);Le.trace(`openDB ${w} from ${t}`);let ge=u.openDB(w,X);(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<ec.workerData?.restartNumber)&&(S=!0,Y(),G=h.get(w),(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<ec.workerData?.restartNumber)&&(S=!0,A.lastIndexedKey=G?.lastIndexedKey||!1,A.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(A,"dbi",{value:ge}),H.push(A)),h.put(w,A)),f[A.name]=ge}else k&&(S=!0,Y(),h.put(w,A))}}finally{y&&y()}if(S&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),H.length>0||O.length>0?_.indexingOperation=bz(_,H,O):S&&Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,S)for(let A of Em)A(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function Y(){y||u.transactionSync(()=>({then(A){y=A}}))}a(Y,"startTxn")}async function bz(e,t,r){try{let s=e.schemaVersion;await Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,XI.getIndexedValues)(_[h]);if(T)for(let S=0,y=T.length;S<y;S++)f.dbi.put(T[S],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),ec.workerData&&ec.workerData.restartNumber!==ZI.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Oz?await n:u>Nz&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function yz({table:e,database:t}){let r=qa({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function fm(e){Em.push(e)}var Tt,oo,$l,Me,lr,co,Ei,lm,kt,JI,_m,XI,Yl,Kl,ec,Le,ZI,dm,Ql,_r,He,ao,Em,Wl,An,uo,Oz,Nz,de=pe(()=>{Tt=D(Q()),oo=D(xe()),$l=require("lmdb"),Me=require("path"),lr=require("fs"),co=D(we());Vl();Ei=D(zu()),lm=D(Xu()),kt=D(g()),JI=D(require("fs-extra")),_m=require("../index"),XI=D(qt()),Yl=D(Gs()),Kl=D(qr()),ec=require("worker_threads"),Le=D(F()),ZI=D(tt());da();dm="data",Ql=Symbol("defined-tables");(0,Tt.initSync)();_r=Object.create(null),He=Object.create(null);(0,_m._assignPackageExport)("databases",He);(0,_m._assignPackageExport)("tables",_r);ao=Symbol.for("next-table-id"),Em=[],An=new Map;a(gz,"getTables");a(Gr,"getDatabases");a(Az,"resetDatabases");a(ja,"readMetaDb");a(jI,"ensureDB");a(ew,"setTable");a(qa,"database");a(Ch,"dropDatabase");a(rt,"table");Oz=1e3,Nz=10;a(bz,"runIndexing");a(yz,"dropTableMeta");a(fm,"onUpdatedTable")});var Sm={};Ye(Sm,{loadGQLSchema:()=>wz,start:()=>mm,startOnMainThread:()=>Iz});function mm({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let Y=function(A){if(A.kind==="NonNullType"){let G=Y(A.type);return G.nullable=!0,G}return A.kind==="ListType"?{type:"array",elements:Y(A.type)}:{type:A.name?.value}};a(Y,"getProperty");let S=T.name.value,y=[],O={table:null,database:null,properties:y};E.set(S,O);for(let A of T.directives){if(A.name.value==="table"){for(let w of A.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=S),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(A.name.value==="sealed"&&(O.sealed=!0),A.name.value==="export"){O.export=!0;for(let w of A.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let H=!1;for(let A of T.fields){let w=Y(A.type);w.name=A.name.value,y.push(w);for(let G of A.directives)if(G.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,H=!0);else if(G.name.value==="indexed")w.indexed=!0;else if(G.name.value==="createdTime")w.assignCreatedTime=!0;else if(G.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(G.name.value==="expiresAt")w.expiresAt=!0;else if(G.name.value==="allow"){let k=w.authorizedRoles=[];for(let X of G.arguments)X.name.value==="role"&&k.push(X.value.value)}}O.typeName=S,S==="Query"&&(h=O)}for(let[T,S]of E)for(let y of S.properties){let O=E.get(y.type);O&&(y.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,hm.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let S=E.get(T.type);if(!S)throw new Error(`${T.type} was not found as a Query export`);i.set((0,hm.dirname)(s)+"/"+T.name,S.tableClass)}}}var hm,Iz,wz,tw=pe(()=>{hm=require("path");de();a(mm,"start");Iz=mm,wz=mm({ensureTable:rt}).handleFile});async function zl(e){return Cz?(tc||(tc=Uz(Lz)),(await(await tc).import(e)).namespace):import(e)}async function Uz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),tc=new Compartment({console,Math,Date,fetch:Dz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,sw.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:_r,databases:He})}};let s=await(0,rw.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),tc}function Dz(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Lz(){return{Resource:mt,tables:_r}}var rw,sw,Cz,tc,pm=pe(()=>{Zr();de();rw=require("fs/promises"),sw=require("path"),Cz=!1;a(zl,"secureImport");a(Uz,"getCompartment");a(Dz,"secureOnlyFetch");a(Lz,"getGlobalVars")});var Rm={};Ye(Rm,{handleFile:()=>Mz});async function Mz(e,t,r,s){let n=new Map,i=(0,nw.pathToFileURL)(r).toString(),o=await zl(i);u(o.default)&&s.set((0,Tm.dirname)(t),o.default),c(o,(0,Tm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var nw,Tm,iw=pe(()=>{nw=require("url");pm();Tm=require("path");a(Mz,"handleFile")});var Am={};Ye(Am,{start:()=>Pz});function Pz({resources:e}){e.set("login",gm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var gm,ow=pe(()=>{Zr();a(Pz,"start");gm=class extends mt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var Nm=m((Yae,uw)=>{"use strict";var{Readable:vz}=require("stream"),Bz=1e4;uw.exports={streamAsJSON(e){return new Om({value:e})}};var Om=class extends vz{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),aw)}catch(n){yield aw(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);cw(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Bz?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return cw(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};function aw(e){return console.error(e),JSON.stringify(e.toString())}a(aw,"handleError");function cw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(cw,"when")});var Jl=m((Wae,lw)=>{"use strict";var Hz=kr();lw.exports={writeTransaction:qz};function qz(e,t,r){return Hz.writeTransaction(e,t,r)}a(qz,"writeTransaction")});var fw=m((Jae,Ew)=>{"use strict";var Fz=gr(),Gz=pn(),_w=F(),xz=Ar(),zae=Jl(),kz=require("clone"),ym=require("alasql"),Vz=Al(),dw=require("util"),$z=dw.promisify(Gz.getTableSchema),Yz=dw.promisify(Fz.search),Kz=g(),bm=x();Vz(ym);Ew.exports={update:Qz};var Wz="There was a problem performing this update. Please check the logs and try again.";async function Qz({statement:e,hdb_user:t}){let r=await $z(e.table.databaseid,e.table.tableid),s=zz(e.columns);bm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=kz(n),c=bm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=ym.parse(u).statements[0],_=await Yz(l),d=Jz(s,_);return Xz(o,d,t)}a(Qz,"update");function zz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=ym.compile(`SELECT ${r.expression.toString()} AS [${Kz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw _w.error(t),new Error(Wz)}}a(zz,"createUpdateRecord");function Jz(e,t){return bm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Jz,"buildUpdateRecords");async function Xz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await xz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){_w.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Xz,"updateRecords")});var mw=m((ece,hw)=>{var Zz=require("alasql"),jz=gr(),eJ=F(),tJ=kr(),wm=require("util"),Im=x(),rJ=g(),sJ=pn(),Zae=Jl(),jae=Ar(),nJ="record",iJ="successfully deleted",oJ=wm.callbackify(lJ),aJ=wm.promisify(jz.search),cJ=wm.promisify(sJ.getTableSchema);hw.exports={convertDelete:oJ};function uJ(e){return`${e.deleted_hashes.length} ${nJ}${e.deleted_hashes.length===1?"":"s"} ${iJ}`}a(uJ,"generateReturnMessage");async function lJ({statement:e,hdb_user:t}){let r=await cJ(e.table.databaseid,e.table.tableid);Im.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Im.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Zz.parse(o).statements[0],u={operation:rJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await aJ(c);let l=await tJ.deleteRecords(u);return Im.isEmptyOrZeroLength(l.message)&&(l.message=uJ(l)),delete l.txn_time,l}catch(l){throw eJ.error(l),l.hdb_code?l.message:l}}a(lJ,"convertDelete")});var gw=m((rce,Rw)=>{"use strict";var _J=si(),{hdb_errors:Sw}=W(),{getDatabases:pw}=(de(),te(Ne));Rw.exports={checkSchemaExists:Tw,checkSchemaTableExists:dJ,schema_describe:_J};async function Tw(e){if(!pw()[e])return Sw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Tw,"checkSchemaExists");async function dJ(e,t){let r=await Tw(e);if(r)return r;if(!pw()[e][t])return Sw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(dJ,"checkSchemaTableExists")});var rc=m((nce,EJ)=>{EJ.exports={name:"harperdb",version:"4.2.0-alpha.11",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.12","nats-server":"2.9.21"},exports:{".":"./index.js"},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/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../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.382.0","@aws-sdk/lib-storage":"3.382.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.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.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.2",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",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",eventsource:"^2.0.2","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",mqtt:"~4.3.7",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","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var r_={};Ye(r_,{addAnalyticsListener:()=>Lm,recordAction:()=>hi,recordActionBinary:()=>t_,setAnalyticsEnabled:()=>fJ});function fJ(e){Dw=e}function hi(e,t,r,s,n){if(!Dw)return;let i=t+"-"+r;s&&(i+="-"+s);let o=jl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},jl.set(i,o)),Zl||hJ()}function t_(e,t,r,s,n){hi(e?1:0,t,r,s,n)}function Lm(e){Mw.push(e)}function hJ(){Zl=performance.now(),setTimeout(()=>{let e=performance.now()-Zl;Zl=0;let t=[],r={time:Date.now(),period:e,threadId:fi.threadId,metrics:t};for(let[n,i]of jl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:fi.threadId,...s});for(let n of Mw)n(t);jl=new Map,fi.parentPort?fi.parentPort.postMessage({type:Lw,report:r}):vw({report:r})},Dm).unref()}async function mJ(e,t=6e4){let r=Mm(),s;for(let _ of r.primaryStore.getRange({start:Xl+"z",end:Xl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:S,metric:y,count:O,threadId:H,...Y}=f;O||(O=1);let A=y+(h?"-"+h:"");T&&(A+="-"+T);let w=i.get(A);if(w)for(let G in Y){let k=Y[G];if(typeof k=="number"){let X=w.count||1;w[G]=(w[G]*X+k*O)/(w.count=X+O)}}else w=Object.assign({period:t},f),i.set(A,w)}await SJ()}for(let[_,d]of i)d.id=Xl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Xl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-Aw,active:l-Ow,time:c}),Aw=u,Ow=l}async function pJ(e,t){let r=Mm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function Mm(){return Nw||(Nw=rt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function RJ(){Pw=!0,setInterval(async()=>{await mJ(Dm,Um),await pJ(TJ,Dm)},Um/2).unref()}function vw(e,t){let r=e.report;r.threadId=t?.threadId||fi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(bw+=s.mean*s.count);r.totalBytesProcessed=bw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(yw.get(t))}),yw.set(t,t.performance.eventLoopUtilization())),r.id=(0,Cw.getNextMonotonicTime)(),Mm().put(r),Pw||RJ(),gJ&&(Bw=OJ(r))}async function OJ(e){if(await Bw,!On){let r=(0,sc.dirname)((0,ww.getLogFilePath)());try{On=await(0,Cm.open)((0,sc.join)(r,"analytics.log"),"r+")}catch{On=await(0,Cm.open)((0,sc.join)(r,"analytics.log"),"w+")}}let t=(await On.stat()).size;if(t>AJ){let r=Buffer.alloc(t);await On.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await On.write(r,{position:0}),await On.truncate(r.length),t=r.length}await On.write(JSON.stringify(e)+`
6
- `,t)}var fi,Iw,ww,sc,Cm,Cw,e_,Uw,jl,Um,Dw,Zl,Dm,Lw,Mw,Xl,Aw,Ow,SJ,TJ,Nw,Pw,bw,yw,gJ,Bw,On,AJ,lo=pe(()=>{fi=require("worker_threads"),Iw=D(tt());de();ww=D(F()),sc=require("path"),Cm=require("fs/promises"),Cw=D(qt()),e_=D(Q()),Uw=D(g());(0,e_.initSync)();jl=new Map,Um=(0,e_.get)(Uw.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,Dw=Um>0;a(fJ,"setAnalyticsEnabled");a(hi,"recordAction");a(t_,"recordActionBinary");Zl=0,Dm=1e3,Lw="analytics-report",Mw=[];a(Lm,"addAnalyticsListener");a(hJ,"sendAnalytics");Xl="sum-";a(mJ,"aggregation");Aw=0,Ow=0,SJ=a(()=>new Promise(setImmediate),"rest");a(pJ,"cleanup");TJ=36e5;a(Mm,"getAnalyticsTable");(0,Iw.setChildListenerByType)(Lw,vw);a(RJ,"startScheduledTasks");bw=0,yw=new Map,gJ=!1;a(vw,"recordAnalytics");AJ=1e6;a(OJ,"logAnalytics")});var st=m((Sce,tC)=>{"use strict";var Rt=Q();Rt.initSync();var NJ=require("fs-extra"),bJ=require("semver"),ac=require("path"),{monotonicFactory:yJ}=require("ulidx"),Hm=yJ(),IJ=require("util"),qw=require("child_process"),wJ=IJ.promisify(qw.exec),CJ=qw.spawn,_e=Be(),Te=g(),s_=x(),Nr=F(),n_=Vs(),UJ=Jl(),nc=Tr(),{Encoder:DJ,decode:qm}=require("msgpackr"),Fw=new DJ,{isEmpty:mi}=s_,Gw=Or(),xw=12e10,LJ=48*36e11,MJ=5e9,{connect:PJ,StorageType:kw,RetentionPolicy:Vw,AckPolicy:i_,DeliverPolicy:o_,DiscardPolicy:vJ,NatsConnection:Ece,JetStreamManager:fce,JetStreamClient:hce,StringCodec:mce,JSONCodec:BJ,createInbox:Fm,headers:HJ,ErrorCode:Hw}=require("nats"),{PACKAGE_ROOT:qJ}=g(),FJ=rc(),{recordAction:GJ}=(lo(),te(r_)),$w=BJ(),xJ="clustering",kJ=FJ.engines[_e.NATS_SERVER_NAME],VJ=ac.join(qJ,"dependencies"),Bm=ac.join(VJ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),Pm,vm,ic,_o,Eo;tC.exports={runCommand:Yw,checkNATSServerInstalled:$J,createConnection:Gm,getConnection:a_,getJetStreamManager:cc,getJetStream:Kw,getNATSReferences:Vt,getServerList:KJ,createLocalStream:xm,listStreams:Ww,deleteLocalStream:WJ,getServerConfig:uc,listRemoteStreams:QJ,viewStream:zJ,viewStreamIterator:JJ,publishToStream:XJ,createWorkQueueStream:ZJ,addSourceToWorkStream:zw,request:e2,removeSourceFromWorkStream:Xw,reloadNATS:km,reloadNATSHub:t2,reloadNATSLeaf:r2,extractServerName:Jw,requestErrorHandler:s2,updateWorkStream:n2,createLocalTableStream:jw,createTableStreams:i2,purgeTableStream:eC,purgeSchemaTableStreams:o2,getStreamInfo:a2,updateLocalStreams:u2,closeConnection:YJ,getJsmServerName:lc,addNatsMsgHeader:Qw,updateIngestStreamConsumer:jJ};async function Yw(e,t=void 0){let{stdout:r,stderr:s}=await wJ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ var oH=Object.create;var zo=Object.defineProperty;var aH=Object.getOwnPropertyDescriptor;var cH=Object.getOwnPropertyNames;var uH=Object.getPrototypeOf,lH=Object.prototype.hasOwnProperty;var a=(e,t)=>zo(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),xe=(e,t)=>{for(var r in t)zo(e,r,{get:t[r],enumerable:!0})},AR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of cH(t))!lH.call(e,n)&&n!==r&&zo(e,n,{get:()=>t[n],enumerable:!(s=aH(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?oH(uH(e)):{},AR(t||!e||!e.__esModule?zo(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>AR(zo({},"__esModule",{value:!0}),e);var A=m((ure,BR)=>{"use strict";var mr=require("path"),_H=require("fs"),{relative:are,join:cre}=mr,{existsSync:dH}=_H;function EH(){let e=__dirname;for(;!dH(mr.join(e,"package.json"));){let t=mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(EH,"getHDBPackageRoot");var cn=EH(),OR="js",hu=OR,fH="harperdb-config.yaml",hH="defaultConfig.yaml",mH="hdb",NR=`harperdb.${hu}`,bR=`customFunctionsServer.${hu}`,SH=`restartHdb.${hu}`,OE="HarperDB",fu="Custom Functions",mu="Clustering Hub",Su="Clustering Leaf",pH="Clustering Ingest Service",TH="Clustering Reply Service",RH="foreground.pid",gH="hdb.pid",AH="data",OH={HDB:OE,CLUSTERING_HUB:mu,CLUSTERING_LEAF:Su,CLUSTERING_INGEST_SERVICE:pH,CLUSTERING_REPLY_SERVICE:TH,CUSTOM_FUNCTIONS:fu,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"},NH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yH={harperdb:OE,"clustering hub":mu,"clustering leaf":Su,"custom functions":fu,custom_functions:fu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},IH={CLUSTERING_HUB_PROC_DESCRIPTOR:mu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Su},AE={HDB:mr.join(cn,"server/harperdb"),CUSTOM_FUNCTIONS:mr.join(cn,"server/customFunctions"),CLUSTERING_HUB:mr.join(cn,"server/nats"),CLUSTERING_LEAF:mr.join(cn,"server/nats")},wH={HDB:mr.join(AE.HDB,NR),CUSTOM_FUNCTIONS:mr.join(AE.CUSTOM_FUNCTIONS,bR)},CH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:mr.join(cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:mr.join(cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:mr.join(cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},UH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},yR="support@harperdb.io",DH="customer-success@harperdb.io",IR=1,LH=4141,wR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",MH="https://www.harperdb.io/product",PH=`For support, please submit a request at ${wR} or contact ${yR}`,CR=`For license support, please contact ${DH}`,vH="None of the specified records were found.",BH="hash attribute not found",HH=`Your current license only supports ${IR} role. ${CR}`,qH="Your current license only supports 3 connections to a node.",FH="127.0.0.1",GH=1,xH=/^\.$/,kH=/^\.\.$/,VH="U+002E",$H=/\//g,YH="U+002F",KH=/U\+002F/g,WH=/^U\+002E$/,QH=/^U\+002EU\+002E$/,zH="d",JH=999999,XH="*",ZH="--max-old-space-size=",jH="system",e0="__hdb_hash",t0=".harperdb",r0=".hdb",s0="keys",n0="hdb_boot_properties.file",i0=".updateConfig.json",o0="SIGTSTP",a0=24,c0=6e4,u0=448,l0="blob",_0="trash",d0="database",E0="schema",f0="transactions",h0=".count",m0="id",S0="PROCESS_NAME",UR={SETTINGS_PATH_KEY:"settings_path"},DR=require("lodash"),p0={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"},T0={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},R0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},g0={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"},A0={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"},tr="hdb_internal:",O0={CREATE_SCHEMA:tr+"create_schema",CREATE_TABLE:tr+"create_table",CREATE_ATTRIBUTE:tr+"create_attribute",ADD_USER:tr+"add_user",ALTER_USER:tr+"alter_user",DROP_USER:tr+"drop_user",HDB_NODES:tr+"hdb_nodes",HDB_USERS:tr+"hdb_users",HDB_WORKERS:tr+"hdb_workers",CATCHUP:tr+"catchup",SCHEMA_CATCHUP:tr+"schema_catchup",WORKER_ROOM:tr+"cluster_workers"},N0={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"},b0="060493.ks",y0=".license",I0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},K={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",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_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",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",LOGIN:"login",LOGOUT:"logout",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",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",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",GET_BACKUP:"get_backup"},w0={CSV:".csv",JSON:".json"},C0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},U0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jo={};Jo[K.INSERT]=K.INSERT;Jo[K.UPDATE]=K.UPDATE;Jo[K.UPSERT]=K.UPSERT;Jo[K.DELETE]=K.DELETE;var ge=Object.create(null);ge[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;ge[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;ge[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;ge[K.READ_LOG]=K.READ_LOG;ge[K.ADD_NODE]=K.ADD_NODE;ge[K.LIST_USERS]=K.LIST_USERS;ge[K.LIST_ROLES]=K.LIST_ROLES;ge[K.USER_INFO]=K.USER_INFO;ge[K.SQL]=K.SQL;ge[K.GET_JOB]=K.GET_JOB;ge[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;ge[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;ge[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;ge[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;ge[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;ge[K.REMOVE_NODE]=K.REMOVE_NODE;ge[K.RESTART]=K.RESTART;ge[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;ge[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;ge[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;ge[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;ge[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;ge[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;ge[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;ge[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;ge[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var D0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},L0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},LR={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"},M0=DR.invert(LR),g={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",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",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",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",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",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",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},MR={settings_path:UR.SETTINGS_PATH_KEY,hdb_root_key:g.ROOTPATH,hdb_root:g.ROOTPATH,server_port_key:g.OPERATIONSAPI_NETWORK_PORT,server_port:g.OPERATIONSAPI_NETWORK_PORT,cert_key:g.OPERATIONSAPI_TLS_CERTIFICATE,certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:g.OPERATIONSAPI_NETWORK_HTTPS,https_on:g.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:g.OPERATIONSAPI_NETWORK_CORS,cors_on:g.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:g.LOGGING_LEVEL,log_level:g.LOGGING_LEVEL,log_path_key:g.LOGGING_ROOT,log_path:g.LOGGING_ROOT,props_env_key:g.OPERATIONSAPI_NODEENV,node_env:g.OPERATIONSAPI_NODEENV,clustering_node_name_key:g.CLUSTERING_NODENAME,node_name:g.CLUSTERING_NODENAME,clustering_enabled_key:g.CLUSTERING_ENABLED,clustering:g.CLUSTERING_ENABLED,max_http_threads:g.HTTP_THREADS,max_hdb_processes:g.HTTP_THREADS,server_timeout_key:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:g.LOGGING_AUDITLOG,disable_transaction_log:g.LOGGING_AUDITLOG,operation_token_timeout_key:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:g.CUSTOMFUNCTIONS_ENABLED,custom_functions:g.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:g.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:g.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:g.HTTP_THREADS,log_to_file:g.LOGGING_FILE,log_to_stdstreams:g.LOGGING_STDSTREAMS,run_in_foreground:g.OPERATIONSAPI_FOREGROUND,local_studio_on:g.LOCALSTUDIO_ENABLED,clustering_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:g.CLUSTERING_USER,clustering_enabled:g.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:g.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:g.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:g.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:g.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:g.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:g.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:g.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:g.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:g.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:g.CLUSTERING_NODENAME,clustering_tls_certificate:g.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:g.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:g.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:g.CLUSTERING_TLS_INSECURE,clustering_tls_verify:g.CLUSTERING_TLS_VERIFY,clustering_loglevel:g.CLUSTERING_LOGLEVEL,clustering_republishmessages:g.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:g.CLUSTERING_DATABASELEVEL,customfunctions_enabled:g.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:g.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:g.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:g.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:g.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:g.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:g.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:g.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:g.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:g.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:g.CUSTOMFUNCTIONS_NODEENV,http_threads:g.HTTP_THREADS,http_session_affinity:g.HTTP_SESSION_AFFINITY,customfunctions_processes:g.HTTP_THREADS,customfunctions_root:g.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:g.LOCALSTUDIO_ENABLED,logging_file:g.LOGGING_FILE,logging_level:g.LOGGING_LEVEL,logging_root:g.LOGGING_ROOT,logging_rotation_enabled:g.LOGGING_ROTATION_ENABLED,logging_rotation_compress:g.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:g.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:g.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:g.LOGGING_ROTATION_PATH,logging_stdstreams:g.LOGGING_STDSTREAMS,logging_auditlog:g.LOGGING_AUDITLOG,logging_auditretention:g.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:g.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:g.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:g.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:g.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:g.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:g.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:g.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:g.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:g.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:g.OPERATIONSAPI_NODEENV,operationsapi_root:g.ROOTPATH,schemas:g.SCHEMAS,storage_path:g.STORAGE_PATH,ignorescripts:g.IGNORE_SCRIPTS,mqtt_network_port:g.MQTT_NETWORK_PORT,mqtt_websocket:g.MQTT_WEBSOCKET,mqtt_network_secureport:g.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:g.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:g.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:g.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:g.AUTHENTICATION_CACHETTL,authentication_enablesessions:g.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in g){let t=g[e];MR[t.toLowerCase()]=t}var P0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},v0={csv_file_load:"csv_file_load",csv_data_load:K.CSV_DATA_LOAD,csv_url_load:K.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"},B0={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"},H0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},q0={VERSION_DEFAULT:"2.2.0"},F0={DEVELOPMENT:8192,DEFAULT:512},G0={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"},x0={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"},k0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},PR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},V0=Symbol("metadata"),$0="__clustering__",Y0=Object.values(PR),K0=15984864e5,vR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},W0=DR.invert(vR),Q0={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"},z0=111,J0=`\r
2
+ `,X0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Z0=["*","%"],j0="unauthorized_access",eq="func_val",tq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sq={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"},nq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iq={HTTP:"http"},oq={STOPPED:"stopped",ONLINE:"online"},aq="3.x.x",cq={SUCCESS:"success",FAILURE:"failure"},uq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};BR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:yR,HDB_SUPPORT_URL:wR,HDB_PRICING_URL:MH,SUPPORT_HELP_MSG:PH,LICENSE_HELP_MSG:CR,HDB_PROC_NAME:NR,HDB_PROC_DESCRIPTOR:OE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Su,CLUSTERING_HUB_PROC_DESCRIPTOR:mu,SYSTEM_SCHEMA_NAME:jH,HASH_FOLDER_NAME:e0,HDB_HOME_DIR_NAME:t0,UPDATE_FILE_NAME:i0,LICENSE_KEY_DIR_NAME:s0,BOOT_PROPS_FILE_NAME:n0,JOB_TYPE_ENUM:v0,JOB_STATUS_ENUM:I0,SYSTEM_TABLE_NAMES:g0,SYSTEM_TABLE_HASH_ATTRIBUTES:A0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:w0,S3_BUCKET_AUTH_KEYS:C0,VALID_SQL_OPS_ENUM:U0,GEO_CONVERSION_ENUM:L0,HDB_SETTINGS_NAMES:LR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:M0,SERVICE_ACTIONS_ENUM:D0,CLUSTER_MESSAGE_TYPE_ENUM:B0,CLUSTER_CONNECTION_DIRECTION_ENUM:H0,CLUSTER_EVENTS_DEFS_ENUM:G0,PERIOD_REGEX:xH,DOUBLE_PERIOD_REGEX:kH,UNICODE_PERIOD:VH,FORWARD_SLASH_REGEX:$H,UNICODE_FORWARD_SLASH:YH,ESCAPED_FORWARD_SLASH_REGEX:KH,ESCAPED_PERIOD_REGEX:WH,ESCAPED_DOUBLE_PERIOD_REGEX:QH,REG_KEY_FILE_NAME:b0,RESTART_TIMEOUT_MS:c0,HDB_FILE_PERMISSIONS:u0,DATABASES_DIR_NAME:d0,LEGACY_DATABASES_DIR_NAME:E0,TRANSACTIONS_DIR_NAME:f0,LIMIT_COUNT_NAME:h0,ID_ATTRIBUTE_STRING:m0,INSERT_MODULE_ENUM:T0,UPGRADE_JSON_FIELD_NAMES_ENUM:R0,RESTART_CODE:o0,RESTART_CODE_NUM:a0,CLUSTER_OPERATIONS:Jo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:N0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:O0,CLUSTERING_MESSAGE_TYPES:Q0,HDB_FILE_SUFFIX:r0,BLOB_FOLDER_NAME:l0,HDB_TRASH_DIR:_0,ORIGINATOR_SET_VALUE:z0,LICENSE_VALUES:q0,RAM_ALLOCATION_ENUM:F0,TIME_STAMP_NAMES_ENUM:PR,TIME_STAMP_NAMES:Y0,PERMS_UPDATE_RELEASE_TIMESTAMP:K0,SEARCH_NOT_FOUND_MESSAGE:vH,SEARCH_ATTRIBUTE_NOT_FOUND:BH,LICENSE_ROLE_DENIED_RESPONSE:HH,LICENSE_MAX_CONNS_REACHED:qH,BASIC_LICENSE_MAX_NON_CU_ROLES:IR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:LH,VALUE_SEARCH_COMPARATORS:vR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:W0,LICENSE_FILE_NAME:y0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:x0,NEW_LINE:J0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:GH,MOMENT_DAYS_TAG:zH,API_TURNOVER_SEC:JH,LOOPBACK:FH,CODE_EXTENSION:hu,WILDCARD_SEARCH_VALUE:XH,NODE_ERROR_CODES:k0,JAVASCRIPT_EXTENSION:OR,PERMS_CRUD_ENUM:X0,UNAUTHORIZED_PERMISSION_NAME:j0,SEARCH_WILDCARDS:Z0,FUNC_VAL:eq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tq,JWT_ENUM:rq,CLUSTERING_FLAG:$0,ITC_EVENT_TYPES:sq,CUSTOM_FUNCTION_PROC_NAME:bR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:fu,SERVICES:nq,THREAD_TYPES:iq,MEM_SETTING_KEY:ZH,HDB_RESTART_SCRIPT:SH,PROCESS_DESCRIPTORS:OH,SERVICE_SERVERS:wH,SERVICE_SERVERS_CWD:AE,PROCESS_DESCRIPTORS_VALIDATE:yH,LAUNCH_SERVICE_SCRIPTS:CH,LOG_LEVELS:bH,PROCESS_NAME_ENV_PROP:S0,LOG_NAMES:NH,PM2_PROCESS_STATUSES:oq,CONFIG_PARAM_MAP:MR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:fH,HDB_DEFAULT_CONFIG_FILE:hH,ROLE_TYPES_ENUM:UH,BOOT_PROP_PARAMS:UR,INSTALL_PROMPTS:p0,HDB_ROOT_DIR_NAME:mH,CLUSTERING_PROCESSES:IH,FOREGROUND_PID_FILE:RH,PACKAGE_ROOT:cn,PRE_4_0_0_VERSION:aq,SCHEMAS_PARAM_CONFIG:P0,METADATA_PROPERTY:V0,AUTH_AUDIT_STATUS:cq,AUTH_AUDIT_TYPES:uq,HDB_PID_FILE:gH,DEFAULT_DATABASE_NAME:AH};NE()});var NE=m((_re,qR)=>{var lq=require("fast-glob"),{statSync:bE,existsSync:yE,readFileSync:_q,writeFileSync:dq}=require("fs"),{spawnSync:Eq,spawn:fq}=require("child_process"),{isMainThread:hq}=require("worker_threads"),{join:ys,relative:HR}=require("path"),{PACKAGE_ROOT:Sr}=A(),{tmpdir:mq}=require("os");require("source-map-support").install();var Sq=["resources","server","dataLayer"],Xo="ts-build",IE,pq=__filename.endsWith("tsBuild.js");if(pq){if(hq){let r;try{bE(ys(Sr,Xo)),r=!0}catch{}if(r)for(let s of lq.sync(Sq.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=bE(ys(Sr,s)).mtimeMs-5e3,i=bE(ys(Sr,Xo,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),IE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),IE=!0;if(IE){let s=Eq(process.argv[0],[ys(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=ys(mq(),"harperdb-tsc.pid"),i;if(yE(n))try{process.kill(+_q(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=fq(process.argv[0],[ys(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});dq(n,o.pid.toString()),o.unref()}}}}let e=qR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=HR(Sr,s[0]),o;i.startsWith(Xo)?o=ys(Sr,HR(Xo,i)):o=ys(Sr,Xo,i);let c=ys(o,r),u=c+".js";if(yE(u))return u;if(c.includes(".")&&yE(c))return c}return t(r,s,n)}}});var Zo={};xe(Zo,{server:()=>et});var FR,et,Pr=Se(()=>{FR=require("../index"),et={};(0,FR._assignPackageExport)("server",et)});var wE=m((dre,kR)=>{"use strict";var GR=require("minimist");kR.exports=Tq;function Tq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=xR(process.env),s=xR(GR(process.argv))):(r=process.env,s=GR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(Tq,"assignCMDENVVariables");function xR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(xR,"objKeysToLowerCase")});var x=m((fre,vE)=>{"use strict";var Vn=require("fs-extra"),{workerData:Rq,threadId:gq}=require("worker_threads"),Cs=require("path"),YR=require("yaml"),KR=require("properties-reader"),tt=A(),VR=wE(),Aq=require("os"),{PACKAGE_ROOT:UE}=A(),{_assignPackageExport:Oq}=require("../index"),ea={};for(let e in console)ea[e]||(ea[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},WR={STDOUT:"stdOut",STDERR:"stdErr"},Nq=Cs.join(UE,"logs"),bq=Cs.join(UE,"config/yaml/",tt.HDB_DEFAULT_CONFIG_FILE),yq=1e4,Is,ws,Lt,pu,Tu,ta,qi,jo;jo===void 0&&QR();vE.exports={notify:XR,fatal:ZR,error:ra,warn:PE,info:Ru,debug:ME,trace:LE,setLogLevel:Mq,log_level:Lt,loggerWithTag:Iq,suppressLogging:wq,initLogSettings:QR,setupConsoleLogging:zR,logCustomLevel:Dq,closeLogFile:DE,getLogFilePath:()=>ta,OUTPUTS:WR,AuthAuditLog:Bq};Oq("logger",vE.exports);function QR(e=!1){try{if(jo===void 0||e){DE();let t=Lq(),r=VR(["ROOTPATH"]);try{jo=KR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Vn.pathExistsSync(Cs.join(r.ROOTPATH,tt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Tu,to_file:Is,to_stream:ws}=Pq(r.ROOTPATH?Cs.join(r.ROOTPATH,tt.HDB_CONFIG_FILE):jo.get("settings_path"))),pu=tt.LOG_NAMES.HDB,ta=Cs.join(Tu,pu)}}catch(t){if(jo=void 0,t.code===tt.NODE_ERROR_CODES.ENOENT){let r=VR(Object.keys(tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===tt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){ws=u;continue}c===tt.CONFIG_PARAMS.LOGGING_FILE&&(Is=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=vq();Is=Is===void 0?n:Is,Is=$R(Is),ws=ws===void 0?i:ws,ws=$R(ws),Lt=Lt===void 0?s:Lt,Tu=Nq,pu=tt.LOG_NAMES.INSTALL,ta=Cs.join(Tu,pu);return}throw ra("Error initializing log settings"),ra(t),t}zR()}a(QR,"initLogSettings");var CE=!0;function zR(){Hi("error",ra),Hi("warn",PE),Hi("log",Ru),Hi("info",Ru),Hi("debug",ME),Hi("trace",LE)}a(zR,"setupConsoleLogging");function Hi(e,t){console[e]=function(...r){if(CE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ea[e](...r)}}a(Hi,"logConsole");function Iq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(XR),fatal:r(ZR),error:r(ra),warn:r(PE),info:r(Ru),debug:r(ME),trace:r(LE)};function r(s){return function(...n){return s(t,...n)}}}a(Iq,"loggerWithTag");function wq(e){try{CE=!1,e()}finally{CE=!0}}a(wq,"suppressLogging");var Cq=Rq?.name?.replace(/ /g,"-")||"main";function Us(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Cq+"/"+gq);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
+ `}a(Us,"createLogRecord");function sa(e){Is&&JR(e),ws&&process.stdout.write(e)}a(sa,"logStdOut");function gu(e){Is&&JR(e),ws&&process.stderr.write(e)}a(gu,"logStdErr");function JR(e){Uq(),qi?Vn.appendFileSync(qi,e):ea.log(e)}a(JR,"logToFile");function DE(){try{Vn.closeSync(qi)}catch{}qi=null}a(DE,"closeLogFile");function Uq(){if(!qi){try{if(!ta)debugger;qi=Vn.openSync(ta,"a")}catch(e){ea.error(e)}setTimeout(()=>{DE()},yq).unref()}}a(Uq,"openLogFile");function Ru(...e){Mt[Lt]<=Mt.info&&sa(Us("info",e))}a(Ru,"info");function LE(...e){Mt[Lt]<=Mt.trace&&sa(Us("trace",e))}a(LE,"trace");function ra(...e){Mt[Lt]<=Mt.error&&gu(Us("error",e))}a(ra,"error");function ME(...e){Mt[Lt]<=Mt.debug&&sa(Us("debug",e))}a(ME,"debug");function XR(...e){Mt[Lt]<=Mt.notify&&sa(Us("notify",e))}a(XR,"notify");function ZR(...e){Mt[Lt]<=Mt.fatal&&gu(Us("fatal",e))}a(ZR,"fatal");function PE(...e){Mt[Lt]<=Mt.warn&&gu(Us("warn",e))}a(PE,"warn");function Dq(e,t,...r){t===WR.STDERR?gu(Us(e,r)):sa(Us(e,r))}a(Dq,"logCustomLevel");function Lq(){let e;try{e=Aq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Cs.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return Vn.existsSync(t)||(t=Cs.join(UE,"utility/hdb_boot_properties.file")),t}a(Lq,"getPropsFilePath");function Mq(e){Lt=e}a(Mq,"setLogLevel");function $R(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($R,"autoCastBoolean");function Pq(e){try{if(e.includes("config/settings.js")){let o=KR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Cs.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=YR.parseDocument(Vn.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===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Pq,"getLogConfig");function vq(){try{let e=YR.parseDocument(Vn.readFileSync(bq,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(vq,"getDefaultConfig");function Bq(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(Bq,"AuthAuditLog")});var eg=m((mre,jR)=>{"use strict";var Hq=require("util"),qq=require("path"),Fq=require("child_process"),Gq=Hq.promisify(Fq.execFile),xq=1e3*1e3*10;jR.exports={findPs:kq};async function kq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Gq("ps",["wwxo",`pid,${r}`],{maxBuffer:xq});for(let n of s.trim().split(`
4
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:qq.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(kq,"findPs")});var ke=m((pre,rg)=>{"use strict";var Vq="__dbis__",$q="__txns__",Yq="__environment_name__",Kq="__dbi_defintion__",Wq={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"},Qq=["__createdtime__","__updatedtime__"],zq="\uFFFF",tg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Jq=Object.values(tg);rg.exports={AUDIT_STORE_NAME:$q,INTERNAL_DBIS_NAME:Vq,DBI_DEFINITION_NAME:Kq,SEARCH_TYPES:Wq,TIMESTAMP_NAMES:Qq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Yq,TRANSACTIONS_DBI_NAMES_ENUM:tg,TRANSACTIONS_DBIS:Jq,OVERFLOW_MARKER:zq}});var rr=m((Tre,_g)=>{"use strict";var sg=A(),ng=ke(),ig={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},og=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ag={500:og("There was an error processing your request."),400:"Invalid request"},Xq=ag[ig.INTERNAL_SERVER_ERROR],Zq={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.`},jq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},eF={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"},tF={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 ${ng.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ng.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"},rF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sg.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 ${sg.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"},cg={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"},sF={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database 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' database, tables and records are used internally by HarperDB and cannot be updated or removed."},nF={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 database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.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`},iF={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=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},oF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},aF={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`},ug={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.`},lg={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}`},cF={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 fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},uF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},lF={...cg,...eF,...Zq,...sF,...nF,...iF,...oF,...aF,...rF,...ug,...lg,...cF,...uF,...jq};_g.exports={CHECK_LOGS_WRAPPER:og,HDB_ERROR_MSGS:lF,DEFAULT_ERROR_MSGS:ag,DEFAULT_ERROR_RESP:Xq,HTTP_STATUS_CODES:ig,LMDB_ERRORS_ENUM:tF,AUTHENTICATION_ERROR_MSGS:cg,VALIDATION_ERROR_MSGS:ug,ITC_ERRORS:lg}});var W=m((gre,fg)=>{"use strict";var Fi=rr(),_F=x(),dF=A(),Au=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,dg),this.statusCode=s||Fi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Fi.DEFAULT_ERROR_MSGS[s]?Fi.DEFAULT_ERROR_MSGS[s]:Fi.DEFAULT_ERROR_MSGS[Fi.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&&_F[n](i)}},BE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},HE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function dg(e,t,r,s=dF.LOG_LEVELS.ERROR,n=null,i=!1){if(Eg(e))return e;let o=new Au(e,t,r,s,n);return i&&delete o.stack,o}a(dg,"handleHDBError");function Eg(e){return e.__proto__.constructor.name===Au.name}a(Eg,"isHDBError");fg.exports={isHDBError:Eg,handleHDBError:dg,ClientError:BE,ServerError:HE,hdb_errors:Fi}});var V=m((Nre,wg)=>{"use strict";var un=require("path"),Tg=require("fs-extra"),Pt=x(),hg=require("fs-extra"),Ou=require("os"),EF=require("net"),fF=require("recursive-iterator"),Pe=A(),hF=eg(),mg=require("papaparse"),Nu=require("moment"),{inspect:mF}=require("util"),Sg=require("is-number"),Ore=require("lodash"),SF=require("minimist"),pF=require("https"),TF=require("http"),{hdb_errors:bu}=W(),RF=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,Rg=require("util").promisify(setTimeout),gF=100,AF=5,OF="",NF=4,pg={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wg.exports={isEmpty:sr,isEmptyOrZeroLength:Xr,arrayHasEmptyValues:IF,arrayHasEmptyOrZeroLengthValues:wF,buildFolderPath:CF,isBoolean:gg,errorizeMessage:bF,stripFileExtension:DF,autoCast:LF,autoCastJSON:Ag,autoCastJSONDeep:FE,removeDir:MF,compareVersions:PF,isCompatibleDataVersion:vF,escapeRawValue:BF,unescapeValue:HF,stringifyProps:qF,timeoutPromise:GF,isClusterOperation:kF,getClusterUser:$F,checkGlobalSchemaTable:VF,getHomeDir:Ng,getPropsFilePath:FF,promisifyPapaParse:YF,removeBOM:bg,createEventPromise:KF,checkProcessRunning:WF,checkSchemaTableExist:QF,checkSchemaExists:yg,checkTableExists:Ig,getStartOfTomorrowInSeconds:zF,getLimitKey:JF,isObject:UF,isNotEmptyAndHasValue:yF,autoCasterIsNumberCheck:Og,backtickASTSchemaItems:XF,isPortTaken:xF,createForkArgs:ZF,autoCastBoolean:jF,async_set_timeout:Rg,getTableHashAttribute:eG,doesSchemaExist:tG,doesTableExist:rG,stringifyObj:sG,ms_to_time:nG,changeExtension:iG,getEnvCliRootPath:GE,noBootFile:oG,httpRequest:aG,transformReq:cG,convertToMS:uG,PACKAGE_ROOT:Pe.PACKAGE_ROOT};function bF(e){return e instanceof Error?e:new Error(e)}a(bF,"errorizeMessage");function sr(e){return e==null}a(sr,"isEmpty");function yF(e){return!sr(e)&&(e||e===0||e===""||gg(e))}a(yF,"isNotEmptyAndHasValue");function Xr(e){return sr(e)||e.length===0||e.size===0}a(Xr,"isEmptyOrZeroLength");function IF(e){if(sr(e))return!0;for(let t=0;t<e.length;t++)if(sr(e[t]))return!0;return!1}a(IF,"arrayHasEmptyValues");function wF(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(wF,"arrayHasEmptyOrZeroLengthValues");function CF(...e){try{return e.join(un.sep)}catch{console.error(e)}}a(CF,"buildFolderPath");function gg(e){return sr(e)?!1:e===!0||e===!1}a(gg,"isBoolean");function UF(e){return sr(e)?!1:typeof e=="object"}a(UF,"isObject");function DF(e){return Xr(e)?OF:e.slice(0,-NF)}a(DF,"stripFileExtension");function LF(e){return sr(e)||e===""||typeof e!="string"?e:pg[e]!==void 0?pg[e]:Og(e)===!0?Number(e):RF.test(e)?new Date(e):e}a(LF,"autoCast");function Ag(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ag,"autoCastJSON");function FE(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=FE(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=FE(r);s!==r&&(e[t]=s)}return e}else return Ag(e)}a(FE,"autoCastJSONDeep");function Og(e){if(e.startsWith("0.")&&Sg(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Sg(e))}a(Og,"autoCasterIsNumberCheck");async function MF(e){if(Xr(e))throw new Error(`Directory path: ${e} does not exist`);try{await hg.emptyDir(e),await hg.remove(e)}catch(t){throw Pt.error(`Error removing files in ${e} -- ${t}`),t}}a(MF,"removeDir");function PF(e,t){if(Xr(e)){Pt.info("Invalid current version sent as parameter.");return}if(Xr(t)){Pt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(PF,"compareVersions");function vF(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(vF,"isCompatibleDataVersion");function BF(e){if(sr(e))return e;let t=String(e);return t==="."?Pe.UNICODE_PERIOD:t===".."?Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD:t.replace(Pe.FORWARD_SLASH_REGEX,Pe.UNICODE_FORWARD_SLASH)}a(BF,"escapeRawValue");function HF(e){if(sr(e))return e;let t=String(e);return t===Pe.UNICODE_PERIOD?".":t===Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD?"..":String(e).replace(Pe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(HF,"unescapeValue");function qF(e,t){if(sr(e))return Pt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Ou.EOL}!Xr(s)&&s[0]===";"?r+=" "+s+n+Ou.EOL:Xr(s)||(r+=s+"="+n+Ou.EOL)}catch{Pt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(qF,"stringifyProps");function Ng(){let e;try{e=Ou.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ng,"getHomeDir");function FF(){let e=un.join(Ng(),Pe.HDB_HOME_DIR_NAME,Pe.BOOT_PROPS_FILE_NAME);return Tg.existsSync(e)||(e=un.join(__dirname,"../","hdb_boot_properties.file")),e}a(FF,"getPropsFilePath");function GF(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(GF,"timeoutPromise");async function xF(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=EF.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xF,"isPortTaken");function kF(e){try{return Pe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kF,"isClusterOperation");function VF(e,t){let r=(de(),ee(Ne)).getDatabases();if(!r[e])return bu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return bu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VF,"checkGlobalSchemaTable");function $F(e,t){if(sr(t)){Pt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sr(e)||Xr(e)){Pt.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){Pt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Pt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($F,"getClusterUser");function YF(){mg.parsePromise=function(e,t,r){return new Promise(function(s,n){mg.parse(e,{header:!0,transformHeader:bg,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(YF,"promisifyPapaParse");function bg(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bg,"removeBOM");function KF(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Pt.info(`Got cluster status event response: ${mF(n)}`);try{i.cancel()}catch{Pt.error("Error trying to cancel timeout.")}s(n)})})}a(KF,"createEventPromise");async function WF(e){let t=!0,r=0;do await Rg(gF*r++),(await hF.findPs(e)).length>0&&(t=!1);while(t&&r<AF);if(t)throw new Error(`process ${e} was not started`)}a(WF,"checkProcessRunning");function QF(e,t){let r=yg(e);if(r)return r;let s=Ig(e,t);if(s)return s}a(QF,"checkSchemaTableExist");function yg(e){let{getDatabases:t}=(de(),ee(Ne));if(!t()[e])return bu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yg,"checkSchemaExists");function Ig(e,t){let{getDatabases:r}=(de(),ee(Ne));if(!r()[e][t])return bu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ig,"checkTableExists");function zF(){let e=Nu().utc().add(1,Pe.MOMENT_DAYS_TAG).startOf(Pe.MOMENT_DAYS_TAG).unix(),t=Nu().utc().unix();return e-t}a(zF,"getStartOfTomorrowInSeconds");function JF(){return Nu().utc().format("DD-MM-YYYY")}a(JF,"getLimitKey");function XF(e){try{let t=new fF(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){Pt.error("Got an error back ticking items."),Pt.error(t)}}a(XF,"backtickASTSchemaItems");function ZF(e){return[e]}a(ZF,"createForkArgs");function jF(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jF,"autoCastBoolean");function eG(e,t){let{getDatabases:r}=(de(),ee(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(eG,"getTableHashAttribute");function tG(e){let{getDatabases:t}=(de(),ee(Ne));return t()[e]!==void 0}a(tG,"doesSchemaExist");function rG(e,t){let{getDatabases:r}=(de(),ee(Ne));return r()[e]?.[t]!==void 0}a(rG,"doesTableExist");function sG(e){try{return JSON.stringify(e)}catch{return e}}a(sG,"stringifyObj");function nG(e){let t=Nu.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(nG,"ms_to_time");function iG(e,t){let r=un.basename(e,un.extname(e));return un.join(un.dirname(e),r+t)}a(iG,"changeExtension");function GE(){if(process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SF(process.argv);if(e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(GE,"getEnvCliRootPath");var qE;function oG(){if(qE)return qE;let e=GE();GE()&&Tg.pathExistsSync(un.join(e,Pe.HDB_CONFIG_FILE))&&(qE=!0)}a(oG,"noBootFile");function aG(e,t){let r;return e.protocol==="http:"?r=TF:r=pF,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(aG,"httpRequest");function cG(e){if(!e.schema&&!e.database){e.schema=Pe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(cG,"transformReq");function uG(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(uG,"convertToMS")});var Ug=m((yre,Cg)=>{"use strict";var lG={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))},_G="certificate.pem",dG="privateKey.pem",EG="ca.pem";Cg.exports={CERTIFICATE_VALUES:lG,CERTIFICATE_PEM_NAME:_G,PRIVATEKEY_PEM_NAME:dG,CA_PEM_NAME:EG}});var ve=m((Ire,Dg)=>{"use strict";var vt=require("validate.js");vt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||vt.validators.type.checks[t](e)?null:` must be a '${t}' value`};vt.validators.type.checks={Object:function(e){return vt.isObject(e)&&!vt.isArray(e)},Array:vt.isArray,Integer:vt.isInteger,Number:vt.isNumber,String:vt.isString,Date:vt.isDate,Boolean:function(e){return typeof e=="boolean"}};vt.validators.hasValidFileExt=function(e,t){return vt.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};Dg.exports={validateObject:fG,validateObjectAsync:hG,validateBySchema:mG};function fG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vt(e,t,{format:"flat"});return r?new Error(r):null}a(fG,"validateObject");async function hG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(hG,"validateObjectAsync");function mG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mG,"validateBySchema")});var kE=m((Ure,Hg)=>{"use strict";var vg=require("fs-extra"),te=require("joi"),SG=require("os"),{boolean:pe,string:Ls,number:nr,array:xE}=te.types(),{totalmem:Lg}=require("os"),Gi=require("path"),pG=x(),Iu=V(),Cre=Ug(),Mg=A(),TG=ve(),Pg="log",RG="components",gG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",OG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",NG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",bG="rootPath config parameter is undefined",yG="clustering.enabled config parameter is undefined",Ds=nr.min(0).required(),wu=xE.items({host:Ls.required(),port:Ds}).empty(null),Ms;Hg.exports={configValidator:IG,routesValidator:MG,route_constraints:wu};function IG(e){if(Ms=e.rootPath,Iu.isEmpty(Ms))throw bG;let t=pe.required(),r=te.valid("production","development").required(),s=nr.min(0).max(1e3).empty(null).default(LG),n=Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(yu),i=te.custom(wG).messages({"any.custom":"{:#label} {:#error}"}),o=Ls.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=te.string().empty(null).default(yu),u=te.custom(CG).empty(null).default(yu),l=e.clustering?.enabled;if(Iu.isEmpty(l))throw yG;let _;return l===!0?_=te.object({enabled:t,hubServer:te.object({cluster:te.object({name:te.required().empty(null),network:te.object({port:Ds,routes:wu}).required()}).required(),leafNodes:te.object({network:te.object({port:Ds}).required()}).required(),network:te.object({port:Ds}).required()}).required(),leafServer:te.object({network:te.object({port:Ds,routes:wu}).required(),streams:te.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ls.optional().empty(null)}).required():_=te.object({enabled:t,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),te.object({authentication:te.object({authorizeLocal:pe,cacheTTL:nr.required(),enableSessions:pe,operationTokenTimeout:te.required(),refreshTokenTimeout:te.required()}),analytics:te.object({aggregatePeriod:nr}),clustering:_,customFunctions:te.object({enabled:t,network:te.object({cors:pe.required(),corsAccessList:xE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Ds,timeout:nr.min(1).required()}),nodeEnv:r,root:n,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:te.object({enabled:t}).required(),logging:te.object({auditAuthEvents:te.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:te.object({enabled:pe.optional(),compress:pe.optional(),interval:Ls.custom(DG).optional().empty(null),maxSize:Ls.custom(UG).optional().empty(null),path:Ls.optional().empty(null).default(yu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:te.object({foreground:pe.required(),network:te.object({cors:pe.required(),corsAccessList:xE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Ds,timeout:nr.min(1).required()}).required(),nodeEnv:r,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:te.object({network:te.object({port:Ds,securePort:Ds}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:te.object({threads:s}).required(),storage:te.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(IG,"configValidator");function Bg(e){return vg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Bg,"doesPathExist");function wG(e,t){if(e===null)return;let r=Bg(e);return r?t.message(r):e}a(wG,"validatePemFile");function CG(e,t){te.assert(e,Ls.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Bg(e);if(r)return t.message(r)}a(CG,"validatePath");function UG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(gG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(OG):e}a(UG,"validateRotationMaxSize");function DG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(NG):e}a(DG,"validateRotationInterval");function LG(e,t){let r=t.state.path.join("."),s=SG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Lg();return i=Math.round(Math.min(i,Lg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),pG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(LG,"setDefaultThreads");function yu(e,t){if(!Iu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Iu.isEmpty(Ms))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Gi.join(Ms,RG);case"logging.root":return Gi.join(Ms,Pg);case"clustering.leafServer.streams.path":return Gi.join(Ms,"clustering","leaf");case"storage.path":let s=Gi.join(Ms,Mg.LEGACY_DATABASES_DIR_NAME);return vg.existsSync(s)?s:Gi.join(Ms,Mg.DATABASES_DIR_NAME);case"logging.rotation.path":return Gi.join(Ms,Pg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(yu,"setDefaultRoot");function MG(e){let t=te.object({routes:wu});return TG.validateBySchema({routes:e},t)}a(MG,"routesValidator")});var Tr=m((Mre,Wg)=>{"use strict";var pr=A(),_t=V(),rt=x(),{configValidator:PG,routesValidator:qg}=kE(),Bt=require("fs-extra"),vG=require("yaml"),vr=require("path"),BG=require("is-number"),Gg=require("properties-reader"),HG=require("lodash"),{handleHDBError:qG}=W(),{HTTP_STATUS_CODES:FG,HDB_ERROR_MSGS:Cu}=rr(),Lre=require("minimist"),{server:GG}=(Pr(),ee(Zo)),{SCHEMAS_PARAM_CONFIG:na,CONFIG_PARAMS:ln,CONFIG_PARAM_MAP:Ps}=pr,xG="Unable to get config value because config is uninitialized",kG="Config successfully initialized",VG="Error backing up config file",$G="Empty parameter sent to getConfigValue",xg=vr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),YG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Fg={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"},Uu,ft;Wg.exports={createConfigFile:KG,getDefaultConfig:WG,getConfigValue:Vg,initConfig:$g,flattenConfig:Yn,updateConfigValue:Yg,updateConfigObject:zG,getConfiguration:ZG,setConfiguration:jG,readConfigFile:YE,getClusteringRoutes:ex,initOldConfig:Kg,getConfigFromFile:tx,getConfigFilePath:$n,addConfig:rx,deleteConfigFromFile:sx};function KG(e){let t=_n(xg);Uu=Yn(t.toJSON());let r;for(let o in e){let c=Ps[o.toLowerCase()];if(c===ln.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=VE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&kg(t,r),$E(t);let s=t.toJSON();ft=Yn(s);let n=t.getIn(["rootPath"]),i=vr.join(n,pr.HDB_CONFIG_FILE);Bt.createFileSync(i),Bt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(KG,"createConfigFile");function kg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(na.TABLES))for(let i in s[n][na.TABLES])for(let o in s[n][na.TABLES][i]){let c=s[n][na.TABLES][i][o],u=[ln.SCHEMAS,n,na.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[ln.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(kg,"setSchemasConfig");function WG(e){if(Uu===void 0){let r=_n(xg);Uu=Yn(r.toJSON())}let t=Ps[e.toLowerCase()];if(t!==void 0)return Uu[t.toLowerCase()]}a(WG,"getDefaultConfig");function Vg(e){if(e==null){rt.error($G);return}if(ft===void 0){rt.trace(xG);return}let t=Ps[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(Vg,"getConfigValue");function $n(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?vr.join(t,pr.HDB_CONFIG_FILE):Gg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a($n,"getConfigFilePath");function $g(e=!1){if(ft===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Bt.accessSync(t,Bt.constants.F_OK|Bt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=$n(t),s;if(r.includes("config/settings.js"))try{Kg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=_n(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){rt.trace(`HarperDB config file not found at ${r}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}QG(s,r),$E(s);let n=s.toJSON();if(GG.config=n,ft=Yn(n),ft.logging_rotation_rotate)for(let i in Fg)ft[i]&&rt.error(`Config ${Fg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(kG)}}a($g,"initConfig");function QG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],vr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],vr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],vr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),Bt.writeFileSync(t,String(e)))}a(QG,"checkForUpdatedConfig");function $E(e){let t=e.toJSON(),r=PG(t);if(r.error)throw Cu.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)}a($E,"validateConfig");function zG(e,t){ft===void 0&&(ft={});let r=Ps[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(zG,"updateConfigObject");function Yg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&$g();let o=Vg(Ps.hdb_root),c=vr.join(o,pr.HDB_CONFIG_FILE),u=_n(c),l;if(r===void 0&&e.toLowerCase()===ln.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ps[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=VE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ps[E.toLowerCase()];if(f===ln.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=VE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&kg(u,l),$E(u);let _=u.getIn(["rootPath"]),d=vr.join(_,pr.HDB_CONFIG_FILE);s===!0&&JG(c,_),Bt.writeFileSync(d,String(u)),n&&(ft=Yn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Yg,"updateConfigValue");function JG(e,t){try{let r=vr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);Bt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(VG),rt.error(r)}}a(JG,"backupConfigFile");var XG=["schemas"];function Yn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!XG.includes(r)){let s=Yn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(Yn,"flattenConfig");function VE(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.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(BG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(VE,"castConfigValue");function ZG(){let e=_t.getPropsFilePath(),t=$n(e);return _n(t).toJSON()}a(ZG,"getConfiguration");async function jG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Yg(void 0,void 0,n,!0),YG}catch(i){throw typeof i=="string"||i instanceof String?qG(i,i,FG.BAD_REQUEST,void 0,void 0,!0):i}}a(jG,"setConfiguration");function YE(){let e=_t.getPropsFilePath();try{Bt.accessSync(e,Bt.constants.F_OK|Bt.constants.R_OK)}catch(s){if(!_t.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=$n(e);return _n(t).toJSON()}a(YE,"readConfigFile");function _n(e){return vG.parseDocument(Bt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(_n,"parseYamlDoc");function ex(){let e=YE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=qg(t);if(r)throw Cu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=qg(s);if(n)throw Cu.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Cu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ex,"getClusteringRoutes");function Kg(e){let t=Gg(e);ft={};for(let r in Ps){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ps[r].toLowerCase();n===ln.LOGGING_ROOT?ft[n]=vr.dirname(s):ft[n]=s}return ft}a(Kg,"initOldConfig");function tx(e){let t=YE();return HG.get(t,e.replaceAll("_","."))}a(tx,"getConfigFromFile");async function rx(e,t){let r=_n($n());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Bt.writeFile($n(),String(r))}a(rx,"addConfig");function sx(e){let t=$n(_t.getPropsFilePath()),r=_n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=vr.join(s,pr.HDB_CONFIG_FILE);Bt.writeFileSync(n,String(r))}a(sx,"deleteConfigFromFile")});var Q=m((vre,Jg)=>{"use strict";var KE=require("fs-extra"),Br=require("path"),Qg=require("os"),nx=require("properties-reader"),ia=x(),Kn=V(),re=A(),Du=Tr(),ix="Error initializing environment manager",Lu="BOOT_PROPS_FILE_PATH",zg=!1,ox={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},vs={};Jg.exports={BOOT_PROPS_FILE_PATH:Lu,getHdbBasePath:ax,setHdbBasePath:cx,get:ux,initSync:_x,setProperty:Ee,initTestEnvironment:dx};function ax(){return vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ax,"getHdbBasePath");function cx(e){vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cx,"setHdbBasePath");function ux(e){let t=Du.getConfigValue(e);return t===void 0?vs[e]:t}a(ux,"get");function Ee(e,t){ox[e]&&(vs[e]=t),Du.updateConfigObject(e,t)}a(Ee,"setProperty");function lx(){let e;try{e=Kn.getPropsFilePath(),KE.accessSync(e,KE.constants.F_OK|KE.constants.R_OK),zg=!0;let t=nx(e);return vs[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),vs[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),vs[Lu]=e,!0}catch{return ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(lx,"doesPropFileExist");function _x(e=!1){try{(zg||lx()||Kn.noBootFile())&&(Du.initConfig(e),vs[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Du.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ia.error(ix),ia.error(t),console.error(t),process.exit(1)}}a(_x,"initSync");function dx(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Br.join(__dirname,"../../","unitTests");vs[Lu]=Br.join(u,"hdb_boot_properties.file"),Ee(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Br.join(u,"settings.test")),Ee(re.HDB_SETTINGS_NAMES.INSTALL_USER,Qg.userInfo()?Qg.userInfo().username:void 0),Ee(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.HDB_SETTINGS_NAMES.CERT_KEY,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Br.join(u,"envDir","log")),Ee(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Br.join(u,"envDir")),Ee(re.CONFIG_PARAMS.STORAGE_PATH,Br.join(u,"envDir")),Ee(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Kn.isEmpty(n)?!0:n),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Kn.isEmpty(n)?!0:n),Ee(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Kn.isEmpty(i)?!1:i),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Kn.isEmpty(i)?!1:i),Ee(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Br.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Lu}. Please check your boot props and settings files`;ia.fatal(r),ia.error(t)}}a(dx,"initTestEnvironment")});var we=m((Hre,sA)=>{"use strict";var la=A(),Ex=V(),Ht=Q(),_a=require("path"),fx=require("minimist"),Xg=require("fs-extra"),Zg=require("lodash");Ht.initSync();var{CONFIG_PARAMS:dn,SCHEMAS_PARAM_CONFIG:oa,SYSTEM_SCHEMA_NAME:Mu}=la,aa,ca,ua;function jg(){if(aa!==void 0)return aa;if(Ht.getHdbBasePath()!==void 0)return aa=Ht.get(dn.STORAGE_PATH)||_a.join(Ht.getHdbBasePath(),la.DATABASES_DIR_NAME),aa}a(jg,"getBaseSchemaPath");function eA(){if(ca!==void 0)return ca;if(Ht.getHdbBasePath()!==void 0)return ca=rA(Mu),ca}a(eA,"getSystemSchemaPath");function tA(){if(ua!==void 0)return ua;if(Ht.getHdbBasePath()!==void 0)return ua=Ht.get(la.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_a.join(Ht.getHdbBasePath(),la.TRANSACTIONS_DIR_NAME),ua}a(tA,"getTransactionAuditStoreBasePath");function hx(e,t){let r=Ht.get(dn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_a.join(tA(),e.toString())}a(hx,"getTransactionAuditStorePath");function rA(e,t){e=e.toString(),t=t&&t.toString();let r=Ht.get(la.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_a.join(jg(),e)}a(rA,"getSchemaPath");function mx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,fx(process.argv));let s=r[dn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ex.isObject(s))throw o;i=s}for(let o of i){let c=o[Mu];if(!c)continue;let u=Ht.get(dn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[oa.PATH];if(l)return Zg.set(u,[Mu,oa.TABLES,t,oa.PATH],l),Ht.setProperty(dn.SCHEMAS,u),l;let _=c?.[oa.PATH];if(_)return Zg.set(u,[Mu,oa.PATH],_),Ht.setProperty(dn.SCHEMAS,u),_}}let n=r[dn.STORAGE_PATH.toUpperCase()];if(n){if(!Xg.pathExistsSync(n))throw new Error(n+" does not exist");let i=_a.join(n,e);return Xg.mkdirsSync(i),Ht.setProperty(dn.STORAGE_PATH,n),i}return eA()}a(mx,"initSystemSchemaPaths");function Sx(){aa=void 0,ca=void 0,ua=void 0}a(Sx,"resetPaths");sA.exports={getBaseSchemaPath:jg,getSystemSchemaPath:eA,getTransactionAuditStorePath:hx,getTransactionAuditStoreBasePath:tA,getSchemaPath:rA,initSystemSchemaPaths:mx,resetPaths:Sx}});var qt=m((xre,cA)=>{"use strict";var px=rr().LMDB_ERRORS_ENUM,Fre=require("lmdb"),Tx=ke(),Gre=require("buffer").Buffer,{OVERFLOW_MARKER:nA,MAX_SEARCH_KEY_LENGTH:Pu}=Tx,iA=["number","string","symbol","boolean","bigint"];function Rx(e){if(e=e?.primaryStore||e,!e)throw new Error(px.ENV_REQUIRED)}a(Rx,"validateEnv");function gx(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(gx,"stringifyData");function Ax(e){return e instanceof Date?e.valueOf():e}a(Ax,"convertKeyValueToWrite");function Ox(e){if(e==null)return;if(iA.includes(typeof e))return e.length>Pu?[e.slice(0,Pu)+nA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(iA.includes(typeof n))n.length>Pu?t.push(n.slice(0,Pu)+nA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Ox,"getIndexedValues");var vu=0,oA=0;function aA(){oA=Date.now()-performance.now()}a(aA,"adjustStartTime");aA();var Nx=6e4;setInterval(aA,Nx).unref();function bx(){let e=performance.now()+oA;return e>vu?(vu=e,e):(vu+=488e-6,vu)}a(bx,"getNextMonotonicTime");cA.exports={validateEnv:Rx,stringifyData:gx,convertKeyValueToWrite:Ax,getNextMonotonicTime:bx,getIndexedValues:Ox}});var uA,Zr,WE,da=Se(()=>{uA=require("events"),Zr=class extends uA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new WE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},WE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Ea(e){return e[ht]||(e[ht]=Object.create(null))}function Gu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=lA(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){Ea(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Bu.ClientError("Can not add a property to a sealed table schema");Ea(this)[o]=c}),i("deleteProperty",function(o){Ea(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function lA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ce]=n}},Gu(r,t)),new r(e)):new Hu(e);case Array:let s=new Fu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=lA(o,t?.elements)),s[n]=o}return s}}function xu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=xu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function fa(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=fa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=fa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function qu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Wn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(qu(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(qu(n))return!0}else return!0}else return!0}}return!1}var Bu,ht,Hu,Wn,Fu,ku=Se(()=>{jr();Bu=C(W()),ht=Symbol("own-data");a(Ea,"getChanges");a(Gu,"assignTrackedAccessors");a(lA,"trackObject");Hu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Gu(Hu,{});a(xu,"collapseData");a(fa,"deepFreeze");a(qu,"hasChanges");Wn=Symbol.for("has-array-changes"),Fu=class extends Array{static{a(this,"TrackedArray")}[Wn];constructor(t){super(t)}splice(...t){return this[Wn]=!0,super.splice(...t)}push(...t){return this[Wn]=!0,super.push(...t)}pop(){return this[Wn]=!0,super.pop()}unshift(...t){return this[Wn]=!0,super.unshift(...t)}shift(){return this[Wn]=!0,super.shift()}};Fu.prototype.constructor=Array});function Ke(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new QE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var _A,dA,QE,Qn=Se(()=>{_A=C(qt()),dA=require("../index");jr();a(Ke,"transaction");(0,dA._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};QE=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,_A.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function XE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(Ix[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=ts.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case dt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new zE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=ZE(e);if(!p)throw new zE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(k=>setImmediate(()=>k(p(O)?R:fA.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function ZE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case dt.SEARCH_TYPES.EQUALS:case void 0:return es(r,n=>n===s);case dt.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case dt.SEARCH_TYPES.ENDS_WITH:case dt.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case dt.SEARCH_TYPES.STARTS_WITH:case dt.SEARCH_TYPES._STARTS_WITH:return es(r,n=>typeof n=="string"&&n.startsWith(s));case dt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case dt.SEARCH_TYPES.GREATER_THAN:case dt.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case dt.SEARCH_TYPES.GREATER_THAN_EQUAL:case dt.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case dt.SEARCH_TYPES.LESS_THAN:case"lt":case dt.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case dt.SEARCH_TYPES.LESS_THAN_EQUAL:case dt.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Vu(e){if(!e)return;let t=new JE,r,s,n,i,o;for(;r=EA.exec(e);){i=EA.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=yx[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var zE,dt,ts,fA,EA,yx,Ix,JE,$u=Se(()=>{zE=C(W()),dt=C(ke()),ts=require("ordered-binary"),fA=require("lmdb"),EA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,yx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(XE,"idsForCondition");Ix={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(ZE,"filterByType");a(es,"attributeComparator");a(Vu,"parseQuery");JE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var tf={};xe(tf,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Bs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>RA,snake_case:()=>Cx});function Cx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function hA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new ef(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ke(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[RA]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new Yu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Yu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new TA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function jE(e){let t=e[ce];if(t){let r=e[ht];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function mA(e){if(typeof e=="string")return t=>jE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=jE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=jE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var SA,pA,TA,Ae,ae,Bs,RA,ce,wx,mt,Yu,ef,jr=Se(()=>{SA=require("crypto");da();pA=require("../index"),TA=C(W());ku();Qn();$u();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Bs=Symbol("is-collection"),RA=Symbol("save-updates"),ce=Symbol("stored-record"),wx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Rr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=mA(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[Bs]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,SA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=mA(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[Bs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Bs]}static coerceId(t){return t}static parseQuery(t){return Vu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&wx[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:hA(t,this)}}return hA(t,this)}static getResource(t,r,s){let n,i=r[Ae],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ae]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ae],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[Bs]=!0),n}connect(t){let r=new Zr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,pA._assignPackageExport)("Resource",mt);a(Cx,"snake_case");Yu=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(hA,"pathToId");ef=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(jE,"selectFromObject");a(mA,"transformForSelect")});function af(e){let t=e.auditStore=e.openDB(bA.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,IA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{sf||(sf=setTimeout(()=>{if(sf=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-gA,0]})){if((n[0]&15)===of){let i=s[1];r[i]?.(s[2])}t.remove(s)}},gA/10).unref())}),t}function Qu(e,t,r){let s=UA[r.type],n=3;if(t?t.length>80?(s|=Ku,n=(0,Hs.writeKey)(t,rs,e?14:6),rf.setUint16(2,n)):(n=(0,Hs.writeKey)(t,rs,e?11:3),rs[1]=n):rs[1]=0,e){s|=CA;let i=s&Ku?6:3;rf.setFloat64(i,e),t||(n=i+8)}return rs[0]=s,s&Ku?rf.setUint16(4,0):rs[2]=0,r.value?Buffer.concat([rs.slice(0,n),r.value]):rs.subarray(0,n)}function En(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Ku,i=n?6:3,o;r&CA&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&nf?t.decoder.decode(e.subarray(c||i)):void 0;return{type:UA[r&7],value:u,lastVersion:o,get user(){return c?(0,Hs.readKey)(e,i,c):void 0}}}var Hs,Wu,bA,yA,IA,wA,rs,rf,Ux,Dx,gA,sf,nf,AA,of,OA,NA,Ku,CA,UA,ha=Se(()=>{Hs=require("ordered-binary"),Wu=C(Q()),bA=C(ke()),yA=C(A()),IA=C(st()),wA=C(V());(0,Wu.initSync)();rs=Buffer.alloc(1024),rf=new DataView(rs.buffer,rs.byteOffset,1024),Ux={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,Hs.writeKey)(e[2],t,r+12)}else return(0,Hs.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,Hs.readKey)(e,t+12,r)]}else return(0,Hs.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Ux},gA=(0,wA.convertToMS)((0,Wu.get)(yA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,sf=null;a(af,"openAuditStore");nf=16,AA=1,of=2,OA=3,NA=4,Ku=128,CA=64,UA={put:AA|nf,[AA]:"put",delete:of,[of]:"delete",message:OA|nf,[OA]:"message",invalidate:NA,[NA]:"invalidate"};a(Qu,"createAuditEntry");a(En,"readAuditEntry")});var cf,zn,Lx,ma,zu,DA=Se(()=>{cf=C(qt());ha();zn=Symbol("completion"),Lx=100,ma=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,cf.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[zn]&&(i||(i=[]),i.push(d[zn])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Qu(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<Lx>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},zu=class extends ma{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,cf.getNextMonotonicTime)())}getReadTxn(){}}});var LA={};xe(LA,{Resources:()=>Ju,keyArrayToString:()=>xi,resetResources:()=>Mx,resources:()=>fn});function Mx(){return fn=new Ju}function xi(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ju,fn,Sa=Se(()=>{Qn();Ju=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Mx,"resetResources");a(xi,"keyArrayToString")});function BA(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Vi||((0,Jn.onMessageByType)(PA,d=>{let E=d.auditIds;lf(d.path,E,d.txnId)}),(0,Jn.onMessageByType)(vA,d=>{(0,ss.trace)("confirming to proceed with txn",d.txnId)}),Vi=Object.create(null));let c=Vi[i]||(Vi[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=xi(t);let l=new uf(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function lf(e,t,r,s){if(!Vi)return;let n=Vi[e];if(n){if(ki&&ki+1!==r){(0,ss.trace)("Waiting to ensure latest txn id",ki,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c);if(ki+1!==r){await(0,Jn.broadcastWithAcknowledgement)({type:vA,txnId:r});for(let[o,c]of Xu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c)}Xu.delete(r),(0,ss.trace)("Proceeding with txn id",r),ki=r-1,lf(e,t,r,s)})();return Xu.set(r,i),i}(0,ss.trace)("Notifying with txn id",r,s),ki=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,MA.writeKey)(i,vx,0);let _=i[3];_&&(i.length=3);let d,E=xi(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,ss.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=En(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,ss.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function HA(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&Px)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Jn.broadcast)({type:PA,path:n,auditIds:l,txnId:c,start:u}),lf(n,l,c,!0))})}}var ss,Jn,MA,PA,vA,Px,Vi,vx,uf,ki,Xu,qA=Se(()=>{ss=C(x()),Jn=C(st()),MA=require("ordered-binary");da();Sa();ha();PA="transaction",vA="transaction-await",Px=67108864,vx=Buffer.alloc(4096);a(BA,"addSubscription");uf=class extends Zr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Xu=new Map;a(lf,"notifyFromTransactionData");a(HA,"listenToCommits")});var GA=m((Sse,FA)=>{"use strict";var _f=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};FA.exports=_f});var kA=m((Tse,xA)=>{"use strict";var df=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};xA.exports=df});var Zu=m((gse,VA)=>{"use strict";var ff=Q(),hf=A();ff.initSync();var Bx=ff.get(hf.CONFIG_PARAMS.STORAGE_COMPRESSION),Hx=ff.get(hf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,qx=hf.UPDATES_PROPERTY,Ef=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Bx&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Hx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===qx)}};VA.exports=Ef});var el=m((Ose,YA)=>{"use strict";var $i=Q(),pa=A();$i.initSync();var Fx=$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||$i.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",$A=$i.get(pa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Gx=$i.get(pa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ju=class{static{a(this,"OpenEnvironmentObject")}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=Fx,this.noFSAccess=!0,$A!==void 0&&(this.overlappingSync=$A),this.noReadAhead=Gx}};YA.exports=ju;ju.MAX_DBS=1e4});var ye=m((bse,tO)=>{"use strict";var Sf=require("lmdb"),Hr=require("fs-extra"),ir=require("path"),tl=qt(),QA=x(),Ft=rr().LMDB_ERRORS_ENUM,rl=kA(),pf=Zu(),zA=el(),hn=ke(),KA=A(),{table:xx,resetDatabases:kx}=(de(),ee(Ne)),WA=Q(),qr=hn.INTERNAL_DBIS_NAME,JA=hn.DBI_DEFINITION_NAME,Vx="data.mdb",$x="lock.mdb",Ta=".mdb",Yx="-lock",mf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[hn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[hn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Sf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function sl(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(sl,"pathEnvNameValidation");async function Tf(e,t,r=!0){try{await Hr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ta);return await Hr.access(s,Hr.constants.R_OK|Hr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Hr.access(ir.join(e,t,Vx),Hr.constants.R_OK|Hr.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(Tf,"validateEnvironmentPath");function nl(e,t){if(tl.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a(nl,"validateEnvDBIName");async function Kx(e,t,r=!1,s=!1){sl(e,t);let n=ir.basename(e);t=t.toString();let i=WA.get(KA.CONFIG_PARAMS.SCHEMAS);i||WA.setProperty(KA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Tf(e,t,s),XA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Hr.mkdirp(s?c:e);let u=new zA(s?c:c+Ta,!1),l=Sf.open(u);l.dbis=Object.create(null);let _=new pf(!1);l.openDB(qr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Rf(e,t,r);return l[hn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Kx,"createEnvironment");async function Wx(e,t,r,s=!0){sl(e,t),t=t.toString();let n=ir.join(e,t);return xx({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Wx,"copyEnvironment");async function XA(e,t,r=!1){sl(e,t),t=t.toString();let s=Rf(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 Tf(e,t),i=ir.join(e,t+Ta),o=n!=i,c=new zA(n,o),u=Sf.open(c);u.dbis=Object.create(null);let l=jA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[hn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(XA,"openEnvironment");async function Qx(e,t,r=!1){sl(e,t),t=t.toString();let s=ir.join(e,t+Ta),n=await Tf(e,t);if(global.lmdb_map!==void 0){let i=Rf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await ZA(o),delete global.lmdb_map[i]}}await Hr.remove(n),await Hr.remove(n===s?n+Yx:ir.join(ir.dirname(n),$x))}a(Qx,"deleteEnvironment");async function ZA(e){tl.validateEnv(e);let t=e[hn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(ZA,"closeEnvironment");function Rf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Rf,"getCachedEnvironmentName");function zx(e){tl.validateEnv(e);let t=Object.create(null),r=Ar(e,qr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==qr)try{t[s]=Object.assign(new rl,n)}catch{QA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(zx,"listDBIDefinitions");function jA(e){tl.validateEnv(e);let t=[],r=Ar(e,qr);for(let{key:s}of r.getRange({start:!1}))s!==qr&&t.push(s);return t}a(jA,"listDBIs");function Jx(e,t){let s=Ar(e,qr).getEntry(t),n=new rl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{QA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Jx,"getDBIDefinition");function eO(e,t,r,s=!r){if(nl(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new pf(r,s===!0),o=e.openDB(t,i),c=new rl(r===!0,s);return o[JA]=c,Ar(e,qr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(eO,"createDBI");function Ar(e,t){if(nl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==qr?r=Jx(e,t):r=new rl,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new pf(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(Ft.DBI_DOES_NOT_EXIST):n}return s[JA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function Xx(e,t){nl(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[hn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Xx,"statDBI");async function Zx(e,t){try{let r=ir.join(e,t+Ta);return(await Hr.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(Zx,"environmentDataSize");function jx(e,t){if(nl(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,qr).removeSync(t)}a(jx,"dropDBI");function ek(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===Ft.DBI_DOES_NOT_EXIST)eO(e,i,i!==t,i===t),s=!0;else throw o}}s&&kx()}a(ek,"initializeDBIs");tO.exports={openDBI:Ar,openEnvironment:XA,createEnvironment:Kx,listDBIs:jA,listDBIDefinitions:zx,createDBI:eO,dropDBI:jx,statDBI:Xx,deleteEnvironment:Qx,initializeDBIs:ek,TransactionCursor:mf,environmentDataSize:Zx,copyEnvironment:Wx,closeEnvironment:ZA}});var nO=m((Ise,sO)=>{"use strict";var gf=ye(),tk=x(),rO=rr().LMDB_ERRORS_ENUM;sO.exports=rk;async function rk(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await gf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==rO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await gf.closeEnvironment(global.lmdb_map[s]),await gf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==rO.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){tk.error(t)}}a(rk,"cleanLMDBMap")});var Xn=m((Cse,sk)=>{sk.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_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var SO=m((Dse,mO)=>{"use strict";var Af=require("recursive-iterator"),nk=require("alasql"),Of=require("clone"),iO=V(),{handleHDBError:oO,hdb_errors:ik}=W(),{HDB_ERROR_MSGS:aO,HTTP_STATUS_CODES:cO}=ik,{getDatabases:ok}=(de(),ee(Ne)),ak=["DISTINCT_ARRAY"],uO=Symbol("validateTables"),Nf=Symbol("validateTable"),Use=Symbol("getAllColumns"),lO=Symbol("validateAllColumns"),il=Symbol("findColumn"),_O=Symbol("validateOrderBy"),Ra=Symbol("validateSegment"),bf=Symbol("validateColumn"),dO=Symbol("setColumnsForTable"),EO=Symbol("checkColumnsForAsterisk"),fO=Symbol("validateGroupBy"),hO=Symbol("hasColumns"),yf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[uO](),this[EO](),this[lO]()}[uO](){if(this[hO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Nf](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Nf](t.table)})}}[hO](){let t=!1,r=new Af(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Nf](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ok();if(!r[t.databaseid])throw oO(new Error,aO.SCHEMA_NOT_FOUND(t.databaseid),cO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw oO(new Error,aO.TABLE_NOT_FOUND(t.databaseid,t.tableid),cO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Of(n);i.table=Of(t),this.attributes.push(i)})}[il](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)}[EO](){let t=new Af(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[dO](r.tableid)}[dO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new nk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[lO](){this[Ra](this.statement.columns,!1),this[Ra](this.statement.joins,!1),this[Ra](this.statement.where,!1),this[fO](this.statement.group,!1),this[Ra](this.statement.order,!0)}[Ra](t,r){if(!t)return;let s=new Af(t),n=[];for(let{node:i,path:o}of s)!iO.isEmpty(i)&&!iO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[_O](i):n.push(this[bf](i)));return n}[fO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ak.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Of(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[il](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[il](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[_O](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[bf](t)}[bf](t){let r=this[il](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]}};mO.exports=yf});var TO=m((Mse,pO)=>{"use strict";var If=class{static{a(this,"BridgeMethods")}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")}};pO.exports=If});var gO=m((vse,RO)=>{"use strict";var wf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};RO.exports=wf});var OO=m((Hse,AO)=>{"use strict";var Cf=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};AO.exports=Cf});var bO=m((Fse,NO)=>{"use strict";var Uf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};NO.exports=Uf});var Yi=m(($se,wO)=>{"use strict";var ck=ye(),uk=gO(),lk=OO(),_k=bO(),ns=qt(),ga=rr().LMDB_ERRORS_ENUM,dk=ke(),qs=A(),Ek=V(),fk=require("uuid"),xse=require("lmdb"),{handleHDBError:hk,hdb_errors:mk}=W(),{OVERFLOW_MARKER:kse,MAX_SEARCH_KEY_LENGTH:Vse}=dk,yO=Q();yO.initSync();var ol=yO.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Df=qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Zn=qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Sk(e,t,r,s,n=ns.getNextMonotonicTime()){vf(e,t,r,s),Lf(e,t,r);let i=new uk,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];IO(l,!0,n);let _=pk(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Mf(o,c,s,i,n)}a(Sk,"insertRecords");function pk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][qs.FUNC_VAL],s[o]=c)}let u=ns.getIndexedValues(c),l=e.dbis[o];if(u){ol&&l.prefetch(u.map(_=>({key:_,value:n})),al);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}ol&&e.dbis[t].prefetch([n],al),e.dbis[t].put(n,s,s[Zn])})}a(pk,"insertRecord");function Tk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Tk,"removeSkippedRecords");function IO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Zn]))&&(e[Zn]=r||(r=ns.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Df]))&&(e[Df]=r||ns.getNextMonotonicTime()):delete e[Df]}a(IO,"setTimestamps");function Lf(e,t,r){r.indexOf(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),ck.initializeDBIs(e,t,r)}a(Lf,"initializeTransaction");async function Rk(e,t,r,s,n=ns.getNextMonotonicTime()){vf(e,t,r,s),Lf(e,t,r);let i=new lk,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Pf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Mf(c,u,s,i,n,o)}a(Rk,"updateRecords");async function gk(e,t,r,s,n=ns.getNextMonotonicTime()){try{vf(e,t,r,s)}catch(u){throw hk(u,u.message,mk.HTTP_STATUS_CODES.BAD_REQUEST)}Lf(e,t,r);let i=new _k,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Ek.isEmpty(l[t])?(_=fk.v4(),l[t]=_):_=l[t];let d=Pf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Mf(o,c,s,i,n)}a(gk,"upsertRecords");async function Mf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ns.getNextMonotonicTime(),Tk(r,i),s}a(Mf,"finalizeWrite");function Pf(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(IO(r,!_,o),Number.isInteger(r[Zn])&&l[Zn]>r[Zn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][qs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ns.getIndexedValues(R);if(O){ol&&p.prefetch(O.map(k=>({key:k,value:s})),al);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ns.getIndexedValues(T),O){ol&&p.prefetch(O.map(k=>({key:k,value:s})),al);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Zn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Pf(e,t,r,s,n,i,o))}a(Pf,"updateUpsertRecord");function Ak(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(ga.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ga.WRITE_ATTRIBUTES_REQUIRED):new Error(ga.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ak,"validateBasic");function vf(e,t,r,s){if(Ak(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ga.RECORDS_REQUIRED):new Error(ga.RECORDS_MUST_BE_ARRAY)}a(vf,"validateWrite");function al(){}a(al,"noop");wO.exports={insertRecords:Sk,updateRecords:Rk,upsertRecords:gk}});var is=m((Kse,DO)=>{"use strict";var UO=V(),CO=A(),Ki=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fs=require("joi"),mn={schema_format:{pattern:Ki,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ok=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()).required(),Nk=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()),bk=Fs.alternatives(Fs.string().min(1).max(mn.schema_length.maximum).pattern(Ki).messages({"string.pattern.base":"{:#label} "+mn.schema_format.message}),Fs.number()).required();function yk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>mn.schema_length.maximum?`'${e}' maximum of 250 characters`:Ki.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(yk,"checkValidTable");function Ik(e,t){return UO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Ik,"validateSchemaExists");function wk(e,t){let r=t.state.ancestors[0].schema;return UO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(wk,"validateTableExists");function Ck(e,t){return e.toLowerCase()===CO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${CO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Ck,"validateSchemaName");DO.exports={common_validators:mn,schema_regex:Ki,hdb_schema_table:Ok,validateSchemaExists:Ik,validateTableExists:wk,validateSchemaName:Ck,checkValidTable:yk,hdb_database:Nk,hdb_table:bk}});var cl=m((Qse,LO)=>{var{common_validators:os}=is(),Oa=ve(),Aa="is required",We={database:{presence:!1,format:os.schema_format,length:os.schema_length},schema:{presence:!1,format:os.schema_format,length:os.schema_length},table:{presence:!0,format:os.schema_format,length:os.schema_length},attribute:{presence:!0,format:os.schema_format,length:os.schema_length},hash_attribute:{presence:!0,format:os.schema_format,length:os.schema_length}};function Na(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Na,"makeAttributesStrings");function Uk(e){return e=Na(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Uk,"schema_object");function Dk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Dk,"table_object");function Lk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,Oa.validateObject(e,We)}a(Lk,"create_table_object");function Mk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence={message:Aa},We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Mk,"attribute_object");function Pk(e){return e=Na(e),We.table.presence={message:Aa},We.attribute.presence=!1,We.hash_attribute.presence=!1,Oa.validateObject(e,We)}a(Pk,"describe_table");function vk(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(vk,"validateTableResidence");LO.exports={schema_object:Uk,create_table_object:Lk,table_object:Dk,attribute_object:Mk,describe_table:Pk,validateTableResidence:vk}});var PO=m((Jse,MO)=>{"use strict";var Bk=require("uuid"),Bf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Bk.v4(),this.schema_table=`${this.schema}.${this.table}`}};MO.exports=Bf});var ul=m((Zse,vO)=>{"use strict";var Hk=PO(),Hf=class extends Hk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};vO.exports=Hf});var HO=m((ene,BO)=>{"use strict";BO.exports=Fk;var qk="inserted";function Fk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fk,"returnObject")});var ll=m((rne,kO)=>{"use strict";var Gk=A(),qf=ye(),xk=Yi(),{getSystemSchemaPath:kk,getSchemaPath:Vk}=we(),$k=Xn(),Yk=cl(),Kk=ul(),Wk=HO(),{handleHDBError:qO,hdb_errors:GO}=W(),FO=V(),{HTTP_STATUS_CODES:Qk}=GO,Ff=$k.hdb_attribute,xO=[];for(let e=0;e<Ff.attributes.length;e++)xO.push(Ff.attributes[e].attribute);var zk="inserted";kO.exports=Jk;async function Jk(e){let t=Yk.attribute_object(e);if(t)throw qO(new Error,t.message,GO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&FO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw qO(new Error,r,Qk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=FO.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 Kk(e.schema,e.table,e.attribute,e.id);try{let i=await qf.openEnvironment(Vk(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}`);qf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await qf.openEnvironment(kk(),Gk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await xk.insertRecords(o,Ff.hash_attribute,xO,[n]);return Wk(zk,c,{records:[n]},u)}catch(i){throw i}}a(Jk,"lmdbCreateAttribute")});var xf=m((nne,$O)=>{var{hdb_table:Xk,hdb_database:VO}=is(),Zk=ve(),Gf=require("joi"),jk={undefined:"undefined",null:"null"},eV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||jk[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),tV=Gf.object({database:VO,schema:VO,table:Xk,records:Gf.array().items(Gf.object().custom(eV)).required()});$O.exports=function(e){return Zk.validateBySchema(e,tV)}});var ba=m((ane,KO)=>{"use strict";var Gs=V(),YO=x(),one=xf(),{getDatabases:rV}=(de(),ee(Ne)),{ClientError:jn}=W();KO.exports=sV;function sV(e){if(Gs.isEmpty(e))throw new jn("invalid update parameters defined.");if(Gs.isEmptyOrZeroLength(e.schema))throw new jn("invalid schema specified.");if(Gs.isEmptyOrZeroLength(e.table))throw new jn("invalid table specified.");if(!Array.isArray(e.records))throw new jn("records must be an array");let t=rV()[e.schema]?.[e.table];if(Gs.isEmpty(t))throw new jn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Gs.isEmptyOrZeroLength(o[r]))throw YO.error("a valid hash attribute must be provided with update record:",o),new jn("a valid hash attribute must be provided with update record, check log for more info");if(!Gs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw YO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new jn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Gs.isEmpty(o[r])&&o[r]!==""&&s.has(Gs.autoCast(o[r]))&&(o.skip=!0),s.add(Gs.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(sV,"insertUpdateValidate")});var ya=m((une,WO)=>{"use strict";var nV=A().OPERATIONS_ENUM,kf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=nV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};WO.exports=kf});var Ua=m((dne,QO)=>{"use strict";var _ne=ya(),_l=A(),$f=V(),Vf=x(),iV=require("uuid"),{handleHDBError:Ia,hdb_errors:oV}=W(),{HDB_ERROR_MSGS:wa,HTTP_STATUS_CODES:Ca}=oV;QO.exports=aV;function aV(e,t,r){for(let n=0;n<t.length;n++)cV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];uV(i,r,e.operation)}}a(aV,"processRows");function cV(e){if(Buffer.byteLength(String(e))>_l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ia(new Error,wa.ATTR_NAME_LENGTH_ERR(e),Ca.BAD_REQUEST,void 0,void 0,!0);if($f.isEmptyOrZeroLength(e)||$f.isEmpty(e.trim()))throw Ia(new Error,wa.ATTR_NAME_NULLISH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(cV,"validateAttribute");function uV(e,t,r){if(!e.hasOwnProperty(t)||$f.isEmptyOrZeroLength(e[t])){if(r===_l.OPERATIONS_ENUM.INSERT||r===_l.OPERATIONS_ENUM.UPSERT){e[t]=iV.v4();return}throw Vf.error("Update transaction aborted due to record with no hash value:",e),Ia(new Error,wa.RECORD_MISSING_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>_l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vf.error(e),Ia(new Error,wa.HASH_VAL_LENGTH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Vf.error(e),Ia(new Error,wa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(uV,"validateHash")});var dl=m((fne,JO)=>{"use strict";var zO=V(),lV=A(),_V=x(),dV=ll(),EV=ul(),fV=xs(),{SchemaEventMsg:hV}=Fr(),mV="already exists in";JO.exports=SV;async function SV(e,t,r){if(zO.isEmptyOrZeroLength(r))return r;let s=[];zO.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 pV(e,t.schema,t.name,i)})),n}a(SV,"lmdbCheckForNewAttributes");async function pV(e,t,r,s){let n=new EV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await TV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(mV))_V.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(pV,"createNewAttribute");async function TV(e){let t;return t=await dV(e),fV.signalSchemaChange(new hV(process.pid,lV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(TV,"createAttribute")});var Wi=m((mne,XO)=>{"use strict";var Yf=class{static{a(this,"LMDBTransactionObject")}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}};XO.exports=Yf});var jO=m((pne,ZO)=>{"use strict";var RV=Wi(),gV=A().OPERATIONS_ENUM,Kf=class extends RV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(gV.INSERT,r,s,n,i),this.records=t}};ZO.exports=Kf});var tN=m((Rne,eN)=>{"use strict";var AV=Wi(),OV=A().OPERATIONS_ENUM,Wf=class extends AV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(OV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};eN.exports=Wf});var sN=m((Ane,rN)=>{"use strict";var NV=Wi(),bV=A().OPERATIONS_ENUM,Qf=class extends NV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(bV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};rN.exports=Qf});var iN=m((Nne,nN)=>{"use strict";var yV=Wi(),IV=A().OPERATIONS_ENUM,zf=class extends yV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(IV.DELETE,s,n,t,i),this.original_records=r}};nN.exports=zf});var Da=m((Ine,uN)=>{"use strict";var yne=require("path"),oN=ye(),wV=jO(),CV=tN(),UV=sN(),DV=iN(),Qi=ke(),aN=V(),{CONFIG_PARAMS:LV}=A(),cN=Q();cN.initSync();var El=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:MV}=we();uN.exports=PV;async function PV(e,t){if(cN.get(LV.LOGGING_AUDITLOG)===!1)return;let r=MV(e.schema,e.table),s=await oN.openEnvironment(r,e.table,!0),n=vV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){oN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),aN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(PV,"writeTransaction");function vV(e,t){let r=aN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===El.INSERT)return new wV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPDATE)return new CV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPSERT)return new UV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.DELETE)return new DV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(vV,"createTransactionObject")});var Jf=m((Une,lN)=>{"use strict";var BV=ba(),Cne=ya(),La=A(),HV=Ua(),qV=Yi().insertRecords,FV=ye(),GV=x(),xV=dl(),{getSchemaPath:kV}=we(),VV=Da();lN.exports=$V;async function $V(e){try{let{schema_table:t,attributes:r}=BV(e);HV(e,r,t.hash_attribute),e.schema!==La.SYSTEM_SCHEMA_NAME&&(r.includes(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xV(e.hdb_auth_header,t,r),n=kV(e.schema,e.table),i=await FV.openEnvironment(n,e.table),o=await qV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await VV(e,o)}catch(c){GV.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a($V,"lmdbCreateRecords")});var EN=m((Lne,dN)=>{"use strict";var _N=A(),YV=Jf(),KV=ya(),WV=require("fs-extra"),{getSchemaPath:QV}=we();dN.exports=zV;async function zV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KV(_N.SYSTEM_SCHEMA_NAME,_N.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await YV(r),await WV.mkdirp(QV(e.schema))}a(zV,"lmdbCreateSchema")});var hN=m((Pne,fN)=>{"use strict";var Xf=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};fN.exports=Xf});var TN=m((Fne,pN)=>{"use strict";var mN=ye(),Zf=qt(),jf=rr().LMDB_ERRORS_ENUM,JV=ke(),SN=x(),Bne=V(),XV=require("lmdb"),ZV=hN(),jV=A(),{OVERFLOW_MARKER:Hne,MAX_SEARCH_KEY_LENGTH:qne}=JV,e$=jV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function t$(e,t,r,s){if(Zf.validateEnv(e),t===void 0)throw new Error(jf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(jf.IDS_REQUIRED):new Error(jf.IDS_MUST_BE_ITERABLE);try{let n=mN.listDBIs(e);mN.initializeDBIs(e,t,n);let i=new ZV,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[e$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,XV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=Zf.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{SN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){SN.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Zf.getNextMonotonicTime(),i}catch(n){throw n}}a(t$,"deleteRecords");pN.exports={deleteRecords:t$}});var Ma=m((xne,gN)=>{"use strict";var zi=V(),r$=TN(),s$=ye(),{getSchemaPath:n$}=we(),i$=Da(),o$=x();gN.exports=a$;async function a$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return RN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=n$(e.schema,e.table),i=await s$.openEnvironment(n,e.table),o=await r$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await i$(e,o)}catch(c){o$.error(`unable to write transaction due to ${c.message}`)}return RN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(a$,"lmdbDeleteRecords");function RN(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(RN,"createDeleteResponse")});var th=m(($ne,AN)=>{"use strict";var c$=A(),Vne=qt();function eh(e,t){let r=Object.create(null);if(t.length===1&&c$.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(eh,"parseRow");function u$(e,t,r,s){let n=eh(r,e);s.push(n)}a(u$,"searchAll");function l$(e,t,r,s){let n=eh(r,e);s[t]=n}a(l$,"searchAllToMap");function _$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(_$,"iterateDBI");function ei(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ei,"pushResults");function d$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}a(d$,"endsWith");function E$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}a(E$,"contains");function f$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}a(f$,"greaterThanCompare");function h$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}a(h$,"greaterThanEqualCompare");function m$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}a(m$,"lessThanCompare");function S$(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}a(S$,"lessThanEqualCompare");AN.exports={parseRow:eh,searchAll:u$,searchAllToMap:l$,iterateDBI:_$,endsWith:d$,contains:E$,greaterThanCompare:f$,greaterThanEqualCompare:h$,lessThanCompare:m$,lessThanEqualCompare:S$,pushResults:ei}});var Ji=m((zne,CN)=>{"use strict";var Sn=ye(),Kne=x(),or=qt(),fl=ke(),Ve=rr().LMDB_ERRORS_ENUM,Wne=V(),p$=A(),hl=th(),{parseRow:T$}=hl,Qne=require("lmdb"),{OVERFLOW_MARKER:ON,MAX_SEARCH_KEY_LENGTH:R$}=fl;function NN(e,t,r,s=!1,n=void 0,i=void 0){return ti(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(NN,"iterateFullIndex");function Pa(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ti(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Pa,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[fl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ti,"setupTransaction");function bN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ON)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[fl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(bN,"getOverflowCheck");function g$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(o,c,u)=>(ml(r),r=va(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>T$(l.value,r))))}a(g$,"searchAll");function A$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);ml(r),r=va(e.database||e,r);let o=new Map;for(let{key:c,value:u}of NN(e,t,t,s,n,i))o.set(c,hl.parseRow(u,r));return o}a(A$,"searchAllToMap");function O$(e,t,r=!1,s=void 0,n=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=NN(e,void 0,t,r,s,n),c=o.transaction,u=bN(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(O$,"iterateDBI");function N$(e,t){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(N$,"countAll");function b$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,t,r,(c,u,l,_)=>(s=or.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(b$,"equals");function y$(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(y$,"count");function I$(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ti(e,null,r,(c,u)=>{s=or.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(I$,"startsWith");function w$(e,t,r,s,n=!1,i=void 0,o=void 0){return yN(e,t,r,s,n,i,o,!0)}a(w$,"endsWith");function yN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ti(e,null,r,(u,l,_,d)=>{let E=bN(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(ON)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[fl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(yN,"contains");function C$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!0,!1)}a(C$,"greaterThan");function U$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!1,!1)}a(U$,"greaterThanEqual");function D$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!0)}a(D$,"lessThan");function L$(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!1)}a(L$,"lessThanEqual");function M$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(or.validateEnv(e),r===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Ve.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Ve.END_VALUE_REQUIRED);if(s=or.convertKeyValueToWrite(s),n=or.convertKeyValueToWrite(n),s>n)throw new Error(Ve.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pa(e,t,r,s,n,i,o,c)}a(M$,"between");function P$(e,t,r,s){or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(ml(r),r=va(n,r),s===void 0)throw new Error(Ve.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=hl.parseRow(c,r)),o}a(P$,"searchByHash");function v$(e,t,r){or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(v$,"checkHashExists");function B$(e,t,r,s,n=[]){return wN(e,t,r,s,n),IN(e,t,r,s,n).map(i=>i[1])}a(B$,"batchSearchByHash");function H$(e,t,r,s,n=[]){wN(e,t,r,s,n);let i=new Map;for(let[o,c]of IN(e,t,r,s,n))i.set(o,c);return i}a(H$,"batchSearchByHashToMap");function IN(e,t,r,s,n=[]){return ti(e,t,t,(i,o,c)=>{r=va(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,hl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(IN,"batchHashSearch");function wN(e,t,r,s,n){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(ml(r),s==null)throw new Error(Ve.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ve.IDS_MUST_BE_ITERABLE)}a(wN,"initializeBatchSearchByHash");function ml(e){if(!Array.isArray(e))throw e===void 0?new Error(Ve.FETCH_ATTRIBUTES_REQUIRED):new Error(Ve.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ml,"validateFetchAttributes");function pn(e,t,r){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.SEARCH_VALUE_REQUIRED);if(r?.length>R$)throw new Error(Ve.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function va(e,t){return t.length===1&&p$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(va,"setGetWholeRowAttributes");CN.exports={searchAll:g$,searchAllToMap:A$,count:y$,countAll:N$,equals:b$,startsWith:I$,endsWith:w$,contains:yN,searchByHash:P$,setGetWholeRowAttributes:va,batchSearchByHash:B$,batchSearchByHashToMap:H$,checkHashExists:v$,iterateDBI:O$,greaterThan:C$,greaterThanEqual:U$,lessThan:D$,lessThanEqual:L$,between:M$}});var Xi=m((Xne,PN)=>{var UN=require("lodash"),DN=ve(),Ce=require("joi"),q$=V(),{hdb_schema_table:Sl,checkValidTable:LN,hdb_table:MN,hdb_database:pl}=is(),{handleHDBError:F$,hdb_errors:G$}=W(),{getDatabases:x$}=(de(),ee(Ne)),{HTTP_STATUS_CODES:k$}=G$,V$=Ce.object({database:pl,schema:pl,table:MN,search_attribute:Sl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Sl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),$$=Ce.object({database:pl,schema:pl,table:MN,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(Sl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Sl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});PN.exports=function(e,t){let r=null;switch(t){case"value":r=DN.validateBySchema(e,V$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(LN("database",e.schema)),i(LN("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=DN.validateBySchema(e,$$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=q$.checkGlobalSchemaTable(e.schema,e.table);if(n)return F$(new Error,n,k$.NOT_FOUND);let o=x$()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=UN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!UN.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var rh=m((jne,vN)=>{"use strict";var Y$=ye(),K$=Xi(),{getSchemaPath:W$}=we();vN.exports=Q$;function Q$(e){let t=K$(e,"hashes");if(t)throw t;let r=W$(e.schema,e.table);return Y$.openEnvironment(r,e.table)}a(Q$,"initialize")});var sh=m((tie,BN)=>{"use strict";var z$=Ji(),J$=rh();BN.exports=X$;async function X$(e){let t=await J$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return z$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(X$,"lmdbGetDataByHash")});var Zi=m((sie,HN)=>{"use strict";var nh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};HN.exports=nh});var FN=m((oie,qN)=>{"use strict";var iie=Zi(),Z$=Ji(),j$=rh();qN.exports=eY;async function eY(e){let t=await j$(e),r=global.hdb_schema[e.schema][e.table];return Z$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(eY,"lmdbSearchByHash")});var as=m((cie,GN)=>{"use strict";var ih=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=l,this.offset=_}};GN.exports=ih});var Tl=m((lie,KN)=>{"use strict";var It=Ji(),tY=ye(),rY=V(),ie=ke(),ri=A(),sY=Xn(),xN=rr().LMDB_ERRORS_ENUM,{getSchemaPath:nY}=we(),ks=ri.SEARCH_WILDCARDS;async function iY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=sY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=YN(e,s.hash_attribute,r,t);return VN(e,n,s.hash_attribute,r)}a(iY,"prepSearch");async function VN(e,t,r,s){let n=nY(e.schema,e.table),i=await tY.openEnvironment(n,e.table),o=$N(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(oY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?kN(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?kN(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?It.batchSearchByHashToMap(c,r,e.get_attributes,l):It.batchSearchByHash(c,r,e.get_attributes,l)}a(VN,"executeSearch");function $N(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ie.SEARCH_TYPES.EQUALS:n=It.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=It.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=It.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=It.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return It.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return It.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return It.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return It.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=It.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=It.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=It.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=It.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=It.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a($N,"searchByType");function kN(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(kN,"createMapFromIterable");function oY(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(oY,"checkToFetchMore");function YN(e,t,r,s){if(rY.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(xN.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xN.UNKNOWN_SEARCH_TYPE)}}a(YN,"createSearchTypeFromSearchObject");KN.exports={executeSearch:VN,createSearchTypeFromSearchObject:YN,prepSearch:iY,searchByType:$N}});var QN=m((Eie,WN)=>{"use strict";var die=as(),aY=Xi(),cY=V(),uY=A(),lY=Tl();WN.exports=_Y;function _Y(e,t){if(!cY.isEmpty(t)&&uY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aY(e,"value");if(s)throw s;let n=!0;return lY.prepSearch(e,t,n)}a(_Y,"lmdbGetDataByValue")});var Ba=m((mie,zN)=>{"use strict";var hie=as(),dY=Xi(),EY=V(),fY=A(),hY=Tl();zN.exports=mY;async function mY(e,t){if(!EY.isEmpty(t)&&fY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=dY(e,"value");if(s)throw s;return hY.prepSearch(e,t,!1)}a(mY,"lmdbSearchByValue")});var XN=m((Tie,JN)=>{"use strict";var pie=ke(),oh=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},ah=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ch=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};JN.exports={SearchByConditionsObject:oh,SearchCondition:ah,SortAttribute:ch}});var rb=m((Oie,tb)=>{"use strict";var gie=XN().SearchByConditionsObject,SY=as(),pY=Xi(),uh=Ji(),Rl=ke(),{Resource:Aie}=(jr(),ee(tf)),eb=Tl(),TY=th(),RY=require("lodash"),{getSchemaPath:gY}=we(),ZN=ye(),{handleHDBError:AY,hdb_errors:OY}=W(),{HTTP_STATUS_CODES:NY}=OY,bY=1e8;tb.exports=yY;async function yY(e){let t=pY(e,"conditions");if(t)throw AY(t,t.message,NY.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=gY(e.schema,e.table),s=await ZN.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)ZN.openDBI(s,l.search_attribute);let i=RY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Rl.SEARCH_TYPES.EQUALS?l.estimated_count=uh.count(s,l.search_attribute,l.search_value):_===Rl.SEARCH_TYPES.CONTAINS||_===Rl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=bY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await jN(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(eb.filterByType),d=_.length,E=uh.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>TY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await jN(o,e,E,n.hash_attribute);c=c.concat(f)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=uh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(yY,"lmdbSearchByConditions");async function jN(e,t,r,s){let n=new SY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Rl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,eb.searchByType(e,n,i,s).map(o=>o.value)}a(jN,"executeConditionSearch")});var Ha=m((bie,sb)=>{"use strict";var IY=A().OPERATIONS_ENUM,lh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=IY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};sb.exports=lh});var _h=m((Iie,_b)=>{"use strict";var ab=as(),cb=Ha(),ub=Ba(),lb=Ma(),Gt=A(),nb=V(),ib=ye(),{getTransactionAuditStorePath:wY,getSchemaPath:CY}=we(),ob=x();_b.exports=UY;async function UY(e){try{if(nb.isEmpty(global.hdb_schema[e.schema])||nb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await DY(e),await LY(e);let t=CY(e.schema,e.table);try{await ib.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ob.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=wY(e.schema,e.table);await ib.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ob.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UY,"lmdbDropTable");async function DY(e){let t=new ab(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await ub(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await lb(n)}a(DY,"deleteAttributesFromSystem");async function LY(e){let t=new ab(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await ub(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await lb(n)}catch(i){throw i}}a(LY,"dropTableFromSystem")});var Eb=m((Cie,db)=>{"use strict";var MY=require("fs-extra"),PY=as(),vY=Zi(),BY=Ha(),HY=_h(),qY=Ma(),FY=sh(),GY=Ba(),Vs=A(),{getSchemaPath:xY}=we(),{handleHDBError:kY,hdb_errors:VY}=W(),{HDB_ERROR_MSGS:$Y,HTTP_STATUS_CODES:YY}=VY;db.exports=KY;async function KY(e){let t;try{t=await WY(e.schema);let r=new PY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await GY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await HY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new BY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qY(n);let i=xY(t);await MY.remove(i)}catch(r){throw r}}a(KY,"lmdbDropSchema");async function WY(e){let t=new vY(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await FY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw kY(new Error,$Y.SCHEMA_NOT_FOUND(e),YY.NOT_FOUND,void 0,void 0,!0);return s}a(WY,"validateDropSchema")});var Eh=m((Die,fb)=>{"use strict";var dh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};fb.exports=dh});var mb=m((Pie,hb)=>{"use strict";var QY=require("fs-extra"),gl=ye(),{getTransactionAuditStorePath:zY}=we(),fh=ke(),Mie=Eh();hb.exports=JY;async function JY(e){let t;try{let r=zY(e.schema,e.table);await QY.mkdirp(r),t=await gl.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{gl.createDBI(t,fh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),gl.createDBI(t,fh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),gl.createDBI(t,fh.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(JY,"createTransactionsAuditEnvironment")});var Rb=m((Bie,Tb)=>{"use strict";var hh=A(),Sb=ye(),XY=Yi(),{getSystemSchemaPath:ZY,getSchemaPath:jY}=we(),eK=Xn(),tK=ll(),mh=ul(),rK=x(),sK=mb(),ph=eK.hdb_table,pb=[];for(let e=0;e<ph.attributes.length;e++)pb.push(ph.attributes[e].attribute);Tb.exports=nK;async function nK(e,t){let r=jY(t.schema,t.table),s=new mh(t.schema,t.table,hh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new mh(t.schema,t.table,hh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Sb.createEnvironment(r,t.table),e!==void 0){let o=await Sb.openEnvironment(ZY(),hh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await XY.insertRecords(o,ph.hash_attribute,pb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Sh(s),await Sh(n),await Sh(i)}await sK(t)}catch(o){throw o}}a(nK,"lmdbCreateTable");async function Sh(e){try{await tK(e)}catch(t){rK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Sh,"createAttribute")});var Ab=m((qie,gb)=>{"use strict";var iK=ba(),oK=Ua(),aK=dl(),qa=A(),cK=Yi().updateRecords,uK=ye(),{getSchemaPath:lK}=we(),_K=Da(),dK=x();gb.exports=EK;async function EK(e){try{let{schema_table:t,attributes:r}=iK(e);oK(e,r,t.hash_attribute),e.schema!==qa.SYSTEM_SCHEMA_NAME&&(r.includes(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aK(e.hdb_auth_header,t,r),n=lK(e.schema,e.table),i=await uK.openEnvironment(n,e.table),o=await cK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _K(e,o)}catch(c){dK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(EK,"lmdbUpdateRecords")});var Nb=m((Gie,Ob)=>{"use strict";var fK=A().OPERATIONS_ENUM,Th=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=fK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Ob.exports=Th});var yb=m((Vie,bb)=>{"use strict";var kie=Nb(),hK=ba(),mK=Ua(),SK=dl(),Fa=A(),pK=Yi().upsertRecords,TK=ye(),{getSchemaPath:RK}=we(),gK=Da(),AK=x(),{handleHDBError:OK,hdb_errors:NK}=W();bb.exports=bK;async function bK(e){let t;try{t=hK(e)}catch(u){throw OK(u,u.message,NK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;mK(e,s,r.hash_attribute),e.schema!==Fa.SYSTEM_SCHEMA_NAME&&(s.includes(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await SK(e.hdb_auth_header,r,s),i=RK(e.schema,e.table),o=await TK.openEnvironment(i,e.table),c=await pK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await gK(e,c)}catch(u){AK.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(bK,"lmdbUpsertRecords")});var wb=m((Yie,Ib)=>{"use strict";var Rh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Ib.exports=Rh});var Ub=m((Wie,Cb)=>{"use strict";var gh=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};Cb.exports=gh});var Mb=m((Jie,Lb)=>{"use strict";var Ah=ye(),{getTransactionAuditStorePath:yK}=we(),zie=wb(),Ga=ke(),IK=V(),Db=Ub(),wK=require("util").promisify,CK=wK(setTimeout),UK=1e4,DK=100;Lb.exports=LK;async function LK(e){let t=yK(e.schema,e.table),r=await Ah.openEnvironment(t,e.table,!0),s=Ah.listDBIs(r);Ah.initializeDBIs(r,Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Db;do n=await MK(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 CK(DK);while(n.transactions_deleted>0);return i}a(LK,"deleteAuditLogsBefore");async function MK(e,t){let r=new Db;try{let s=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];IK.isEmpty(c)||(n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>UK)break}return await n,r}catch(s){throw s}}a(MK,"deleteTransactions")});var vb=m((Zie,Pb)=>{"use strict";var Oh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};Pb.exports=Oh});var Hb=m((toe,Bb)=>{"use strict";var PK=as(),vK=Ha(),eoe=vb(),cs=A(),BK=V(),Nh=ye(),HK=Xn(),qK=Ba(),FK=Ma(),{getSchemaPath:GK}=we();Bb.exports=xK;async function xK(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=HK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VK(e),n=GK(e.schema,e.table),i=await Nh.openEnvironment(n,e.table);return t===!0&&await kK(e,i,r.hash_attribute),Nh.dropDBI(i,e.attribute),s}a(xK,"lmdbDropAttribute");async function kK(e,t,r){let s=Nh.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(kK,"removeAttributeFromAllObjects");async function VK(e){let t=new PK(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await qK(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(BK.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new vK(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return FK(i)}a(VK,"dropAttributeFromSystem")});var Vb=m((noe,kb)=>{"use strict";var bh=ye(),ji=ke(),soe=qt(),yh=A(),qb=V(),{getTransactionAuditStorePath:$K}=we(),YK=Ji(),Al=Wi(),KK=x();kb.exports=WK;async function WK(e){let t=$K(e.schema,e.table),r=await bh.openEnvironment(t,e.table,!0),s=bh.listDBIs(r);bh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Fb(r,e.search_values);case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,zK(r,e.search_values,n);case yh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QK(r,e.search_values);default:return Fb(r)}}a(WK,"readAuditLog");function Fb(e,t=[0,Date.now()]){qb.isEmpty(t[0])&&(t[0]=0),qb.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.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 Al,n))}a(Fb,"searchTransactionsByTimestamp");function QK(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,xb(e,i))}return Object.fromEntries(r)}a(QK,"searchTransactionsByUsername");function zK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=YK.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=xb(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);Gb(u,"records",r,_,o),Gb(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(zK,"searchTransactionsByHashValues");function Gb(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new Al(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Al(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(Gb,"loopRecords");function xb(e,t){let r=[];try{let s=e.dbis[ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Al,i);r.push(o)}}catch(i){KK.warn(i)}return r}catch(s){throw s}}a(xb,"batchSearchTransactions")});var Yb=m((coe,$b)=>{"use strict";var{getSchemaPath:ooe}=we(),aoe=ye(),{database:JK}=(de(),ee(Ne));$b.exports={writeTransaction:XK};async function XK(e,t,r){return JK({database:e,table:t}).transaction(r)}a(XK,"writeTransaction")});var zb=m((loe,Qb)=>{"use strict";var{getSchemaPath:Kb}=we(),Wb=ye();Qb.exports={flush:ZK,resetReadTxn:jK};async function ZK(e,t){return(await Wb.openEnvironment(Kb(e,t),t.toString())).flushed}a(ZK,"flush");async function jK(e,t){try{(await Wb.openEnvironment(Kb(e,t),t.toString())).resetReadTxn()}catch{}}a(jK,"resetReadTxn")});var jb=m((doe,Zb)=>{"use strict";var{Readable:e1}=require("stream"),{getDatabases:t1}=(de(),ee(Ne)),{readSync:r1,openSync:s1,createReadStream:Jb}=require("fs"),{open:n1}=require("lmdb"),Xb=Zu(),i1=el(),{INTERNAL_DBIS_NAME:o1}=ke();Zb.exports=c1;var Ih=32768,a1=100;async function c1(e){let t=e.database||e.schema||"data",r=t1()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=n1({noSync:!0,maxDbs:i1.MAX_DBS}),E,f=d.openDB(o1,new Xb(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new Xb(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%a1===0&&await new Promise(je=>setTimeout(je,20))}await E;let p=Jb(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=s1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Ih);r1(c,l,0,Ih);let _=o.useReadTransaction(),d=Jb(null,{fd:c,start:Ih}),E=new e1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(c1,"getBackup")});var ry=m((foe,ty)=>{"use strict";var u1=x(),{handleHDBError:l1}=W(),_1=TO(),d1=ll(),E1=Jf(),f1=EN(),h1=Ma(),m1=sh(),S1=FN(),p1=QN(),T1=Ba(),R1=rb(),g1=Eb(),A1=Rb(),O1=Ab(),N1=yb(),b1=Mb(),y1=_h(),I1=Hb(),w1=Vb(),C1=Yb(),ey=zb(),U1=jb(),wh=class extends _1{static{a(this,"LMDBBridge")}async searchByConditions(t){return R1(t)}async getDataByHash(t){return await m1(t)}async searchByHash(t){return await S1(t)}async getDataByValue(t,r){return await p1(t,r)}async searchByValue(t){return await T1(t)}async createSchema(t){return await f1(t)}async dropSchema(t){return await g1(t)}async createTable(t,r){return await A1(t,r)}async dropTable(t){return await y1(t)}async createAttribute(t){return await d1(t)}async createRecords(t){return await E1(t)}async updateRecords(t){return await O1(t)}async upsertRecords(t){try{return await N1(t)}catch(r){throw l1(r,null,null,u1.ERR,r)}}async deleteRecords(t){return await h1(t)}async dropAttribute(t){return await I1(t)}async deleteAuditLogsBefore(t){return await b1(t)}async readAuditLog(t){return await w1(t)}writeTransaction(t,r,s){return C1.writeTransaction(t,r,s)}flush(t,r){return ey.flush(t,r)}resetReadTxn(t,r){return ey.resetReadTxn(t,r)}getBackup(t){return U1(t)}};ty.exports=wh});var _y={};xe(_y,{ResourceBridge:()=>Dh});function Lh({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function ny(e,t){let r=us(e),s=Lh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ke(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&xu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||L1,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,D1.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function iy(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}}async function*oy(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,timestamp:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var ay,Ol,Gr,cy,uy,kr,Ch,Uh,ly,D1,L1,M1,P1,sy,Dh,dy=Se(()=>{"use strict";ay=C(ry()),Ol=C(Xi()),Gr=C(W());de();cy=C(ba()),uy=C(Ua()),kr=C(A()),Ch=C(xs()),Uh=C(Fr()),ly=C(V());Qn();ku();({HDB_ERROR_MSGS:D1}=Gr.hdb_errors),L1="data",M1=1e4,P1=10,Dh=class extends ay.default{static{a(this,"ResourceBridge")}constructor(t){super(t),sy=this}async searchByConditions(t){let r=(0,Ol.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Lh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){us(t).dropTable()}createSchema(t){return xa({database:t.schema,table:null}),Ch.signalSchemaChange(new Uh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Mh(t.schema),Ch.signalSchemaChange(new Uh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,sy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,cy.default)(t);(0,uy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=xu(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return Ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return iy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:kr.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,ly.async_set_timeout)(P1),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%M1===0&&await l();return u.length>0&&await l(),n?iy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Ol.default)(t,"hashes");if(r)throw r;return ny(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of ny(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Ol.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Lh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of oy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return oy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Lh,"getSelect");a(ny,"getRecords");a(us,"getTable");a(iy,"createDeleteResponse");a(oy,"groupRecordsInHistory")});var Vr=m((Roe,Ey)=>{"use strict";var{ResourceBridge:v1}=(dy(),ee(_y)),B1=Q();B1.initSync();var Nl;function H1(){return Nl||(Nl=new v1,Nl)}a(H1,"getBridge");Ey.exports=H1()});var Sy=m((Aoe,my)=>{"use strict";var fy=require("lodash"),ka=require("mathjs"),q1=require("jsonata"),hy=V();my.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?fy.uniqWith(e,fy.isEqual):e,searchJSON:F1,mad:Va.bind(null,ka.mad),mean:Va.bind(null,ka.mean),mode:Va.bind(null,ka.mode),prod:Va.bind(null,ka.prod),median:Va.bind(null,ka.median)};function Va(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Va,"aggregateFunction");function F1(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(hy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),hy.isEmpty(this.__ala__.res[r])){let s=q1(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(F1,"searchJSON")});var Ty=m((Noe,py)=>{"use strict";var Qe=require("moment"),Ph="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;py.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format(Ph),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format(Ph),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format(Ph)}});var Oy=m((boe,Ay)=>{"use strict";var G1=require("@turf/area"),x1=require("@turf/length"),k1=require("@turf/circle"),V1=require("@turf/difference"),$1=require("@turf/distance"),Y1=require("@turf/boolean-contains"),K1=require("@turf/boolean-equal"),W1=require("@turf/boolean-disjoint"),Q1=require("@turf/helpers"),Ry=A(),ue=V();Ay.exports={geoArea:z1,geoLength:J1,geoCircle:X1,geoDifference:Z1,geoDistance:gy,geoNear:j1,geoContains:eW,geoEqual:tW,geoCrosses:rW,geoConvert:sW};var vh="geo1 is required",Bh="geo2 is required";function z1(e){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),G1.default(e)}a(z1,"geoArea");function J1(e,t){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),x1.default(e,{units:t||"kilometers"})}a(J1,"geoLength");function X1(e,t,r){if(ue.isEmpty(e))throw new Error("point is required");if(ue.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),k1.default(e,t,{units:r||"kilometers"})}a(X1,"geoCircle");function Z1(e,t){if(ue.isEmpty(e))throw new Error("poly1 is required");if(ue.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),V1(e,t)}a(Z1,"geoDifference");function gy(e,t,r){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),$1.default(e,t,{units:r||"kilometers"})}a(gy,"geoDistance");function j1(e,t,r,s){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return gy(e,t,s)<=r}a(j1,"geoNear");function eW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),Y1.default(e,t)}a(eW,"geoContains");function tW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),K1.default(e,t)}a(tW,"geoEqual");function rW(e,t){if(ue.isEmpty(e))throw new Error(vh);if(ue.isEmpty(e))throw new Error(Bh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),!W1.default(e,t)}a(rW,"geoCrosses");function sW(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(Ry.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ry.GEO_CONVERSION_ENUM).join(",")}`);return Q1[t](e,r)}a(sW,"geoConvert")});var bl=m((Ioe,Ny)=>{var si=Sy(),ar=Ty(),ls=Oy();Ny.exports=e=>{e.aggr.mad=e.aggr.MAD=si.mad,e.aggr.mean=e.aggr.MEAN=si.mean,e.aggr.mode=e.aggr.MODE=si.mode,e.aggr.prod=e.aggr.PROD=si.prod,e.aggr.median=e.aggr.MEDIAN=si.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=si.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=si.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ar.current_time,e.fn.extract=e.fn.EXTRACT=ar.extract,e.fn.date=e.fn.DATE=ar.date,e.fn.date_format=e.fn.DATE_FORMAT=ar.date_format,e.fn.date_add=e.fn.DATE_ADD=ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ar.date_diff,e.fn.now=e.fn.NOW=ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ar.get_server_time,e.fn.getdate=e.fn.GETDATE=ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var wy=m((woe,Iy)=>{"use strict";var $a=require("lodash"),St=require("alasql");St.options.cache=!1;var nW=bl(),by=require("clone"),yl=require("recursive-iterator"),se=x(),ne=V(),eo=Vr(),iW=A(),{hdb_errors:oW}=W(),{getDatabases:yy}=(de(),ee(Ne)),aW="IS NULL",$r="There was a problem performing this search. Please check the logs and try again.";nW(St);var Hh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error($r)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error($r)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error($r)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error($r)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error($r)}}_getColumns(){let t=new yl(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(by(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$a.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=yy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new St.yy.LogicValue({value:s}):r.right instanceof St.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new St.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new St.yy.LogicValue({value:i}):s instanceof St.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new St.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yl(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ne.isEmpty(iW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&$a.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await St.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(by(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(ne.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(aW)>-1&&this.tables.forEach(n=>{let i={columnid:yy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$a.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await eo.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error($r)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await eo.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error($r)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await eo.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error($r)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await eo.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error($r)}}}_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 St.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new St.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new St.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 St.yy.FuncValue:new St.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await St.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=$a.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new yl(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=$a.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error($r)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await eo.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).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();se.trace(`Final SQL: ${n}`),s=await St.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(oW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await eo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error($r)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Iy.exports=Hh});var Or=m((Uoe,Cy)=>{"use strict";var cW=SO();Cy.exports={searchByConditions:lW,searchByHash:_W,searchByValue:dW,search:EW};var qh=Vr(),{transformReq:Fh}=V(),uW=wy();async function lW(e){return Fh(e),qh.searchByConditions(e)}a(lW,"searchByConditions");async function _W(e){Fh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of qh.searchByHash(e))r&&t.push(r);return t}a(_W,"searchByHash");async function dW(e){Fh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of qh.searchByValue(e))t.push(r);return t}a(dW,"searchByValue");function EW(e,t){try{let r=new cW(e);r.validate(),new uW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(EW,"search")});var $s=m((Loe,My)=>{"use strict";var Ya=require("crypto"),fW=Q(),{CONFIG_PARAMS:hW}=A(),Dy="aes-256-cbc",mW=32,SW=16,Gh=64,Ly=32,pW=Gh+Ly,Uy=new Map;My.exports={encrypt:TW,decrypt:RW,createNatsTableStreamName:gW};function TW(e){let t=Ya.randomBytes(mW),r=Ya.randomBytes(SW),s=Ya.createCipheriv(Dy,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(TW,"encrypt");function RW(e){let t=e.substr(0,Gh),r=e.substr(Gh,Ly),s=e.substr(pW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ya.createDecipheriv(Dy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(RW,"decrypt");function gW(e,t){let r=fW.get(hW.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=Uy.get(r);return s||(s=Ya.createHash("md5").update(r).digest("hex"),Uy.set(r,s)),s}a(gW,"createNatsTableStreamName")});var ni=m((voe,vy)=>{"use strict";var Poe=Or(),Il=x(),Py=cl(),AW=$s(),wl=V(),{handleHDBError:Cl,hdb_errors:OW}=W(),{HDB_ERROR_MSGS:Ul,HTTP_STATUS_CODES:xh}=OW,NW=Q();NW.initSync();var{getDatabases:kh}=(de(),ee(Ne));vy.exports={describeAll:bW,describeTable:Dl,describeSchema:yW};async function bW(e){try{let t=wl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=kh(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await Dl({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await Dl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Il.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return Il.error("Got an error in describeAll"),Il.error(t),Cl(new Error,Ul.DESCRIBE_ALL_ERR)}}a(bW,"describeAll");async function Dl(e,t){wl.transformReq(e);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=Py.describe_table(e);if(i)throw i;let c=kh()[r];if(!c)throw Cl(new Error,Ul.SCHEMA_NOT_FOUND(e.schema),xh.NOT_FOUND);let u=c[s];if(!u)throw Cl(new Error,Ul.TABLE_NOT_FOUND(e.schema,e.table),xh.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=AW.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){Il.warn(`unable to stat table dbi due to ${d}`)}return _}a(Dl,"descTable");async function yW(e){wl.transformReq(e);let t=Py.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(),i=kh()[s];if(!i)throw Cl(new Error,Ul.SCHEMA_NOT_FOUND(e.schema),xh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),wl.isEmpty(u)||u.describe){let l=await Dl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(yW,"describeSchema")});var Tn=m((Foe,Gy)=>{var IW=Xn(),{callbackify:Hy,promisify:wW}=require("util"),{getDatabases:qy}=(de(),ee(Ne));Gy.exports={setSchemaDataToGlobal:By,getTableSchema:CW,getSystemSchema:UW,setSchemaDataToGlobalAsync:wW(By)};var Fy=ni(),Hoe=Hy(Fy.describeAll),qoe=Hy(Fy.describeTable);function By(e){global.hdb_schema=qy(),e&&e()}a(By,"setSchemaDataToGlobal");function CW(e,t,r){let s=qy()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(CW,"getTableSchema");function UW(){return IW}a(UW,"getSystemSchema")});var Nr=m((xoe,$y)=>{"use strict";var Ml=xf(),pt=V(),DW=require("util"),Pl=Vr(),LW=Tn(),xy=x(),{handleHDBError:ii,hdb_errors:MW}=W(),{HTTP_STATUS_CODES:oi}=MW,PW=DW.promisify(LW.getTableSchema),vW="updated",ky="inserted",Vy="upserted";$y.exports={insert:HW,update:qW,upsert:FW,validation:BW,flush:GW};async function BW(e){if(pt.isEmpty(e))throw new Error("invalid update parameters defined.");if(pt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(pt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await PW(e.schema,e.table),r=Ml(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&pt.isEmptyOrZeroLength(c[s]))throw xy.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(!pt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw xy.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!pt.isEmpty(c[s])&&c[s]!==""&&n.has(pt.autoCast(c[s]))&&(c.skip=!0),n.add(pt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(BW,"validation");async function HW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.createRecords(e);return Ll(ky,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(HW,"insertData");async function qW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.updateRecords(e);return pt.isEmpty(s.existing_rows)?Ll(vW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ll(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(qW,"updateData");async function FW(e){if(e.operation!=="upsert")throw ii(new Error,"invalid operation, must be upsert",oi.INTERNAL_SERVER_ERROR);let t=Ml(e);if(t)throw ii(new Error,t.message,oi.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ii(new Error,r,oi.BAD_REQUEST);let s=await Pl.upsertRecords(e);return Ll(Vy,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(FW,"upsertData");function Ll(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===ky?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Vy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ll,"returnObject");function GW(e){return pt.transformReq(e),Pl.flush(e.schema,e.table)}a(GW,"flush")});var $h=m((Voe,Wy)=>{var xW=ve(),Vh=require("joi"),{hdb_table:kW,hdb_database:Yy}=is(),Ky={schema:Yy,database:Yy,table:kW},VW={date:Vh.date().iso().required()},$W={timestamp:Vh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Wy.exports=function(e,t){let r=t==="timestamp"?{...Ky,...$W}:{...Ky,...VW},s=Vh.object(r);return xW.validateBySchema(e,s)}});var Jy=m(($oe,zy)=>{var YW=ve(),Yh=require("joi"),{hdb_table:KW,hdb_database:Qy}=is(),WW=Yh.object({schema:Qy,database:Qy,table:KW,hash_values:Yh.array().required(),ids:Yh.array()});zy.exports=function(e){return YW.validateBySchema(e,WW)}});var Zy=m((Yoe,Xy)=>{"use strict";var Kh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Wh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Qh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Xy.exports={InsertObject:Kh,NoSQLSeachObject:Wh,DeleteResponseObject:Qh}});var ui=m((Woe,sI)=>{"use strict";var eI=$h(),QW=Jy(),ai=V(),jy=require("moment"),tI=x(),{promisify:zW,callbackify:JW}=require("util"),ci=A(),XW=Tn(),zh=zW(XW.getTableSchema),Jh=Vr(),{DeleteResponseObject:ZW}=Zy(),{handleHDBError:Rn,hdb_errors:jW}=W(),{HDB_ERROR_MSGS:vl,HTTP_STATUS_CODES:gn}=jW,eQ="records successfully deleted",tQ=JW(rI);sI.exports={delete:tQ,deleteRecord:rI,deleteFilesBefore:rQ,deleteAuditLogsBefore:sQ};async function rQ(e){let t=eI(e,"date");if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);if(ai.transformReq(e),!jy(e.date,jy.ISO_8601).isValid())throw Rn(new Error,vl.INVALID_DATE,gn.BAD_REQUEST,ci.LOG_LEVELS.ERROR,vl.INVALID_DATE,!0);let s=ai.checkSchemaTableExist(e.schema,e.table);if(s)throw Rn(new Error,s,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,s,!0);let n=await Jh.deleteRecordsBefore(e);if(await zh(e.schema,e.table),tI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(rQ,"deleteFilesBefore");async function sQ(e){let t=eI(e,"timestamp");if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);if(ai.transformReq(e),isNaN(e.timestamp))throw Rn(new Error,vl.INVALID_VALUE("Timestamp"),gn.BAD_REQUEST,ci.LOG_LEVELS.ERROR,vl.INVALID_VALUE("Timestamp"),!0);let r=ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Rn(new Error,r,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,r,!0);let s=await Jh.deleteAuditLogsBefore(e);return await zh(e.schema,e.table),tI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(sQ,"deleteAuditLogsBefore");async function rI(e){e.ids&&(e.hash_values=e.ids);let t=QW(e);if(t)throw Rn(t,t.message,gn.BAD_REQUEST,void 0,void 0,!0);ai.transformReq(e);let r=ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Rn(new Error,r,gn.NOT_FOUND,ci.LOG_LEVELS.ERROR,r,!0);try{await zh(e.schema,e.table);let s=await Jh.deleteRecords(e);return ai.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${eQ}`),s}catch(s){if(s.message===ci.SEARCH_NOT_FOUND_MESSAGE){let n=new ZW;return n.message=ci.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(rI,"deleteRecord")});var Bl=m((zoe,oI)=>{var nQ=require("crypto"),nI=9;function iQ(e){let t=aQ(nI),r=iI(e+t);return t+r}a(iQ,"createHash");function oQ(e,t){let r=e.substr(0,nI),s=r+iI(t+r);return e===s}a(oQ,"validateHash");function aQ(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(aQ,"generateSalt");function iI(e){return nQ.createHash("md5").update(e).digest("hex")}a(iI,"md5");oI.exports={hash:iQ,validate:oQ}});var cI=m((Xoe,aI)=>{var Xh=ve(),wt={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 cQ(e){return wt.password.presence=!0,wt.username.presence=!0,wt.role.presence=!0,wt.active.presence=!0,Xh.validateObject(e,wt)}a(cQ,"addUserValidation");function uQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Xh.validateObject(e,wt)}a(uQ,"alterUserValidation");function lQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Xh.validateObject(e,wt)}a(lQ,"dropUserValidation");aI.exports={addUserValidation:cQ,alterUserValidation:uQ,dropUserValidation:lQ}});var Be=m((eae,lI)=>{"use strict";var{platform:joe}=require("os"),_Q="nats-server.zip",Zh="nats-server",dQ=process.platform==="win32"?`${Zh}.exe`:Zh,jh="HDB",EQ=/^[^\s.,*>]+$/,uI="__request__",fQ=a(e=>`${e}.${uI}`,"REQUEST_SUBJECT"),hQ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},mQ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},SQ={HUB:"hub.pid",LEAF:"leaf.pid"},pQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},TQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:jh,deliver_subject:"__HDB__.WORKQUEUE"},RQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:jh,deliver_subject:"HDB.SCHEMAQUEUE"},gQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:jh,deliver_subject:"HDB.USERQUEUE"},AQ={SUCCESS:"success",ERROR:"error"},OQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NQ={TXN:"txn",MSGID:"msgid"},to={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bQ={[to.ERR]:1,[to.WRN]:2,[to.INF]:3,[to.DBG]:4,[to.TRC]:5},yQ={debug:"-D",trace:"-DVV"};lI.exports={NATS_SERVER_ZIP:_Q,NATS_SERVER_NAME:Zh,NATS_BINARY_NAME:dQ,PID_FILES:SQ,NATS_CONFIG_FILES:mQ,SERVER_SUFFIX:pQ,WORK_QUEUE_CONSUMER_NAMES:TQ,SCHEMA_QUEUE_CONSUMER_NAMES:RQ,USER_QUEUE_CONSUMER_NAMES:gQ,NATS_TERM_CONSTRAINTS_RX:EQ,REQUEST_SUFFIX:uI,UPDATE_REMOTE_RESPONSE_STATUSES:AQ,CLUSTER_STATUS_STATUSES:OQ,REQUEST_SUBJECT:fQ,SUBJECT_PREFIXES:NQ,MSG_HEADERS:hQ,LOG_LEVELS:to,LOG_LEVEL_FLAGS:yQ,LOG_LEVEL_HIERARCHY:bQ}});var dI=m((rae,_I)=>{"use strict";var Hl=A(),ql=class{static{a(this,"BaseLicense")}constructor(t=0,r=Hl.RAM_ALLOCATION_ENUM.DEFAULT,s=Hl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},em=class extends ql{static{a(this,"ExtendedLicense")}constructor(t=0,r=Hl.RAM_ALLOCATION_ENUM.DEFAULT,s=Hl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};_I.exports={BaseLicense:ql,ExtendedLicense:em}});var Ka=m((nae,pI)=>{"use strict";var so=require("fs-extra"),EI=Bl(),fI=require("crypto"),IQ=require("moment"),wQ=require("uuid").v4,Ct=x(),rm=require("path"),CQ=V(),An=A(),UQ=dI().ExtendedLicense,ro="invalid license key format",DQ="061183",LQ="mofi25",MQ="aes-256-cbc",PQ=16,vQ=32,hI=Q();hI.initSync();var tm;pI.exports={validateLicense:mI,generateFingerPrint:HQ,licenseSearch:SI,getLicense:GQ};function sm(){return rm.join(hI.getHdbBasePath(),An.LICENSE_KEY_DIR_NAME,An.LICENSE_FILE_NAME)}a(sm,"getLicenseDirPath");function BQ(){let e=sm();return rm.join(e,An.LICENSE_FILE_NAME)}a(BQ,"getLicenseFilePath");function nm(){let e=sm();return rm.join(e,An.REG_KEY_FILE_NAME)}a(nm,"getFingerPrintFilePath");async function HQ(){let e=nm();try{return await so.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qQ();throw Ct.error(`Error writing fingerprint file to ${e}`),Ct.error(t),new Error("There was an error generating the fingerprint")}}a(HQ,"generateFingerPrint");async function qQ(){let e=wQ(),t=EI.hash(e),r=nm();try{await so.mkdirp(sm()),await so.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ct.error(`Error writing fingerprint file to ${r}`),Ct.error(s),new Error("There was an error generating the fingerprint")}return t}a(qQ,"writeFingerprint");function mI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:An.RAM_ALLOCATION_ENUM.DEFAULT,version:An.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ct.error("empty license key passed to validate."),r;let s=nm(),n=!1;try{n=so.statSync(s)}catch(i){Ct.error(i)}if(n){let i;try{i=so.readFileSync(s,"utf8")}catch{Ct.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LQ),c=o[1];c=Buffer.concat([Buffer.from(c)],PQ);let u=Buffer.concat([Buffer.from(i)],vQ),l=fI.createDecipheriv(MQ,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=FQ(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ro),Ct.error(ro),new Error(ro)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ro),Ct.error(ro),new Error(ro)}else r.exp_date=_;r.exp_date<IQ().valueOf()&&(r.valid_date=!1),EI.validate(o[1],`${DQ}${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||Ct.error("Invalid licence"),r}a(mI,"validateLicense");function FQ(e,t){try{let r=fI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ct.warn("Check old license failed")}}a(FQ,"checkOldLicense");function SI(){let e=new UQ,t=[];try{t=so.readFileSync(BQ(),"utf-8").split(An.NEW_LINE)}catch(r){r.code==="ENOENT"?Ct.info("no license file found"):Ct.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(CQ.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mI(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.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ct.error("There was an error parsing the license string."),Ct.error(n),e.ram_allocation=An.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return tm=e,e}a(SI,"licenseSearch");async function GQ(){return tm||await SI(),tm}a(GQ,"getLicense")});var br=m((uae,PI)=>{"use strict";var OI="username is required",NI="nothing to update, must supply active, role or password to update",bI="password cannot be an empty string",yI="If role is specified, it cannot be empty.",II="active must be true or false";PI.exports={addUser:zQ,alterUser:JQ,dropUser:ZQ,getSuperUser:rz,userInfo:jQ,listUsers:Gl,listUsersExternal:ez,setUsersToGlobal:io,findAndValidateUser:MI,getClusterUser:sz,USERNAME_REQUIRED:OI,ALTERUSER_NOTHING_TO_UPDATE:NI,EMPTY_PASSWORD:bI,EMPTY_ROLE:yI,ACTIVE_BOOLEAN:II};var wI=Nr(),xQ=ui(),om=Bl(),CI=cI(),UI=Or(),am=xs(),cr=V(),DI=require("validate.js"),le=x(),{promisify:kQ}=require("util"),cm=$s(),TI=A(),RI=Be(),VQ=Tr(),oae=Q(),aae=Ka(),$Q=Xn(),{table:cae}=(de(),ee(Ne)),{handleHDBError:_s,hdb_errors:YQ}=W(),{HTTP_STATUS_CODES:ds,AUTHENTICATION_ERROR_MSGS:im,HDB_ERROR_MSGS:no}=YQ,{UserEventMsg:um}=Fr(),gI=require("lodash"),{_assignPackageExport:KQ}=require("../index");KQ("getUser",MI);var LI={username:!0,active:!0,role:!0,password:!0},AI=new Map,Fl=UI.searchByValue,WQ=UI.searchByHash,QQ=kQ(xQ.delete);async function zQ(e){let t=DI.cleanAttributes(e,LI),r=CI.addUserValidation(t);if(r)throw _s(new Error,r.message,ds.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 Fl(s),n=n&&Array.from(n)}catch(u){throw le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw _s(new Error,no.ROLE_NAME_NOT_FOUND(t.role),ds.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw _s(new Error,no.DUP_ROLES_FOUND(t.role),ds.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=cm.encrypt(t.password)),t.password=om.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wI.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await io()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw _s(new Error,no.USER_ALREADY_EXISTS(t.username),ds.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],am.signalUserChange(new um(process.pid)),`${c.username} successfully added`}a(zQ,"addUser");async function JQ(e){let t=DI.cleanAttributes(e,LI);if(cr.isEmptyOrZeroLength(t.username))throw new Error(OI);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(NI);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(bI);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(II);let r=XQ(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=cm.encrypt(t.password)),t.password=om.hash(t.password)),t.role==="")throw new Error(yI);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Fl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=no.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),_s(new Error,c,ds.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=no.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),_s(new Error,c,ds.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await wI.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await io()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return am.signalUserChange(new um(process.pid)),n}a(JQ,"alterUser");function XQ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XQ,"isClusterUser");async function ZQ(e){try{let t=CI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw _s(new Error,no.USER_NOT_EXIST(e.username),ds.NOT_FOUND,void 0,void 0,!0);let s;try{s=await QQ(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await io()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return am.signalUserChange(new um(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ZQ,"dropUser");async function jQ(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 WQ(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(jQ,"userInfo");async function ez(){let e;try{e=await Gl()}catch(t){throw le.error("Got an error listing users."),le.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(ez,"listUsersExternal");async function Gl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Fl(e)}catch(o){throw le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=gI.cloneDeep(o);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 Fl(s)}catch(o){throw le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=gI.cloneDeep(o),o.role=r[o.role],tz(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(Gl,"listUsers");function tz(e){try{if(!e){le.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($Q)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(tz,"appendSystemTablesToRole");async function io(){try{let e=await Gl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(io,"setUsersToGlobal");async function MI(e,t,r=!0){global.hdb_users||await io();let s=global.hdb_users.get(e);if(!s)throw _s(new Error,im.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw _s(new Error,im.USER_INACTIVE,ds.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(AI.get(t)===s.password)return n;if(om.validate(s.password,t))AI.set(t,s.password);else throw _s(new Error,im.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0)}return n}a(MI,"findAndValidateUser");async function rz(){global.hdb_users||await io();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rz,"getSuperUser");async function sz(){let e=await Gl(),t=VQ.getConfigFromFile(TI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.isEmpty(r)&&r?.role?.role===TI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=cm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+RI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+RI.SERVER_SUFFIX.ADMIN,r}a(sz,"getClusterUser")});var Qa=m((Eae,qI)=>{"use strict";var li=x(),ur=A(),nz=nO(),_ae=Tn(),dae=ni(),iz=br(),{validateEvent:vI}=Fr(),Wa=Vr(),oz=require("process"),{resetDatabases:az}=(de(),ee(Ne)),cz={[ur.ITC_EVENT_TYPES.SCHEMA]:uz,[ur.ITC_EVENT_TYPES.USER]:HI};async function uz(e){let t=vI(e);if(t){li.error(t);return}li.trace("ITC schemaHandler received schema event:",e),await nz(e.message),await lz(e.message)}a(uz,"schemaHandler");async function lz(e){try{Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=az();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){li.error(t)}}a(lz,"syncSchemaMetadata");var BI=[];async function HI(e){try{try{Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wa.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){li.warn(r)}let t=vI(e);if(t){li.error(t);return}li.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${oz.pid} received user event:`,e),await iz.setUsersToGlobal();for(let r of BI)r()}catch(t){li.error(t)}}a(HI,"userHandler");HI.addListener=function(e){BI.push(e)};qI.exports=cz});var Fr=m((Tae,GI)=>{"use strict";var hae=x(),lm=V(),_z=A(),{ITC_ERRORS:za}=rr(),{parentPort:mae,threadId:dz,isMainThread:Ez,workerData:Sae}=require("worker_threads"),{onMessageFromWorkers:fz,broadcast:pae,broadcastWithAcknowledgement:hz}=st();GI.exports={sendItcEvent:mz,validateEvent:FI,SchemaEventMsg:Sz,UserEventMsg:pz};var xl;fz(async(e,t)=>{xl=xl||Qa(),FI(e),xl[e.type]&&await xl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mz(e){return!Ez&&e.message&&(e.message.originator=dz),hz(e)}a(mz,"sendItcEvent");function FI(e){if(typeof e!="object")return za.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||lm.isEmpty(e.type))return za.MISSING_TYPE;if(!e.hasOwnProperty("message")||lm.isEmpty(e.message))return za.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||lm.isEmpty(e.message.originator))return za.MISSING_ORIGIN;if(_z.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return za.INVALID_EVENT(e.type)}a(FI,"validateEvent");function Sz(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(Sz,"SchemaEventMsg");function pz(e){this.originator=e}a(pz,"UserEventMsg")});var xs=m((Aae,$I)=>{"use strict";var xI=A(),gae=V(),kl=x(),kI=GA(),oo,{sendItcEvent:VI}=Fr();function Tz(e){try{kl.trace("signalSchemaChange called with message:",e),oo=oo||Qa();let t=new kI(xI.ITC_EVENT_TYPES.SCHEMA,e);return oo.schema(t),VI(t)}catch(t){kl.error(t)}}a(Tz,"signalSchemaChange");function Rz(e){try{kl.trace("signalUserChange called with message:",e),oo=oo||Qa();let t=new kI(xI.ITC_EVENT_TYPES.USER,e);return oo.user(t),VI(t)}catch(t){kl.error(t)}}a(Rz,"signalUserChange");$I.exports={signalSchemaChange:Tz,signalUserChange:Rz}});var Wl={};xe(Wl,{addAnalyticsListener:()=>fm,recordAction:()=>Es,recordActionBinary:()=>ao,setAnalyticsEnabled:()=>gz});function gz(e){ew=e}function Es(e,t,r,s,n){if(!ew)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Yl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Yl.set(i,o)),$l||Az()}function ao(e,t,r,s,n){Es(e?1:0,t,r,s,n)}function fm(e){rw.push(e)}function Az(){$l=performance.now(),setTimeout(()=>{let e=performance.now()-$l;$l=0;let t=[],r={time:Date.now(),period:e,threadId:_i.threadId,metrics:t};for(let[n,i]of Yl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:_i.threadId,...s});for(let n of rw)n(t);Yl=new Map,_i.parentPort?_i.parentPort.postMessage({type:tw,report:r}):nw({report:r})},Em).unref()}async function Oz(e,t=6e4){let r=hm(),s;for(let _ of r.primaryStore.getRange({start:Vl+"z",end:Vl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await Nz()}for(let[_,d]of i)d.id=Vl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Vl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-YI,active:l-KI,time:c}),YI=u,KI=l}async function bz(e,t){let r=hm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function hm(){return WI||(WI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function Iz(){sw=!0,setInterval(async()=>{await Oz(Em,dm),await bz(yz,Em)},dm/2).unref()}function nw(e,t){let r=e.report;r.threadId=t?.threadId||_i.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(QI+=s.mean*s.count);r.totalBytesProcessed=QI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(zI.get(t))}),zI.set(t,t.performance.eventLoopUtilization())),r.id=(0,ZI.getNextMonotonicTime)(),hm().put(r),sw||Iz(),wz&&(iw=Uz(r))}async function Uz(e){if(await iw,!On){let r=(0,Ja.dirname)((0,XI.getLogFilePath)());try{On=await(0,_m.open)((0,Ja.join)(r,"analytics.log"),"r+")}catch{On=await(0,_m.open)((0,Ja.join)(r,"analytics.log"),"w+")}}let t=(await On.stat()).size;if(t>Cz){let r=Buffer.alloc(t);await On.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await On.write(r,{position:0}),await On.truncate(r.length),t=r.length}await On.write(JSON.stringify(e)+`
6
+ `,t)}var _i,JI,XI,Ja,_m,ZI,Kl,jI,Yl,dm,ew,$l,Em,tw,rw,Vl,YI,KI,Nz,yz,WI,sw,QI,zI,wz,iw,On,Cz,di=Se(()=>{_i=require("worker_threads"),JI=C(st());de();XI=C(x()),Ja=require("path"),_m=require("fs/promises"),ZI=C(qt()),Kl=C(Q()),jI=C(A());Pr();(0,Kl.initSync)();Yl=new Map,dm=(0,Kl.get)(jI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,ew=dm>0;a(gz,"setAnalyticsEnabled");a(Es,"recordAction");et.recordAnalytics=Es;a(ao,"recordActionBinary");$l=0,Em=1e3,tw="analytics-report",rw=[];a(fm,"addAnalyticsListener");a(Az,"sendAnalytics");Vl="sum-";a(Oz,"aggregation");YI=0,KI=0,Nz=a(()=>new Promise(setImmediate),"rest");a(bz,"cleanup");yz=36e5;a(hm,"getAnalyticsTable");(0,JI.setChildListenerByType)(tw,nw);a(Iz,"startScheduledTasks");QI=0,zI=new Map,wz=!1;a(nw,"recordAnalytics");Cz=1e6;a(Uz,"logAnalytics")});var pm={};xe(pm,{coerceType:()=>Ql,makeTable:()=>Jl,setServerUtilities:()=>vz});function Jl(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),HA(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&gR();class q extends mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?He[c][w.table]:q;if(c===Yr.SYSTEM_SCHEMA_NAME&&(w.table===Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,Xa);switch(w.type){case"put":return L._writeUpdate(v,Xa);case"delete":return L._writeDelete(Xa);case"publish":return L._writePublish(v,Xa);case"invalidate":return L.invalidate(Xa);default:hi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,fi.getWorkerIndex)()):(0,fi.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ke(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&ec.signalUserChange(new tc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return Eu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,fi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,gR(),q.audit=!0}static coerceId(S){return S===""?null:Ql(S,k)}static async dropTable(){if(delete He[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));ec.signalSchemaChange(new tc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[Bs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=mm(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=mm(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=mm(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[zn]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,fw.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=fa(S);else{if(S[cw]&&(w=!qu(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=fa(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(hi.trace("Checking timestamp for put",F,this[xt]>L,this[xt],L),this[xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,co.asBinary)(J),L),je(this[ae],y,S),y===null&&!G&&kn(-1),{type:E&&"put",value:J,[zn]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[xt]>v))return je(this[ae],L),hi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||RR(),F||kn(1)):i.remove(this[ae]),{type:E&&"delete",[zn]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(an=>an.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,Ei.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Ql(De,j)):Ql(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,dw.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Za.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===Za.SEARCH_TYPES.CONTAINS||j===Za.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Za.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=Lz:Y.estimated_count=Dz}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):co.SKIP);else{let Y=XE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(ZE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],pE=XE(an,v,D,q,S.allowFullScan);Y=Y.concat(pE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(pE=>new Promise(TE=>Eu(pE,X,an,null,!1,iH=>{let RE=iH?.value;if(!RE)return TE(co.SKIP);for(let gE=0;gE<De;gE++)if(!j[gE](RE))return TE(co.SKIP);TE(RE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=BA(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Bs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Bs]){if(w){if(y)throw new Ei.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=En(F,i);(D==null||_w(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||_w(D,J)){let Y=En(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){hi.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,Ew.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[xt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=En(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||RR(),kn(1));let X={type:"message",value:i.encoder.encode(S),[zn]:w};return!D.hasWrittenTime&&this[xt]>F&&(F=X.newTxnTime=this[xt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new ma(i,S.user,u)),D}else return new zu(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ei.ClientError(N.join(". "))}getUpdatedTime(){return this[xt]}wasLoadedFromSource(){return R?!!this[uw]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ei.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ei.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Gu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=En(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=En(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[cw]=!0,d&&q.setTTLExpiration(d/1e3),b&&nH(),q;function je(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ja.getIndexedValues)(L);if(G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ja.getIndexedValues)(F),G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function Eu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&ao(Y,"cache-hit",n),Y&&!y&&(D&&(D[uw]=!0),R))return Qo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(Eu,"loadRecord");function Bi(){P=new Set,(0,fi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Bi,"setupCommitListeners");async function Qo(Z,S=null,N,D){if(N<0){let L;return P||Bi(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G(Qo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Qo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;Es(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ja.getNextMonotonicTime)());let j=je(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Qu(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Qo,"getFromSource");function kn(Z){T||(T=i.get([aw,Sm.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([aw,Sm.threadId],T)},50))}a(kn,"recordDeletion");function RR(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),kn(-1)}}},q.getRecordCount()*100+Pz).unref())}a(RR,"enqueueDeletionCleanup");function gR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),kn(-1)})}a(gR,"addDeleteRemoval");function nH(){(0,fi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){hi.error("Error in evicting old records",Z)}},Mz).unref()}a(nH,"runRecordExpirationEviction")}function mm(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function lw(){}function vz(e){fw=e}function Ql(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Bz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,zl.autoCast)(e)}function _w(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var Yr,co,ja,dw,Sm,Za,rc,Ei,ec,tc,hi,Ew,fi,zl,fw,Dz,Lz,Mz,ow,aw,xt,cw,$ae,uw,Xa,Pz,Bz,Xl=Se(()=>{Yr=C(A()),co=require("lmdb"),ja=C(qt()),dw=require("lodash"),Sm=require("worker_threads");jr();DA();Za=C(ke()),rc=C(Q());qA();Ei=C(W()),ec=C(xs()),tc=C(Fr());de();$u();hi=C(x());ku();Qn();Ew=require("ordered-binary"),fi=C(st());ha();zl=C(V());di();Dz=1e8,Lz=1e7,Mz=6e4;rc.initSync();ow=rc.get(Yr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aw=Symbol.for("deletions"),xt=Symbol.for("version"),cw=Symbol.for("incremental-update"),$ae=Symbol("source-resource"),uw=Symbol("load-from-source"),Xa={isNotification:!0,allowInvalidated:!0},Pz=(0,zl.convertToMS)(rc.get(Yr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Jl,"makeTable");a(mm,"attributesAsObject");a(lw,"noop");a(vz,"setServerUtilities");Bz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ql,"coerceType");a(_w,"isDescendantId")});var Ne={};xe(Ne,{database:()=>xa,databases:()=>He,dropDatabase:()=>Mh,dropTableMeta:()=>kz,getDatabases:()=>xr,getTables:()=>Hz,onUpdatedTable:()=>Om,readMetaDb:()=>sc,resetDatabases:()=>qz,table:()=>nt,tables:()=>_r});function Hz(){return t_||xr(),_r||{}}function xr(){if(t_)return He;t_=!0,Eo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),t=(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,lr.existsSync)(e)?e:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,lr.existsSync)(e))for(let r of(0,lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&sc((0,Me.join)(e,r.name),null,s)}if((0,lr.existsSync)((0,_o.getBaseSchemaPath)())){for(let r of(0,lr.readdirSync)((0,_o.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,_o.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,_o.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);sc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,lr.existsSync)(n))for(let o of(0,lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&sc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,lr.existsSync)(u)&&sc(u,o,r,null,!0)}}for(let r in He){let s=Eo.get(r);if(s){let n=He[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete He[r],r==="data"){for(let n in _r)delete _r[n];delete _r[r_]}}return Eo=null,He}}function qz(){t_=!1;for(let[,e]of Nn)e.needsDeletion=!0;xr();for(let[e,t]of Nn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Nn.delete(e));return He}function sc(e,t,r=gm,s,n){let i=new Tm.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Nn.get(e);o?o.needsDeletion=!1:(o=(0,Zl.open)(i),Nn.set(e,o));let c=new mi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(uo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,lr.existsSync)(s)&&(i.path=s,l=(0,Zl.open)(i),l.isLegacy=!0):l=af(o));let _=pw(r),d=_[r_],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(lo)||0)&&u.putSync(lo,$+1):(p.tableId=$=u.get(lo),$||($=1),u.putSync(lo,$+1),u.putSync(p.key,p));let q=new mi.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let je=new mi.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Tw(_,f,Jl({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of Am)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function pw(e){let t=He[e];if(t||(e==="data"?t=He[e]=_r:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),Eo&&!Eo.has(e)){let r=new Set;t[r_]=r,Eo.set(e,r)}return t}function Tw(e,t,r){return e[t]=r,r}function xa({database:e,table:t}){e||(e=gm),xr();let r=pw(e),s=(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||((0,lr.existsSync)(s)?s:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Nn.get(i);if(!o){let c=new Tm.default(i,!1);o=(0,Zl.open)(c),Nn.set(i,o)}return o}async function Mh(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e];for(let r in t){let n=t[r].primaryStore.rootStore;Nn.delete(n.path),n.status==="open"&&(await n.close(),await hw.remove(n.path))}if(e==="data"){for(let r in _r)delete _r[r];delete _r[r_]}delete He[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gm);let u=xa({database:t,table:e}),l=He[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new mi.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=af(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new mi.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(lo),z.tableId||(z.tableId=1),h.putSync(lo,z.tableId+1),E.tableId=z.tableId,_=Tw(l,e,Jl({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new mi.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<nc.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=xz(_,k,O):p&&jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of Am)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function xz(e,t,r){try{let s=e.schemaVersion;await jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,mw.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),nc.workerData&&nc.workerData.restartNumber!==Sw.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Fz?await n:u>Gz&&await new Promise(E=>setImmediate(E))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await jl.signalSchemaChange(new e_.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function kz({table:e,database:t}){let r=xa({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function Om(e){Am.push(e)}var Tt,uo,Zl,Me,lr,_o,mi,Tm,kt,hw,Rm,mw,jl,e_,nc,Le,Sw,gm,r_,_r,He,lo,Am,t_,Nn,Eo,Fz,Gz,de=Se(()=>{Tt=C(Q()),uo=C(ke()),Zl=require("lmdb"),Me=require("path"),lr=require("fs"),_o=C(we());Xl();mi=C(Zu()),Tm=C(el()),kt=C(A()),hw=C(require("fs-extra")),Rm=require("../index"),mw=C(qt()),jl=C(xs()),e_=C(Fr()),nc=require("worker_threads"),Le=C(x()),Sw=C(st());ha();gm="data",r_=Symbol("defined-tables");(0,Tt.initSync)();_r=Object.create(null),He=Object.create(null);(0,Rm._assignPackageExport)("databases",He);(0,Rm._assignPackageExport)("tables",_r);lo=Symbol.for("next-table-id"),Am=[],Nn=new Map;a(Hz,"getTables");a(xr,"getDatabases");a(qz,"resetDatabases");a(sc,"readMetaDb");a(pw,"ensureDB");a(Tw,"setTable");a(xa,"database");a(Mh,"dropDatabase");a(nt,"table");Fz=1e3,Gz=10;a(xz,"runIndexing");a(kz,"dropTableMeta");a(Om,"onUpdatedTable")});var ym={};xe(ym,{loadGQLSchema:()=>$z,start:()=>bm,startOnMainThread:()=>Vz});function bm({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,Nm.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,Nm.dirname)(s)+"/"+T.name,p.tableClass)}}}var Nm,Vz,$z,Rw=Se(()=>{Nm=require("path");de();a(bm,"start");Vz=bm,$z=bm({ensureTable:nt}).handleFile});async function s_(e){return Yz?(ic||(ic=Kz(Qz)),(await(await ic).import(e)).namespace):import(e)}async function Kz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ic=new Compartment({console,Math,Date,fetch:Wz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Aw.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:_r,databases:He})}};let s=await(0,gw.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ic}function Wz(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Qz(){return{Resource:mt,tables:_r}}var gw,Aw,Yz,ic,Im=Se(()=>{jr();de();gw=require("fs/promises"),Aw=require("path"),Yz=!1;a(s_,"secureImport");a(Kz,"getCompartment");a(Wz,"secureOnlyFetch");a(Qz,"getGlobalVars")});var Cm={};xe(Cm,{handleFile:()=>zz});async function zz(e,t,r,s){let n=new Map,i=(0,Ow.pathToFileURL)(r).toString(),o=await s_(i);u(o.default)&&s.set((0,wm.dirname)(t),o.default),c(o,(0,wm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var Ow,wm,Nw=Se(()=>{Ow=require("url");Im();wm=require("path");a(zz,"handleFile")});var Dm={};xe(Dm,{start:()=>Jz});function Jz({resources:e}){e.set("login",Um),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Um,bw=Se(()=>{jr();a(Jz,"start");Um=class extends mt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var Mm=m((cce,ww)=>{"use strict";var{Readable:Xz}=require("stream"),Zz=1e4;ww.exports={streamAsJSON(e){return new Lm({value:e})}};var Lm=class extends Xz{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),yw)}catch(n){yield yw(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Iw(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Zz?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return Iw(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};function yw(e){return console.error(e),JSON.stringify(e.toString())}a(yw,"handleError");function Iw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Iw,"when")});var n_=m((lce,Cw)=>{"use strict";var jz=Vr();Cw.exports={writeTransaction:eJ};function eJ(e,t,r){return jz.writeTransaction(e,t,r)}a(eJ,"writeTransaction")});var Mw=m((Ece,Lw)=>{"use strict";var tJ=Or(),rJ=Tn(),Uw=x(),sJ=Nr(),dce=n_(),nJ=require("clone"),vm=require("alasql"),iJ=bl(),Dw=require("util"),oJ=Dw.promisify(rJ.getTableSchema),aJ=Dw.promisify(tJ.search),cJ=A(),Pm=V();iJ(vm);Lw.exports={update:lJ};var uJ="There was a problem performing this update. Please check the logs and try again.";async function lJ({statement:e,hdb_user:t}){let r=await oJ(e.table.databaseid,e.table.tableid),s=_J(e.columns);Pm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=nJ(n),c=Pm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=vm.parse(u).statements[0],_=await aJ(l),d=dJ(s,_);return EJ(o,d,t)}a(lJ,"update");function _J(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vm.compile(`SELECT ${r.expression.toString()} AS [${cJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Uw.error(t),new Error(uJ)}}a(_J,"createUpdateRecord");function dJ(e,t){return Pm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dJ,"buildUpdateRecords");async function EJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await sJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Uw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(EJ,"updateRecords")});var vw=m((Sce,Pw)=>{var fJ=require("alasql"),hJ=Or(),mJ=x(),SJ=Vr(),Hm=require("util"),Bm=V(),pJ=A(),TJ=Tn(),hce=n_(),mce=Nr(),RJ="record",gJ="successfully deleted",AJ=Hm.callbackify(yJ),OJ=Hm.promisify(hJ.search),NJ=Hm.promisify(TJ.getTableSchema);Pw.exports={convertDelete:AJ};function bJ(e){return`${e.deleted_hashes.length} ${RJ}${e.deleted_hashes.length===1?"":"s"} ${gJ}`}a(bJ,"generateReturnMessage");async function yJ({statement:e,hdb_user:t}){let r=await NJ(e.table.databaseid,e.table.tableid);Bm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=fJ.parse(o).statements[0],u={operation:pJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await OJ(c);let l=await SJ.deleteRecords(u);return Bm.isEmptyOrZeroLength(l.message)&&(l.message=bJ(l)),delete l.txn_time,l}catch(l){throw mJ.error(l),l.hdb_code?l.message:l}}a(yJ,"convertDelete")});var Gw=m((Tce,Fw)=>{"use strict";var IJ=ni(),{hdb_errors:Bw}=W(),{getDatabases:Hw}=(de(),ee(Ne));Fw.exports={checkSchemaExists:qw,checkSchemaTableExists:wJ,schema_describe:IJ};async function qw(e){if(!Hw()[e])return Bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qw,"checkSchemaExists");async function wJ(e,t){let r=await qw(e);if(r)return r;if(!Hw()[e][t])return Bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wJ,"checkSchemaTableExists")});var oc=m((gce,CJ)=>{CJ.exports={name:"harperdb",version:"4.2.0-alpha.13",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.12","nats-server":"2.9.21"},exports:{".":"./index.js"},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/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../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.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@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.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",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",eventsource:"^2.0.2","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",mqtt:"~4.3.7",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","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var it=m((yce,iC)=>{"use strict";var Rt=Q();Rt.initSync();var UJ=require("fs-extra"),DJ=require("semver"),lc=require("path"),{monotonicFactory:LJ}=require("ulidx"),xm=LJ(),MJ=require("util"),kw=require("child_process"),PJ=MJ.promisify(kw.exec),vJ=kw.spawn,_e=Be(),Te=A(),i_=V(),yr=x(),o_=$s(),BJ=n_(),ac=Tr(),{Encoder:HJ,decode:km}=require("msgpackr"),Vw=new HJ,{isEmpty:Si}=i_,$w=br(),Yw=12e10,qJ=48*36e11,FJ=5e9,{connect:GJ,StorageType:Kw,RetentionPolicy:Ww,AckPolicy:a_,DeliverPolicy:c_,DiscardPolicy:xJ,NatsConnection:Ace,JetStreamManager:Oce,JetStreamClient:Nce,StringCodec:bce,JSONCodec:kJ,createInbox:Vm,headers:VJ,ErrorCode:xw}=require("nats"),{PACKAGE_ROOT:$J}=A(),YJ=oc(),{recordAction:KJ}=(di(),ee(Wl)),Qw=kJ(),WJ="clustering",QJ=YJ.engines[_e.NATS_SERVER_NAME],zJ=lc.join($J,"dependencies"),Gm=lc.join(zJ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qm,Fm,cc,fo,ho;iC.exports={runCommand:zw,checkNATSServerInstalled:JJ,createConnection:$m,getConnection:u_,getJetStreamManager:_c,getJetStream:Jw,getNATSReferences:Vt,getServerList:ZJ,createLocalStream:Ym,listStreams:Xw,deleteLocalStream:jJ,getServerConfig:dc,listRemoteStreams:e2,viewStream:t2,viewStreamIterator:r2,publishToStream:s2,createWorkQueueStream:n2,addSourceToWorkStream:jw,request:o2,removeSourceFromWorkStream:tC,reloadNATS:Km,reloadNATSHub:a2,reloadNATSLeaf:c2,extractServerName:eC,requestErrorHandler:u2,updateWorkStream:l2,createLocalTableStream:sC,createTableStreams:_2,purgeTableStream:nC,purgeSchemaTableStreams:d2,getStreamInfo:E2,updateLocalStreams:h2,closeConnection:XJ,getJsmServerName:Ec,addNatsMsgHeader:Zw,updateIngestStreamConsumer:i2};async function zw(e,t=void 0){let{stdout:r,stderr:s}=await PJ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(Yw,"runCommand");async function $J(){try{await NJ.access(Bm)}catch{return!1}let e=await Yw(`${Bm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return bJ.eq(t,kJ)}a($J,"checkNATSServerInstalled");async function Gm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Gw.getClusterUser();if(mi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Nr.trace("create nats connection called");let i=await PJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Nr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(Gm,"createConnection");async function YJ(){ds&&(await ds.drain(),ds=void 0,_o=void 0,Eo=void 0,oc=void 0)}a(YJ,"closeConnection");var ds,oc;async function a_(){return oc||(oc=Gm(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ds=await oc),ds||oc}a(a_,"getConnection");async function cc(){if(_o)return _o;mi(ds)&&await a_();let{domain:e}=uc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(mi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _o=await ds.jetstreamManager({domain:e}),_o}a(cc,"getJetStreamManager");async function Kw(){if(Eo)return Eo;mi(ds)&&await a_();let{domain:e}=uc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(mi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Eo=ds.jetstream({domain:e}),Eo}a(Kw,"getJetStream");async function Vt(){let e=ds||await a_(),t=_o||await cc(),r=Eo||await Kw();return{connection:e,jsm:t,js:r}}a(Vt,"getNATSReferences");async function KJ(e){let t=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Gw.getClusterUser(),n=await Gm(t,r,s),i=Fm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=$w.decode(_.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 s_.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(KJ,"getServerList");async function xm(e,t){let{jsm:r}=await Vt(),s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:kw.File,retention:Vw.Limits,subjects:t,discard:vJ.Old,duplicate_window:xw,max_msgs:n,max_bytes:i,max_age:s})}a(xm,"createLocalStream");async function Ww(){let{jsm:e}=await Vt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Ww,"listStreams");async function WJ(e){let{jsm:t}=await Vt();await t.streams.delete(e)}a(WJ,"deleteLocalStream");async function QJ(e){let{connection:t}=await Vt(),r=[],s=Fm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push($w.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(QJ,"listRemoteStreams");async function zJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=Hm(),o={durable_name:i,ack_policy:i_.Explicit};t&&(o.deliver_policy=o_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let l=[];for await(let _ of u){let d=qm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(zJ,"viewStream");async function*JJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=Hm(),o={durable_name:i,ack_policy:i_.Explicit};t&&(o.deliver_policy=o_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let l of u){let _=qm(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(JJ,"viewStreamIterator");async function XJ(e,t,r,s){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=Qw(s,r);let{js:n}=await Vt(),i=await lc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Fw.encode(s);try{Nr.trace(`publishToStream publishing to subject: ${o}`),GJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return Zw(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Nr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await xm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(XJ,"publishToStream");function Qw(e,t){t===void 0&&(t=HJ());let r=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=s_.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${Hm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(Qw,"addNatsMsgHeader");function uc(e){e=e.toLowerCase();let t=ac.join(Rt.get(Te.CONFIG_PARAMS.ROOTPATH),xJ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return mi(vm)&&(vm={port:nc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:nc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ac.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),vm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return mi(Pm)&&(Pm={port:nc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:nc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:nc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:ac.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),Pm;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(uc,"getServerConfig");async function ZJ(e){let{jsm:t}=await Vt(),r=await lc();try{await t.streams.add({name:e.stream_name,storage:kw.File,retention:Vw.Limits,duplicate_window:xw,max_age:LJ,max_bytes:MJ,subjects:[`${_e.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:i_.Explicit,durable_name:e.durable_name,deliver_policy:o_.All,max_ack_pending:1e4});else throw s}}a(ZJ,"createWorkQueueStream");async function jJ(){let{jsm:e}=await Vt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Nr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),Nr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:i_.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:o_.All,max_ack_pending:1e4}))}a(jJ,"updateIngestStreamConsumer");async function zw(e,t,r){let{jsm:s}=await Vt(),n=await s.streams.info(t),i=Jw(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=n_.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,S=n.config.sources.length;T<S;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(zw,"addSourceToWorkStream");function Jw(e){return e.split(".")[1]}a(Jw,"extractServerName");async function Xw(e,t,r){let{schema:s,table:n}=r,i=n_.createNatsTableStreamName(s,n),{jsm:o}=await Vt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(Xw,"removeSourceFromWorkStream");async function e2(e,t,r=2e4,s=Fm()){if(!s_.isObject(t))throw new Error("data param must be an object");let n=Fw.encode(t),{connection:i}=await Vt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return qm(c.data)}a(e2,"request");function km(e){return new Promise(async(t,r)=>{let s=CJ(Bm,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(km,"reloadNATS");async function t2(){let{pid_file_path:e}=uc(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await km(e)}a(t2,"reloadNATSHub");async function r2(){let{pid_file_path:e}=uc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await km(e)}a(r2,"reloadNATSLeaf");function s2(e,t,r){let s;switch(e.code){case Hw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Hw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(s2,"requestErrorHandler");async function n2(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await Zw(async()=>{e.subscribe===!0?await zw(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await Xw(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(n2,"updateWorkStream");function Zw(e){return UJ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(Zw,"exclusiveLock");async function jw(e,t){let r=n_.createNatsTableStreamName(e,t),s=await lc(),n=c2(e,t,s);await xm(r,[n])}a(jw,"createLocalTableStream");async function i2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await jw(s,n)}}a(i2,"createTableStreams");async function eC(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=n_.createNatsTableStreamName(e,t),{jsm:s}=await Vt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(eC,"purgeTableStream");async function o2(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await eC(e,t[r])}a(o2,"purgeSchemaTableStreams");async function a2(e){return(await cc()).streams.info(e)}a(a2,"getStreamInfo");function c2(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(c2,"createSubjectName");async function lc(){if(ic)return ic;if(ic=(await cc())?.nc?.info?.server_name,ic===void 0)throw new Error("Unable to get jetstream manager server name");return ic}a(lc,"getJsmServerName");async function u2(){let e=await cc(),t=await lc(),r=await Ww();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=l2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(u2,"updateLocalStreams");function l2(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Rt.get(Te.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}a(l2,"updateStreamLimits")});var __=m((Rce,iC)=>{"use strict";var fo=il(),ho=gw(),_2=F(),d2=require("uuid").v4,Tce=require("clone"),u_=Gs(),mo=g(),E2=require("util"),Nn=kr(),{handleHDBError:$t,hdb_errors:f2}=W(),{HDB_ERROR_MSGS:c_,HTTP_STATUS_CODES:Yt}=f2,{SchemaEventMsg:l_}=qr(),rC=st(),{getDatabases:h2}=(de(),te(Ne)),{transformReq:So}=x();iC.exports={createSchema:m2,createSchemaStructure:sC,createTable:S2,createTableStructure:nC,createAttribute:A2,dropSchema:p2,dropTable:T2,dropAttribute:R2,getBackup:O2};async function m2(e){let t=await sC(e);return u_.signalSchemaChange(new l_(process.pid,e.operation,e.schema)),t}a(m2,"createSchema");async function sC(e){let t=fo.schema_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(So(e),!await ho.checkSchemaExists(e.schema))throw $t(new Error,c_.SCHEMA_EXISTS_ERR(e.schema),Yt.BAD_REQUEST,mo.LOG_LEVELS.ERROR,c_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Nn.createSchema(e),`database '${e.schema}' successfully created`}a(sC,"createSchemaStructure");async function S2(e){return So(e),await nC(e)}a(S2,"createTable");async function nC(e){let t=fo.create_table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(fo.validateTableResidence(e.residence),!await ho.checkSchemaTableExists(e.schema,e.table))throw $t(new Error,c_.TABLE_EXISTS_ERR(e.schema,e.table),Yt.BAD_REQUEST,mo.LOG_LEVELS.ERROR,c_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:d2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Nn.createTable(s,e);else throw $t(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Yt.BAD_REQUEST);else await Nn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(nC,"createTableStructure");async function p2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=fo.schema_object(e),s=t??r;if(s)throw $t(s,s.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let n=await ho.checkSchemaExists(e.schema);if(n)throw $t(new Error,n,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,n,!0);let i=await ho.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Nn.dropSchema(e),u_.signalSchemaChange(new l_(process.pid,e.operation,e.schema)),await rC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(p2,"dropSchema");async function T2(e){let t=fo.table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let r=await ho.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,r,!0);return await Nn.dropTable(e),await rC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(T2,"dropTable");async function R2(e){let t=fo.attribute_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let r=await ho.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $t(new Error,"You cannot drop a hash attribute",Yt.BAD_REQUEST,void 0,void 0,!0);if(mo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $t(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Yt.BAD_REQUEST,void 0,void 0,!0);try{return await Nn.dropAttribute(e),g2(e),u_.signalSchemaChange(new l_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw _2.error(`Got an error deleting attribute ${E2.inspect(e)}.`),s}}a(R2,"dropAttribute");function g2(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(g2,"dropAttributeFromGlobal");async function A2(e){So(e);let t=h2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $t(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Yt.BAD_REQUEST,void 0,void 0,!0);return await Nn.createAttribute(e),u_.signalSchemaChange(new l_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(A2,"createAttribute");function O2(e){return Nn.getBackup(e)}a(O2,"getBackup")});var aC=m((Ace,oC)=>{"use strict";var{OPERATIONS_ENUM:N2}=g(),Vm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=N2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};oC.exports=Vm});var $m=m((bce,dC)=>{"use strict";var b2=kr(),Nce=aC(),d_=x(),E_=g(),y2=Q(),{handleHDBError:cC,hdb_errors:I2}=W(),{HDB_ERROR_MSGS:uC,HTTP_STATUS_CODES:lC}=I2,w2=Object.values(E_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),_C="To use this operation audit log must be enabled in harperdb-config.yaml";dC.exports=C2;async function C2(e){if(d_.isEmpty(e.schema))throw new Error(uC.SCHEMA_REQUIRED_ERR);if(d_.isEmpty(e.table))throw new Error(uC.TABLE_REQUIRED_ERR);if(!y2.get(E_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw cC(new Error,_C,lC.BAD_REQUEST,E_.LOG_LEVELS.ERROR,_C,!0);let t=d_.checkSchemaTableExist(e.schema,e.table);if(t)throw cC(new Error,t,lC.NOT_FOUND,E_.LOG_LEVELS.ERROR,t,!0);if(!d_.isEmpty(e.search_type)&&w2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await b2.readAuditLog(e)}a(C2,"readAuditLog")});var fC=m((Ice,EC)=>{"use strict";var{OPERATIONS_ENUM:U2}=g(),Ym=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=U2.GET_BACKUP,this.schema=t,this.table=r}};EC.exports=Ym});var SC=m((Dce,mC)=>{"use strict";var D2=kr(),Cce=fC(),Km=x(),L2=g(),Uce=Q(),{handleHDBError:M2,hdb_errors:P2}=W(),{HDB_ERROR_MSGS:hC,HTTP_STATUS_CODES:v2}=P2;mC.exports=B2;async function B2(e){if(Km.isEmpty(e.schema))throw new Error(hC.SCHEMA_REQUIRED_ERR);if(Km.isEmpty(e.table))throw new Error(hC.TABLE_REQUIRED_ERR);let t=Km.checkSchemaTableExist(e.schema,e.table);if(t)throw M2(new Error,t,v2.NOT_FOUND,L2.LOG_LEVELS.ERROR,t,!0);return await D2.getBackup(read_audit_log_object)}a(B2,"getBackup")});var OC=m((Mce,AC)=>{var bn=require("validate.js"),TC=ve(),po=g(),{handleHDBError:H2,hdb_errors:q2}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:F2}=q2,Wm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),G2={STRUCTURE_USER:"structure_user"},pC=Object.values(po.ROLE_TYPES_ENUM),x2="attribute_permissions",k2="attribute_name",{PERMS_CRUD_ENUM:To}=po,V2=[x2,...Object.values(To)],RC=[To.READ,To.INSERT,To.UPDATE],$2=[k2,...RC];function Y2(e){let t=Wm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,gC(e,t)}a(Y2,"addRoleValidation");function K2(e){let t=Wm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,gC(e,t)}a(K2,"alterRoleValidation");function W2(e){let t=Wm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,TC.validateObject(e,t)}a(W2,"dropRoleValidation");var Q2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function gC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Q2.includes(s[o])||n.push(s[o]);n.length>0&&ze(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=TC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=z2(e);o&&ze(o,r),pC.forEach(c=>{e.permission[c]&&!bn.isBoolean(e.permission[c])&&ze(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(pC.indexOf(o)<0){if(o===G2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze(Ve.SCHEMA_NOT_FOUND(d),r)}continue}ze(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){ze(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{V2.includes(_)||ze(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(To).forEach(_=>{bn.isDefined(l[_])?bn.isBoolean(l[_])||ze(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze(Ve.TABLE_PERM_MISSING(_),r,o,u)}),bn.isDefined(l.attribute_permissions)){if(!bn.isArray(l.attribute_permissions)){ze(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!$2.includes(T)&&T!==To.DELETE&&ze(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!bn.isDefined(f.attribute_name)){ze(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}RC.forEach(T=>{bn.isDefined(f[T])?bn.isBoolean(f[T])||ze(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze(Ve.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;ze(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return J2(r)}a(gC,"customValidate");AC.exports={addRoleValidation:Y2,alterRoleValidation:K2,dropRoleValidation:W2};function z2(e){let{operation:t,permission:r}=e;if(t===po.OPERATIONS_ENUM.ADD_ROLE||t===po.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?po.ROLE_TYPES_ENUM.SUPER_USER:po.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(z2,"validateNoSUPerms");function J2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return H2(new Error,s,F2.BAD_REQUEST)}else return null}a(J2,"generateRolePermResponse");function ze(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ze,"addPermError")});var jm=m((vce,IC)=>{"use strict";var NC=Ar(),bC=gr(),X2=ci(),zm=OC(),Jm=Gs(),Z2=require("uuid").v4,j2=require("util"),f_=g(),e3=x(),Xm=bC.searchByValue,t3=bC.searchByHash,r3=j2.promisify(X2.delete),s3=os(),n3=Ji(),{hdb_errors:i3,handleHDBError:Ro}=W(),{HDB_ERROR_MSGS:yC,HTTP_STATUS_CODES:h_}=i3,{UserEventMsg:Zm}=qr();IC.exports={addRole:o3,alterRole:a3,dropRole:c3,listRoles:u3};function Qm(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Qm,"scrubRoleDetails");async function o3(e){let t=zm.addRoleValidation(e);if(t)throw t;e=Qm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Xm(r)||[])}catch(i){throw Ro(i)}if(s&&s.length>0)throw Ro(new Error,yC.ROLE_ALREADY_EXISTS(e.role),h_.CONFLICT,void 0,void 0,!0);e.id||(e.id=Z2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await NC.insert(n),Jm.signalUserChange(new Zm(process.pid)),e=Qm(e),e}a(o3,"addRole");async function a3(e){let t=zm.alterRoleValidation(e);if(t)throw t;e=Qm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await NC.update(r)}catch(n){throw Ro(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ro(new Error,"Invalid role id",h_.BAD_REQUEST,void 0,void 0,!0);return await Jm.signalUserChange(new Zm(process.pid)),e}a(a3,"alterRole");async function c3(e){let t=zm.dropRoleValidation(e);if(t)throw Ro(new Error,t,h_.BAD_REQUEST,void 0,void 0,!0);let r=new n3(f_.SYSTEM_SCHEMA_NAME,f_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await t3(r));if(s.length===0)throw Ro(new Error,yC.ROLE_NOT_FOUND,h_.NOT_FOUND,void 0,void 0,!0);let n=new s3(f_.SYSTEM_SCHEMA_NAME,f_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Xm(n)),o=!1;if(e3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await r3(c),Jm.signalUserChange(new Zm(process.pid)),`${s[0].role} successfully deleted`}a(c3,"dropRole");async function u3(){return Xm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(u3,"listRoles")});var DC=m((Hce,UC)=>{"use strict";var l3=Q(),yn=require("joi"),_3=ve(),wC=require("moment"),d3=require("fs-extra"),eS=require("path"),E3=require("lodash"),_c=g(),{LOG_LEVELS:Si}=g(),f3="YYYY-MM-DD hh:mm:ss",h3=eS.resolve(__dirname,"../logs");UC.exports=function(e){return _3.validateBySchema(e,m3)};var m3=yn.object({from:yn.custom(CC),until:yn.custom(CC),level:yn.valid(Si.NOTIFY,Si.FATAL,Si.ERROR,Si.WARN,Si.INFO,Si.DEBUG,Si.TRACE),order:yn.valid("asc","desc"),limit:yn.number().min(1),start:yn.number().min(0),log_name:yn.custom(S3)});function CC(e,t){if(wC(e,wC.ISO_8601).format(f3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(CC,"validateDatetime");function S3(e,t){if(E3.invert(_c.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=l3.get(_c.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?_c.LOG_NAMES.HDB:e,i=n===_c.LOG_NAMES.INSTALL?eS.join(h3,_c.LOG_NAMES.INSTALL):eS.join(s,n);return d3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(S3,"validateReadLogPath")});var rS=m((Fce,LC)=>{"use strict";var m_=g(),p3=F(),T3=Q(),R3=DC(),tS=require("path"),g3=require("fs-extra"),{once:A3}=require("events"),{handleHDBError:O3,hdb_errors:N3}=W(),{PACKAGE_ROOT:b3}=g(),y3=tS.join(b3,"logs"),I3=1e3;LC.exports=w3;async function w3(e){let t=R3(e);if(t)throw O3(t,t.message,N3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=T3.get(m_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?m_.LOG_NAMES.HDB:e.log_name,n=s===m_.LOG_NAMES.INSTALL?tS.join(y3,m_.LOG_NAMES.INSTALL):tS.join(r,s),i=g3.createReadStream(n);i.on("error",A=>{p3.error(A)});let o=e.level!==void 0,c=o?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,_=e.until!==void 0,d=_?new Date(e.until):void 0,E=e.limit===void 0?I3:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,T=h+E,S=0,y=[],O="",H;i.on("data",A=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;A=O+A;let G=0,k;for(;(k=w.exec(A))&&!i.destroyed;){H&&(H.message=A.slice(G,k.index),Y(H));let[X,ge,ut]=k,Pi=ut.split("] ["),Ko=Pi[0],xn=Pi[1];Pi.splice(0,2),H={timestamp:ge,thread:Ko,level:xn,tags:Pi,message:""},G=k.index+X.length}O=A.slice(G)}),i.on("end",A=>{i.destroyed||H&&(H.message=O.trim(),Y(H))}),i.resume();function Y(A){let w,G,k;switch(!0){case(o&&u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),A.level===c&&w>=G&&w<=k&&S<h?S++:A.level===c&&w>=G&&w<=k&&(In(A,f,y),S++,S===T&&i.destroy());break;case(o&&u):w=new Date(A.timestamp),G=new Date(l),A.level===c&&w>=G&&S<h?S++:A.level===c&&w>=G&&(In(A,f,y),S++,S===T&&i.destroy());break;case(o&&_):w=new Date(A.timestamp),k=new Date(d),A.level===c&&w<=k&&S<h?S++:A.level===c&&w<=k&&(In(A,f,y),S++,S===T&&i.destroy());break;case(u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),w>=G&&w<=k&&S<h?S++:w>=G&&w<=k&&(In(A,f,y),S++,S===T&&i.destroy());break;case o:A.level===c&&S<h?S++:A.level===c&&(In(A,f,y),S++,S===T&&i.destroy());break;case u:w=new Date(A.timestamp),G=new Date(l),w>=G&&S<h?S++:w>=G&&S>=h&&(In(A,f,y),S++,S===T&&i.destroy());break;case _:w=new Date(A.timestamp),k=new Date(d),w<=k&&S<h?S++:w<=k&&S>=h&&(In(A,f,y),S++,S===T&&i.destroy());break;default:S<h?S++:(In(A,f,y),S++,S===T&&i.destroy())}}return a(Y,"onLogMessage"),await A3(i,"close"),y}a(w3,"readLog");function In(e,t,r){t==="desc"?C3(e,r):t==="asc"?U3(e,r):r.push(e)}a(In,"pushLineToResult");function C3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(C3,"insertDescending");function U3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(U3,"insertAscending")});var p_=m(($ce,BC)=>{"use strict";var sS=require("joi"),{string:S_,boolean:MC,date:D3}=sS.types(),L3=ve(),{validateSchemaExists:xce,validateTableExists:kce,validateSchemaName:Vce}=ns(),M3=g(),P3=Be(),PC=Q();PC.initSync();var v3=S_.invalid(PC.get(M3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(P3.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),vC={operation:S_.valid("add_node","update_node"),node_name:v3,subscriptions:sS.array().items({table:S_.optional(),schema:S_.required(),subscribe:MC.required(),publish:MC.required().custom(H3),start_time:D3.iso()}).min(1).required()};function B3(e){return L3.validateBySchema(e,sS.object(vC))}a(B3,"addUpdateNodeValidator");function H3(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(H3,"checkForFalsy");BC.exports={addUpdateNodeValidator:B3,validation_schema:vC}});var qC=m((Kce,HC)=>{var q3=ve(),F3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};HC.exports=function(e){return q3.validateObject(e,F3)}});var iS=m((Wce,FC)=>{"use strict";var G3=g().OPERATIONS_ENUM,nS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=G3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};FC.exports=nS});var xC=m((zce,GC)=>{"use strict";var x3={OPERATION:"operation",REFRESH:"refresh"},oS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},aS=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};GC.exports={JWTTokens:oS,TOKEN_TYPE_ENUM:x3,JWTRSAKeys:aS}});var fc=m((Xce,YC)=>{"use strict";var Ec=require("jsonwebtoken"),cS=require("fs-extra"),uS=x(),br=g(),{handleHDBError:Kt,hdb_errors:k3}=W(),{HTTP_STATUS_CODES:Wt,AUTHENTICATION_ERROR_MSGS:Qt}=k3,dc=F(),kC=Ml(),dS=Or(),V3=Ar().update,$3=iS(),Y3=Gs(),{UserEventMsg:K3}=qr(),wn=Q();wn.initSync();var lS=require("path"),{JWTTokens:W3,JWTRSAKeys:Q3,TOKEN_TYPE_ENUM:T_}=xC(),z3=wn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?wn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",J3=wn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?wn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",R_="RS256",_S;YC.exports={createTokens:X3,validateOperationToken:j3,refreshOperationToken:Z3,validateRefreshToken:$C};async function X3(e){if(uS.isEmpty(e)||typeof e!="object")throw Kt(new Error,Qt.INVALID_AUTH_OBJECT,Wt.BAD_REQUEST,void 0,void 0,!0);if(uS.isEmpty(e.username))throw Kt(new Error,Qt.USERNAME_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);if(uS.isEmpty(e.password))throw Kt(new Error,Qt.PASSWORD_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await dS.findAndValidateUser(e.username,e.password),!t)throw Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw dc.error(E),Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}let r=await g_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await VC(i,r.private_key,r.passphrase),c=await Ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:J3,algorithm:R_,subject:T_.REFRESH}),u=kC.hash(c),l=new $3(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await V3(l)}catch(E){dc.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Kt(new Error,Qt.REFRESH_TOKEN_SAVE_FAILED,Wt.INTERNAL_SERVER_ERROR);return Y3.signalUserChange(new K3(process.pid)),new W3(o,c)}a(X3,"createTokens");async function VC(e,t,r){return await Ec.sign(e,{key:t,passphrase:r},{expiresIn:z3,algorithm:R_,subject:T_.OPERATION})}a(VC,"signOperationToken");async function g_(){if(_S===void 0)try{let e=lS.join(wn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PASSPHRASE_NAME),t=lS.join(wn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=lS.join(wn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await cS.readFile(e)).toString(),n=(await cS.readFile(t)).toString(),i=(await cS.readFile(r)).toString();_S=new Q3(i,n,s)}catch(e){throw dc.error(e),Kt(new Error,Qt.NO_ENCRYPTION_KEYS,Wt.INTERNAL_SERVER_ERROR)}return _S}a(g_,"getJWTRSAKeys");async function Z3(e){if(!e)throw Kt(new Error,Qt.INVALID_BODY,Wt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Kt(new Error,Qt.REFRESH_TOKEN_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);await $C(e.refresh_token);let t=await g_(),r=await Ec.decode(e.refresh_token);return{operation_token:await VC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Z3,"refreshOperationToken");async function j3(e){try{let t=await g_(),r=await Ec.verify(e,t.public_key,{algorithms:R_,subject:T_.OPERATION});return await dS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw dc.warn(t),t.name&&t.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}}a(j3,"validateOperationToken");async function $C(e){let t;try{let r=await g_(),s=await Ec.verify(e,r.public_key,{algorithms:R_,subject:T_.REFRESH});t=await dS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw dc.warn(r),r.name&&r.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}if(!kC.validate(t.refresh_token,e))throw Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED);return t}a($C,"validateRefreshToken")});var ES=m((eue,QC)=>{"use strict";var e4=qC(),go=require("passport"),t4=require("passport-local").Strategy,r4=require("passport-http").BasicStrategy,s4=require("util"),n4=Or(),WC=s4.callbackify(n4.findAndValidateUser),jce=rr(),i4=g(),KC=fc();go.use(new t4(function(e,t,r){WC(e,t,r)}));go.use(new r4(function(e,t,r){WC(e,t,r)}));go.serializeUser(function(e,t){t(null,e)});go.deserializeUser(function(e,t){t(null,e)});function o4(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":go.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===i4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?KC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):KC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:go.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(o4,"authorize");function a4(e,t){let r=e4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(a4,"checkPermissions");QC.exports={authorize:o4,checkPermissions:a4}});var Ao=m((rue,zC)=>{"use strict";var fS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},hS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};zC.exports={Node:fS,NodeSubscription:hS}});var XC=m((nue,JC)=>{"use strict";var c4=g().OPERATIONS_ENUM,mS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=c4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};JC.exports=mS});var hc=m((oue,ZC)=>{"use strict";var SS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},pS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,this.attributes=c}};ZC.exports={RemotePayloadObject:SS,RemotePayloadSubscription:pS}});var eU=m((cue,jC)=>{"use strict";var TS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};jC.exports=TS});var sU=m((Eue,rU)=>{"use strict";var u4=eU(),lue=xe(),tU=ye(),l4=F(),{getSchemaPath:_ue,getTransactionAuditStorePath:due}=we(),{getDatabases:_4}=(de(),te(Ne));rU.exports=d4;async function d4(e){let t=new u4;try{let r=_4()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await tU.environmentDataSize(schema_path,e.name),o=await tU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){l4.warn(`unable to stat table dbi due to ${r}`)}return t}a(d4,"lmdbGetTableSize")});var iU=m((hue,nU)=>{"use strict";var RS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};nU.exports=RS});var Oo=m((Tue,uU)=>{"use strict";var E4=require("fs-extra"),f4=require("path"),Ut=require("systeminformation"),Cn=F(),h4=st(),gS=Be(),O_=g(),m4=sU(),cU=si(),{getThreadInfo:oU}=tt(),DS=Q();DS.initSync();var S4=iU(),{openEnvironment:Sue}=ye(),{getSchemaPath:pue}=we(),{database:p4}=(de(),te(Ne)),A_;uU.exports={getHDBProcessInfo:bS,getNetworkInfo:IS,getDiskInfo:yS,getMemoryInfo:NS,getCPUInfo:OS,getTimeInfo:AS,getSystemInformation:wS,systemInformation:T4,getTableSize:CS,getMetrics:US};function AS(){return Ut.time()}a(AS,"getTimeInfo");async function OS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:S,cpus:y,...O}=await Ut.currentLoad();return O.cpus=[],y.forEach(H=>{let{raw_load:Y,raw_load_idle:A,raw_load_irq:w,raw_load_nice:G,raw_load_system:k,raw_load_user:X,...ge}=H;O.cpus.push(ge)}),_.current_load=O,_}catch(e){return Cn.error(`error in getCPUInfo: ${e}`),{}}}a(OS,"getCPUInfo");async function NS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Cn.error(`error in getMemoryInfo: ${e}`),{}}}a(NS,"getMemoryInfo");async function bS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await E4.readFile(f4.join(DS.get(O_.CONFIG_PARAMS.ROOTPATH),O_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===O_.NODE_ERROR_CODES.ENOENT)Cn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Cn.error(`error in getHDBProcessInfo: ${t}`),e}}a(bS,"getHDBProcessInfo");async function yS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Cn.error(`error in getDiskInfo: ${t}`),e}}a(yS,"getDiskInfo");async function IS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Cn.error(`error in getNetworkInfo: ${t}`),e}}a(IS,"getNetworkInfo");async function wS(){if(A_!==void 0)return A_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,A_=e,A_}catch(t){return Cn.error(`error in getSystemInformation: ${t}`),e}}a(wS,"getSystemInformation");async function CS(){let e=[],t=await cU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await m4(s));return e}a(CS,"getTableSize");async function US(){let e=await cU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=p4({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Cn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(US,"getMetrics");async function aU(){if(DS.get(O_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await h4.getNATSReferences(),r=await t.streams.info(gS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(gS.WORK_QUEUE_CONSUMER_NAMES.stream_name,gS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(aU,"getNatsStreamInfo");async function T4(e){let t=new S4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await wS(),t.time=AS(),t.cpu=await OS(),t.memory=await NS(),t.disk=await yS(),t.network=await IS(),t.harperdb_processes=await bS(),t.table_size=await CS(),t.metrics=await US(),t.threads=await oU(),t.replication=await aU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await wS();break;case"time":t.time=AS();break;case"cpu":t.cpu=await OS();break;case"memory":t.memory=await NS();break;case"disk":t.disk=await yS();break;case"network":t.network=await IS();break;case"harperdb_processes":t.harperdb_processes=await bS();break;case"table_size":t.table_size=await CS();break;case"database_metrics":case"metrics":t.metrics=await US();break;case"threads":t.threads=await oU();break;case"replication":t.replication=await aU();break;default:break}return t}a(T4,"systemInformation")});var LS=m((Oue,lU)=>{"use strict";var gue=require("fs-extra"),Aue=F();lU.exports={version:R4,printVersion:A4,nodeVersion:g4};var Un=rc();function R4(){if(Un)return Un.version}a(R4,"version");function g4(){if(Un&&Un.engines&&Un.engines["preferred-node"])return Un.engines["preferred-node"]}a(g4,"nodeVersion");function A4(){Un&&console.log(`HarperDB Version ${Un.version}`)}a(A4,"printVersion")});var $s=m((Iue,fU)=>{"use strict";var O4=Ar(),MS=x(),N4=require("util"),pi=g(),_U=Q();_U.initSync();var b4=ES(),dU=gr(),{Node:bue,NodeSubscription:yue}=Ao(),y4=Ji(),I4=XC(),{RemotePayloadObject:w4,RemotePayloadSubscription:C4}=hc(),{handleHDBError:U4,hdb_errors:D4}=W(),{HTTP_STATUS_CODES:L4,HDB_ERROR_MSGS:M4}=D4,P4=os(),v4=Oo(),B4=LS(),{getDatabases:H4}=(de(),te(Ne)),q4=N4.promisify(b4.authorize),F4=dU.searchByHash,G4=dU.searchByValue;fU.exports={authHeaderToUser:x4,isEmpty:k4,getNodeRecord:V4,upsertNodeRecord:$4,buildNodePayloads:Y4,checkClusteringEnabled:K4,getAllNodeRecords:W4,getSystemInfo:Q4,reverseSubscription:EU};async function x4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await q4(t,null),e}a(x4,"authHeaderToUser");function k4(e){return e==null}a(k4,"isEmpty");async function V4(e){let t=new y4(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return F4(t)}a(V4,"getNodeRecord");async function $4(e){let t=new I4(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return O4.upsert(t)}a($4,"upsertNodeRecord");function EU(e){if(MS.isEmpty(e.subscribe)||MS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(EU,"reverseSubscription");function Y4(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=MS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=EU(c),f=H4()[u]?.[l],h=new C4(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new w4(r,t,n,s)}a(Y4,"buildNodePayloads");function K4(){if(!_U.get(pi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw U4(new Error,M4.CLUSTERING_NOT_ENABLED,L4.BAD_REQUEST,void 0,void 0,!0)}a(K4,"checkClusteringEnabled");async function W4(){let e=new P4(pi.SYSTEM_SCHEMA_NAME,pi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await G4(e))}a(W4,"getAllNodeRecords");async function Q4(){let e=await v4.getSystemInformation();return{hdb_version:B4.version(),node_version:e.node_version,platform:e.platform}}a(Q4,"getSystemInfo")});var PS=m((Cue,AU)=>{"use strict";var N_=st(),hU=x(),mU=Be(),SU=g(),b_=F(),pU=__(),z4=uh(),{RemotePayloadObject:J4}=hc(),{handleHDBError:TU,hdb_errors:X4}=W(),{HTTP_STATUS_CODES:RU}=X4,{NodeSubscription:gU}=Ao();AU.exports=Z4;async function Z4(e,t){let r;try{r=await N_.request(`${t}.${mU.REQUEST_SUFFIX}`,new J4(SU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),b_.trace("Response from remote describe all request:",r)}catch(o){b_.error(`addNode received error from describe all request to remote node: ${o}`);let c=N_.requestErrorHandler(o,"add_node",t);throw TU(new Error,c,RU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===mU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw TU(new Error,o,RU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===SU.SYSTEM_SCHEMA_NAME){await N_.createLocalTableStream(c,u);let h=new gU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=hU.doesSchemaExist(c),_=s[c]!==void 0,d=u?hU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(b_.trace(`addNode creating schema: ${c}`),await pU.createSchema({operation:"create_schema",schema:c})),!d&&E){b_.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new z4(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await pU.createTable(h)}await N_.createLocalTableStream(c,u);let f=new gU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(Z4,"reviewSubscriptions")});var w_=m((Due,bU)=>{"use strict";var{handleHDBError:y_,hdb_errors:j4}=W(),{HTTP_STATUS_CODES:I_}=j4,{addUpdateNodeValidator:eX}=p_(),mc=F(),NU=g(),OU=Be(),tX=x(),vS=st(),Sc=$s(),rX=Q(),sX=PS(),{Node:nX,NodeSubscription:iX}=Ao(),{broadcast:oX}=tt(),aX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",cX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",uX=rX.get(NU.CONFIG_PARAMS.CLUSTERING_NODENAME);bU.exports=lX;async function lX(e,t=!1){mc.trace("addNode called with:",e),Sc.checkClusteringEnabled();let r=eX(e);if(r)throw y_(r,r.message,I_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Sc.getNodeRecord(s);if(!tX.isEmptyOrZeroLength(d))throw y_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,I_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await sX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=aX,o;let c=Sc.buildNodePayloads(n,uX,NU.OPERATIONS_ENUM.ADD_NODE,await Sc.getSystemInfo());mc.trace("addNode sending remote payload:",c);let u;try{u=await vS.request(`${s}.${OU.REQUEST_SUFFIX}`,c)}catch(d){mc.error(`addNode received error from request: ${d}`);let E=vS.requestErrorHandler(d,"add_node",s);throw y_(new Error,E,I_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===OU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw y_(new Error,d,I_.INTERNAL_SERVER_ERROR,"error",d)}mc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];mc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await vS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new iX(f.schema,f.table,f.publish,f.subscribe))}let _=new nX(s,l,u.system_info);return await Sc.upsertNodeRecord(_),oX({type:"nats_update"}),i.length>0?o.message=cX:o.message=`Successfully added '${s}' to manifest`,o}a(lX,"addNode")});var HS=m((Mue,wU)=>{"use strict";var{handleHDBError:C_,hdb_errors:_X}=W(),{HTTP_STATUS_CODES:U_}=_X,{addUpdateNodeValidator:dX}=p_(),pc=F(),IU=g(),yU=Be(),EX=x(),BS=st(),Tc=$s(),fX=Q(),{cloneDeep:hX}=require("lodash"),mX=PS(),{NodeSubscription:SX}=Ao(),{broadcast:pX}=tt(),TX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",RX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",gX=fX.get(IU.CONFIG_PARAMS.CLUSTERING_NODENAME);wU.exports=AX;async function AX(e){pc.trace("updateNode called with:",e),Tc.checkClusteringEnabled();let t=dX(e);if(t)throw C_(t,t.message,U_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=hX(await Tc.getNodeRecord(r));if(EX.isEmptyOrZeroLength(s))throw C_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,U_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await mX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=TX,o;let c=Tc.buildNodePayloads(n,gX,IU.OPERATIONS_ENUM.UPDATE_NODE,await Tc.getSystemInfo());pc.trace("updateNode sending remote payload:",c);let u;try{u=await BS.request(`${r}.${yU.REQUEST_SUFFIX}`,c)}catch(l){pc.error(`updateNode received error from request: ${l}`);let _=BS.requestErrorHandler(l,"update_node",r);throw C_(new Error,_,U_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===yU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw C_(new Error,l,U_.INTERNAL_SERVER_ERROR,"error",l)}pc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];pc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await BS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await OX(s[0],n,u.system_info),i.length>0?o.message=RX:o.message=`Successfully updated '${r}'`,o}a(AX,"updateNode");async function OX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new SX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Tc.upsertNodeRecord(s),pX({type:"nats_update"})}a(OX,"updateNodeTable")});var MU=m((vue,LU)=>{"use strict";var DU=require("joi"),{string:CU}=DU.types(),NX=ve(),UU=g(),bX=Q(),yX=Be();LU.exports=IX;function IX(e){let t=CU.invalid(bX.get(UU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(yX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=DU.object({operation:CU.valid(UU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return NX.validateBySchema(e,r)}a(IX,"removeNodeValidator")});var L_=m((Hue,FU)=>{"use strict";var{handleHDBError:PU,hdb_errors:wX}=W(),{HTTP_STATUS_CODES:vU}=wX,CX=MU(),Rc=F(),BU=$s(),UX=x(),D_=g(),HU=Be(),qU=st(),DX=Q(),{RemotePayloadObject:LX}=hc(),{NodeSubscription:MX}=Ao(),PX=Pa(),vX=ci(),{broadcast:BX}=tt(),HX=DX.get(D_.CONFIG_PARAMS.CLUSTERING_NODENAME);FU.exports=qX;async function qX(e){Rc.trace("removeNode called with:",e),BU.checkClusteringEnabled();let t=CX(e);if(t)throw PU(t,t.message,vU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await BU.getNodeRecord(r);if(UX.isEmptyOrZeroLength(s))throw PU(new Error,`Node '${r}' was not found.`,vU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new LX(D_.OPERATIONS_ENUM.REMOVE_NODE,HX,[]),i,o=!1;try{i=await qU.request(`${r}.${HU.REQUEST_SUFFIX}`,n),Rc.trace("Remove node reply from remote node:",r,i)}catch(u){Rc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Rc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new MX(_.schema,_.table,!1,!1);await qU.updateWorkStream(d,r)}let c=new PX(D_.SYSTEM_SCHEMA_NAME,D_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await vX.deleteRecord(c),BX({type:"nats_update"}),i?.status===HU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Rc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(qX,"removeNode")});var kU=m((Fue,xU)=>{"use strict";var GU=require("joi"),{string:FX,array:GX}=GU.types(),xX=ve(),kX=p_();xU.exports=VX;function VX(e){let t=GU.object({operation:FX.valid("configure_cluster").required(),connections:GX.items(kX.validation_schema).required()});return xX.validateBySchema(e,t)}a(VX,"configureClusterValidator")});var qS=m((xue,WU)=>{"use strict";var $X=g(),M_=F(),YX=x(),KX=L_(),WX=w_(),VU=$s(),QX=kU(),{handleHDBError:$U,hdb_errors:zX}=W(),{HTTP_STATUS_CODES:YU}=zX,JX="Configure cluster complete.",XX="Failed to configure the cluster. Check the logs for more details.",ZX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";WU.exports=jX;async function jX(e){M_.trace("configure cluster called with:",e),VU.checkClusteringEnabled();let t=QX(e);if(t)throw $U(t,t.message,YU.BAD_REQUEST,void 0,void 0,!0);let r=await VU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(KU(KX,{operation:$X.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);M_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(KU(WX,f,f.node_name))}let c=await Promise.allSettled(i);M_.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(M_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(YX.isEmptyOrZeroLength(u))return{message:JX,connections:l};if(_)return{message:ZX,failed_nodes:u,connections:l};throw $U(new Error,XX,YU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(jX,"configureCluster");async function KU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(KU,"functionWrapper")});var zU=m((Vue,QU)=>{"use strict";var P_=require("joi"),eZ=ve(),{validateSchemaExists:tZ,validateTableExists:rZ,validateSchemaName:sZ}=ns(),nZ=P_.object({operation:P_.string().valid("purge_stream"),schema:P_.string().custom(tZ).custom(sZ).required(),table:P_.string().custom(rZ).required()});function iZ(e){return eZ.validateBySchema(e,nZ)}a(iZ,"purgeStreamValidator");QU.exports=iZ});var FS=m((Yue,JU)=>{"use strict";var{handleHDBError:oZ,hdb_errors:aZ}=W(),{HTTP_STATUS_CODES:cZ}=aZ,uZ=zU(),lZ=st(),_Z=$s();JU.exports=dZ;async function dZ(e){let t=uZ(e);if(t)throw oZ(t,t.message,cZ.BAD_REQUEST,void 0,void 0,!0);_Z.checkClusteringEnabled();let{schema:r,table:s}=e;return await lZ.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(dZ,"purgeStream")});var kS=m((Wue,rD)=>{"use strict";var xS=$s(),EZ=st(),jU=Q(),v_=g(),Ti=Be(),fZ=x(),GS=F(),{RemotePayloadObject:hZ}=hc(),{ErrorCode:XU}=require("nats"),ZU=jU.get(v_.CONFIG_PARAMS.CLUSTERING_ENABLED),eD=jU.get(v_.CONFIG_PARAMS.CLUSTERING_NODENAME);rD.exports={clusterStatus:mZ,buildNodeStatus:tD};async function mZ(){let e={node_name:eD,is_enabled:ZU,connections:[]};if(!ZU)return e;let t=await xS.getAllNodeRecords();if(fZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(tD(t[s],e.connections));return await Promise.allSettled(r),e}a(mZ,"clusterStatus");async function tD(e,t){let r=e.name,s=new hZ(v_.OPERATIONS_ENUM.CLUSTER_STATUS,eD,void 0,await xS.getSystemInfo()),n,i,o=Ti.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await EZ.request(Ti.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ti.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ti.CLUSTER_STATUS_STATUSES.CLOSED,GS.error(`Error getting node status from ${r} `,n))}catch(u){GS.warn(`Error getting node status from ${r}`,u),u.code===XU.NoResponders?o=Ti.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===XU.Timeout?o=Ti.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ti.CLUSTER_STATUS_STATUSES.CLOSED}let c=new SZ(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==v_.PRE_4_0_0_VERSION&&await xS.upsertNodeRecord(u)}catch(u){GS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(tD,"buildNodeStatus");function SZ(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(SZ,"NodeStatusObject")});var $S=m((zue,sD)=>{"use strict";var{handleHDBError:pZ,hdb_errors:TZ}=W(),{HTTP_STATUS_CODES:RZ}=TZ,gZ=st(),AZ=$s(),VS=x(),B_=require("joi"),OZ=ve(),NZ=2e3,bZ=B_.object({timeout:B_.number().min(1),connected_nodes:B_.boolean(),routes:B_.boolean()});sD.exports=yZ;async function yZ(e){AZ.checkClusteringEnabled();let t=OZ.validateBySchema(e,bZ);if(t)throw pZ(t,t.message,RZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||VS.autoCastBoolean(s),o=n===void 0||VS.autoCastBoolean(n),c={nodes:[]},u=await gZ.getServerList(r??NZ),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:VS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(yZ,"clusterNetwork")});var aD=m((Xue,oD)=>{"use strict";var YS=require("joi"),nD=ve(),{route_constraints:iD}=qE();oD.exports={setRoutesValidator:IZ,deleteRoutesValidator:wZ};function IZ(e){let t=YS.object({server:YS.valid("hub","leaf").required(),routes:iD.required()});return nD.validateBySchema(e,t)}a(IZ,"setRoutesValidator");function wZ(e){let t=YS.object({routes:iD.required()});return nD.validateBySchema(e,t)}a(wZ,"deleteRoutesValidator")});var WS=m((jue,_D)=>{"use strict";var Ri=Tr(),KS=x(),H_=g(),cD=aD(),{handleHDBError:uD,hdb_errors:CZ}=W(),{HTTP_STATUS_CODES:lD}=CZ,UZ="cluster routes successfully set",DZ="cluster routes successfully deleted";_D.exports={setRoutes:LZ,getRoutes:MZ,deleteRoutes:PZ};function LZ(e){let t=cD.setRoutesValidator(e);if(t)throw uD(t,t.message,lD.BAD_REQUEST,void 0,void 0,!0);let r=Ri.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=KS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?Ri.updateConfigValue(H_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ri.updateConfigValue(H_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:UZ,set:o,skipped:i}}a(LZ,"setRoutes");function MZ(){let e=Ri.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(MZ,"getRoutes");function PZ(e){let t=cD.deleteRoutesValidator(e);if(t)throw uD(t,t.message,lD.BAD_REQUEST,void 0,void 0,!0);let r=Ri.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=KS.isEmptyOrZeroLength(s)?null:s,Ri.updateConfigValue(H_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=KS.isEmptyOrZeroLength(n)?null:n,Ri.updateConfigValue(H_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:DZ,deleted:i,skipped:o}}a(PZ,"deleteRoutes")});var ED=m((tle,dD)=>{"use strict";var gc=require("alasql"),gi=require("recursive-iterator"),Yr=F(),vZ=x(),Ac=g(),QS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,HZ(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Ac.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Ac.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Ac.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=BZ(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!Ac.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new gc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function BZ(e){return e.filter(t=>t[Ac.PERMS_CRUD_ENUM.READ])}a(BZ,"filterReadRestrictedAttrs");function HZ(e,t,r,s,n){qZ(e,t,r,s,n)}a(HZ,"interpretAST");function Oc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Oc,"addSchemaTableToMap");function qZ(e,t,r,s,n){if(!e){Yr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof gc.yy.Insert?kZ(e,t,r):e instanceof gc.yy.Select?FZ(e,t,r,s,n):e instanceof gc.yy.Update?GZ(e,t,r):e instanceof gc.yy.Delete?xZ(e,t,r):Yr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(qZ,"getRecordAttributesAST");function FZ(e,t,r,s,n){if(!e){Yr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(vZ.isEmptyOrZeroLength(i)){Yr.error("No schema specified");return}e.from.forEach(c=>{Oc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Oc(c.table,t,r,s,n)});let o=new gi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Yr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new gi(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Yr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new gi(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Yr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new gi(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Yr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(FZ,"getSelectAttributes");function GZ(e,t,r){if(!e){Yr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new gi(e.columns),n=e.table.databaseid;Oc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&zS(e.table.tableid,n,i.columnid,t,r)}a(GZ,"getUpdateAttributes");function xZ(e,t,r){if(!e){Yr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new gi(e.where),n=e.table.databaseid;Oc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&zS(e.table.tableid,n,i.columnid,t,r)}a(xZ,"getDeleteAttributes");function kZ(e,t,r){if(!e){Yr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new gi(e.columns),n=e.into.databaseid;Oc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&zS(e.into.tableid,n,i.columnid,t,r)}a(kZ,"getInsertAttributes");function zS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(zS,"pushAttribute");dD.exports=QS});var ZS=m((sle,SD)=>{var q_=Va(),fD=require("chalk"),dr=F(),hD=require("prompt"),{promisify:VZ}=require("util"),JS=g(),$Z=require("fs-extra"),YZ=require("path"),KZ=x(),WZ=LS(),mD=Q();mD.initSync();var QZ=require("moment"),zZ=VZ(hD.get),JZ=YZ.join(mD.getHdbBasePath(),JS.LICENSE_KEY_DIR_NAME,JS.LICENSE_FILE_NAME,JS.LICENSE_FILE_NAME);SD.exports={getFingerprint:ZZ,setLicense:XZ,parseLicense:XS,register:jZ,getRegistrationInfo:tj};async function XZ(e){if(e&&e.key&&e.company){try{dr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await XS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(XZ,"setLicense");async function ZZ(){let e={};try{e=await q_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(ZZ,"getFingerprint");async function XS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=q_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await $Z.writeFile(JZ,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(XS,"parseLicense");async function jZ(){let e=await ej();return XS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(jZ,"register");async function ej(){let e=await q_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:fD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:fD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{hD.start()}catch(s){dr.error(s)}let r;try{r=await zZ(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(ej,"promptForRegistration");async function tj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await q_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(KZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=WZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=QZ.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(tj,"getRegistrationInfo")});var TD=m((ile,pD)=>{"use strict";var rj=Be(),jS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+rj.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};pD.exports=jS});var AD=m((ale,gD)=>{"use strict";var RD=Be(),ep=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+RD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+RD.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};gD.exports=ep});var ND=m((ule,OD)=>{"use strict";var tp=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};OD.exports=tp});var yD=m((_le,bD)=>{"use strict";var sj=Be(),rp=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+sj.SERVER_SUFFIX.ADMIN,this.password=r}};bD.exports=rp});var ip=m((Ele,CD)=>{"use strict";var Nc=require("path"),k_=require("fs-extra"),nj=TD(),ij=AD(),oj=ND(),aj=yD(),sp=Or(),No=x(),zt=Tr(),x_=g(),F_=Be(),{CONFIG_PARAMS:Je}=x_,yc=F(),V_=Q(),ID=Vs(),np=st(),bc="clustering",cj=1e4,wD=5;CD.exports={generateNatsConfig:uj,removeNatsConfig:lj};async function uj(e=!1,t=void 0){V_.initSync();let r=V_.get(Je.ROOTPATH),s=Nc.join(r,bc,F_.PID_FILES.HUB),n=Nc.join(r,bc,F_.PID_FILES.LEAF),i=zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Nc.join(r,bc,F_.NATS_CONFIG_FILES.HUB_SERVER),c=Nc.join(r,bc,F_.NATS_CONFIG_FILES.LEAF_SERVER),u=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=zt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=zt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=zt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=zt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await np.checkNATSServerInstalled()||$_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await sp.listUsers(),S=zt.getConfigFromFile(Je.CLUSTERING_USER),y=await sp.getClusterUser();(No.isEmpty(y)||y.active!==!0)&&$_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await G_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await G_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await G_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await G_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],H=[];for(let[ge,ut]of T.entries())ut.role.role===x_.ROLE_TYPES_ENUM.CLUSTER_USER&&ut.active&&(O.push(new aj(ut.username,ID.decrypt(ut.hash))),H.push(new oj(ut.username,ID.decrypt(ut.hash))));let Y=[],{hub_routes:A}=zt.getClusteringRoutes();if(!No.isEmptyOrZeroLength(A))for(let ge of A)Y.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${ge.host}:${ge.port}`);let w=new nj(zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,O,H);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=No.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===x_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await k_.writeJson(o,w),yc.trace(`Hub server config written to ${o}`));let G=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new ij(zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[G],[k],O,H,u,l,_,d);_==null&&delete X.tls.ca_file,(t===void 0||t===x_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await k_.writeJson(c,X),yc.trace(`Leaf server config written to ${c}`))}a(uj,"generateNatsConfig");async function G_(e){let t=V_.get(e);return No.isEmpty(t)&&$_(`port undefined for '${e}'`),await No.isPortTaken(t)&&$_(`'${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}a(G_,"isPortAvailable");function $_(e){let t=`Error generating clustering config: ${e}`;yc.error(t),console.error(t),process.exit(1)}a($_,"generateNatsConfigError");async function lj(e){let{port:t,config_file:r}=np.getServerConfig(e),{username:s,decrypt_hash:n}=await sp.getClusterUser(),i=0,o=500;for(;i<wD;){try{let l=await np.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){yc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=wD)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 No.async_set_timeout(o*i)}let c="0".repeat(cj),u=Nc.join(V_.get(Je.ROOTPATH),bc,r);await k_.writeFile(u,c),await k_.remove(u),yc.notify(e,"started.")}a(lj,"removeNatsConfig")});var vD=m((hle,PD)=>{"use strict";var Er=Q(),_j=Va(),ae=g(),Ic=Be(),Ys=require("path"),{PACKAGE_ROOT:K_}=g(),UD=Q(),Y_=x(),bo="/dev/null",dj=Ys.join(K_,"launchServiceScripts"),DD=Ys.join(K_,"utility/scripts"),Ej=Ys.join(DD,ae.HDB_RESTART_SCRIPT),LD=Ys.resolve(K_,"dependencies",`${process.platform}-${process.arch}`,Ic.NATS_BINARY_NAME);function MD(){let t=_j.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Y_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Y_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:K_}}a(MD,"generateMainServerConfig");var fj=9930;function hj(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",Ic.NATS_CONFIG_FILES.HUB_SERVER),r=Ys.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=UD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ic.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==fj?"-"+s:""),script:LD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=bo,i.error_file=bo),i}a(hj,"generateNatsHubServerConfig");var mj=9940;function Sj(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",Ic.NATS_CONFIG_FILES.LEAF_SERVER),r=Ys.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=UD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ic.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==mj?"-"+s:""),script:LD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=bo,i.error_file=bo),i}a(Sj,"generateNatsLeafServerConfig");function pj(){Er.initSync();let e=Ys.join(Er.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:dj,autorestart:!1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=bo,t.error_file=bo),t}a(pj,"generateClusteringUpgradeV4ServiceConfig");function Tj(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return Y_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Y_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:DD},script:Ej}}a(Tj,"generateRestart");function Rj(){return{apps:[MD()]}}a(Rj,"generateAllServiceConfigs");PD.exports={generateAllServiceConfigs:Rj,generateMainServerConfig:MD,generateRestart:Tj,generateNatsHubServerConfig:hj,generateNatsLeafServerConfig:Sj,generateClusteringUpgradeV4ServiceConfig:pj}});var JD=m((Ale,zD)=>{"use strict";var Re=g(),gj=x(),wc=ip(),Cc=st(),Es=Be(),Dn=vD(),W_=Q(),Ks=F(),Aj=$s(),{startWorker:BD,onMessageFromWorkers:Oj}=tt(),Nj=Oo(),bj=require("util"),qD=require("child_process"),{execFile:yj}=qD,Sle=bj.promisify(qD.exec),ple=require("systeminformation"),fe;zD.exports={enterPM2Mode:Ij,start:Ai,stop:op,reload:FD,restart:GD,list:ap,describe:kD,connect:Ws,kill:Lj,startAllServices:Mj,startService:cp,getUniqueServicesList:VD,restartAllServices:Pj,isServiceRegistered:$D,reloadStopStart:YD,restartHdb:xD,deleteProcess:Uj,startClusteringProcesses:WD,startClusteringThreads:QD,isHdbRestartRunning:Dj,isClusteringRunning:Bj,stopClustering:vj,reloadClustering:Hj};var{PACKAGE_ROOT:Tle}=g(),Rle=g(),{loggerWithTag:gle}=Ks,Uc=!1;Oj(e=>{e.type==="restart"&&W_.initSync(!0)});function Ij(){Uc=!0}a(Ij,"enterPM2Mode");function Ws(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ks.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ws,"connect");var Jt,wj=10,HD;function Ai(e){if(Uc)return Cj(e);let t=yj(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Jt.indexOf(t);i>-1&&Jt.splice(i,1),!HD&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<wj&&Ai(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=W_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Es.LOG_LEVELS[d]}if(Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Jt){Jt=[];let n=a(()=>{HD=!0,Jt&&(Jt.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)}Jt.push(t)}a(Ai,"start");function Cj(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Cj,"startWithPM2");function op(e){if(!Uc){for(let t of Jt||[])t.name===e&&(Jt.splice(Jt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(op,"stop");function FD(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(FD,"reload");function GD(e){if(!Uc)for(let t of Jt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(GD,"restart");function Uj(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Uj,"deleteProcess");async function xD(){await Ai(Dn.generateRestart())}a(xD,"restartHdb");async function Dj(){let e=await ap();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Dj,"isHdbRestartRunning");function ap(){return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(ap,"list");function kD(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(kD,"describe");function Lj(){if(!Uc){for(let e of Jt||[])e.kill();Jt=[];return}return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(Lj,"kill");async function Mj(){try{await WD(),await QD(),await Ai(Dn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Mj,"startAllServices");async function cp(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Dn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Dn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Dn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Dn.generateNatsHubServerConfig(),await Ai(t),await wc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Dn.generateNatsLeafServerConfig(),await Ai(t),await wc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Dn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ai(t)}catch(t){throw fe.disconnect(),t}}a(cp,"startService");async function VD(){try{let e=await ap(),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 fe.disconnect(),e}}a(VD,"getUniqueServicesList");async function Pj(e=[]){try{let t=!1,r=await VD();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await GD(o))}t&&await YD(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(Pj,"restartAllServices");async function $D(e){if(Jt?.find(r=>r.name===e))return!0;let t=await Nj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a($D,"isServiceRegistered");async function YD(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?W_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):W_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await kD(e),s=gj.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await op(e),await cp(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await xD():await FD(e)}a(YD,"reloadStopStart");var KD;async function WD(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await cp(t)}}a(WD,"startClusteringProcesses");async function QD(){KD=BD(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Cc.createWorkQueueStream(Es.WORK_QUEUE_CONSUMER_NAMES),await Cc.updateIngestStreamConsumer(),await Cc.updateLocalStreams();let e=await Aj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ks.info("Starting clustering upgrade 4.0.0 process"),BD(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(QD,"startClusteringThreads");async function vj(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await KD.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await op(t)}}a(vj,"stopClustering");async function Bj(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await $D(t)===!1)return!1}return!0}a(Bj,"isClusteringRunning");async function Hj(){await wc.generateNatsConfig(!0),await Cc.reloadNATSHub(),await Cc.reloadNATSLeaf(),await wc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await wc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Hj,"reloadClustering")});var hp=m((Nle,rL)=>{"use strict";var qj=require("minimist"),{isMainThread:_p,parentPort:jD}=require("worker_threads"),qe=g(),{PROCESS_DESCRIPTORS_VALIDATE:Dc}=qe,hs=F(),dp=x(),Q_=ip(),yo=st(),up=Be(),eL=Tr(),ms=JD(),XD=Oo(),Fj=NE(),{restartWorkers:z_,onMessageByType:Gj}=tt(),{handleHDBError:xj,hdb_errors:kj}=W(),{HTTP_STATUS_CODES:Vj}=kj,J_=Q();J_.initSync();var Lc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,$j="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",ZD="Clustering is not enabled so cannot be restarted",Yj="Invalid service",Oi,Kr;rL.exports={restart:tL,restartService:Ep};_p&&Gj(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Ep({service:e.workerType}):tL({operation:"restart"})});async function tL(e){Kr=Object.keys(e).length===0,Oi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=qj(process.argv);if(t.service){await Ep(t);return}if(Kr&&!Oi){console.error($j);return}if(Kr&&console.log(Lc),Oi){ms.enterPM2Mode(),hs.notify(Lc);let r=Fj(Object.keys(qe.CONFIG_PARAM_MAP),!0);return dp.isEmptyOrZeroLength(Object.keys(r))||eL.updateConfigValue(void 0,void 0,r,!0,!0),Wj(),Lc}return _p?(hs.notify(Lc),await fp(),setTimeout(()=>{z_()},50)):jD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),Lc}a(tL,"restart");async function Ep(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw xj(new Error,Yj,Vj.BAD_REQUEST,void 0,void 0,!0);if(Oi=await ms.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!_p)return jD.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Dc.clustering:if(!J_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZD;break}Kr&&console.log("Restarting clustering"),hs.notify("Restarting clustering"),await fp();break;case Dc.clustering_config:case Dc["clustering config"]:if(!J_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=ZD;break}Kr&&console.log("Restarting clustering_config"),hs.notify("Restarting clustering_config"),await ms.reloadClustering();break;case"custom_functions":case"custom functions":case Dc.harperdb:case Dc.http_workers:if(Kr&&!Oi){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}Kr&&console.log("Restarting http_workers"),hs.notify("Restarting http_workers"),Oi?await ms.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{z_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(hs.error(r),Kr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Ep,"restartService");async function Kj(){await yo.publishToStream(`${up.SUBJECT_PREFIXES.TXN}.${up.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,up.WORK_QUEUE_CONSUMER_NAMES.stream_name,yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Kj,"postDummyNatsMsg");async function Wj(){await fp(),await ms.restart(qe.HDB_PROC_DESCRIPTOR),await dp.async_set_timeout(2e3),J_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await lp(),Kr&&(await yo.closeConnection(),process.exit(0))}a(Wj,"restartPM2Mode");async function fp(){if(!eL.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await XD.getHDBProcessInfo()).clustering.length===0)hs.trace("Clustering not running, restart will start clustering services"),await Q_.generateNatsConfig(!0),await ms.startClusteringProcesses(),await ms.startClusteringThreads(),await lp(),Kr&&await yo.closeConnection();else{await Kj(),await Q_.generateNatsConfig(!0),Oi?(hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ms.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await XD.getHDBProcessInfo()).clustering.forEach(n=>{hs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await dp.async_set_timeout(3e3),await lp(),await yo.updateLocalStreams(),Kr&&await yo.closeConnection(),hs.trace("Restart clustering restarting ingest and reply service threads");let t=z_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=z_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(fp,"restartClustering");async function lp(){await Q_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Q_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(lp,"removeNatsConfig")});var EL=m((Ile,dL)=>{"use strict";var yle=require("lodash"),Xt=g(),{handleHDBError:sL,hdb_errors:Qj}=W(),{HDB_ERROR_MSGS:zj,HTTP_STATUS_CODES:Jj}=Qj,mp=F();dL.exports={getRolePermissions:Zj};var Ni=Object.create(null),Xj=a(e=>({key:e,perms:{}}),"perms_template_obj"),aL=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),cL=a((e=!1,t=!1,r=!1,s=!1)=>({[Xt.PERMS_CRUD_ENUM.READ]:e,[Xt.PERMS_CRUD_ENUM.INSERT]:t,[Xt.PERMS_CRUD_ENUM.UPDATE]:r,[Xt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),Sp=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...cL(t,r,s,n)}),"table_perms_template"),nL=a((e,t=cL())=>({attribute_name:e,describe:_L(t),[Mc]:t[Mc],[pp]:t[pp],[Tp]:t[Tp]}),"attr_perms_template"),iL=a((e,t=!1)=>({attribute_name:e,describe:t,[Mc]:t}),"timestamp_attr_perms_template"),{READ:Mc,INSERT:pp,UPDATE:Tp}=Xt.PERMS_CRUD_ENUM,uL=Object.values(Xt.PERMS_CRUD_ENUM),lL=[Mc,pp,Tp];function Zj(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Xt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ni[t]&&Ni[t].key===s)return Ni[t].perms;let n=jj(e,r);return Ni[t]?Ni[t].key=s:Ni[t]=Xj(s),Ni[t].perms=n,n}catch(r){if(!e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw mp.error(s),mp.debug(r),sL(new Error,zj.OUTDATED_PERMS_TRANSLATION_ERROR,Jj.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw mp.error(s),sL(new Error)}}}a(Zj,"getRolePermissions");function jj(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xt.SYSTEM_SCHEMA_NAME]=s[Xt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=e5(t[i]);return}r[i]=aL(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],l=t5(c,u);r[i].describe||uL.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=Sp()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Sp()})}),r}a(jj,"translateRolePermissions");function e5(e){let t=aL(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Sp(!0,!0,!0,!0,!0)}),t}a(e5,"createStructureUserPermissions");function t5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Xt.TIME_STAMP_NAMES.includes(d)&&(E=iL(d,_[Mc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=nL(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=_L(_),n.attribute_permissions.push(_),c||r5(_,u)}else if(l!==o){let _;Xt.TIME_STAMP_NAMES.includes(l)?_=iL(l):_=nL(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=oL(n),n}else return e.describe=oL(e),e}a(t5,"getTableAttrPerms");function oL(e){return uL.filter(t=>e[t]).length>0}a(oL,"getSchemaTableDescribePerm");function _L(e){return lL.filter(t=>e[t]).length>0}a(_L,"getAttributeDescribePerm");function r5(e,t){lL.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(r5,"checkForHashPerms")});var Pc={};Ye(Pc,{authentication:()=>TL,login:()=>_5,logout:()=>d5,start:()=>l5});async function TL(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?o5?i5:[]:n5?s5:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return X_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),X_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(X_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),S=n.indexOf("=",h);c=n.slice(S+1,T===-1?n.length:T),u=await hL.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let S=new ed.AuthAuditLog(f,h,gt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=T,c&&(S.session_id=c),e.headers.referer&&(S.referer=e.headers.referer),e.headers.origin&&(S.origin=e.headers.origin),h===gt.AUTH_AUDIT_STATUS.SUCCESS?fL.notify(S):fL.error(S)},"authAuditLog"),_;if(s){if(_=Io.get(s),!_){let[f,h]=s.split(" "),T,S;try{switch(f){case"Basic":[T,S]=atob(h).split(":"),_=T||S?await Et.auth(T,S):null;break;case"Bearer":try{_=await(0,j_.validateOperationToken)(h)}catch(y){if(y.message==="invalid token")try{return await(0,j_.validateRefreshToken)(h),{status:-1}}catch{throw y}}break}}catch(y){return u5&&(Io.get(h)||(Io.set(h,h),l(T,gt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Qs({error:y.message},e)}}Io.set(s,_),c5&&l(_.username,gt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await Et.auth(u.user,null,!1):a5&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,Z_.getSuperUser)());X_&&(e.session.update=function(f){if(!c){c=(0,SL.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("set-cookie",T):d?.headers?.set&&d.headers.set("set-cookie",T)}return f.id=c,hL.put(f)},e.login=async function(f,h){e.user=await Et.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&En.loginPath?(d.status=302,d.headers.Location=En.loginPath(e)):d.headers["WWW-Authenticate"]="Basic");let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f={});for(let h=0;h<E;){let T=o[h++];f[T]=o[h++]}}return o=null,d}function l5({server:e,port:t}){e.request(TL,{port:t||"all"}),mL||(mL=!0,setInterval(()=>{Io=new Map},yr.get(gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),pL.user.addListener(()=>{Io=new Map}))}async function _5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function d5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Z_,j_,SL,yr,gt,ed,pL,fL,s5,n5,i5,o5,hL,X_,a5,c5,u5,Io,mL,td=pe(()=>{Z_=D(Or());bs();fa();j_=D(fc());de();SL=require("uuid"),yr=D(Q()),gt=D(g()),ed=D(F());wo();pL=D(Ya()),fL=(0,ed.loggerWithTag)("auth-event");yr.initSync();s5=yr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),n5=yr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),i5=yr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),o5=yr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);Et.auth=Z_.findAndValidateUser;hL=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),X_=yr.get(gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,a5=yr.get(gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,c5=yr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,u5=yr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Io=new Map;a(TL,"authentication");a(l5,"start");a(_5,"login");a(d5,"logout")});var yL=m((Ple,bL)=>{"use strict";var he=require("joi"),RL=require("fs-extra"),gL=require("path"),Js=ve(),AL=Q(),OL=g(),NL=F(),{hdb_errors:E5}=W(),{HDB_ERROR_MSGS:Dt}=E5,zs=/^[a-zA-Z0-9-_]+$/;bL.exports={getDropCustomFunctionValidator:h5,setCustomFunctionValidator:m5,addComponentValidator:R5,dropCustomFunctionProjectValidator:g5,packageComponentValidator:A5,deployComponentValidator:O5,setComponentFileValidator:S5,getComponentFileValidator:T5,dropComponentFileValidator:p5};function rd(e,t,r){try{let s=AL.get(OL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=gL.join(s,t);return RL.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return NL.error(s),r.message(Dt.VALIDATION_ERR)}}a(rd,"checkProjectExists");function vc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(vc,"checkFilePath");function f5(e,t,r,s){try{let n=AL.get(OL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=gL.join(n,e,t,r+".js");return RL.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return NL.error(n),s.message(Dt.VALIDATION_ERR)}}a(f5,"checkFileExists");function h5(e){let t=he.object({project:he.string().pattern(zs).custom(rd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(zs).custom(f5.bind(null,e.project,e.type)).custom(vc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Js.validateBySchema(e,t)}a(h5,"getDropCustomFunctionValidator");function m5(e){let t=he.object({project:he.string().pattern(zs).custom(rd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(vc).required(),function_content:he.string().required()});return Js.validateBySchema(e,t)}a(m5,"setCustomFunctionValidator");function S5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(vc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(S5,"setComponentFileValidator");function p5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(vc).optional()});return Js.validateBySchema(e,t)}a(p5,"dropComponentFileValidator");function T5(e){let t=he.object({project:he.string().required(),file:he.string().custom(vc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(T5,"getComponentFileValidator");function R5(e){let t=he.object({project:he.string().pattern(zs).custom(rd.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(R5,"addComponentValidator");function g5(e){let t=he.object({project:he.string().pattern(zs).custom(rd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(g5,"dropCustomFunctionProjectValidator");function A5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Js.validateBySchema(e,t)}a(A5,"packageComponentValidator");function O5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Js.validateBySchema(e,t)}a(O5,"deployComponentValidator")});var Op=m((Ble,CL)=>{"use strict";var be=require("fs-extra"),Rp=require("fast-glob"),me=require("path"),IL=require("tar-fs"),N5=require("uuid").v4,gp=require("normalize-path"),Ss=yL(),At=F(),Ie=g(),$e=Q(),sd=Tr(),b5=x(),{PACKAGE_ROOT:y5}=g(),{handleHDBError:nt,hdb_errors:I5}=W(),{HDB_ERROR_MSGS:Ln,HTTP_STATUS_CODES:it}=I5,w5=me.join(y5,"application-template"),Ap=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function wL(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw nt(new Error,Ln.NOT_ENABLED,it.BAD_REQUEST,void 0,void 0,!0)}a(wL,"isCFEnabled");function C5(){At.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw nt(new Error,Ln.FUNCTION_STATUS,it.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(C5,"customFunctionsStatus");function U5(){At.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Rp.sync(gp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Rp.sync(gp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Rp.sync(gp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw nt(new Error,Ln.GET_FUNCTIONS,it.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(U5,"getCustomFunctions");function D5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw nt(new Error,Ln.GET_FUNCTION,it.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(D5,"getCustomFunction");function L5(e){wL(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.setCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);At.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw nt(new Error,Ln.SET_FUNCTION,it.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(L5,"setCustomFunction");function M5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);At.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw nt(new Error,Ln.DROP_FUNCTION,it.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(M5,"dropCustomFunction");function P5(e){wL(),e.project&&(e.project=me.parse(e.project).name);let t=Ss.addComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);At.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(w5,n),`Successfully added project: ${s}`}catch(n){throw nt(new Error,Ln.ADD_FUNCTION,it.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(P5,"addComponent");function v5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.dropCustomFunctionProjectValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);At.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!b5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return sd.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw nt(new Error,Ln.DROP_FUNCTION_PROJECT,it.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(v5,"dropCustomFunctionProject");async function B5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.packageComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;At.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(Ap);let i=me.join(Ap,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),IL.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(B5,"packageComponent");async function H5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ss.deployComponentValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(Ap,N5()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(IL.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return sd.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(H5,"deployComponent");async function q5(){let e=sd.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(q5,"getComponents");async function F5(e){let t=Ss.getComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(F5,"getComponentFile");async function G5(e){let t=Ss.setComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(G5,"setComponentFile");async function x5(e){let t=Ss.dropComponentFileValidator(e);if(t)throw nt(t,t.message,it.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),sd.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(x5,"dropComponent");CL.exports={customFunctionsStatus:C5,getCustomFunctions:U5,getCustomFunction:D5,setCustomFunction:L5,dropCustomFunction:M5,addComponent:P5,dropCustomFunctionProject:v5,packageComponent:B5,deployComponent:H5,getComponents:q5,getComponentFile:F5,setComponentFile:G5,dropComponent:x5}});var Np=m((qle,DL)=>{"use strict";var ps=require("joi"),UL=ve();DL.exports={readTransactionLogValidator:k5,deleteTransactionLogsBeforeValidator:V5};function k5(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),from:ps.date().timestamp(),to:ps.date().timestamp(),limit:ps.number().min(1)});return UL.validateBySchema(e,t)}a(k5,"readTransactionLogValidator");function V5(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),timestamp:ps.date().timestamp().required()});return UL.validateBySchema(e,t)}a(V5,"deleteTransactionLogsBeforeValidator")});var id=m((Gle,BL)=>{"use strict";var bp=g(),nd=st(),LL=x(),ML=Q(),PL=Vs(),{handleHDBError:Co,hdb_errors:$5}=W(),{HTTP_STATUS_CODES:Uo}=$5,{readTransactionLogValidator:Y5,deleteTransactionLogsBeforeValidator:K5}=Np(),vL="This operation relies on clustering and cannot run with it disable.",W5="Logs successfully deleted from transaction log.",Q5="All logs successfully deleted from transaction log.";BL.exports={readTransactionLog:z5,deleteTransactionLogsBefore:J5};async function*z5(e){let t=Y5(e);if(t)throw Co(t,t.message,Uo.BAD_REQUEST,void 0,void 0,!0);if(!ML.get(bp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Co(new Error,vL,Uo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=LL.checkSchemaTableExist(r,s);if(n)throw Co(new Error,n,Uo.NOT_FOUND,void 0,void 0,!0);let i=PL.createNatsTableStreamName(r,s),o=await nd.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===bp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(z5,"readTransactionLog");async function J5(e){let t=K5(e);if(t)throw Co(t,t.message,Uo.BAD_REQUEST,void 0,void 0,!0);if(!ML.get(bp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Co(new Error,vL,Uo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=LL.checkSchemaTableExist(r,s);if(i)throw Co(new Error,i,Uo.NOT_FOUND,void 0,void 0,!0);let o=PL.createNatsTableStreamName(r,s),{jsm:c}=await nd.getNATSReferences(),u=await nd.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=W5,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=Q5):d=(await nd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(J5,"deleteTransactionLogsBefore")});var ud=m((kle,VL)=>{"use strict";var od=require("joi"),ad=require("path"),HL=require("fs-extra"),{exec:X5}=require("child_process"),Z5=require("util"),qL=Z5.promisify(X5),Bc=g(),{handleHDBError:Do,hdb_errors:j5}=W(),{HTTP_STATUS_CODES:Lo}=j5,qc=Q(),e8=ve(),Hc=F();qc.initSync();var yp=qc.get(Bc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),FL="npm install --omit=dev --json",t8=`${FL} --dry-run`;VL.exports={installModules:i8,auditModules:o8,installAllRootModules:r8,uninstallRootModule:s8,linkHarperdb:n8};async function r8(e=!1){await cd(),await Fc(e?"npm install --ignore-scripts":"npm install",qc.get(Bc.CONFIG_PARAMS.ROOTPATH))}a(r8,"installAllRootModules");async function s8(e){await Fc(`npm uninstall ${e}`,qc.get(Bc.CONFIG_PARAMS.ROOTPATH))}a(s8,"uninstallRootModule");async function n8(){await cd(),await Fc(`npm link ${Bc.PACKAGE_ROOT}`,qc.get(Bc.CONFIG_PARAMS.ROOTPATH))}a(n8,"linkHarperdb");async function Fc(e,t=void 0){let{stdout:r,stderr:s}=await qL(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return Hc.trace(r,s),r.replace(`
11
- `,"")}a(Fc,"runCommand");async function i8(e){Hc.info(`starting installModules for request: ${e}`);let t=kL(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?t8:FL;await cd(),await xL(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let l=ad.join(yp,u),_,d=null;try{let{stdout:E,stderr:f}=await qL(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(zw,"runCommand");async function JJ(){try{await UJ.access(Gm)}catch{return!1}let e=await zw(`${Gm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DJ.eq(t,QJ)}a(JJ,"checkNATSServerInstalled");async function $m(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await $w.getClusterUser();if(Si(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await GJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($m,"createConnection");async function XJ(){hs&&(await hs.drain(),hs=void 0,fo=void 0,ho=void 0,uc=void 0)}a(XJ,"closeConnection");var hs,uc;async function u_(){return uc||(uc=$m(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),hs=await uc),hs||uc}a(u_,"getConnection");async function _c(){if(fo)return fo;Si(hs)&&await u_();let{domain:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fo=await hs.jetstreamManager({domain:e}),fo}a(_c,"getJetStreamManager");async function Jw(){if(ho)return ho;Si(hs)&&await u_();let{domain:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ho=hs.jetstream({domain:e}),ho}a(Jw,"getJetStream");async function Vt(){let e=hs||await u_(),t=fo||await _c(),r=ho||await Jw();return{connection:e,jsm:t,js:r}}a(Vt,"getNATSReferences");async function ZJ(e){let t=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await $w.getClusterUser(),n=await $m(t,r,s),i=Vm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=Qw.decode(_.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 i_.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(ZJ,"getServerList");async function Ym(e,t){let{jsm:r}=await Vt(),s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Kw.File,retention:Ww.Limits,subjects:t,discard:xJ.Old,duplicate_window:Yw,max_msgs:n,max_bytes:i,max_age:s})}a(Ym,"createLocalStream");async function Xw(){let{jsm:e}=await Vt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Xw,"listStreams");async function jJ(e){let{jsm:t}=await Vt();await t.streams.delete(e)}a(jJ,"deleteLocalStream");async function e2(e){let{connection:t}=await Vt(),r=[],s=Vm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Qw.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(e2,"listRemoteStreams");async function t2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:a_.Explicit};t&&(o.deliver_policy=c_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let l=[];for await(let _ of u){let d=km(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(t2,"viewStream");async function*r2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:a_.Explicit};t&&(o.deliver_policy=c_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let l of u){let _=km(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(r2,"viewStreamIterator");async function s2(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=Zw(s,r);let{js:n}=await Vt(),i=await Ec(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Vw.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),KJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return rC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Ym(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(s2,"publishToStream");function Zw(e,t){t===void 0&&(t=VJ());let r=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=i_.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${xm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(Zw,"addNatsMsgHeader");function dc(e){e=e.toLowerCase();let t=lc.join(Rt.get(Te.CONFIG_PARAMS.ROOTPATH),WJ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Si(Fm)&&(Fm={port:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:lc.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),Fm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Si(qm)&&(qm={port:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:ac.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:lc.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),qm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(dc,"getServerConfig");async function n2(e){let{jsm:t}=await Vt(),r=await Ec();try{await t.streams.add({name:e.stream_name,storage:Kw.File,retention:Ww.Limits,duplicate_window:Yw,max_age:qJ,max_bytes:FJ,subjects:[`${_e.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:a_.Explicit,durable_name:e.durable_name,deliver_policy:c_.All,max_ack_pending:1e4});else throw s}}a(n2,"createWorkQueueStream");async function i2(){let{jsm:e}=await Vt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:a_.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:c_.All,max_ack_pending:1e4}))}a(i2,"updateIngestStreamConsumer");async function jw(e,t,r){let{jsm:s}=await Vt(),n=await s.streams.info(t),i=eC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=o_.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(jw,"addSourceToWorkStream");function eC(e){return e.split(".")[1]}a(eC,"extractServerName");async function tC(e,t,r){let{schema:s,table:n}=r,i=o_.createNatsTableStreamName(s,n),{jsm:o}=await Vt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(tC,"removeSourceFromWorkStream");async function o2(e,t,r=2e4,s=Vm()){if(!i_.isObject(t))throw new Error("data param must be an object");let n=Vw.encode(t),{connection:i}=await Vt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return km(c.data)}a(o2,"request");function Km(e){return new Promise(async(t,r)=>{let s=vJ(Gm,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(Km,"reloadNATS");async function a2(){let{pid_file_path:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Km(e)}a(a2,"reloadNATSHub");async function c2(){let{pid_file_path:e}=dc(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Km(e)}a(c2,"reloadNATSLeaf");function u2(e,t,r){let s;switch(e.code){case xw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case xw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(u2,"requestErrorHandler");async function l2(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await rC(async()=>{e.subscribe===!0?await jw(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await tC(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(l2,"updateWorkStream");function rC(e){return BJ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(rC,"exclusiveLock");async function sC(e,t){let r=o_.createNatsTableStreamName(e,t),s=await Ec(),n=f2(e,t,s);await Ym(r,[n])}a(sC,"createLocalTableStream");async function _2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await sC(s,n)}}a(_2,"createTableStreams");async function nC(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=o_.createNatsTableStreamName(e,t),{jsm:s}=await Vt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(nC,"purgeTableStream");async function d2(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await nC(e,t[r])}a(d2,"purgeSchemaTableStreams");async function E2(e){return(await _c()).streams.info(e)}a(E2,"getStreamInfo");function f2(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(f2,"createSubjectName");async function Ec(){if(cc)return cc;if(cc=(await _c())?.nc?.info?.server_name,cc===void 0)throw new Error("Unable to get jetstream manager server name");return cc}a(Ec,"getJsmServerName");async function h2(){let e=await _c(),t=await Ec(),r=await Xw();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=m2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(h2,"updateLocalStreams");function m2(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Rt.get(Te.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}a(m2,"updateStreamLimits")});var E_=m((Cce,uC)=>{"use strict";var mo=cl(),So=Gw(),S2=x(),p2=require("uuid").v4,wce=require("clone"),__=xs(),po=A(),T2=require("util"),bn=Vr(),{handleHDBError:$t,hdb_errors:R2}=W(),{HDB_ERROR_MSGS:l_,HTTP_STATUS_CODES:Yt}=R2,{SchemaEventMsg:d_}=Fr(),oC=it(),{getDatabases:g2}=(de(),ee(Ne)),{transformReq:To}=V();uC.exports={createSchema:A2,createSchemaStructure:aC,createTable:O2,createTableStructure:cC,createAttribute:w2,dropSchema:N2,dropTable:b2,dropAttribute:y2,getBackup:C2};async function A2(e){let t=await aC(e);return __.signalSchemaChange(new d_(process.pid,e.operation,e.schema)),t}a(A2,"createSchema");async function aC(e){let t=mo.schema_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(To(e),!await So.checkSchemaExists(e.schema))throw $t(new Error,l_.SCHEMA_EXISTS_ERR(e.schema),Yt.BAD_REQUEST,po.LOG_LEVELS.ERROR,l_.SCHEMA_EXISTS_ERR(e.schema),!0);return await bn.createSchema(e),`database '${e.schema}' successfully created`}a(aC,"createSchemaStructure");async function O2(e){return To(e),await cC(e)}a(O2,"createTable");async function cC(e){let t=mo.create_table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(mo.validateTableResidence(e.residence),!await So.checkSchemaTableExists(e.schema,e.table))throw $t(new Error,l_.TABLE_EXISTS_ERR(e.schema,e.table),Yt.BAD_REQUEST,po.LOG_LEVELS.ERROR,l_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:p2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await bn.createTable(s,e);else throw $t(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Yt.BAD_REQUEST);else await bn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(cC,"createTableStructure");async function N2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=mo.schema_object(e),s=t??r;if(s)throw $t(s,s.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let n=await So.checkSchemaExists(e.schema);if(n)throw $t(new Error,n,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,n,!0);let i=await So.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await bn.dropSchema(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema)),await oC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(N2,"dropSchema");async function b2(e){let t=mo.table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);return await bn.dropTable(e),await oC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(b2,"dropTable");async function y2(e){let t=mo.attribute_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $t(new Error,"You cannot drop a hash attribute",Yt.BAD_REQUEST,void 0,void 0,!0);if(po.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $t(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Yt.BAD_REQUEST,void 0,void 0,!0);try{return await bn.dropAttribute(e),I2(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw S2.error(`Got an error deleting attribute ${T2.inspect(e)}.`),s}}a(y2,"dropAttribute");function I2(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(I2,"dropAttributeFromGlobal");async function w2(e){To(e);let t=g2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $t(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Yt.BAD_REQUEST,void 0,void 0,!0);return await bn.createAttribute(e),__.signalSchemaChange(new d_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(w2,"createAttribute");function C2(e){return bn.getBackup(e)}a(C2,"getBackup")});var _C=m((Dce,lC)=>{"use strict";var{OPERATIONS_ENUM:U2}=A(),Wm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=U2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};lC.exports=Wm});var Qm=m((Pce,mC)=>{"use strict";var D2=Vr(),Mce=_C(),f_=V(),h_=A(),L2=Q(),{handleHDBError:dC,hdb_errors:M2}=W(),{HDB_ERROR_MSGS:EC,HTTP_STATUS_CODES:fC}=M2,P2=Object.values(h_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),hC="To use this operation audit log must be enabled in harperdb-config.yaml";mC.exports=v2;async function v2(e){if(f_.isEmpty(e.schema))throw new Error(EC.SCHEMA_REQUIRED_ERR);if(f_.isEmpty(e.table))throw new Error(EC.TABLE_REQUIRED_ERR);if(!L2.get(h_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw dC(new Error,hC,fC.BAD_REQUEST,h_.LOG_LEVELS.ERROR,hC,!0);let t=f_.checkSchemaTableExist(e.schema,e.table);if(t)throw dC(new Error,t,fC.NOT_FOUND,h_.LOG_LEVELS.ERROR,t,!0);if(!f_.isEmpty(e.search_type)&&P2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await D2.readAuditLog(e)}a(v2,"readAuditLog")});var pC=m((Bce,SC)=>{"use strict";var{OPERATIONS_ENUM:B2}=A(),zm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=B2.GET_BACKUP,this.schema=t,this.table=r}};SC.exports=zm});var gC=m((Gce,RC)=>{"use strict";var H2=Vr(),qce=pC(),Jm=V(),q2=A(),Fce=Q(),{handleHDBError:F2,hdb_errors:G2}=W(),{HDB_ERROR_MSGS:TC,HTTP_STATUS_CODES:x2}=G2;RC.exports=k2;async function k2(e){if(Jm.isEmpty(e.schema))throw new Error(TC.SCHEMA_REQUIRED_ERR);if(Jm.isEmpty(e.table))throw new Error(TC.TABLE_REQUIRED_ERR);let t=Jm.checkSchemaTableExist(e.schema,e.table);if(t)throw F2(new Error,t,x2.NOT_FOUND,q2.LOG_LEVELS.ERROR,t,!0);return await H2.getBackup(read_audit_log_object)}a(k2,"getBackup")});var IC=m((kce,yC)=>{var yn=require("validate.js"),OC=ve(),Ro=A(),{handleHDBError:V2,hdb_errors:$2}=W(),{HDB_ERROR_MSGS:$e,HTTP_STATUS_CODES:Y2}=$2,Xm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),K2={STRUCTURE_USER:"structure_user"},AC=Object.values(Ro.ROLE_TYPES_ENUM),W2="attribute_permissions",Q2="attribute_name",{PERMS_CRUD_ENUM:go}=Ro,z2=[W2,...Object.values(go)],NC=[go.READ,go.INSERT,go.UPDATE],J2=[Q2,...NC];function X2(e){let t=Xm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bC(e,t)}a(X2,"addRoleValidation");function Z2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bC(e,t)}a(Z2,"alterRoleValidation");function j2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,OC.validateObject(e,t)}a(j2,"dropRoleValidation");var e3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)e3.includes(s[o])||n.push(s[o]);n.length>0&&ze($e.INVALID_ROLE_JSON_KEYS(n),r);let i=OC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=t3(e);o&&ze(o,r),AC.forEach(c=>{e.permission[c]&&!yn.isBoolean(e.permission[c])&&ze($e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(AC.indexOf(o)<0){if(o===K2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze($e.SCHEMA_NOT_FOUND(d),r)}continue}ze($e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze($e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){ze($e.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{z2.includes(_)||ze($e.INVALID_PERM_KEY(_),r,o,u)}),Object.values(go).forEach(_=>{yn.isDefined(l[_])?yn.isBoolean(l[_])||ze($e.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze($e.TABLE_PERM_MISSING(_),r,o,u)}),yn.isDefined(l.attribute_permissions)){if(!yn.isArray(l.attribute_permissions)){ze($e.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze($e.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!J2.includes(T)&&T!==go.DELETE&&ze($e.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!yn.isDefined(f.attribute_name)){ze($e.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze($e.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}NC.forEach(T=>{yn.isDefined(f[T])?yn.isBoolean(f[T])||ze($e.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze($e.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;ze($e.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return r3(r)}a(bC,"customValidate");yC.exports={addRoleValidation:X2,alterRoleValidation:Z2,dropRoleValidation:j2};function t3(e){let{operation:t,permission:r}=e;if(t===Ro.OPERATIONS_ENUM.ADD_ROLE||t===Ro.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return $e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ro.ROLE_TYPES_ENUM.SUPER_USER:Ro.ROLE_TYPES_ENUM.CLUSTER_USER;return $e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(t3,"validateNoSUPerms");function r3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:$e.ROLE_PERMS_ERROR,...e};return V2(new Error,s,Y2.BAD_REQUEST)}else return null}a(r3,"generateRolePermResponse");function ze(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ze,"addPermError")});var sS=m(($ce,DC)=>{"use strict";var wC=Nr(),CC=Or(),s3=ui(),jm=IC(),eS=xs(),n3=require("uuid").v4,i3=require("util"),m_=A(),o3=V(),tS=CC.searchByValue,a3=CC.searchByHash,c3=i3.promisify(s3.delete),u3=as(),l3=Zi(),{hdb_errors:_3,handleHDBError:Ao}=W(),{HDB_ERROR_MSGS:UC,HTTP_STATUS_CODES:S_}=_3,{UserEventMsg:rS}=Fr();DC.exports={addRole:d3,alterRole:E3,dropRole:f3,listRoles:h3};function Zm(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Zm,"scrubRoleDetails");async function d3(e){let t=jm.addRoleValidation(e);if(t)throw t;e=Zm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await tS(r)||[])}catch(i){throw Ao(i)}if(s&&s.length>0)throw Ao(new Error,UC.ROLE_ALREADY_EXISTS(e.role),S_.CONFLICT,void 0,void 0,!0);e.id||(e.id=n3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await wC.insert(n),eS.signalUserChange(new rS(process.pid)),e=Zm(e),e}a(d3,"addRole");async function E3(e){let t=jm.alterRoleValidation(e);if(t)throw t;e=Zm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await wC.update(r)}catch(n){throw Ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ao(new Error,"Invalid role id",S_.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(E3,"alterRole");async function f3(e){let t=jm.dropRoleValidation(e);if(t)throw Ao(new Error,t,S_.BAD_REQUEST,void 0,void 0,!0);let r=new l3(m_.SYSTEM_SCHEMA_NAME,m_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await a3(r));if(s.length===0)throw Ao(new Error,UC.ROLE_NOT_FOUND,S_.NOT_FOUND,void 0,void 0,!0);let n=new u3(m_.SYSTEM_SCHEMA_NAME,m_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(o3.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await c3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(f3,"dropRole");async function h3(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(h3,"listRoles")});var vC=m((Kce,PC)=>{"use strict";var m3=Q(),In=require("joi"),S3=ve(),LC=require("moment"),p3=require("fs-extra"),nS=require("path"),T3=require("lodash"),fc=A(),{LOG_LEVELS:pi}=A(),R3="YYYY-MM-DD hh:mm:ss",g3=nS.resolve(__dirname,"../logs");PC.exports=function(e){return S3.validateBySchema(e,A3)};var A3=In.object({from:In.custom(MC),until:In.custom(MC),level:In.valid(pi.NOTIFY,pi.FATAL,pi.ERROR,pi.WARN,pi.INFO,pi.DEBUG,pi.TRACE),order:In.valid("asc","desc"),limit:In.number().min(1),start:In.number().min(0),log_name:In.custom(O3)});function MC(e,t){if(LC(e,LC.ISO_8601).format(R3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(MC,"validateDatetime");function O3(e,t){if(T3.invert(fc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=m3.get(fc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?fc.LOG_NAMES.HDB:e,i=n===fc.LOG_NAMES.INSTALL?nS.join(g3,fc.LOG_NAMES.INSTALL):nS.join(s,n);return p3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(O3,"validateReadLogPath")});var oS=m((Qce,HC)=>{"use strict";var p_=A(),N3=x(),b3=Q(),y3=vC(),iS=require("path"),BC=require("fs-extra"),{once:I3}=require("events"),{handleHDBError:w3,hdb_errors:C3}=W(),{PACKAGE_ROOT:U3}=A(),D3=iS.join(U3,"logs"),L3=1e3,M3=200;HC.exports=P3;async function P3(e){let t=y3(e);if(t)throw w3(t,t.message,C3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=b3.get(p_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?p_.LOG_NAMES.HDB:e.log_name,n=s===p_.LOG_NAMES.INSTALL?iS.join(D3,p_.LOG_NAMES.INSTALL):iS.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?L3:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(BC.statSync(n).size-(h+5)*M3,0));let p=BC.createReadStream(n,{start:T});p.on("error",b=>{N3.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,q;for(;(q=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,je,Eu]=q,Bi=Eu.split("] ["),Qo=Bi[0],kn=Bi[1];Bi.splice(0,2),$={timestamp:je,thread:Qo,level:kn,tags:Bi,message:""},z=q.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(wn(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(wn(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(wn(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(wn(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(wn(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await I3(p,"close"),O}a(P3,"readLog");function wn(e,t,r){t==="desc"?v3(e,r):t==="asc"?B3(e,r):r.push(e)}a(wn,"pushLineToResult");function v3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(v3,"insertDescending");function B3(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(B3,"insertAscending")});var R_=m((jce,xC)=>{"use strict";var aS=require("joi"),{string:T_,boolean:qC,date:H3}=aS.types(),q3=ve(),{validateSchemaExists:Jce,validateTableExists:Xce,validateSchemaName:Zce}=is(),F3=A(),G3=Be(),FC=Q();FC.initSync();var x3=T_.invalid(FC.get(F3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(G3.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),GC={operation:T_.valid("add_node","update_node"),node_name:x3,subscriptions:aS.array().items({table:T_.optional(),schema:T_.required(),subscribe:qC.required(),publish:qC.required().custom(V3),start_time:H3.iso()}).min(1).required()};function k3(e){return q3.validateBySchema(e,aS.object(GC))}a(k3,"addUpdateNodeValidator");function V3(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(V3,"checkForFalsy");xC.exports={addUpdateNodeValidator:k3,validation_schema:GC}});var VC=m((tue,kC)=>{var $3=ve(),Y3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};kC.exports=function(e){return $3.validateObject(e,Y3)}});var uS=m((rue,$C)=>{"use strict";var K3=A().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=K3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$C.exports=cS});var KC=m((nue,YC)=>{"use strict";var W3={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};YC.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:W3,JWTRSAKeys:_S}});var Sc=m((oue,JC)=>{"use strict";var mc=require("jsonwebtoken"),dS=require("fs-extra"),ES=V(),Ir=A(),{handleHDBError:Kt,hdb_errors:Q3}=W(),{HTTP_STATUS_CODES:Wt,AUTHENTICATION_ERROR_MSGS:Qt}=Q3,hc=x(),WC=Bl(),mS=br(),z3=Nr().update,J3=uS(),X3=xs(),{UserEventMsg:Z3}=Fr(),Cn=Q();Cn.initSync();var fS=require("path"),{JWTTokens:j3,JWTRSAKeys:e4,TOKEN_TYPE_ENUM:g_}=KC(),t4=Cn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Cn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",r4=Cn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Cn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",A_="RS256",hS;JC.exports={createTokens:s4,validateOperationToken:i4,refreshOperationToken:n4,validateRefreshToken:zC};async function s4(e){if(ES.isEmpty(e)||typeof e!="object")throw Kt(new Error,Qt.INVALID_AUTH_OBJECT,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.username))throw Kt(new Error,Qt.USERNAME_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.password))throw Kt(new Error,Qt.PASSWORD_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw hc.error(E),Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}let r=await O_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await QC(i,r.private_key,r.passphrase),c=await mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:r4,algorithm:A_,subject:g_.REFRESH}),u=WC.hash(c),l=new J3(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await z3(l)}catch(E){hc.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Kt(new Error,Qt.REFRESH_TOKEN_SAVE_FAILED,Wt.INTERNAL_SERVER_ERROR);return X3.signalUserChange(new Z3(process.pid)),new j3(o,c)}a(s4,"createTokens");async function QC(e,t,r){return await mc.sign(e,{key:t,passphrase:r},{expiresIn:t4,algorithm:A_,subject:g_.OPERATION})}a(QC,"signOperationToken");async function O_(){if(hS===void 0)try{let e=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fS.join(Cn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new e4(i,n,s)}catch(e){throw hc.error(e),Kt(new Error,Qt.NO_ENCRYPTION_KEYS,Wt.INTERNAL_SERVER_ERROR)}return hS}a(O_,"getJWTRSAKeys");async function n4(e){if(!e)throw Kt(new Error,Qt.INVALID_BODY,Wt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Kt(new Error,Qt.REFRESH_TOKEN_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);await zC(e.refresh_token);let t=await O_(),r=await mc.decode(e.refresh_token);return{operation_token:await QC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(n4,"refreshOperationToken");async function i4(e){try{let t=await O_(),r=await mc.verify(e,t.public_key,{algorithms:A_,subject:g_.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw hc.warn(t),t.name&&t.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}}a(i4,"validateOperationToken");async function zC(e){let t;try{let r=await O_(),s=await mc.verify(e,r.public_key,{algorithms:A_,subject:g_.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw hc.warn(r),r.name&&r.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}if(!WC.validate(t.refresh_token,e))throw Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED);return t}a(zC,"validateRefreshToken")});var SS=m((uue,jC)=>{"use strict";var o4=VC(),Oo=require("passport"),a4=require("passport-local").Strategy,c4=require("passport-http").BasicStrategy,u4=require("util"),l4=br(),ZC=u4.callbackify(l4.findAndValidateUser),cue=rr(),_4=A(),XC=Sc();Oo.use(new a4(function(e,t,r){ZC(e,t,r)}));Oo.use(new c4(function(e,t,r){ZC(e,t,r)}));Oo.serializeUser(function(e,t){t(null,e)});Oo.deserializeUser(function(e,t){t(null,e)});function d4(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Oo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?XC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):XC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Oo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(d4,"authorize");function E4(e,t){let r=o4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(E4,"checkPermissions");jC.exports={authorize:d4,checkPermissions:E4}});var No=m((_ue,eU)=>{"use strict";var pS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};eU.exports={Node:pS,NodeSubscription:TS}});var rU=m((Eue,tU)=>{"use strict";var f4=A().OPERATIONS_ENUM,RS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=f4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tU.exports=RS});var pc=m((hue,sU)=>{"use strict";var gS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};sU.exports={RemotePayloadObject:gS,RemotePayloadSubscription:AS}});var iU=m((Sue,nU)=>{"use strict";var OS=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};nU.exports=OS});var cU=m((Aue,aU)=>{"use strict";var h4=iU(),Tue=ke(),oU=ye(),m4=x(),{getSchemaPath:Rue,getTransactionAuditStorePath:gue}=we(),{getDatabases:S4}=(de(),ee(Ne));aU.exports=p4;async function p4(e){let t=new h4;try{let r=S4()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await oU.environmentDataSize(schema_path,e.name),o=await oU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){m4.warn(`unable to stat table dbi due to ${r}`)}return t}a(p4,"lmdbGetTableSize")});var lU=m((Nue,uU)=>{"use strict";var NS=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};uU.exports=NS});var bo=m((wue,fU)=>{"use strict";var T4=require("fs-extra"),R4=require("path"),Ut=require("systeminformation"),Un=x(),g4=it(),bS=Be(),b_=A(),A4=cU(),EU=ni(),{getThreadInfo:_U}=st(),vS=Q();vS.initSync();var O4=lU(),{openEnvironment:yue}=ye(),{getSchemaPath:Iue}=we(),{database:N4}=(de(),ee(Ne)),N_;fU.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:US,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:LS,systemInformation:b4,getTableSize:MS,getMetrics:PS};function yS(){return Ut.time()}a(yS,"getTimeInfo");async function IS(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return Un.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Un.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await T4.readFile(R4.join(vS.get(b_.CONFIG_PARAMS.ROOTPATH),b_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===b_.NODE_ERROR_CODES.ENOENT)Un.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Un.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function US(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Un.error(`error in getDiskInfo: ${t}`),e}}a(US,"getDiskInfo");async function DS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Un.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function LS(){if(N_!==void 0)return N_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,N_=e,N_}catch(t){return Un.error(`error in getSystemInformation: ${t}`),e}}a(LS,"getSystemInformation");async function MS(){let e=[],t=await EU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await A4(s));return e}a(MS,"getTableSize");async function PS(){let e=await EU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=N4({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){Un.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function dU(){if(vS.get(b_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await g4.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(dU,"getNatsStreamInfo");async function b4(e){let t=new O4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LS(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await US(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await _U(),t.replication=await dU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LS();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await US();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await _U();break;case"replication":t.replication=await dU();break;default:break}return t}a(b4,"systemInformation")});var BS=m((Lue,hU)=>{"use strict";var Uue=require("fs-extra"),Due=x();hU.exports={version:y4,printVersion:w4,nodeVersion:I4};var Dn=oc();function y4(){if(Dn)return Dn.version}a(y4,"version");function I4(){if(Dn&&Dn.engines&&Dn.engines["preferred-node"])return Dn.engines["preferred-node"]}a(I4,"nodeVersion");function w4(){Dn&&console.log(`HarperDB Version ${Dn.version}`)}a(w4,"printVersion")});var Ys=m((Bue,TU)=>{"use strict";var C4=Nr(),HS=V(),U4=require("util"),Ti=A(),mU=Q();mU.initSync();var D4=SS(),SU=Or(),{Node:Pue,NodeSubscription:vue}=No(),L4=Zi(),M4=rU(),{RemotePayloadObject:P4,RemotePayloadSubscription:v4}=pc(),{handleHDBError:B4,hdb_errors:H4}=W(),{HTTP_STATUS_CODES:q4,HDB_ERROR_MSGS:F4}=H4,G4=as(),x4=bo(),k4=BS(),{getDatabases:V4}=(de(),ee(Ne)),$4=U4.promisify(D4.authorize),Y4=SU.searchByHash,K4=SU.searchByValue;TU.exports={authHeaderToUser:W4,isEmpty:Q4,getNodeRecord:z4,upsertNodeRecord:J4,buildNodePayloads:X4,checkClusteringEnabled:Z4,getAllNodeRecords:j4,getSystemInfo:eX,reverseSubscription:pU};async function W4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await $4(t,null),e}a(W4,"authHeaderToUser");function Q4(e){return e==null}a(Q4,"isEmpty");async function z4(e){let t=new L4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Y4(t)}a(z4,"getNodeRecord");async function J4(e){let t=new M4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return C4.upsert(t)}a(J4,"upsertNodeRecord");function pU(e){if(HS.isEmpty(e.subscribe)||HS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(pU,"reverseSubscription");function X4(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=HS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=pU(c),f=V4()[u]?.[l],h=new v4(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new P4(r,t,n,s)}a(X4,"buildNodePayloads");function Z4(){if(!mU.get(Ti.CONFIG_PARAMS.CLUSTERING_ENABLED))throw B4(new Error,F4.CLUSTERING_NOT_ENABLED,q4.BAD_REQUEST,void 0,void 0,!0)}a(Z4,"checkClusteringEnabled");async function j4(){let e=new G4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await K4(e))}a(j4,"getAllNodeRecords");async function eX(){let e=await x4.getSystemInformation();return{hdb_version:k4.version(),node_version:e.node_version,platform:e.platform}}a(eX,"getSystemInfo")});var qS=m((que,IU)=>{"use strict";var y_=it(),RU=V(),gU=Be(),AU=A(),I_=x(),OU=E_(),tX=Eh(),{RemotePayloadObject:rX}=pc(),{handleHDBError:NU,hdb_errors:sX}=W(),{HTTP_STATUS_CODES:bU}=sX,{NodeSubscription:yU}=No();IU.exports=nX;async function nX(e,t){let r;try{r=await y_.request(`${t}.${gU.REQUEST_SUFFIX}`,new rX(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),I_.trace("Response from remote describe all request:",r)}catch(o){I_.error(`addNode received error from describe all request to remote node: ${o}`);let c=y_.requestErrorHandler(o,"add_node",t);throw NU(new Error,c,bU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw NU(new Error,o,bU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===AU.SYSTEM_SCHEMA_NAME){await y_.createLocalTableStream(c,u);let h=new yU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=RU.doesSchemaExist(c),_=s[c]!==void 0,d=u?RU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(I_.trace(`addNode creating schema: ${c}`),await OU.createSchema({operation:"create_schema",schema:c})),!d&&E){I_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new tX(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await OU.createTable(h)}await y_.createLocalTableStream(c,u);let f=new yU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(nX,"reviewSubscriptions")});var U_=m((Gue,UU)=>{"use strict";var{handleHDBError:w_,hdb_errors:iX}=W(),{HTTP_STATUS_CODES:C_}=iX,{addUpdateNodeValidator:oX}=R_(),Tc=x(),CU=A(),wU=Be(),aX=V(),FS=it(),Rc=Ys(),cX=Q(),uX=qS(),{Node:lX,NodeSubscription:_X}=No(),{broadcast:dX}=st(),EX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);UU.exports=mX;async function mX(e,t=!1){Tc.trace("addNode called with:",e),Rc.checkClusteringEnabled();let r=oX(e);if(r)throw w_(r,r.message,C_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Rc.getNodeRecord(s);if(!aX.isEmptyOrZeroLength(d))throw w_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,C_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await uX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=Rc.buildNodePayloads(n,hX,CU.OPERATIONS_ENUM.ADD_NODE,await Rc.getSystemInfo());Tc.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Tc.error(`addNode received error from request: ${d}`);let E=FS.requestErrorHandler(d,"add_node",s);throw w_(new Error,E,C_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw w_(new Error,d,C_.INTERNAL_SERVER_ERROR,"error",d)}Tc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Tc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await FS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new _X(f.schema,f.table,f.publish,f.subscribe))}let _=new lX(s,l,u.system_info);return await Rc.upsertNodeRecord(_),dX({type:"nats_update"}),i.length>0?o.message=fX:o.message=`Successfully added '${s}' to manifest`,o}a(mX,"addNode")});var xS=m((kue,MU)=>{"use strict";var{handleHDBError:D_,hdb_errors:SX}=W(),{HTTP_STATUS_CODES:L_}=SX,{addUpdateNodeValidator:pX}=R_(),gc=x(),LU=A(),DU=Be(),TX=V(),GS=it(),Ac=Ys(),RX=Q(),{cloneDeep:gX}=require("lodash"),AX=qS(),{NodeSubscription:OX}=No(),{broadcast:NX}=st(),bX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",yX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",IX=RX.get(LU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=wX;async function wX(e){gc.trace("updateNode called with:",e),Ac.checkClusteringEnabled();let t=pX(e);if(t)throw D_(t,t.message,L_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=gX(await Ac.getNodeRecord(r));if(TX.isEmptyOrZeroLength(s))throw D_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,L_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await AX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=bX,o;let c=Ac.buildNodePayloads(n,IX,LU.OPERATIONS_ENUM.UPDATE_NODE,await Ac.getSystemInfo());gc.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${DU.REQUEST_SUFFIX}`,c)}catch(l){gc.error(`updateNode received error from request: ${l}`);let _=GS.requestErrorHandler(l,"update_node",r);throw D_(new Error,_,L_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw D_(new Error,l,L_.INTERNAL_SERVER_ERROR,"error",l)}gc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];gc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await CX(s[0],n,u.system_info),i.length>0?o.message=yX:o.message=`Successfully updated '${r}'`,o}a(wX,"updateNode");async function CX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new OX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ac.upsertNodeRecord(s),NX({type:"nats_update"})}a(CX,"updateNodeTable")});var qU=m(($ue,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),UX=ve(),vU=A(),DX=Q(),LX=Be();HU.exports=MX;function MX(e){let t=PU.invalid(DX.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(LX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return UX.validateBySchema(e,r)}a(MX,"removeNodeValidator")});var P_=m((Kue,$U)=>{"use strict";var{handleHDBError:FU,hdb_errors:PX}=W(),{HTTP_STATUS_CODES:GU}=PX,vX=qU(),Oc=x(),xU=Ys(),BX=V(),M_=A(),kU=Be(),VU=it(),HX=Q(),{RemotePayloadObject:qX}=pc(),{NodeSubscription:FX}=No(),GX=Ha(),xX=ui(),{broadcast:kX}=st(),VX=HX.get(M_.CONFIG_PARAMS.CLUSTERING_NODENAME);$U.exports=$X;async function $X(e){Oc.trace("removeNode called with:",e),xU.checkClusteringEnabled();let t=vX(e);if(t)throw FU(t,t.message,GU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await xU.getNodeRecord(r);if(BX.isEmptyOrZeroLength(s))throw FU(new Error,`Node '${r}' was not found.`,GU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new qX(M_.OPERATIONS_ENUM.REMOVE_NODE,VX,[]),i,o=!1;try{i=await VU.request(`${r}.${kU.REQUEST_SUFFIX}`,n),Oc.trace("Remove node reply from remote node:",r,i)}catch(u){Oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new FX(_.schema,_.table,!1,!1);await VU.updateWorkStream(d,r)}let c=new GX(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xX.deleteRecord(c),kX({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Oc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a($X,"removeNode")});var WU=m((Que,KU)=>{"use strict";var YU=require("joi"),{string:YX,array:KX}=YU.types(),WX=ve(),QX=R_();KU.exports=zX;function zX(e){let t=YU.object({operation:YX.valid("configure_cluster").required(),connections:KX.items(QX.validation_schema).required()});return WX.validateBySchema(e,t)}a(zX,"configureClusterValidator")});var kS=m((Jue,ZU)=>{"use strict";var JX=A(),v_=x(),XX=V(),ZX=P_(),jX=U_(),QU=Ys(),eZ=WU(),{handleHDBError:zU,hdb_errors:tZ}=W(),{HTTP_STATUS_CODES:JU}=tZ,rZ="Configure cluster complete.",sZ="Failed to configure the cluster. Check the logs for more details.",nZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";ZU.exports=iZ;async function iZ(e){v_.trace("configure cluster called with:",e),QU.checkClusteringEnabled();let t=eZ(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=await QU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(XU(ZX,{operation:JX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);v_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(XU(jX,f,f.node_name))}let c=await Promise.allSettled(i);v_.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(v_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(XX.isEmptyOrZeroLength(u))return{message:rZ,connections:l};if(_)return{message:nZ,failed_nodes:u,connections:l};throw zU(new Error,sZ,JU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(iZ,"configureCluster");async function XU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(XU,"functionWrapper")});var eD=m((Zue,jU)=>{"use strict";var B_=require("joi"),oZ=ve(),{validateSchemaExists:aZ,validateTableExists:cZ,validateSchemaName:uZ}=is(),lZ=B_.object({operation:B_.string().valid("purge_stream"),schema:B_.string().custom(aZ).custom(uZ).required(),table:B_.string().custom(cZ).required()});function _Z(e){return oZ.validateBySchema(e,lZ)}a(_Z,"purgeStreamValidator");jU.exports=_Z});var VS=m((ele,tD)=>{"use strict";var{handleHDBError:dZ,hdb_errors:EZ}=W(),{HTTP_STATUS_CODES:fZ}=EZ,hZ=eD(),mZ=it(),SZ=Ys();tD.exports=pZ;async function pZ(e){let t=hZ(e);if(t)throw dZ(t,t.message,fZ.BAD_REQUEST,void 0,void 0,!0);SZ.checkClusteringEnabled();let{schema:r,table:s}=e;return await mZ.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(pZ,"purgeStream")});var KS=m((rle,aD)=>{"use strict";var YS=Ys(),TZ=it(),nD=Q(),H_=A(),Ri=Be(),RZ=V(),$S=x(),{RemotePayloadObject:gZ}=pc(),{ErrorCode:rD}=require("nats"),sD=nD.get(H_.CONFIG_PARAMS.CLUSTERING_ENABLED),iD=nD.get(H_.CONFIG_PARAMS.CLUSTERING_NODENAME);aD.exports={clusterStatus:AZ,buildNodeStatus:oD};async function AZ(){let e={node_name:iD,is_enabled:sD,connections:[]};if(!sD)return e;let t=await YS.getAllNodeRecords();if(RZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(oD(t[s],e.connections));return await Promise.allSettled(r),e}a(AZ,"clusterStatus");async function oD(e,t){let r=e.name,s=new gZ(H_.OPERATIONS_ENUM.CLUSTER_STATUS,iD,void 0,await YS.getSystemInfo()),n,i,o=Ri.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await TZ.request(Ri.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ri.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ri.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===rD.NoResponders?o=Ri.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===rD.Timeout?o=Ri.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ri.CLUSTER_STATUS_STATUSES.CLOSED}let c=new OZ(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==H_.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(oD,"buildNodeStatus");function OZ(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(OZ,"NodeStatusObject")});var QS=m((nle,cD)=>{"use strict";var{handleHDBError:NZ,hdb_errors:bZ}=W(),{HTTP_STATUS_CODES:yZ}=bZ,IZ=it(),wZ=Ys(),WS=V(),q_=require("joi"),CZ=ve(),UZ=2e3,DZ=q_.object({timeout:q_.number().min(1),connected_nodes:q_.boolean(),routes:q_.boolean()});cD.exports=LZ;async function LZ(e){wZ.checkClusteringEnabled();let t=CZ.validateBySchema(e,DZ);if(t)throw NZ(t,t.message,yZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await IZ.getServerList(r??UZ),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:WS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(LZ,"clusterNetwork")});var dD=m((ole,_D)=>{"use strict";var zS=require("joi"),uD=ve(),{route_constraints:lD}=kE();_D.exports={setRoutesValidator:MZ,deleteRoutesValidator:PZ};function MZ(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:lD.required()});return uD.validateBySchema(e,t)}a(MZ,"setRoutesValidator");function PZ(e){let t=zS.object({routes:lD.required()});return uD.validateBySchema(e,t)}a(PZ,"deleteRoutesValidator")});var XS=m((cle,mD)=>{"use strict";var gi=Tr(),JS=V(),F_=A(),ED=dD(),{handleHDBError:fD,hdb_errors:vZ}=W(),{HTTP_STATUS_CODES:hD}=vZ,BZ="cluster routes successfully set",HZ="cluster routes successfully deleted";mD.exports={setRoutes:qZ,getRoutes:FZ,deleteRoutes:GZ};function qZ(e){let t=ED.setRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=JS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:BZ,set:o,skipped:i}}a(qZ,"setRoutes");function FZ(){let e=gi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(FZ,"getRoutes");function GZ(e){let t=ED.deleteRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,gi.updateConfigValue(F_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:HZ,deleted:i,skipped:o}}a(GZ,"deleteRoutes")});var pD=m((lle,SD)=>{"use strict";var Nc=require("alasql"),Ai=require("recursive-iterator"),Kr=x(),xZ=V(),bc=A(),ZS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,VZ(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>bc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!bc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][bc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=kZ(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!bc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Nc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function kZ(e){return e.filter(t=>t[bc.PERMS_CRUD_ENUM.READ])}a(kZ,"filterReadRestrictedAttrs");function VZ(e,t,r,s,n){$Z(e,t,r,s,n)}a(VZ,"interpretAST");function yc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(yc,"addSchemaTableToMap");function $Z(e,t,r,s,n){if(!e){Kr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Nc.yy.Insert?QZ(e,t,r):e instanceof Nc.yy.Select?YZ(e,t,r,s,n):e instanceof Nc.yy.Update?KZ(e,t,r):e instanceof Nc.yy.Delete?WZ(e,t,r):Kr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a($Z,"getRecordAttributesAST");function YZ(e,t,r,s,n){if(!e){Kr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(xZ.isEmptyOrZeroLength(i)){Kr.error("No schema specified");return}e.from.forEach(c=>{yc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),yc(c.table,t,r,s,n)});let o=new Ai(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Kr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new Ai(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ai(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Kr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new Ai(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Kr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(YZ,"getSelectAttributes");function KZ(e,t,r){if(!e){Kr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.table.databaseid;yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(KZ,"getUpdateAttributes");function WZ(e,t,r){if(!e){Kr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ai(e.where),n=e.table.databaseid;yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(WZ,"getDeleteAttributes");function QZ(e,t,r){if(!e){Kr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.into.databaseid;yc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.into.tableid,n,i.columnid,t,r)}a(QZ,"getInsertAttributes");function jS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(jS,"pushAttribute");SD.exports=ZS});var rp=m((dle,AD)=>{var G_=Ka(),TD=require("chalk"),dr=x(),RD=require("prompt"),{promisify:zZ}=require("util"),ep=A(),JZ=require("fs-extra"),XZ=require("path"),ZZ=V(),jZ=BS(),gD=Q();gD.initSync();var ej=require("moment"),tj=zZ(RD.get),rj=XZ.join(gD.getHdbBasePath(),ep.LICENSE_KEY_DIR_NAME,ep.LICENSE_FILE_NAME,ep.LICENSE_FILE_NAME);AD.exports={getFingerprint:nj,setLicense:sj,parseLicense:tp,register:ij,getRegistrationInfo:aj};async function sj(e){if(e&&e.key&&e.company){try{dr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tp(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(sj,"setLicense");async function nj(){let e={};try{e=await G_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(nj,"getFingerprint");async function tp(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=G_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await JZ.writeFile(rj,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(tp,"parseLicense");async function ij(){let e=await oj();return tp(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(ij,"register");async function oj(){let e=await G_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RD.start()}catch(s){dr.error(s)}let r;try{r=await tj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(oj,"promptForRegistration");async function aj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await G_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(ZZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=jZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ej.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(aj,"getRegistrationInfo")});var ND=m((fle,OD)=>{"use strict";var cj=Be(),sp=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+cj.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};OD.exports=sp});var ID=m((mle,yD)=>{"use strict";var bD=Be(),np=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+bD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bD.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};yD.exports=np});var CD=m((ple,wD)=>{"use strict";var ip=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wD.exports=ip});var DD=m((Rle,UD)=>{"use strict";var uj=Be(),op=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+uj.SERVER_SUFFIX.ADMIN,this.password=r}};UD.exports=op});var up=m((Ale,PD)=>{"use strict";var Ic=require("path"),$_=require("fs-extra"),lj=ND(),_j=ID(),dj=CD(),Ej=DD(),ap=br(),yo=V(),zt=Tr(),V_=A(),x_=Be(),{CONFIG_PARAMS:Je}=V_,Cc=x(),Y_=Q(),LD=$s(),cp=it(),wc="clustering",fj=1e4,MD=5;PD.exports={generateNatsConfig:hj,removeNatsConfig:mj};async function hj(e=!1,t=void 0){Y_.initSync();let r=Y_.get(Je.ROOTPATH),s=Ic.join(r,wc,x_.PID_FILES.HUB),n=Ic.join(r,wc,x_.PID_FILES.LEAF),i=zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ic.join(r,wc,x_.NATS_CONFIG_FILES.HUB_SERVER),c=Ic.join(r,wc,x_.NATS_CONFIG_FILES.LEAF_SERVER),u=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=zt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=zt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=zt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=zt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cp.checkNATSServerInstalled()||K_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await ap.listUsers(),p=zt.getConfigFromFile(Je.CLUSTERING_USER),R=await ap.getClusterUser();(yo.isEmpty(R)||R.active!==!0)&&K_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await k_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await k_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await k_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await k_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,je]of T.entries())je.role.role===V_.ROLE_TYPES_ENUM.CLUSTER_USER&&je.active&&(O.push(new Ej(je.username,LD.decrypt(je.hash))),k.push(new dj(je.username,LD.decrypt(je.hash))));let $=[],{hub_routes:U}=zt.getClusteringRoutes();if(!yo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new lj(zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=yo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===V_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await $_.writeJson(o,b),Cc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new _j(zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===V_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await $_.writeJson(c,q),Cc.trace(`Leaf server config written to ${c}`))}a(hj,"generateNatsConfig");async function k_(e){let t=Y_.get(e);return yo.isEmpty(t)&&K_(`port undefined for '${e}'`),await yo.isPortTaken(t)&&K_(`'${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}a(k_,"isPortAvailable");function K_(e){let t=`Error generating clustering config: ${e}`;Cc.error(t),console.error(t),process.exit(1)}a(K_,"generateNatsConfigError");async function mj(e){let{port:t,config_file:r}=cp.getServerConfig(e),{username:s,decrypt_hash:n}=await ap.getClusterUser(),i=0,o=500;for(;i<MD;){try{let l=await cp.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Cc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=MD)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 yo.async_set_timeout(o*i)}let c="0".repeat(fj),u=Ic.join(Y_.get(Je.ROOTPATH),wc,r);await $_.writeFile(u,c),await $_.remove(u),Cc.notify(e,"started.")}a(mj,"removeNatsConfig")});var GD=m((Nle,FD)=>{"use strict";var Er=Q(),Sj=Ka(),oe=A(),Uc=Be(),Ks=require("path"),{PACKAGE_ROOT:Q_}=A(),vD=Q(),W_=V(),Io="/dev/null",pj=Ks.join(Q_,"launchServiceScripts"),BD=Ks.join(Q_,"utility/scripts"),Tj=Ks.join(BD,oe.HDB_RESTART_SCRIPT),HD=Ks.resolve(Q_,"dependencies",`${process.platform}-${process.arch}`,Uc.NATS_BINARY_NAME);function qD(){let t=Sj.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return W_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=W_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Q_}}a(qD,"generateMainServerConfig");var Rj=9930;function gj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",Uc.NATS_CONFIG_FILES.HUB_SERVER),r=Ks.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Uc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Rj?"-"+s:""),script:HD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(gj,"generateNatsHubServerConfig");var Aj=9940;function Oj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",Uc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ks.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Uc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Aj?"-"+s:""),script:HD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(Oj,"generateNatsLeafServerConfig");function Nj(){Er.initSync();let e=Ks.join(Er.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:pj,autorestart:!1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Io,t.error_file=Io),t}a(Nj,"generateClusteringUpgradeV4ServiceConfig");function bj(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return W_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=W_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BD},script:Tj}}a(bj,"generateRestart");function yj(){return{apps:[qD()]}}a(yj,"generateAllServiceConfigs");FD.exports={generateAllServiceConfigs:yj,generateMainServerConfig:qD,generateRestart:bj,generateNatsHubServerConfig:gj,generateNatsLeafServerConfig:Oj,generateClusteringUpgradeV4ServiceConfig:Nj}});var tL=m((Dle,eL)=>{"use strict";var Re=A(),Ij=V(),Dc=up(),Lc=it(),ms=Be(),Ln=GD(),z_=Q(),Ws=x(),wj=Ys(),{startWorker:xD,onMessageFromWorkers:Cj}=st(),Uj=bo(),Dj=require("util"),VD=require("child_process"),{execFile:Lj}=VD,yle=Dj.promisify(VD.exec),Ile=require("systeminformation"),fe;eL.exports={enterPM2Mode:Mj,start:Oi,stop:lp,reload:$D,restart:YD,list:_p,describe:WD,connect:Qs,kill:qj,startAllServices:Fj,startService:dp,getUniqueServicesList:QD,restartAllServices:Gj,isServiceRegistered:zD,reloadStopStart:JD,restartHdb:KD,deleteProcess:Bj,startClusteringProcesses:ZD,startClusteringThreads:jD,isHdbRestartRunning:Hj,isClusteringRunning:kj,stopClustering:xj,reloadClustering:Vj};var{PACKAGE_ROOT:wle}=A(),Cle=A(),{loggerWithTag:Ule}=Ws,Mc=!1;Cj(e=>{e.type==="restart"&&z_.initSync(!0)});function Mj(){Mc=!0}a(Mj,"enterPM2Mode");function Qs(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ws.setupConsoleLogging(),r&&t(r),e(s)})})}a(Qs,"connect");var Jt,Pj=10,kD;function Oi(e){if(Mc)return vj(e);let t=Lj(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Jt.indexOf(t);i>-1&&Jt.splice(i,1),!kD&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Pj&&Oi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=z_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ms.LOG_LEVEL_HIERARCHY[i]>=ms.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ms.LOG_LEVELS.ERR||l===ms.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ms.LOG_LEVELS[d]}if(ms.LOG_LEVEL_HIERARCHY[i]>=ms.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ms.LOG_LEVELS.ERR||l===ms.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Jt){Jt=[];let n=a(()=>{kD=!0,Jt&&(Jt.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)}Jt.push(t)}a(Oi,"start");function vj(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(vj,"startWithPM2");function lp(e){if(!Mc){for(let t of Jt||[])t.name===e&&(Jt.splice(Jt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(lp,"stop");function $D(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a($D,"reload");function YD(e){if(!Mc)for(let t of Jt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(YD,"restart");function Bj(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Bj,"deleteProcess");async function KD(){await Oi(Ln.generateRestart())}a(KD,"restartHdb");async function Hj(){let e=await _p();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Hj,"isHdbRestartRunning");function _p(){return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(_p,"list");function WD(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(WD,"describe");function qj(){if(!Mc){for(let e of Jt||[])e.kill();Jt=[];return}return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(qj,"kill");async function Fj(){try{await ZD(),await jD(),await Oi(Ln.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Fj,"startAllServices");async function dp(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ln.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ln.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ln.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ln.generateNatsHubServerConfig(),await Oi(t),await Dc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ln.generateNatsLeafServerConfig(),await Oi(t),await Dc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ln.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(t)}catch(t){throw fe.disconnect(),t}}a(dp,"startService");async function QD(){try{let e=await _p(),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 fe.disconnect(),e}}a(QD,"getUniqueServicesList");async function Gj(e=[]){try{let t=!1,r=await QD();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await YD(o))}t&&await JD(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(Gj,"restartAllServices");async function zD(e){if(Jt?.find(r=>r.name===e))return!0;let t=await Uj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zD,"isServiceRegistered");async function JD(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?z_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):z_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await WD(e),s=Ij.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lp(e),await dp(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await KD():await $D(e)}a(JD,"reloadStopStart");var XD;async function ZD(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await dp(t)}}a(ZD,"startClusteringProcesses");async function jD(){XD=xD(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Lc.createWorkQueueStream(ms.WORK_QUEUE_CONSUMER_NAMES),await Lc.updateIngestStreamConsumer(),await Lc.updateLocalStreams();let e=await wj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ws.info("Starting clustering upgrade 4.0.0 process"),xD(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(jD,"startClusteringThreads");async function xj(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await XD.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await lp(t)}}a(xj,"stopClustering");async function kj(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await zD(t)===!1)return!1}return!0}a(kj,"isClusteringRunning");async function Vj(){await Dc.generateNatsConfig(!0),await Lc.reloadNATSHub(),await Lc.reloadNATSLeaf(),await Dc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Dc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Vj,"reloadClustering")});var Tp=m((Mle,aL)=>{"use strict";var $j=require("minimist"),{isMainThread:hp,parentPort:nL}=require("worker_threads"),qe=A(),{PROCESS_DESCRIPTORS_VALIDATE:Pc}=qe,Ss=x(),mp=V(),J_=up(),wo=it(),Ep=Be(),iL=Tr(),ps=tL(),rL=bo(),Yj=wE(),{restartWorkers:X_,onMessageByType:Kj}=st(),{handleHDBError:Wj,hdb_errors:Qj}=W(),{HTTP_STATUS_CODES:zj}=Qj,Z_=Q();Z_.initSync();var vc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,Jj="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",sL="Clustering is not enabled so cannot be restarted",Xj="Invalid service",Ni,Wr;aL.exports={restart:oL,restartService:Sp};hp&&Kj(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Sp({service:e.workerType}):oL({operation:"restart"})});async function oL(e){Wr=Object.keys(e).length===0,Ni=await ps.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=$j(process.argv);if(t.service){await Sp(t);return}if(Wr&&!Ni){console.error(Jj);return}if(Wr&&console.log(vc),Ni){ps.enterPM2Mode(),Ss.notify(vc);let r=Yj(Object.keys(qe.CONFIG_PARAM_MAP),!0);return mp.isEmptyOrZeroLength(Object.keys(r))||iL.updateConfigValue(void 0,void 0,r,!0,!0),jj(),vc}return hp?(Ss.notify(vc),await pp(),setTimeout(()=>{X_()},50)):nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),vc}a(oL,"restart");async function Sp(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Wj(new Error,Xj,zj.BAD_REQUEST,void 0,void 0,!0);if(Ni=await ps.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!hp)return nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Pc.clustering:if(!Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering"),Ss.notify("Restarting clustering"),await pp();break;case Pc.clustering_config:case Pc["clustering config"]:if(!Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering_config"),Ss.notify("Restarting clustering_config"),await ps.reloadClustering();break;case"custom_functions":case"custom functions":case Pc.harperdb:case Pc.http_workers:if(Wr&&!Ni){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}Wr&&console.log("Restarting http_workers"),Ss.notify("Restarting http_workers"),Ni?await ps.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{X_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ss.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Sp,"restartService");async function Zj(){await wo.publishToStream(`${Ep.SUBJECT_PREFIXES.TXN}.${Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name,wo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Zj,"postDummyNatsMsg");async function jj(){await pp(),await ps.restart(qe.HDB_PROC_DESCRIPTOR),await mp.async_set_timeout(2e3),Z_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fp(),Wr&&(await wo.closeConnection(),process.exit(0))}a(jj,"restartPM2Mode");async function pp(){if(!iL.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await rL.getHDBProcessInfo()).clustering.length===0)Ss.trace("Clustering not running, restart will start clustering services"),await J_.generateNatsConfig(!0),await ps.startClusteringProcesses(),await ps.startClusteringThreads(),await fp(),Wr&&await wo.closeConnection();else{await Zj(),await J_.generateNatsConfig(!0),Ni?(Ss.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ps.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ps.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await rL.getHDBProcessInfo()).clustering.forEach(n=>{Ss.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mp.async_set_timeout(3e3),await fp(),await wo.updateLocalStreams(),Wr&&await wo.closeConnection(),Ss.trace("Restart clustering restarting ingest and reply service threads");let t=X_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=X_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pp,"restartClustering");async function fp(){await J_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await J_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fp,"removeNatsConfig")});var pL=m((Ble,SL)=>{"use strict";var vle=require("lodash"),Xt=A(),{handleHDBError:cL,hdb_errors:e5}=W(),{HDB_ERROR_MSGS:t5,HTTP_STATUS_CODES:r5}=e5,Rp=x();SL.exports={getRolePermissions:n5};var bi=Object.create(null),s5=a(e=>({key:e,perms:{}}),"perms_template_obj"),dL=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),EL=a((e=!1,t=!1,r=!1,s=!1)=>({[Xt.PERMS_CRUD_ENUM.READ]:e,[Xt.PERMS_CRUD_ENUM.INSERT]:t,[Xt.PERMS_CRUD_ENUM.UPDATE]:r,[Xt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),gp=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...EL(t,r,s,n)}),"table_perms_template"),uL=a((e,t=EL())=>({attribute_name:e,describe:mL(t),[Bc]:t[Bc],[Ap]:t[Ap],[Op]:t[Op]}),"attr_perms_template"),lL=a((e,t=!1)=>({attribute_name:e,describe:t,[Bc]:t}),"timestamp_attr_perms_template"),{READ:Bc,INSERT:Ap,UPDATE:Op}=Xt.PERMS_CRUD_ENUM,fL=Object.values(Xt.PERMS_CRUD_ENUM),hL=[Bc,Ap,Op];function n5(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Xt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(bi[t]&&bi[t].key===s)return bi[t].perms;let n=i5(e,r);return bi[t]?bi[t].key=s:bi[t]=s5(s),bi[t].perms=n,n}catch(r){if(!e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw Rp.error(s),Rp.debug(r),cL(new Error,t5.OUTDATED_PERMS_TRANSLATION_ERROR,r5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw Rp.error(s),cL(new Error)}}}a(n5,"getRolePermissions");function i5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xt.SYSTEM_SCHEMA_NAME]=s[Xt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=o5(t[i]);return}r[i]=dL(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],l=a5(c,u);r[i].describe||fL.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=gp()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gp()})}),r}a(i5,"translateRolePermissions");function o5(e){let t=dL(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gp(!0,!0,!0,!0,!0)}),t}a(o5,"createStructureUserPermissions");function a5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Xt.TIME_STAMP_NAMES.includes(d)&&(E=lL(d,_[Bc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=uL(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=mL(_),n.attribute_permissions.push(_),c||c5(_,u)}else if(l!==o){let _;Xt.TIME_STAMP_NAMES.includes(l)?_=lL(l):_=uL(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=_L(n),n}else return e.describe=_L(e),e}a(a5,"getTableAttrPerms");function _L(e){return fL.filter(t=>e[t]).length>0}a(_L,"getSchemaTableDescribePerm");function mL(e){return hL.filter(t=>e[t]).length>0}a(mL,"getAttributeDescribePerm");function c5(e,t){hL.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(c5,"checkForHashPerms")});var TL={};xe(TL,{Headers:()=>yi});var yi,j_=Se(()=>{yi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Hc={};xe(Hc,{authentication:()=>bL,login:()=>S5,logout:()=>p5,start:()=>m5});async function bL(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?d5?_5:[]:l5?u5:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return ed&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),ed&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(ed){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await gL.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new sd.AuthAuditLog(f,h,gt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===gt.AUTH_AUDIT_STATUS.SUCCESS?RL.notify(p):RL.error(p)},"authAuditLog"),_;if(s){if(_=Co.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await et.auth(T,p):null;break;case"Bearer":try{_=await(0,rd.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,rd.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return h5&&(Co.get(h)||(Co.set(h,h),l(T,gt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:zs({error:R.message},e)}}Co.set(s,_),f5&&l(_.username,gt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await et.auth(u.user,null,!1):E5&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,td.getSuperUser)());ed&&(e.session.update=function(f){if(!c){c=(0,OL.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,gL.put(f)},e.login=async function(f,h){e.user=await et.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&fn.loginPath?(d.status=302,d.headers.set("Location",fn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new yi);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function m5({server:e,port:t}){e.request(bL,{port:t||"all"}),AL||(AL=!0,setInterval(()=>{Co=new Map},wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NL.user.addListener(()=>{Co=new Map}))}async function S5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function p5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var td,rd,OL,wr,gt,sd,NL,RL,u5,l5,_5,d5,gL,ed,E5,f5,h5,Co,AL,nd=Se(()=>{td=C(br());Pr();Sa();rd=C(Sc());de();OL=require("uuid"),wr=C(Q()),gt=C(A()),sd=C(x());Uo();NL=C(Qa());j_();RL=(0,sd.loggerWithTag)("auth-event");wr.initSync();u5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),l5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),_5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);et.auth=td.findAndValidateUser;gL=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),ed=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,E5=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,f5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,h5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Co=new Map;a(bL,"authentication");a(m5,"start");a(S5,"login");a(p5,"logout")});var LL=m((Yle,DL)=>{"use strict";var he=require("joi"),yL=require("fs-extra"),IL=require("path"),Xs=ve(),wL=Q(),CL=A(),UL=x(),{hdb_errors:T5}=W(),{HDB_ERROR_MSGS:Dt}=T5,Js=/^[a-zA-Z0-9-_]+$/;DL.exports={getDropCustomFunctionValidator:g5,setCustomFunctionValidator:A5,addComponentValidator:y5,dropCustomFunctionProjectValidator:I5,packageComponentValidator:w5,deployComponentValidator:C5,setComponentFileValidator:O5,getComponentFileValidator:b5,dropComponentFileValidator:N5};function id(e,t,r){try{let s=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=IL.join(s,t);return yL.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return UL.error(s),r.message(Dt.VALIDATION_ERR)}}a(id,"checkProjectExists");function qc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(qc,"checkFilePath");function R5(e,t,r,s){try{let n=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=IL.join(n,e,t,r+".js");return yL.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return UL.error(n),s.message(Dt.VALIDATION_ERR)}}a(R5,"checkFileExists");function g5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Js).custom(R5.bind(null,e.project,e.type)).custom(qc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Xs.validateBySchema(e,t)}a(g5,"getDropCustomFunctionValidator");function A5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(qc).required(),function_content:he.string().required()});return Xs.validateBySchema(e,t)}a(A5,"setCustomFunctionValidator");function O5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(qc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(O5,"setComponentFileValidator");function N5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(qc).optional()});return Xs.validateBySchema(e,t)}a(N5,"dropComponentFileValidator");function b5(e){let t=he.object({project:he.string().required(),file:he.string().custom(qc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(b5,"getComponentFileValidator");function y5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(y5,"addComponentValidator");function I5(e){let t=he.object({project:he.string().pattern(Js).custom(id.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(I5,"dropCustomFunctionProjectValidator");function w5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Xs.validateBySchema(e,t)}a(w5,"packageComponentValidator");function C5(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Xs.validateBySchema(e,t)}a(C5,"deployComponentValidator")});var Ip=m((Wle,vL)=>{"use strict";var be=require("fs-extra"),Np=require("fast-glob"),me=require("path"),ML=require("tar-fs"),U5=require("uuid").v4,bp=require("normalize-path"),Ts=LL(),At=x(),Ie=A(),Ye=Q(),od=Tr(),D5=V(),{PACKAGE_ROOT:L5}=A(),{handleHDBError:ot,hdb_errors:M5}=W(),{HDB_ERROR_MSGS:Mn,HTTP_STATUS_CODES:at}=M5,P5=me.join(L5,"application-template"),yp=me.join(Ye.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function PL(){let e=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ot(new Error,Mn.NOT_ENABLED,at.BAD_REQUEST,void 0,void 0,!0)}a(PL,"isCFEnabled");function v5(){At.trace("getting custom api status");let e={};try{e={is_enabled:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ot(new Error,Mn.FUNCTION_STATUS,at.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(v5,"customFunctionsStatus");function B5(){At.trace("getting custom api endpoints");let e={},t=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Np.sync(bp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Np.sync(bp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Np.sync(bp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ot(new Error,Mn.GET_FUNCTIONS,at.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(B5,"getCustomFunctions");function H5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw ot(new Error,Mn.GET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(H5,"getCustomFunction");function q5(e){PL(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.setCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("setting custom function file content");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ot(new Error,Mn.SET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(q5,"setCustomFunction");function F5(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Ts.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function file");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ot(new Error,Mn.DROP_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(F5,"dropCustomFunction");function G5(e){PL(),e.project&&(e.project=me.parse(e.project).name);let t=Ts.addComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("adding component");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(P5,n),`Successfully added project: ${s}`}catch(n){throw ot(new Error,Mn.ADD_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(G5,"addComponent");function x5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.dropCustomFunctionProjectValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function project");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ye.get(Ie.CONFIG_PARAMS.APPS);if(!D5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return od.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw ot(new Error,Mn.DROP_FUNCTION_PROJECT,at.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(x5,"dropCustomFunctionProject");async function k5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.packageComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;At.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join(Ye.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(yp);let i=me.join(yp,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),ML.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(k5,"packageComponent");async function V5(e){e.project&&(e.project=me.parse(e.project).name);let t=Ts.deployComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(yp,U5()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(ML.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return od.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(V5,"deployComponent");async function $5(){let e=od.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a($5,"getComponents");async function Y5(e){let t=Ts.getComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Y5,"getComponentFile");async function K5(e){let t=Ts.setComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(K5,"setComponentFile");async function W5(e){let t=Ts.dropComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),od.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(W5,"dropComponent");vL.exports={customFunctionsStatus:v5,getCustomFunctions:B5,getCustomFunction:H5,setCustomFunction:q5,dropCustomFunction:F5,addComponent:G5,dropCustomFunctionProject:x5,packageComponent:k5,deployComponent:V5,getComponents:$5,getComponentFile:Y5,setComponentFile:K5,dropComponent:W5}});var wp=m((zle,HL)=>{"use strict";var Rs=require("joi"),BL=ve();HL.exports={readTransactionLogValidator:Q5,deleteTransactionLogsBeforeValidator:z5};function Q5(e){let t=Rs.object({schema:Rs.string().required(),table:Rs.string().required(),from:Rs.date().timestamp(),to:Rs.date().timestamp(),limit:Rs.number().min(1)});return BL.validateBySchema(e,t)}a(Q5,"readTransactionLogValidator");function z5(e){let t=Rs.object({schema:Rs.string().required(),table:Rs.string().required(),timestamp:Rs.date().timestamp().required()});return BL.validateBySchema(e,t)}a(z5,"deleteTransactionLogsBeforeValidator")});var cd=m((Xle,kL)=>{"use strict";var Cp=A(),ad=it(),qL=V(),FL=Q(),GL=$s(),{handleHDBError:Do,hdb_errors:J5}=W(),{HTTP_STATUS_CODES:Lo}=J5,{readTransactionLogValidator:X5,deleteTransactionLogsBeforeValidator:Z5}=wp(),xL="This operation relies on clustering and cannot run with it disable.",j5="Logs successfully deleted from transaction log.",e8="All logs successfully deleted from transaction log.";kL.exports={readTransactionLog:t8,deleteTransactionLogsBefore:r8};async function*t8(e){let t=X5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,xL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qL.checkSchemaTableExist(r,s);if(n)throw Do(new Error,n,Lo.NOT_FOUND,void 0,void 0,!0);let i=GL.createNatsTableStreamName(r,s),o=await ad.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===Cp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(t8,"readTransactionLog");async function r8(e){let t=Z5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,xL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qL.checkSchemaTableExist(r,s);if(i)throw Do(new Error,i,Lo.NOT_FOUND,void 0,void 0,!0);let o=GL.createNatsTableStreamName(r,s),{jsm:c}=await ad.getNATSReferences(),u=await ad.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=j5,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=e8):d=(await ad.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(r8,"deleteTransactionLogsBefore")});var dd=m((jle,zL)=>{"use strict";var ud=require("joi"),ld=require("path"),VL=require("fs-extra"),{exec:s8}=require("child_process"),n8=require("util"),$L=n8.promisify(s8),Fc=A(),{handleHDBError:Mo,hdb_errors:i8}=W(),{HTTP_STATUS_CODES:Po}=i8,xc=Q(),o8=ve(),Gc=x();xc.initSync();var Up=xc.get(Fc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),YL="npm install --omit=dev --json",a8=`${YL} --dry-run`;zL.exports={installModules:_8,auditModules:d8,installAllRootModules:c8,uninstallRootModule:u8,linkHarperdb:l8};async function c8(e=!1){await _d(),await kc(e?"npm install --ignore-scripts":"npm install",xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(c8,"installAllRootModules");async function u8(e){await kc(`npm uninstall ${e}`,xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(u8,"uninstallRootModule");async function l8(){await _d(),await kc(`npm link ${Fc.PACKAGE_ROOT}`,xc.get(Fc.CONFIG_PARAMS.ROOTPATH))}a(l8,"linkHarperdb");async function kc(e,t=void 0){let{stdout:r,stderr:s}=await $L(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return Gc.trace(r,s),r.replace(`
11
+ `,"")}a(kc,"runCommand");async function _8(e){Gc.info(`starting installModules for request: ${e}`);let t=QL(e);if(t)throw Mo(t,t.message,Po.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?a8:YL;await _d(),await WL(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let l=ld.join(Up,u),_,d=null;try{let{stdout:E,stderr:f}=await $L(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=GL(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Hc.info(`finished installModules with response ${i}`),i}a(i8,"installModules");function GL(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(GL,"parseNPMStdErr");async function o8(e){Hc.info(`starting auditModules for request: ${e}`);let t=kL(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST);let{projects:r}=e;await cd(),await xL(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=ad.join(yp,o);s[o]={npm_output:null,npm_error:null};try{let u=await Fc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=GL(u.stderr)}}return Hc.info(`finished auditModules with response ${s}`),s}a(o8,"auditModules");async function cd(){try{return await Fc("npm -v"),!0}catch{throw Do(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Lo.BAD_REQUEST,void 0,void 0,!0)}}a(cd,"checkNPMInstalled");async function xL(e){if(!Array.isArray(e)||e.length===0)throw Do(new Error,"projects argument must be an array with at least 1 element",Lo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=ad.join(yp,i.toString());if(!await HL.pathExists(o)){t.push(i);continue}let u=ad.join(o,"package.json");await HL.pathExists(u)||r.push(i)}if(t.length>0)throw Do(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Lo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Do(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Lo.BAD_REQUEST,void 0,void 0,!0)}a(xL,"checkProjectPaths");function kL(e){let t=od.object({projects:od.array().min(1).items(od.string()).required(),dry_run:od.boolean().default(!1)});return e8.validateBySchema(e,t)}a(kL,"modulesValidator")});var YL=m(($le,$L)=>{"use strict";var Ip=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};$L.exports=Ip});var WL=m((Kle,KL)=>{"use strict";var wp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};KL.exports=wp});var Up=m((Qle,zL)=>{"use strict";var QL=YL(),a8=WL(),{HDB_ERROR_MSGS:c8}=rr(),Cp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=c8.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new QL(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new a8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new QL(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};zL.exports=Cp});var Ed=m((Jle,_M)=>{"use strict";var Dp=Ar(),ld=gr(),wr=__(),kc=si(),Lp=ci(),u8=$m(),l8=SC(),Vc=Or(),_d=jm(),ot=F(),_8=rS(),d8=w_(),E8=HS(),f8=L_(),h8=qS(),m8=FS(),S8=kS(),p8=$S(),Mp=WS(),Xs=x(),T8=ED(),Pp=ZS(),ZL=hp(),Ir=g(),jL=EL(),R8=Oo(),eM=fc(),tM=(td(),te(Pc)),rM=Tr(),fr=Op(),g8=require("alasql"),sM=id(),nM=ud(),iM=Up(),{handleHDBError:Zt,hdb_errors:oM}=W(),{HDB_ERROR_MSGS:Ot,HTTP_STATUS_CODES:Gc}=oM,P=new Map,aM="delete",Mn="insert",Zs="read",bi="update",xc="describe",JL=kc.describeSchema.name,XL=kc.describeTable.name,cM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},A8="catchup",O8="handleGetJob",N8="handleGetJobsByStartDate",dd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},b8=[wr.createTable.name,wr.createAttribute.name,wr.dropTable.name,wr.dropAttribute.name],uM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};P.set(Dp.insert.name,new q(!1,[Mn]));P.set(Dp.update.name,new q(!1,[bi]));P.set(Dp.upsert.name,new q(!1,[Mn,bi]));P.set(ld.searchByConditions.name,new q(!1,[Zs]));P.set(ld.searchByHash.name,new q(!1,[Zs]));P.set(ld.searchByValue.name,new q(!1,[Zs]));P.set(ld.search.name,new q(!1,[Zs]));P.set(wr.createSchema.name,new q(!0,[]));P.set(wr.createTable.name,new q(!0,[]));P.set(wr.createAttribute.name,new q(!1,[Mn]));P.set(wr.dropSchema.name,new q(!0,[]));P.set(wr.dropTable.name,new q(!0,[]));P.set(wr.dropAttribute.name,new q(!0,[]));P.set(kc.describeSchema.name,new q(!1,[Zs]));P.set(kc.describeTable.name,new q(!1,[Zs]));P.set(Lp.deleteRecord.name,new q(!1,[aM]));P.set(Vc.addUser.name,new q(!0,[]));P.set(Vc.alterUser.name,new q(!0,[]));P.set(Vc.dropUser.name,new q(!0,[]));P.set(Vc.listUsersExternal.name,new q(!0,[]));P.set(_d.listRoles.name,new q(!0,[]));P.set(_d.addRole.name,new q(!0,[]));P.set(_d.alterRole.name,new q(!0,[]));P.set(_d.dropRole.name,new q(!0,[]));P.set(_8.name,new q(!0,[]));P.set(d8.name,new q(!0,[]));P.set(E8.name,new q(!0,[]));P.set(f8.name,new q(!0,[]));P.set(h8.name,new q(!0,[]));P.set(m8.name,new q(!0,[]));P.set(Mp.setRoutes.name,new q(!0,[]));P.set(Mp.getRoutes.name,new q(!0,[]));P.set(Mp.deleteRoutes.name,new q(!0,[]));P.set(rM.setConfiguration.name,new q(!0,[]));P.set(S8.clusterStatus.name,new q(!0,[]));P.set(p8.name,new q(!0,[]));P.set(Pp.getFingerprint.name,new q(!0,[]));P.set(Pp.setLicense.name,new q(!0,[]));P.set(Lp.deleteFilesBefore.name,new q(!0,[]));P.set(Lp.deleteAuditLogsBefore.name,new q(!0,[]));P.set(ZL.restart.name,new q(!0,[]));P.set(ZL.restartService.name,new q(!0,[]));P.set(u8.name,new q(!0,[]));P.set(l8.name,new q(!0,[Zs]));P.set(R8.systemInformation.name,new q(!0,[]));P.set(rM.getConfiguration.name,new q(!0,[]));P.set(sM.readTransactionLog.name,new q(!0,[]));P.set(sM.deleteTransactionLogsBefore.name,new q(!0,[]));P.set(nM.installModules.name,new q(!0,[]));P.set(nM.auditModules.name,new q(!0,[]));P.set(eM.createTokens.name,new q(!1,[]));P.set(eM.refreshOperationToken.name,new q(!1,[]));P.set(tM.login.name,new q(!1,[]));P.set(tM.logout.name,new q(!1,[]));P.set(fr.customFunctionsStatus.name,new q(!0,[]));P.set(fr.getCustomFunctions.name,new q(!0,[]));P.set(fr.getComponents.name,new q(!0,[]));P.set(fr.getComponentFile.name,new q(!0,[]));P.set(fr.setComponentFile.name,new q(!0,[]));P.set(fr.dropComponent.name,new q(!0,[]));P.set(fr.getCustomFunction.name,new q(!0,[]));P.set(fr.setCustomFunction.name,new q(!0,[]));P.set(fr.dropCustomFunction.name,new q(!0,[]));P.set(fr.addComponent.name,new q(!0,[]));P.set(fr.dropCustomFunctionProject.name,new q(!0,[]));P.set(fr.packageComponent.name,new q(!0,[]));P.set(fr.deployComponent.name,new q(!0,[]));P.set(Pp.getRegistrationInfo.name,new q(!1,[]));P.set(Vc.userInfo.name,new q(!1,[]));P.set(kc.describeAll.name,new q(!1,[]));P.set(O8,new q(!1,[]));P.set(N8,new q(!0,[]));P.set(A8,new q(!0,[]));P.set(dd.CSV_DATA_LOAD,new q(!1,[Mn,bi]));P.set(dd.CSV_URL_LOAD,new q(!1,[Mn,bi]));P.set(dd.CSV_FILE_LOAD,new q(!1,[Mn,bi]));P.set(dd.IMPORT_FROM_S3,new q(!1,[Mn,bi]));P.set(uM.EXPORT_TO_S3,new q(!0,[]));P.set(uM.EXPORT_LOCAL,new q(!0,[]));P.set(Ir.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[aM]));P.set(Ir.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Zs]));P.set(Ir.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Mn]));P.set(Ir.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[bi]));_M.exports={verifyPerms:I8,verifyPermsAst:y8,verifyBulkLoadAttributePerms:C8};function y8(e,t,r){if(Xs.isEmptyOrZeroLength(e))throw ot.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Xs.isEmptyOrZeroLength(t))throw ot.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Xs.isEmptyOrZeroLength(r))throw ot.info("verify_perms_ast has a null operation parameter"),Zt(new Error);try{let s=new iM,n=new T8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ot.info("No schemas defined in verifyPermsAst(), will not continue."),Zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&cM[r])throw Zt(new Error,Ot.DROP_SYSTEM,Gc.FORBIDDEN);if(c&&!u)return null;let l=jL.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof g8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=lM(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=Bp(t.role.permission,E,d[f]);vp(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Zt(s)}}a(y8,"verifyPermsAst");function I8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ot.info("null required parameter in verifyPerms"),Zt(new Error,Ot.DEFAULT_INVALID_REQUEST,Gc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new iM;if(Xs.isEmptyOrZeroLength(e.hdb_user.role)||Xs.isEmptyOrZeroLength(e.hdb_user.role.permission))return ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ot.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Ir.SYSTEM_SCHEMA_NAME)||n===Ir.SYSTEM_SCHEMA_NAME;if(_&&cM[r])throw Zt(new Error,Ot.DROP_SYSTEM,Gc.FORBIDDEN);if(u&&!_||l===!0&&(r===wr.createSchema.name||r===wr.dropSchema.name))return null;if(b8.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=jL.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===JL||r===XL){if(n===Ir.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ot.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===JL&&(!d[n]||!d[n][xc]))return c.handleInvalidItem(Ot.SCHEMA_NOT_FOUND(n));if(r===XL&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][xc]))return c.handleInvalidItem(Ot.TABLE_NOT_FOUND(n,i))}}let E=lM(e.hdb_user,r,o,c,s);if(E)return E;if(P.get(r)&&P.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ir.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],S=d[n].tables[i];S[Ir.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[Ir.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(y=>y.attribute),e.get_attributes=T)}let f=w8(e),h=Bp(e.hdb_user.role.permission,n,i);return vp(f,h,r,i,n,c,s),c.getPermsResponse()}a(I8,"verifyPerms");function lM(e,t,r,s,n){if(Xs.arrayHasEmptyValues([e,t,r]))throw ot.info("hasPermissions has an invalid parameter"),Zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||P.get(t).requires_su))return null;if(!P.get(t))throw ot.info(`operation ${t} not found.`),Zt(new Error,Ot.OP_NOT_FOUND(t),Gc.BAD_REQUEST);if(P.get(t)&&P.get(t).requires_su)return ot.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ot.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][xc]===!1){s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[xc]===!1)s.addInvalidItem(Ot.TABLE_NOT_FOUND(u,_));else try{let E=[],f=P.get(t).perms;!Xs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],S=d[T];(S==null||S===!1)&&(ot.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ot.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ot.error(f),ot.error(E),Zt(oM.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(lM,"hasPermissions");function vp(e,t,r,s,n,i,o){if(!e||!t)throw ot.info("no attributes specified in checkAttributePerms."),Zt(new Error);let c=P.get(r).perms;if(!c||c==="")throw ot.info(`no permissions found for ${r} in checkAttributePerms().`),Zt(new Error);if(Xs.isEmptyOrZeroLength(t))return ot.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[xc]===!1){i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Ir.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Zs)throw Zt(new Error,Ot.SYSTEM_TIMESTAMP_PERMS_ERR,Gc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(vp,"checkAttributePerms");function w8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ir.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ot.info(r)}return t}a(w8,"getRecordAttributes");function Bp(e,t,r){let s=new Map;if(Xs.isEmpty(e))return ot.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Bp,"getAttributePermissions");function C8(e,t,r,s,n,i,o){let c=new Set(i),u=Bp(e,s,n);vp(c,u,t,n,s,o,r)}a(C8,"verifyBulkLoadAttributePerms")});var hd=m((Zle,mM)=>{"use strict";mM.exports={evaluateSQL:k8,processAST:hM,convertSQLToAST:fM,checkASTPermissions:EM};var U8=Ar(),dM=require("util"),D8=dM.callbackify(U8.insert),L8=gr().search,M8=fw().update,P8=dM.callbackify(M8),v8=mw().convertDelete,Pn=require("alasql"),B8=Ed(),fd=F(),H8=Al(),q8=x(),$c=g(),{hdb_errors:F8,handleHDBError:Hp}=W(),{HTTP_STATUS_CODES:qp}=F8;H8(Pn);var G8=403,x8="There was a problem performing this insert. Please check the logs and try again.",Fp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function k8(e,t){let r=e.parsed_sql_object;if(!r){r=fM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Pn.yy.Insert?s=n.into.databaseid:n instanceof Pn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Pn.yy.Update||n instanceof Pn.yy.Delete?s=n.table.databaseid:fd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Pn.yy.Select)&&q8.isEmptyOrZeroLength(s))return t("No schema specified",null)}hM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(k8,"evaluateSQL");function EM(e,t){let r;try{r=B8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(EM,"checkASTPermissions");function fM(e){let t=new Fp;if(!e)throw Hp(new Error,"The 'sql' parameter is missing from the request body",qp.BAD_REQUEST);try{let r=e.trim(),s=Pn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?Hp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,qp.BAD_REQUEST):Hp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",qp.BAD_REQUEST)}return t}a(fM,"convertSQLToAST");function hM(e,t,r){try{let s=V8;if(!e.bypass_auth&&!t.permissions_checked){let i=EM(e,t);if(i&&i.length>0)return r(G8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case $c.VALID_SQL_OPS_ENUM.SELECT:s=L8,n=t.ast.statements[0];break;case $c.VALID_SQL_OPS_ENUM.INSERT:s=$8;break;case $c.VALID_SQL_OPS_ENUM.UPDATE:s=P8;break;case $c.VALID_SQL_OPS_ENUM.DELETE:s=v8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(hM,"processAST");function V8(e,t){fd.info(e),t("unknown sql statement")}a(V8,"nullFunction");function $8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Y8(i,e.values)}catch(o){return r(o)}D8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){fd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a($8,"convertInsert");function Y8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Pn.compile(`SELECT ${n.toString()} AS [${$c.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw fd.error(r),new Error(x8)}}a(Y8,"createDataObjects")});var Gp=m((e_e,pM)=>{"use strict";var{S3:K8,GetObjectCommand:W8}=require("@aws-sdk/client-s3");pM.exports={getFileStreamFromS3:Q8,getS3AuthObj:SM};async function Q8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await SM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new W8(r))).Body}a(Q8,"getFileStreamFromS3");function SM(e,t,r){return new K8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(SM,"getS3AuthObj")});var md=m((r_e,wM)=>{"use strict";var gM=gr(),z8=hd(),J8=Gp(),{AsyncParser:X8,Transform:Z8}=require("json2csv"),Kc=require("stream"),hr=x(),xp=require("fs-extra"),j8=require("path"),Cr=F(),{promisify:AM}=require("util"),Yc=x(),{handleHDBError:Xe,hdb_errors:e6}=W(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:Ze}=e6,{streamAsJSON:t6}=Nm(),{Upload:r6}=require("@aws-sdk/lib-storage"),TM=["search_by_value","search_by_hash","sql"],RM=["json","csv"],OM="json",NM="csv",s6="Successfully exported JSON locally.",n6="Successfully exported CSV locally.",i6=1e3,o6=gM.searchByHash,a6=gM.searchByValue,c6=AM(z8.evaluateSQL),u6=AM(Kc.finished);wM.exports={export_to_s3:E6,export_local:l6,toCsvStream:bM};async function l6(e){Cr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=yM(e);if(!hr.isEmpty(t))throw Cr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(hr.isEmpty(e.path))throw Cr.error(jt.MISSING_VALUE("path")),Xe(new Error,jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(hr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(j8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=hr.buildFolderPath(e.path,r);await _6(e.path);let n=await IM(e);return await d6(s,e.format,n)}a(l6,"export_local");async function _6(e){if(Cr.trace("in confirmPath"),hr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await xp.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Cr.error(s),Xe(new Error,s,Ze.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Cr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(_6,"confirmPath");async function d6(e,t,r){if(Cr.trace("in saveToLocal"),Yc.isEmptyOrZeroLength(e))throw Xe(new Error,jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Yc.isEmptyOrZeroLength(t))throw Xe(new Error,jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Yc.isEmpty(r))throw Xe(new Error,jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===OM){let s=xp.createWriteStream(e);return t6(r).pipe(s),await u6(s),{message:s6,path:e}}else if(t===NM){let s=xp.createWriteStream(e),n=Kc.Readable.from(r),i={},o={objectMode:!0};return await new X8(i,o).fromInput(n).toOutput(s).promise(!1),{message:n6,path:e}}throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(d6,"saveToLocal");async function E6(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=yM(e);if(!hr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Cr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await IM(e)}catch(u){throw Cr.error(u),u}let s,n=await J8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Kc.PassThrough;if(e.format===NM){i=e.s3.key+".csv";let u=bM(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===OM){i=e.s3.key+".json";let u=new Kc.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%i6===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new r6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(E6,"export_to_s3");function bM(e){let t=Kc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Z8(r,s);return t.pipe(n)}a(bM,"toCsvStream");function yM(e){if(Cr.trace("in exportCoreValidation"),hr.isEmpty(e.format))return"format missing";if(RM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${RM.join(", ")}`;let t=e.search_operation.operation;if(hr.isEmpty(t))return"search_operation.operation missing";if(TM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${TM.join(", ")}`}a(yM,"exportCoreValidation");async function IM(e){Cr.trace("in getRecords");let t,r;if(Yc.isEmpty(e.search_operation)||Yc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,jt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=a6;break;case"search_by_hash":t=o6;break;case"sql":t=c6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Cr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(IM,"getRecords")});var PM={};Ye(PM,{contentTypes:()=>LM,findBestSerializer:()=>Rd,getDeserializer:()=>Mo,registerContentHandlers:()=>Vp,serialize:()=>$p,serializeMessage:()=>Qs});function f6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Vp(e){e.register(m6,{serializers:[{regex:/^application\/json$/,serializer:Sd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new yi.EncoderStream(Wc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Td.Readable.from((0,Ts.encodeIter)(t,Wc)):(0,Ts.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,kp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ts.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,yi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Rd(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=dt.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(dt.keys()).join(", "))}};r=dt.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function $p(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers["Content-Type"]=e.contentType,r.headers.Vary="Accept-Encoding",n=e.data),e instanceof Uint8Array)r.headers["Content-Type"]="application/octet-stream",r.headers.Vary="Accept-Encoding",n=e;else{let i=Rd(t);if(r.headers.Vary="Accept, Accept-Encoding",r.headers["Content-Type"]=i.type,e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers["Content-Encoding"]="br",o=o.pipe((0,pd.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,o)=>(0,pd.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Qs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=Rd(t);return r=t.serialize=s.serializer.serialize,r(e)}function S6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Mo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=dt.get(e)?.deserialize||UM(e,s);return o=>S6(o).then(i)}return dt.get(e)?.deserialize||UM(e,s)}function UM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>({contentType:e,data:r})}function p6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Sd,kp,Ts,yi,pd,Td,DM,Wc,dt,LM,CM,MM,h6,m6,wo=pe(()=>{Sd=D(Nm()),kp=D(md()),Ts=require("msgpackr"),yi=require("cbor-x"),pd=require("zlib"),Td=require("stream");bs();DM=require("../index"),Wc={useRecords:!1,useToJSON:!0};Et.contentType=function(e,t){dt.set(e,t)};dt=new Map,LM=dt;(0,DM._assignPackageExport)("contentTypes",LM);dt.set("application/json",{serializeStream:Sd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});CM=new yi.Encoder(Wc);dt.set("application/cbor",{serializeStream(e){return new yi.EncoderStream(Wc).end(e)},serialize:CM.encode,deserialize:CM.decode,q:1});dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Td.Readable.from((0,Ts.encodeIter)(e,Wc)):(0,Ts.pack)(e)},serialize:Ts.pack,deserialize:Ts.unpack,q:.9});dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,kp.toCsvStream)(e)},q:.1});dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});dt.set("text/event-stream",{serializeStream:function(e){return Td.Readable.from(p6(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
13
+ `,""):null}catch(E){E.stderr?i[u].npm_error=KL(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Gc.info(`finished installModules with response ${i}`),i}a(_8,"installModules");function KL(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(KL,"parseNPMStdErr");async function d8(e){Gc.info(`starting auditModules for request: ${e}`);let t=QL(e);if(t)throw Mo(t,t.message,Po.BAD_REQUEST);let{projects:r}=e;await _d(),await WL(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=ld.join(Up,o);s[o]={npm_output:null,npm_error:null};try{let u=await kc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KL(u.stderr)}}return Gc.info(`finished auditModules with response ${s}`),s}a(d8,"auditModules");async function _d(){try{return await kc("npm -v"),!0}catch{throw Mo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Po.BAD_REQUEST,void 0,void 0,!0)}}a(_d,"checkNPMInstalled");async function WL(e){if(!Array.isArray(e)||e.length===0)throw Mo(new Error,"projects argument must be an array with at least 1 element",Po.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=ld.join(Up,i.toString());if(!await VL.pathExists(o)){t.push(i);continue}let u=ld.join(o,"package.json");await VL.pathExists(u)||r.push(i)}if(t.length>0)throw Mo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Po.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Mo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Po.BAD_REQUEST,void 0,void 0,!0)}a(WL,"checkProjectPaths");function QL(e){let t=ud.object({projects:ud.array().min(1).items(ud.string()).required(),dry_run:ud.boolean().default(!1)});return o8.validateBySchema(e,t)}a(QL,"modulesValidator")});var XL=m((t_e,JL)=>{"use strict";var Dp=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};JL.exports=Dp});var jL=m((s_e,ZL)=>{"use strict";var Lp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ZL.exports=Lp});var Pp=m((i_e,tM)=>{"use strict";var eM=XL(),E8=jL(),{HDB_ERROR_MSGS:f8}=rr(),Mp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=f8.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new eM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new E8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new eM(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};tM.exports=Mp});var md=m((a_e,SM)=>{"use strict";var vp=Nr(),Ed=Or(),Ur=E_(),Yc=ni(),Bp=ui(),h8=Qm(),m8=gC(),Kc=br(),fd=sS(),ct=x(),S8=oS(),p8=U_(),T8=xS(),R8=P_(),g8=kS(),A8=VS(),O8=KS(),N8=QS(),Hp=XS(),Zs=V(),b8=pD(),qp=rp(),nM=Tp(),Cr=A(),iM=pL(),y8=bo(),oM=Sc(),aM=(nd(),ee(Hc)),cM=Tr(),fr=Ip(),I8=require("alasql"),uM=cd(),lM=dd(),_M=Pp(),{handleHDBError:Zt,hdb_errors:dM}=W(),{HDB_ERROR_MSGS:Ot,HTTP_STATUS_CODES:Vc}=dM,M=new Map,EM="delete",Pn="insert",js="read",Ii="update",$c="describe",rM=Yc.describeSchema.name,sM=Yc.describeTable.name,fM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},w8="catchup",C8="handleGetJob",U8="handleGetJobsByStartDate",hd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},D8=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],hM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},H=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};M.set(vp.insert.name,new H(!1,[Pn]));M.set(vp.update.name,new H(!1,[Ii]));M.set(vp.upsert.name,new H(!1,[Pn,Ii]));M.set(Ed.searchByConditions.name,new H(!1,[js]));M.set(Ed.searchByHash.name,new H(!1,[js]));M.set(Ed.searchByValue.name,new H(!1,[js]));M.set(Ed.search.name,new H(!1,[js]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Pn]));M.set(Ur.dropSchema.name,new H(!0,[]));M.set(Ur.dropTable.name,new H(!0,[]));M.set(Ur.dropAttribute.name,new H(!0,[]));M.set(Yc.describeSchema.name,new H(!1,[js]));M.set(Yc.describeTable.name,new H(!1,[js]));M.set(Bp.deleteRecord.name,new H(!1,[EM]));M.set(Kc.addUser.name,new H(!0,[]));M.set(Kc.alterUser.name,new H(!0,[]));M.set(Kc.dropUser.name,new H(!0,[]));M.set(Kc.listUsersExternal.name,new H(!0,[]));M.set(fd.listRoles.name,new H(!0,[]));M.set(fd.addRole.name,new H(!0,[]));M.set(fd.alterRole.name,new H(!0,[]));M.set(fd.dropRole.name,new H(!0,[]));M.set(S8.name,new H(!0,[]));M.set(p8.name,new H(!0,[]));M.set(T8.name,new H(!0,[]));M.set(R8.name,new H(!0,[]));M.set(g8.name,new H(!0,[]));M.set(A8.name,new H(!0,[]));M.set(Hp.setRoutes.name,new H(!0,[]));M.set(Hp.getRoutes.name,new H(!0,[]));M.set(Hp.deleteRoutes.name,new H(!0,[]));M.set(cM.setConfiguration.name,new H(!0,[]));M.set(O8.clusterStatus.name,new H(!0,[]));M.set(N8.name,new H(!0,[]));M.set(qp.getFingerprint.name,new H(!0,[]));M.set(qp.setLicense.name,new H(!0,[]));M.set(Bp.deleteFilesBefore.name,new H(!0,[]));M.set(Bp.deleteAuditLogsBefore.name,new H(!0,[]));M.set(nM.restart.name,new H(!0,[]));M.set(nM.restartService.name,new H(!0,[]));M.set(h8.name,new H(!0,[]));M.set(m8.name,new H(!0,[js]));M.set(y8.systemInformation.name,new H(!0,[]));M.set(cM.getConfiguration.name,new H(!0,[]));M.set(uM.readTransactionLog.name,new H(!0,[]));M.set(uM.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(lM.installModules.name,new H(!0,[]));M.set(lM.auditModules.name,new H(!0,[]));M.set(oM.createTokens.name,new H(!1,[]));M.set(oM.refreshOperationToken.name,new H(!1,[]));M.set(aM.login.name,new H(!1,[]));M.set(aM.logout.name,new H(!1,[]));M.set(fr.customFunctionsStatus.name,new H(!0,[]));M.set(fr.getCustomFunctions.name,new H(!0,[]));M.set(fr.getComponents.name,new H(!0,[]));M.set(fr.getComponentFile.name,new H(!0,[]));M.set(fr.setComponentFile.name,new H(!0,[]));M.set(fr.dropComponent.name,new H(!0,[]));M.set(fr.getCustomFunction.name,new H(!0,[]));M.set(fr.setCustomFunction.name,new H(!0,[]));M.set(fr.dropCustomFunction.name,new H(!0,[]));M.set(fr.addComponent.name,new H(!0,[]));M.set(fr.dropCustomFunctionProject.name,new H(!0,[]));M.set(fr.packageComponent.name,new H(!0,[]));M.set(fr.deployComponent.name,new H(!0,[]));M.set(qp.getRegistrationInfo.name,new H(!1,[]));M.set(Kc.userInfo.name,new H(!1,[]));M.set(Yc.describeAll.name,new H(!1,[]));M.set(C8,new H(!1,[]));M.set(U8,new H(!0,[]));M.set(w8,new H(!0,[]));M.set(hd.CSV_DATA_LOAD,new H(!1,[Pn,Ii]));M.set(hd.CSV_URL_LOAD,new H(!1,[Pn,Ii]));M.set(hd.CSV_FILE_LOAD,new H(!1,[Pn,Ii]));M.set(hd.IMPORT_FROM_S3,new H(!1,[Pn,Ii]));M.set(hM.EXPORT_TO_S3,new H(!0,[]));M.set(hM.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[EM]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[js]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Pn]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[Ii]));SM.exports={verifyPerms:M8,verifyPermsAst:L8,verifyBulkLoadAttributePerms:v8};function L8(e,t,r){if(Zs.isEmptyOrZeroLength(e))throw ct.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Zs.isEmptyOrZeroLength(t))throw ct.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Zs.isEmptyOrZeroLength(r))throw ct.info("verify_perms_ast has a null operation parameter"),Zt(new Error);try{let s=new _M,n=new b8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ct.info("No schemas defined in verifyPermsAst(), will not continue."),Zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&fM[r])throw Zt(new Error,Ot.DROP_SYSTEM,Vc.FORBIDDEN);if(c&&!u)return null;let l=iM.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof I8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=mM(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=Gp(t.role.permission,E,d[f]);Fp(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Zt(s)}}a(L8,"verifyPermsAst");function M8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ct.info("null required parameter in verifyPerms"),Zt(new Error,Ot.DEFAULT_INVALID_REQUEST,Vc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new _M;if(Zs.isEmptyOrZeroLength(e.hdb_user.role)||Zs.isEmptyOrZeroLength(e.hdb_user.role.permission))return ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ot.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Cr.SYSTEM_SCHEMA_NAME)||n===Cr.SYSTEM_SCHEMA_NAME;if(_&&fM[r])throw Zt(new Error,Ot.DROP_SYSTEM,Vc.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(D8.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=iM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===rM||r===sM){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ot.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===rM&&(!d[n]||!d[n][$c]))return c.handleInvalidItem(Ot.SCHEMA_NOT_FOUND(n));if(r===sM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][$c]))return c.handleInvalidItem(Ot.TABLE_NOT_FOUND(n,i))}}let E=mM(e.hdb_user,r,o,c,s);if(E)return E;if(M.get(r)&&M.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Cr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],p=d[n].tables[i];p[Cr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(O=>O[Cr.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=T)}let f=P8(e),h=Gp(e.hdb_user.role.permission,n,i);return Fp(f,h,r,i,n,c,s),c.getPermsResponse()}a(M8,"verifyPerms");function mM(e,t,r,s,n){if(Zs.arrayHasEmptyValues([e,t,r]))throw ct.info("hasPermissions has an invalid parameter"),Zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw ct.info(`operation ${t} not found.`),Zt(new Error,Ot.OP_NOT_FOUND(t),Vc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ot.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][$c]===!1){s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[$c]===!1)s.addInvalidItem(Ot.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Zs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(ct.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ot.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ct.error(f),ct.error(E),Zt(dM.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(mM,"hasPermissions");function Fp(e,t,r,s,n,i,o){if(!e||!t)throw ct.info("no attributes specified in checkAttributePerms."),Zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw ct.info(`no permissions found for ${r} in checkAttributePerms().`),Zt(new Error);if(Zs.isEmptyOrZeroLength(t))return ct.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[$c]===!1){i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Cr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==js)throw Zt(new Error,Ot.SYSTEM_TIMESTAMP_PERMS_ERR,Vc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Fp,"checkAttributePerms");function P8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Cr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ct.info(r)}return t}a(P8,"getRecordAttributes");function Gp(e,t,r){let s=new Map;if(Zs.isEmpty(e))return ct.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Gp,"getAttributePermissions");function v8(e,t,r,s,n,i,o){let c=new Set(i),u=Gp(e,s,n);Fp(c,u,t,n,s,o,r)}a(v8,"verifyBulkLoadAttributePerms")});var pd=m((u_e,AM)=>{"use strict";AM.exports={evaluateSQL:Q8,processAST:gM,convertSQLToAST:RM,checkASTPermissions:TM};var B8=Nr(),pM=require("util"),H8=pM.callbackify(B8.insert),q8=Or().search,F8=Mw().update,G8=pM.callbackify(F8),x8=vw().convertDelete,vn=require("alasql"),k8=md(),Sd=x(),V8=bl(),$8=V(),Wc=A(),{hdb_errors:Y8,handleHDBError:xp}=W(),{HTTP_STATUS_CODES:kp}=Y8;V8(vn);var K8=403,W8="There was a problem performing this insert. Please check the logs and try again.",Vp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Q8(e,t){let r=e.parsed_sql_object;if(!r){r=RM(e.sql);let s,n=r.ast.statements[0];if(n instanceof vn.yy.Insert?s=n.into.databaseid:n instanceof vn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof vn.yy.Update||n instanceof vn.yy.Delete?s=n.table.databaseid:Sd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof vn.yy.Select)&&$8.isEmptyOrZeroLength(s))return t("No schema specified",null)}gM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Q8,"evaluateSQL");function TM(e,t){let r;try{r=k8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(TM,"checkASTPermissions");function RM(e){let t=new Vp;if(!e)throw xp(new Error,"The 'sql' parameter is missing from the request body",kp.BAD_REQUEST);try{let r=e.trim(),s=vn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?xp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,kp.BAD_REQUEST):xp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",kp.BAD_REQUEST)}return t}a(RM,"convertSQLToAST");function gM(e,t,r){try{let s=z8;if(!e.bypass_auth&&!t.permissions_checked){let i=TM(e,t);if(i&&i.length>0)return r(K8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Wc.VALID_SQL_OPS_ENUM.SELECT:s=q8,n=t.ast.statements[0];break;case Wc.VALID_SQL_OPS_ENUM.INSERT:s=J8;break;case Wc.VALID_SQL_OPS_ENUM.UPDATE:s=G8;break;case Wc.VALID_SQL_OPS_ENUM.DELETE:s=x8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(gM,"processAST");function z8(e,t){Sd.info(e),t("unknown sql statement")}a(z8,"nullFunction");function J8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=X8(i,e.values)}catch(o){return r(o)}H8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Sd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(J8,"convertInsert");function X8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=vn.compile(`SELECT ${n.toString()} AS [${Wc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Sd.error(r),new Error(W8)}}a(X8,"createDataObjects")});var $p=m((__e,NM)=>{"use strict";var{S3:Z8,GetObjectCommand:j8}=require("@aws-sdk/client-s3");NM.exports={getFileStreamFromS3:e6,getS3AuthObj:OM};async function e6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await OM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new j8(r))).Body}a(e6,"getFileStreamFromS3");function OM(e,t,r){return new Z8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(OM,"getS3AuthObj")});var Td=m((E_e,PM)=>{"use strict";var IM=Or(),t6=pd(),r6=$p(),{AsyncParser:s6,Transform:n6}=require("json2csv"),zc=require("stream"),hr=V(),Yp=require("fs-extra"),i6=require("path"),Dr=x(),{promisify:wM}=require("util"),Qc=V(),{handleHDBError:Xe,hdb_errors:o6}=W(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:Ze}=o6,{streamAsJSON:a6}=Mm(),{Upload:c6}=require("@aws-sdk/lib-storage"),bM=["search_by_value","search_by_hash","sql"],yM=["json","csv"],CM="json",UM="csv",u6="Successfully exported JSON locally.",l6="Successfully exported CSV locally.",_6=1e3,d6=IM.searchByHash,E6=IM.searchByValue,f6=wM(t6.evaluateSQL),h6=wM(zc.finished);PM.exports={export_to_s3:T6,export_local:m6,toCsvStream:DM};async function m6(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=LM(e);if(!hr.isEmpty(t))throw Dr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(hr.isEmpty(e.path))throw Dr.error(jt.MISSING_VALUE("path")),Xe(new Error,jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(hr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(i6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=hr.buildFolderPath(e.path,r);await S6(e.path);let n=await MM(e);return await p6(s,e.format,n)}a(m6,"export_local");async function S6(e){if(Dr.trace("in confirmPath"),hr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Yp.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Dr.error(s),Xe(new Error,s,Ze.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Dr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(S6,"confirmPath");async function p6(e,t,r){if(Dr.trace("in saveToLocal"),Qc.isEmptyOrZeroLength(e))throw Xe(new Error,jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Qc.isEmptyOrZeroLength(t))throw Xe(new Error,jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Qc.isEmpty(r))throw Xe(new Error,jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===CM){let s=Yp.createWriteStream(e);return a6(r).pipe(s),await h6(s),{message:u6,path:e}}else if(t===UM){let s=Yp.createWriteStream(e),n=zc.Readable.from(r),i={},o={objectMode:!0};return await new s6(i,o).fromInput(n).toOutput(s).promise(!1),{message:l6,path:e}}throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(p6,"saveToLocal");async function T6(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=LM(e);if(!hr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await MM(e)}catch(u){throw Dr.error(u),u}let s,n=await r6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new zc.PassThrough;if(e.format===UM){i=e.s3.key+".csv";let u=DM(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===CM){i=e.s3.key+".json";let u=new zc.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%_6===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new c6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(T6,"export_to_s3");function DM(e){let t=zc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new n6(r,s);return t.pipe(n)}a(DM,"toCsvStream");function LM(e){if(Dr.trace("in exportCoreValidation"),hr.isEmpty(e.format))return"format missing";if(yM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yM.join(", ")}`;let t=e.search_operation.operation;if(hr.isEmpty(t))return"search_operation.operation missing";if(bM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${bM.join(", ")}`}a(LM,"exportCoreValidation");async function MM(e){Dr.trace("in getRecords");let t,r;if(Qc.isEmpty(e.search_operation)||Qc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,jt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=E6;break;case"search_by_hash":t=d6;break;case"sql":t=f6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(MM,"getRecords")});var GM={};xe(GM,{contentTypes:()=>qM,findBestSerializer:()=>Od,getDeserializer:()=>vo,registerContentHandlers:()=>Wp,serialize:()=>Qp,serializeMessage:()=>zs});function R6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Wp(e){e.register(A6,{serializers:[{regex:/^application\/json$/,serializer:Rd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new wi.EncoderStream(Jc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Ad.Readable.from((0,gs.encodeIter)(t,Jc)):(0,gs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Kp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,gs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,wi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Od(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Et.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Qp(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Od(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,gd.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,gd.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=Od(t);return r=t.serialize=s.serializer.serialize,r(e)}function O6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function vo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||BM(e,s);return o=>O6(o).then(i)}return Et.get(e)?.deserialize||BM(e,s)}function BM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>({contentType:e,data:r})}function N6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Rd,Kp,gs,wi,gd,Ad,HM,Jc,Et,qM,vM,FM,g6,A6,Uo=Se(()=>{Rd=C(Mm()),Kp=C(Td()),gs=require("msgpackr"),wi=require("cbor-x"),gd=require("zlib"),Ad=require("stream");Pr();HM=require("../index"),Jc={useRecords:!1,useToJSON:!0};et.contentType=function(e,t){Et.set(e,t)};Et=new Map,qM=Et;(0,HM._assignPackageExport)("contentTypes",qM);Et.set("application/json",{serializeStream:Rd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});vM=new wi.Encoder(Jc);Et.set("application/cbor",{serializeStream(e){return new wi.EncoderStream(Jc).end(e)},serialize:vM.encode,deserialize:vM.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Ad.Readable.from((0,gs.encodeIter)(e,Jc)):(0,gs.pack)(e)},serialize:gs.pack,deserialize:gs.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Kp.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return Ad.Readable.from(N6(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
16
16
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
17
17
  `}return e.id&&(t+="id: "+e.id+`
18
18
  `),e.retry&&(t+="retry: "+e.retry+`
19
19
  `),t+`
20
20
  `}else return"data: "+e+`
21
21
 
22
- `},q:.8});dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});MM={type:"application/json",serializeStream:Sd.streamAsJSON,serialize:JSON.stringify,deserialize:f6,q:.8};dt.set("*/*",MM);dt.set("",MM);a(f6,"tryJSONParse");a(Vp,"registerContentHandlers");h6=require("fastify-plugin"),m6=h6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Rd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Rd,"findBestSerializer");a($p,"serialize");a(Qs,"serializeMessage");a(S6,"streamToBuffer");a(Mo,"getDeserializer");a(UM,"deserializerUnknownType");a(p6,"transformIterable")});var Qp={};Ye(Qp,{start:()=>g6});async function R6(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Gu(e);let s=performance.now(),n;try{let i=new Wp;e.responseHeaders=i;let o=e.url.slice(1),c=Kp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ke(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Mo(e.headers["content-type"],!0)(e.body)}catch(T){throw new Qc.ClientError(T,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.Allow="GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACe, QUERY, COPY, MOVE";return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new Qc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Qc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){T6[0]=f;let T=String.fromCharCode(34,(Nt[0]&63)+62,(Nt[0]>>6)+(Nt[1]<<2&63)+62,(Nt[1]>>4)+(Nt[2]<<4&63)+62,(Nt[2]>>2)+62,(Nt[3]&63)+62,(Nt[3]>>6)+(Nt[4]<<2&63)+62,(Nt[4]>>4)+(Nt[5]<<4&63)+62,(Nt[5]>>2)+62,(Nt[6]&63)+62,(Nt[6]>>6)+(Nt[7]<<2&63)+62,34),S=e.headers["if-none-match"];S&&T==S?(_?.onDone&&_.onDone(),E=304,_=void 0):i.ETag=T}e.createdResource&&(E=201),e.newLocation&&(i.Location=e.newLocation);let h={status:E,headers:i,body:void 0};return i["Server-Timing"]=`db;dur=${d.toFixed(2)}`,hi(d,"TTFB",n,r),t_(E<400,"success",n,r),_!==void 0&&(h.body=$p(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let o=performance.now()-s;hi(o,"TTFB",n,r),t_(!1,"success",n,r),i.http_resp_code||console.error(i);let c={};return i.http_resp_code===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),c.Allow=i.allow.map(u=>u.toUpperCase()).join(", "))),{status:i.http_resp_code||500,headers:c,body:Qs(i.toString(),e)}}}function g6(e){if(vM)return;vM=!0,Kp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return R6(r,s)}),e.server.ws(async(r,s,n)=>{BM++,Yp||(setTimeout(()=>{console.log("connection count",BM,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Yp=!1},1e3),Yp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Mo(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await Kp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Qs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Qs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var Qc,Nt,T6,vM,Kp,BM,Yp,Wp,HM=pe(()=>{wo();lo();Qc=D(W());xu();ua();Wn();Nt=new Uint8Array(8),T6=new Float64Array(Nt.buffer,0,1);a(R6,"http");BM=0;a(g6,"start");Wp=class{static{a(this,"Headers")}set(t,r){this[t]=r}}});var zp=m((E_e,qM)=>{var{recordAction:gd,recordActionBinary:A6}=(lo(),te(r_)),O6=require("fastify-plugin"),N6=200;qM.exports=O6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,l,_,d;u.isOperation?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),gd(o,"TTFB",l,d,_),A6(n.raw.statusCode<400,"success",l,d,_);let E=N6;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{gd(performance.now()-c,"transfer",l,d,_),gd(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,gd(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var jp=m((f_e,VM)=>{var yd=require("clone"),Id=ve(),b6=x(),Nd=g(),y6=F(),Ad=require("fs"),Jp=require("joi"),{string:bd}=Jp.types(),{hdb_errors:I6,handleHDBError:zc}=W(),{HDB_ERROR_MSGS:w6,HTTP_STATUS_CODES:Od}=I6,{common_validators:Po}=ns(),FM=1e9,GM=" is required",C6=["insert","update","upsert"],Xp={database:{presence:!1,format:Po.schema_format,length:Po.schema_length},schema:{presence:!1,format:Po.schema_format,length:Po.schema_length},table:{presence:!0,format:Po.schema_format,length:Po.schema_length},action:{inclusion:{within:C6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},U6={schema:bd.required(),table:bd.required(),action:bd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:D6,AWS_SECRET:L6,AWS_BUCKET:M6,AWS_FILE_KEY:P6,REGION:v6}=Nd.S3_BUCKET_AUTH_KEYS,B6={s3:{presence:!0},[`s3.${D6}`]:{presence:!0,type:"String"},[`s3.${L6}`]:{presence:!0,type:"String"},[`s3.${M6}`]:{presence:!0,type:"String"},[`s3.${P6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${v6}`]:{presence:!0,type:"String"}},xM=yd(Xp);xM.data.presence={message:GM};var kM=yd(Xp);kM.file_path.presence={message:GM};var H6=Object.assign(yd(Xp),B6),Zp=yd(U6);Zp.csv_url=bd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Zp.passthrough_headers=Jp.object();function q6(e){let t=Id.validateObject(e,xM);return wd(e,t)}a(q6,"dataObject");function F6(e){let t=Id.validateBySchema(e,Jp.object(Zp));return wd(e,t)}a(F6,"urlObject");function G6(e){let t=Id.validateObject(e,kM);return wd(e,t)}a(G6,"fileObject");function x6(e){let t=Id.validateObject(e,H6);return wd(e,t)}a(x6,"s3FileObject");function wd(e,t){if(!t){let r=b6.checkGlobalSchemaTable(e.schema,e.table);if(r)return zc(new Error,r,Od.BAD_REQUEST);if(e.operation===Nd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Ad.accessSync(e.file_path,Ad.constants.R_OK|Ad.constants.F_OK)}catch(s){return s.code===Nd.NODE_ERROR_CODES.ENOENT?zc(s,`No such file or directory ${s.path}`,Od.BAD_REQUEST):s.code===Nd.NODE_ERROR_CODES.EACCES?zc(s,`Permission denied ${s.path}`,Od.BAD_REQUEST):zc(s)}try{let s=Ad.statSync(e.file_path).size;if(s>FM)return zc(new Error,w6.MAX_FILE_SIZE_ERR(s,FM),Od.BAD_REQUEST)}catch(s){y6.error(s),console.error(s)}}}return t}a(wd,"postValidateChecks");VM.exports={dataObject:q6,urlObject:F6,fileObject:G6,s3FileObject:x6}});var eT=m((m_e,$M)=>{"use strict";var Jc=F(),Cd=g();async function k6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Cd.OPERATIONS_ENUM.INSERT||t.operation===Cd.OPERATIONS_ENUM.UPDATE||t.operation===Cd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Cd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Jc.info(i.message),i):i.http_resp_msg?(Jc.error(`Error calling operation: ${e.name}`),Jc.error(i.http_resp_msg),i):(Jc.error(`Error calling operation: ${e.name}`),Jc.error(i),i)}}a(k6,"callOperationFunctionAsAwait");$M.exports={callOperationFunctionAsAwait:k6}});var KM=m((p_e,YM)=>{"use strict";var tT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},rT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};YM.exports={BulkLoadFileObject:tT,BulkLoadDataObject:rT}});var QM=m((R_e,WM)=>{"use strict";var sT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};WM.exports=sT});var uT=m((y_e,_P)=>{"use strict";var Ud=Ar(),Ld=jp(),V6=require("needle"),Wr=g(),A_e=Be(),vo=x(),{handleHDBError:Fe,hdb_errors:sP}=W(),{HTTP_STATUS_CODES:bt,HDB_ERROR_MSGS:at,CHECK_LOGS_WRAPPER:wi}=sP,Bo=F(),nT=require("papaparse");vo.promisifyPapaParse();var Qr=require("fs-extra"),$6=require("path"),{chain:zM}=require("stream-chain"),JM=require("stream-json/streamers/StreamArray"),XM=require("stream-json/utils/Batch"),ZM=require("stream-chain/utils/comp"),{finished:jM}=require("stream"),Y6=Q(),nP=eT(),K6=Gp(),{BulkLoadFileObject:oT,BulkLoadDataObject:W6}=KM(),aT=Up(),{verifyBulkLoadAttributePerms:iP}=Ed(),O_e=QM(),N_e=st(),b_e=Vs(),{databases:Q6}=(de(),te(Ne)),{coerceType:z6}=(Vl(),te(um)),eP="No records parsed from csv file.",Ii=`${Y6.get("HDB_ROOT")}/tmp`,{schema_regex:J6}=ns(),tP=1024*1024*2,rP=5e3,X6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_P.exports={csvDataLoad:Z6,csvURLLoad:j6,csvFileLoad:e9,importFromS3:t9};async function Z6(e,t){let r=Ld.dataObject(e);if(r)throw Fe(r,r.message,bt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=cP(e.schema,e.table),i=nT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:iT.bind(null,n),dynamicTyping:!1}),o=new aT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&iP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Fe(new Error,c,bt.BAD_REQUEST,void 0,void 0,!0);let u=new W6(e.action,e.schema,e.table,i.data);return s=await nP.callOperationFunctionAsAwait(uP,u,null),s.message===eP?eP:lP(s.records,s.number_written)}catch(n){throw Ci(n)}}a(Z6,"csvDataLoad");async function j6(e){let t=Ld.urlObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ii}/${r}`;try{await r9(e,r)}catch(n){throw Bo.error(at.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,wi(at.DOWNLOAD_FILE_ERR(r)))}try{let n=new oT(this.job_operation_function.name,e.action,e.schema,e.table,s,Wr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await cT(n);return await Dd(s),i}catch(n){throw await Dd(s),Ci(n)}}a(j6,"csvURLLoad");async function e9(e){let t=Ld.fileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=new oT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Wr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await cT(r)}catch(s){throw Ci(s)}}a(e9,"csvFileLoad");async function t9(e){let t=Ld.s3FileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=$6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ii}/${n}`;let i=new oT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await s9(n,e);let o=await cT(i);return await Dd(r),o}catch(s){throw await Dd(r),Ci(s)}}a(t9,"importFromS3");async function r9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await V6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Fe(s,n,s.statusCode,Wr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}i9(r,e.csv_url),await n9(t,r.raw)}a(r9,"downloadCSVFile");async function s9(e,t){try{let r=`${Ii}/${e}`;await Qr.mkdirp(Ii),await Qr.writeFile(`${Ii}/${e}`,"",{flag:"a+"});let s=await Qr.createWriteStream(r),n=await K6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Bo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Bo.error(at.S3_DOWNLOAD_ERR+" - "+r),Fe(r,wi(at.S3_DOWNLOAD_ERR))}}a(s9,"downloadFileFromS3");async function n9(e,t){try{await Qr.mkdirp(Ii),await Qr.writeFile(`${Ii}/${e}`,t)}catch(r){throw Bo.error(at.WRITE_TEMP_FILE_ERR),Fe(r,wi(at.DEFAULT_BULK_LOAD_ERR))}}a(n9,"writeFileToTempFolder");async function Dd(e){if(e)try{await Qr.access(e),await Qr.unlink(e)}catch{Bo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Dd,"deleteTempFile");function i9(e,t){if(e.statusCode!==sP.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,bt.BAD_REQUEST);if(!X6[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,bt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,bt.BAD_REQUEST)}a(i9,"validateURLResponse");async function cT(e){try{let t;switch(e.file_type){case Wr.VALID_S3_FILE_TYPES.CSV:t=await o9(e);break;case Wr.VALID_S3_FILE_TYPES.JSON:t=await a9(e);break;default:throw Fe(new Error,at.DEFAULT_BULK_LOAD_ERR,bt.BAD_REQUEST,Wr.LOG_LEVELS.ERROR,at.INVALID_FILE_EXT_ERR(e))}return lP(t.records,t.number_written)}catch(t){throw Ci(t)}}a(cT,"fileLoad");async function oP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ud.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(oP,"validateChunk");async function aP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;vo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!vo.isEmpty(c)&&!vo.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await nP.callOperationFunctionAsAwait(uP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,wi(at.INSERT_CSV_ERR),bt.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,at.INSERT_CSV_ERR+" - "+c);r(u)}}a(aP,"insertChunk");async function o9(e){let t={records:0,number_written:0},r=cP(e.schema,e.table);try{let s=new aT,n=Qr.createReadStream(e.file_path,{highWaterMark:tP});n.setEncoding("utf8"),await nT.parsePromise(n,oP.bind(null,e,s),iT.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);return n=Qr.createReadStream(e.file_path,{highWaterMark:tP}),n.setEncoding("utf8"),await nT.parsePromise(n,aP.bind(null,e,t),iT.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,wi(at.PAPA_PARSE_ERR),bt.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,at.PAPA_PARSE_ERR+s)}}a(o9,"callPapaParse");function cP(e,t){let r=Q6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>z6(i,n));return s}a(cP,"createTransformMap");function iT(e,t,r){let s=e.get(r);return s?s(t):vo.autoCast(t)}a(iT,"typeFunction");async function a9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new aT,n=zM([Qr.createReadStream(e.file_path,{encoding:"utf-8"}),JM.withParser(),c=>c.value,new XM({batchSize:rP}),ZM(async c=>{await oP(e,s,r,c)})]);await new Promise((c,u)=>{jM(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);let o=zM([Qr.createReadStream(e.file_path,{encoding:"utf-8"}),JM.withParser(),c=>c.value,new XM({batchSize:rP}),ZM(async c=>{await aP(e,t,r,c)})]);return await new Promise((c,u)=>{jM(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,wi(at.INSERT_JSON_ERR),bt.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,at.INSERT_JSON_ERR+s)}}a(a9,"insertJson");async function uP(e){let t={};try{e.data&&e.data.length>0&&c9(e.data[0])?t=await u9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Bo.info(t.message))}catch(r){throw Ci(r)}return t}a(uP,"callBulkFileLoad");function c9(e){let t=Object.keys(e);for(let r of t)if(!J6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(c9,"validateColumnNames");async function u9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ud.insert;break;case"update":i=Ud.update;break;case"upsert":i=Ud.upsert;break;default:throw Fe(new Error,at.INVALID_ACTION_PARAM_ERR(s),bt.BAD_REQUEST,Wr.LOG_LEVELS.ERROR,at.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=vo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ci(o)}}a(u9,"bulkFileLoad");function lP(e,t){return`successfully loaded ${t} of ${e} records`}a(lP,"buildResponseMsg");function Ci(e){return Fe(e,wi(at.DEFAULT_BULK_LOAD_ERR),bt.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,at.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ci,"buildTopLevelErrMsg")});var EP=m((w_e,dP)=>{"use strict";var lT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dP.exports=lT});var mP=m((U_e,hP)=>{"use strict";var l9=g(),fP=require("moment"),_9=require("uuid").v4,_T=class{static{a(this,"JobObject")}constructor(){this.id=_9(),this.type=void 0,this.start_datetime=fP().valueOf(),this.created_datetime=fP().valueOf(),this.end_datetime=void 0,this.status=l9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hP.exports=_T});var dT=m((L_e,AP)=>{"use strict";var d9=require("uuid").v4,TP=Ar(),RP=gr(),E9=os(),f9=Ji(),h9=EP(),Ge=g(),m9=mP(),S9=iS(),Ur=F(),p9=Oa(),Ho=x(),{promisify:T9}=require("util"),Ui=require("moment"),R9=hd(),Md=jp(),SP=Gh(),{deleteTransactionLogsBeforeValidator:g9}=Np(),{handleHDBError:A9,hdb_errors:O9}=W(),{HTTP_STATUS_CODES:N9}=O9,pP=RP.searchByValue,b9=RP.searchByHash,y9=TP.insert,I9=T9(R9.evaluateSQL),w9=TP.update;AP.exports={addJob:D9,updateJob:M9,handleGetJob:C9,handleGetJobsByStartDate:U9,getJobById:gP};async function C9(e){try{let t=await gP(e.id);return Ho.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ur.error("There was an error getting job",t),new Error(r)}}a(C9,"handleGetJob");async function U9(e){try{let t=await L9(e);if(Ur.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ui(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ui(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ur.error(r),new Error(r)}}a(U9,"handleGetJobsByStartDate");async function D9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ho.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Ur.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Ur.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Md.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=Md.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Md.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Md.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=SP(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=SP(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=g9(e);break;default:break}if(s)throw A9(s,s.message,N9.BAD_REQUEST,void 0,void 0,!0);let n=new m9;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new E9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await pP(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=d9();try{o=await pP(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ur.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new p9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await y9(u)}catch(_){return Ur.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Ur.trace(_)}return t}a(D9,"addJob");async function L9(e){let t=Ui(e.from_date,Ui.ISO_8601),r=Ui(e.to_date,Ui.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new h9(s,e.hdb_user);try{return await I9(n)}catch(i){throw Ur.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(L9,"getJobsInDateRange");async function gP(e){if(Ho.isEmptyOrZeroLength(e))return Ho.errorizeMessage("Invalid job ID specified.");let t=new f9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await b9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ur.error(s),Ho.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(gP,"getJobById");async function M9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ho.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ui().valueOf());let t=new S9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await w9(t),r}a(M9,"updateJob")});var wP=m((P_e,IP)=>{"use strict";var OP=x(),er=g(),P9=require("moment"),Pd=uT(),vd=F(),NP=dT(),bP=md(),yP=ci(),v9=tt(),B9=id(),ET=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function H9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(OP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(OP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case er.JOB_TYPE_ENUM.csv_file_load:await js(e,Pd.csvFileLoad);break;case er.JOB_TYPE_ENUM.csv_url_load:await js(e,Pd.csvURLLoad);break;case er.JOB_TYPE_ENUM.csv_data_load:await js(e,Pd.csvDataLoad);break;case er.JOB_TYPE_ENUM.import_from_s3:await js(e,Pd.importFromS3);break;case er.JOB_TYPE_ENUM.empty_trash:break;case er.JOB_TYPE_ENUM.export_local:await js(e,bP.export_local);break;case er.JOB_TYPE_ENUM.export_to_s3:await js(e,bP.export_to_s3);break;case er.JOB_TYPE_ENUM.delete_files_before:case er.JOB_TYPE_ENUM.delete_records_before:await js(e,yP.deleteFilesBefore);break;case er.JOB_TYPE_ENUM.delete_audit_logs_before:await js(e,yP.deleteAuditLogsBefore);break;case er.JOB_TYPE_ENUM.delete_transaction_logs_before:await js(e,B9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(H9,"parseMessage");async function js(e,t){try{e.job.status=er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=P9().valueOf(),await NP.updateJob(e.job),await q9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):vd.error(`There was an error running ${t.name} job with id ${e.job.id}`),vd.error(s),e.job.message=s,e.job.status=er.JOB_STATUS_ENUM.ERROR;try{await NP.updateJob(e.job)}catch(n){throw vd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(js,"runJob");async function q9(e){vd.trace("launching job thread:",e),v9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(q9,"launchJobThread");IP.exports={parseMessage:H9,RunnerMessage:ET}});var UP=m((B_e,CP)=>{"use strict";var fT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};CP.exports=fT});var WP=m((q_e,TT)=>{"use strict";var Fd=gr(),ST=hd(),Bd=uT(),en=__(),Hd=si(),Zc=ci(),F9=$m(),Xc=Or(),qd=jm(),yt=Op(),ct=F(),G9=rS(),x9=w_(),k9=HS(),V9=L_(),$9=qS(),Y9=FS(),K9=kS(),W9=$S(),hT=WS(),DP=md(),Q9=Ed(),pT=dT(),I=g(),{hdb_errors:eu,handleHDBError:jc}=W(),{HTTP_STATUS_CODES:LP}=eu,mT=ZS(),MP=hp(),kP=require("util"),qo=Ar(),z9=pn(),J9=Oo(),PP=wP(),vP=fc(),BP=(td(),te(Pc)),HP=Tr(),qP=id(),FP=ud(),{setServerUtilities:X9}=(Vl(),te(um)),{CONTEXT:Z9}=(Zr(),te(XE)),{_assignPackageExport:j9}=require("../index"),{transformReq:e7}=x(),t7=eT(),GP=Fd.searchByHash,r7=Fd.searchByValue,s7=kP.promisify(Fd.search),n7=kP.promisify(ST.evaluateSQL),i7={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=UP();async function VP(e,t){try{if(e.body.operation!=="read_log"&&(ct.log_level===I.LOG_LEVELS.INFO||ct.log_level===I.LOG_LEVELS.DEBUG||ct.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ct.info(o)}}catch(s){ct.error(s)}let r=await t7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return i7[e.body.operation]&&z9.setSchemaDataToGlobal(s=>{s&&ct.error(s)}),r}a(VP,"processLocalTransaction");var xP=a7();TT.exports={chooseOperation:$P,getOperationFunction:YP,operation:KP,processLocalTransaction:VP};X9(TT.exports);function $P(e){let t;try{t=YP(e)}catch(n){throw ct.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=ST.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=ST.checkASTPermissions(e,i);if(o)throw ct.error(`${LP.FORBIDDEN} from operation ${e.operation}`),ct.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),jc(new Error,o,eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Q9.verifyPerms(i,n);if(o)throw ct.error(`${LP.FORBIDDEN} from operation ${e.operation}`),ct.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),jc(new Error,o,eu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw jc(n,"There was an error when trying to choose an operation path")}return r}a($P,"chooseOperation");function YP(e){if(ct.trace(`getOperationFunction with operation: ${e.operation}`),xP.has(e.operation))return xP.get(e.operation);throw jc(new Error,eu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),eu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(YP,"getOperationFunction");j9("operation",KP);function KP(e,t){e.hdb_user=this[Z9]?.user,e.bypass_auth=!t;let r=$P(e);return VP({body:e},r)}a(KP,"operation");async function o7(e){ct.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await qo.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await qo.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await qo.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await Zc.deleteRecord(i);break;default:ct.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ct.info("Invalid operation in transaction"),ct.error(o)}}a(o7,"catchup");async function Rs(e){e7(e);let t,r;try{r=await pT.addJob(e),t=r.createdJob,ct.info("addJob result",r);let s=new PP.RunnerMessage(t,e);return await PP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ct.error(n),jc(s,n)}}a(Rs,"executeJob");function a7(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(qo.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(qo.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(qo.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Fd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(GP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(GP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(r7)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(s7)),e.set(I.OPERATIONS_ENUM.SQL,new B(n7)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Rs,Bd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Rs,Bd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Rs,Bd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Rs,Bd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(en.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(en.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(en.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(en.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Hd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Hd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Hd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Hd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Zc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Xc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Xc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Xc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Xc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(qd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(qd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(qd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(qd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Xc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(G9)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(x9)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(k9)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(V9)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B($9)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(Y9)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(HP.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(K9.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(W9)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(hT.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(hT.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(hT.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Rs,DP.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Rs,Zc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Rs,Zc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Rs,DP.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(pT.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(pT.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(mT.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(mT.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(mT.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(MP.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(MP.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(o7)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(J9.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Rs,Zc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(F9)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(vP.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(vP.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(BP.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(BP.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(HP.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(yt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(yt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(yt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(yt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(yt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(yt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(yt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(yt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(yt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(yt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(qP.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Rs,qP.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(FP.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(FP.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(en.getBackup)),e}a(a7,"initializeOperationFunctionMap")});var xd=m((G_e,JP)=>{"use strict";var RT=g(),c7=x(),tu=F(),{handleHDBError:gT,hdb_errors:Gd}=W(),{isMainThread:u7}=require("worker_threads"),{Readable:l7}=require("stream"),QP=require("os"),_7=require("util"),d7=ES(),E7=_7.promisify(d7.authorize),zP=WP(),{Gzip:f7}=require("zlib");function h7(e){let t=`Found an uncaught exception with message: ${e.message}. ${QP.EOL}Stack: ${e.stack} ${QP.EOL}Terminating ${u7?"HDB":"thread"}.`;console.error(t),tu.fatal(t),process.exit(1)}a(h7,"handleServerUncaughtException");function m7(e,t,r){if(tu[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg!="object"?r.code(e.http_resp_code).send({error:e.http_resp_msg||e.message}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Gd.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(m7,"serverErrorHandler");function S7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=gT(new Error,"Invalid JSON.",Gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(c7.isEmpty(e.body.operation)){let s=gT(new Error,"Request body must include an 'operation' property.",Gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(S7,"reqBodyValidationHandler");function p7(e,t,r){let s;e.body.operation!==RT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==RT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==RT.OPERATIONS_ENUM.LOGOUT?E7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{tu.warn(n),tu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(gT(n,i,Gd.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(p7,"authHandler");async function T7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=zP.chooseOperation(e.body);let n=await zP.processLocalTransaction(e,s);if(n instanceof l7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(new f7))}return n}catch(n){throw tu.error(n),n}}a(T7,"handlePostRequest");JP.exports={authHandler:p7,handlePostRequest:T7,handleServerUncaughtException:h7,serverErrorHandler:m7,reqBodyValidationHandler:S7}});var ev=m((k_e,jP)=>{"use strict";var R7=require("fastify-plugin"),{handlePostRequest:XP,authHandler:g7,reqBodyValidationHandler:A7}=xd();async function O7(e){e.decorate("hdbCore",{preValidation:[A7,g7],request:t=>ZP(XP(t)),requestWithoutAuthentication:t=>ZP(XP(t,!0))})}a(O7,"hdbCore");async function ZP(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(ZP,"convertAsyncIterators");jP.exports=R7(O7)});var rv=m(($_e,tv)=>{"use strict";var AT=require("fs"),Fo=Q();Fo.initSync();var{CONFIG_PARAMS:ru}=g(),N7=1024*1024*1024;function b7(e){let t=Fo.get(ru.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Fo.get(ru.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:N7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Fo.get(ru.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Fo.get(ru.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Fo.get(ru.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:AT.readFileSync(`${n}`),cert:AT.readFileSync(i)+(o?`
22
+ `},q:.8});Et.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});FM={type:"application/json",serializeStream:Rd.streamAsJSON,serialize:JSON.stringify,deserialize:R6,q:.8};Et.set("*/*",FM);Et.set("",FM);a(R6,"tryJSONParse");a(Wp,"registerContentHandlers");g6=require("fastify-plugin"),A6=g6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Od(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Od,"findBestSerializer");a(Qp,"serialize");a(zs,"serializeMessage");a(O6,"streamToBuffer");a(vo,"getDeserializer");a(BM,"deserializerUnknownType");a(N6,"transformIterable")});var Xp={};xe(Xp,{start:()=>I6});async function y6(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Vu(e);let s=performance.now(),n,i=new yi;try{e.responseHeaders=i;let o=e.url.slice(1),c=Jp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ke(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=vo(e.headers["content-type"],!0)(e.body)}catch(R){throw new Xc.ClientError(R,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new Xc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){b6[0]=f;let R=String.fromCharCode(34,(Nt[0]&63)+62,(Nt[0]>>6)+(Nt[1]<<2&63)+62,(Nt[1]>>4)+(Nt[2]<<4&63)+62,(Nt[2]>>2)+62,(Nt[3]&63)+62,(Nt[3]>>6)+(Nt[4]<<2&63)+62,(Nt[4]>>4)+(Nt[5]<<4&63)+62,(Nt[5]>>2)+62,(Nt[6]&63)+62,(Nt[6]>>6)+(Nt[7]<<2&63)+62,34),O=e.headers["if-none-match"];O&&R==O?(_?.onDone&&_.onDone(),E=304,_=void 0):i.set("ETag",R)}e.createdResource&&(E=201),e.newLocation&&i.set("Location",e.newLocation);let h={status:E,headers:i,body:void 0},T=`db;dur=${d.toFixed(2)}`,p=_?.wasLoadedFromSource?.();return p!==void 0&&(p?T+=", miss":f&&i.set("Age",Math.round((Date.now()-f)/1e3))),i.append("Server-Timing",T,!0),Es(d,"TTFB",n,r),ao(E<400,"success",n,r),_!==void 0&&(h.body=Qp(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return Es(c,"TTFB",n,r),ao(!1,"success",n,r),o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(u=>u.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:zs(o.toString(),e)}}}function I6(e){if(xM)return;xM=!0,Jp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return y6(r,s)}),e.server.ws(async(r,s,n)=>{kM++,zp||(setTimeout(()=>{console.log("connection count",kM,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),zp=!1},1e3),zp=!0),t(s);let i=new Zr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=vo(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await Jp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(zs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(zs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var Xc,Nt,b6,xM,Jp,kM,zp,VM=Se(()=>{Uo();di();Xc=C(W());$u();da();Qn();j_();Nt=new Uint8Array(8),b6=new Float64Array(Nt.buffer,0,1);a(y6,"http");kM=0;a(I6,"start")});var Zp=m((b_e,$M)=>{var{recordAction:Nd,recordActionBinary:w6}=(di(),ee(Wl)),C6=require("fastify-plugin"),U6=200;$M.exports=C6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,l,_,d;u.isOperation?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),Nd(o,"TTFB",l,d,_),w6(n.raw.statusCode<400,"success",l,d,_);let E=U6;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Nd(performance.now()-c,"transfer",l,d,_),Nd(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Nd(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var rT=m((y_e,zM)=>{var Cd=require("clone"),Ud=ve(),D6=V(),Id=A(),L6=x(),bd=require("fs"),jp=require("joi"),{string:wd}=jp.types(),{hdb_errors:M6,handleHDBError:Zc}=W(),{HDB_ERROR_MSGS:P6,HTTP_STATUS_CODES:yd}=M6,{common_validators:Bo}=is(),YM=1e9,KM=" is required",v6=["insert","update","upsert"],eT={database:{presence:!1,format:Bo.schema_format,length:Bo.schema_length},schema:{presence:!1,format:Bo.schema_format,length:Bo.schema_length},table:{presence:!0,format:Bo.schema_format,length:Bo.schema_length},action:{inclusion:{within:v6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},B6={schema:wd.required(),table:wd.required(),action:wd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:H6,AWS_SECRET:q6,AWS_BUCKET:F6,AWS_FILE_KEY:G6,REGION:x6}=Id.S3_BUCKET_AUTH_KEYS,k6={s3:{presence:!0},[`s3.${H6}`]:{presence:!0,type:"String"},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${x6}`]:{presence:!0,type:"String"}},WM=Cd(eT);WM.data.presence={message:KM};var QM=Cd(eT);QM.file_path.presence={message:KM};var V6=Object.assign(Cd(eT),k6),tT=Cd(B6);tT.csv_url=wd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tT.passthrough_headers=jp.object();function $6(e){let t=Ud.validateObject(e,WM);return Dd(e,t)}a($6,"dataObject");function Y6(e){let t=Ud.validateBySchema(e,jp.object(tT));return Dd(e,t)}a(Y6,"urlObject");function K6(e){let t=Ud.validateObject(e,QM);return Dd(e,t)}a(K6,"fileObject");function W6(e){let t=Ud.validateObject(e,V6);return Dd(e,t)}a(W6,"s3FileObject");function Dd(e,t){if(!t){let r=D6.checkGlobalSchemaTable(e.schema,e.table);if(r)return Zc(new Error,r,yd.BAD_REQUEST);if(e.operation===Id.OPERATIONS_ENUM.CSV_FILE_LOAD){try{bd.accessSync(e.file_path,bd.constants.R_OK|bd.constants.F_OK)}catch(s){return s.code===Id.NODE_ERROR_CODES.ENOENT?Zc(s,`No such file or directory ${s.path}`,yd.BAD_REQUEST):s.code===Id.NODE_ERROR_CODES.EACCES?Zc(s,`Permission denied ${s.path}`,yd.BAD_REQUEST):Zc(s)}try{let s=bd.statSync(e.file_path).size;if(s>YM)return Zc(new Error,P6.MAX_FILE_SIZE_ERR(s,YM),yd.BAD_REQUEST)}catch(s){L6.error(s),console.error(s)}}}return t}a(Dd,"postValidateChecks");zM.exports={dataObject:$6,urlObject:Y6,fileObject:K6,s3FileObject:W6}});var sT=m((w_e,JM)=>{"use strict";var jc=x(),Ld=A();async function Q6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Ld.OPERATIONS_ENUM.INSERT||t.operation===Ld.OPERATIONS_ENUM.UPDATE||t.operation===Ld.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Ld.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(jc.info(i.message),i):i.http_resp_msg?(jc.error(`Error calling operation: ${e.name}`),jc.error(i.http_resp_msg),i):(jc.error(`Error calling operation: ${e.name}`),jc.error(i),i)}}a(Q6,"callOperationFunctionAsAwait");JM.exports={callOperationFunctionAsAwait:Q6}});var ZM=m((U_e,XM)=>{"use strict";var nT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},iT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};XM.exports={BulkLoadFileObject:nT,BulkLoadDataObject:iT}});var eP=m((L_e,jM)=>{"use strict";var oT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};jM.exports=oT});var dT=m((q_e,SP)=>{"use strict";var Md=Nr(),vd=rT(),z6=require("needle"),Qr=A(),P_e=Be(),Ho=V(),{handleHDBError:Fe,hdb_errors:uP}=W(),{HTTP_STATUS_CODES:bt,HDB_ERROR_MSGS:ut,CHECK_LOGS_WRAPPER:Ui}=uP,qo=x(),aT=require("papaparse");Ho.promisifyPapaParse();var zr=require("fs-extra"),J6=require("path"),{chain:tP}=require("stream-chain"),rP=require("stream-json/streamers/StreamArray"),sP=require("stream-json/utils/Batch"),nP=require("stream-chain/utils/comp"),{finished:iP}=require("stream"),X6=Q(),lP=sT(),Z6=$p(),{BulkLoadFileObject:uT,BulkLoadDataObject:j6}=ZM(),lT=Pp(),{verifyBulkLoadAttributePerms:_P}=md(),v_e=eP(),B_e=it(),H_e=$s(),{databases:e9}=(de(),ee(Ne)),{coerceType:t9}=(Xl(),ee(pm)),oP="No records parsed from csv file.",Ci=`${X6.get("HDB_ROOT")}/tmp`,{schema_regex:r9}=is(),aP=1024*1024*2,cP=5e3,s9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};SP.exports={csvDataLoad:n9,csvURLLoad:i9,csvFileLoad:o9,importFromS3:a9};async function n9(e,t){let r=vd.dataObject(e);if(r)throw Fe(r,r.message,bt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=fP(e.schema,e.table),i=aT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cT.bind(null,n),dynamicTyping:!1}),o=new lT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&_P(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Fe(new Error,c,bt.BAD_REQUEST,void 0,void 0,!0);let u=new j6(e.action,e.schema,e.table,i.data);return s=await lP.callOperationFunctionAsAwait(hP,u,null),s.message===oP?oP:mP(s.records,s.number_written)}catch(n){throw Di(n)}}a(n9,"csvDataLoad");async function i9(e){let t=vd.urlObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ci}/${r}`;try{await c9(e,r)}catch(n){throw qo.error(ut.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Ui(ut.DOWNLOAD_FILE_ERR(r)))}try{let n=new uT(this.job_operation_function.name,e.action,e.schema,e.table,s,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await _T(n);return await Pd(s),i}catch(n){throw await Pd(s),Di(n)}}a(i9,"csvURLLoad");async function o9(e){let t=vd.fileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=new uT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await _T(r)}catch(s){throw Di(s)}}a(o9,"csvFileLoad");async function a9(e){let t=vd.s3FileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=J6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ci}/${n}`;let i=new uT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await u9(n,e);let o=await _T(i);return await Pd(r),o}catch(s){throw await Pd(r),Di(s)}}a(a9,"importFromS3");async function c9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await z6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Fe(s,n,s.statusCode,Qr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}_9(r,e.csv_url),await l9(t,r.raw)}a(c9,"downloadCSVFile");async function u9(e,t){try{let r=`${Ci}/${e}`;await zr.mkdirp(Ci),await zr.writeFile(`${Ci}/${e}`,"",{flag:"a+"});let s=await zr.createWriteStream(r),n=await Z6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){qo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw qo.error(ut.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Ui(ut.S3_DOWNLOAD_ERR))}}a(u9,"downloadFileFromS3");async function l9(e,t){try{await zr.mkdirp(Ci),await zr.writeFile(`${Ci}/${e}`,t)}catch(r){throw qo.error(ut.WRITE_TEMP_FILE_ERR),Fe(r,Ui(ut.DEFAULT_BULK_LOAD_ERR))}}a(l9,"writeFileToTempFolder");async function Pd(e){if(e)try{await zr.access(e),await zr.unlink(e)}catch{qo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Pd,"deleteTempFile");function _9(e,t){if(e.statusCode!==uP.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,bt.BAD_REQUEST);if(!s9[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,bt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,bt.BAD_REQUEST)}a(_9,"validateURLResponse");async function _T(e){try{let t;switch(e.file_type){case Qr.VALID_S3_FILE_TYPES.CSV:t=await d9(e);break;case Qr.VALID_S3_FILE_TYPES.JSON:t=await E9(e);break;default:throw Fe(new Error,ut.DEFAULT_BULK_LOAD_ERR,bt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ut.INVALID_FILE_EXT_ERR(e))}return mP(t.records,t.number_written)}catch(t){throw Di(t)}}a(_T,"fileLoad");async function dP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Md.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&_P(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(dP,"validateChunk");async function EP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ho.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ho.isEmpty(c)&&!Ho.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await lP.callOperationFunctionAsAwait(hP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Ui(ut.INSERT_CSV_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.INSERT_CSV_ERR+" - "+c);r(u)}}a(EP,"insertChunk");async function d9(e){let t={records:0,number_written:0},r=fP(e.schema,e.table);try{let s=new lT,n=zr.createReadStream(e.file_path,{highWaterMark:aP});n.setEncoding("utf8"),await aT.parsePromise(n,dP.bind(null,e,s),cT.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);return n=zr.createReadStream(e.file_path,{highWaterMark:aP}),n.setEncoding("utf8"),await aT.parsePromise(n,EP.bind(null,e,t),cT.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Ui(ut.PAPA_PARSE_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.PAPA_PARSE_ERR+s)}}a(d9,"callPapaParse");function fP(e,t){let r=e9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>t9(i,n));return s}a(fP,"createTransformMap");function cT(e,t,r){let s=e.get(r);return s?s(t):Ho.autoCast(t)}a(cT,"typeFunction");async function E9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new lT,n=tP([zr.createReadStream(e.file_path,{encoding:"utf-8"}),rP.withParser(),c=>c.value,new sP({batchSize:cP}),nP(async c=>{await dP(e,s,r,c)})]);await new Promise((c,u)=>{iP(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);let o=tP([zr.createReadStream(e.file_path,{encoding:"utf-8"}),rP.withParser(),c=>c.value,new sP({batchSize:cP}),nP(async c=>{await EP(e,t,r,c)})]);return await new Promise((c,u)=>{iP(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,Ui(ut.INSERT_JSON_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.INSERT_JSON_ERR+s)}}a(E9,"insertJson");async function hP(e){let t={};try{e.data&&e.data.length>0&&f9(e.data[0])?t=await h9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",qo.info(t.message))}catch(r){throw Di(r)}return t}a(hP,"callBulkFileLoad");function f9(e){let t=Object.keys(e);for(let r of t)if(!r9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(f9,"validateColumnNames");async function h9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Md.insert;break;case"update":i=Md.update;break;case"upsert":i=Md.upsert;break;default:throw Fe(new Error,ut.INVALID_ACTION_PARAM_ERR(s),bt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ut.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=Ho.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Di(o)}}a(h9,"bulkFileLoad");function mP(e,t){return`successfully loaded ${t} of ${e} records`}a(mP,"buildResponseMsg");function Di(e){return Fe(e,Ui(ut.DEFAULT_BULK_LOAD_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Di,"buildTopLevelErrMsg")});var TP=m((G_e,pP)=>{"use strict";var ET=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};pP.exports=ET});var AP=m((k_e,gP)=>{"use strict";var m9=A(),RP=require("moment"),S9=require("uuid").v4,fT=class{static{a(this,"JobObject")}constructor(){this.id=S9(),this.type=void 0,this.start_datetime=RP().valueOf(),this.created_datetime=RP().valueOf(),this.end_datetime=void 0,this.status=m9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};gP.exports=fT});var hT=m(($_e,wP)=>{"use strict";var p9=require("uuid").v4,bP=Nr(),yP=Or(),T9=as(),R9=Zi(),g9=TP(),Ge=A(),A9=AP(),O9=uS(),Lr=x(),N9=ya(),Fo=V(),{promisify:b9}=require("util"),Li=require("moment"),y9=pd(),Bd=rT(),OP=$h(),{deleteTransactionLogsBeforeValidator:I9}=wp(),{handleHDBError:w9,hdb_errors:C9}=W(),{HTTP_STATUS_CODES:U9}=C9,NP=yP.searchByValue,D9=yP.searchByHash,L9=bP.insert,M9=b9(y9.evaluateSQL),P9=bP.update;wP.exports={addJob:H9,updateJob:F9,handleGetJob:v9,handleGetJobsByStartDate:B9,getJobById:IP};async function v9(e){try{let t=await IP(e.id);return Fo.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Lr.error("There was an error getting job",t),new Error(r)}}a(v9,"handleGetJob");async function B9(e){try{let t=await q9(e);if(Lr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Li(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Li(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Lr.error(r),new Error(r)}}a(B9,"handleGetJobsByStartDate");async function H9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Fo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Bd.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=Bd.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Bd.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Bd.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=OP(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=OP(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=I9(e);break;default:break}if(s)throw w9(s,s.message,U9.BAD_REQUEST,void 0,void 0,!0);let n=new A9;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new T9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await NP(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=p9();try{o=await NP(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new N9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await L9(u)}catch(_){return Lr.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Lr.trace(_)}return t}a(H9,"addJob");async function q9(e){let t=Li(e.from_date,Li.ISO_8601),r=Li(e.to_date,Li.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new g9(s,e.hdb_user);try{return await M9(n)}catch(i){throw Lr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(q9,"getJobsInDateRange");async function IP(e){if(Fo.isEmptyOrZeroLength(e))return Fo.errorizeMessage("Invalid job ID specified.");let t=new R9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await D9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),Fo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(IP,"getJobById");async function F9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Fo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Li().valueOf());let t=new O9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await P9(t),r}a(F9,"updateJob")});var PP=m((K_e,MP)=>{"use strict";var CP=V(),er=A(),G9=require("moment"),Hd=dT(),qd=x(),UP=hT(),DP=Td(),LP=ui(),x9=st(),k9=cd(),mT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function V9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(CP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(CP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case er.JOB_TYPE_ENUM.csv_file_load:await en(e,Hd.csvFileLoad);break;case er.JOB_TYPE_ENUM.csv_url_load:await en(e,Hd.csvURLLoad);break;case er.JOB_TYPE_ENUM.csv_data_load:await en(e,Hd.csvDataLoad);break;case er.JOB_TYPE_ENUM.import_from_s3:await en(e,Hd.importFromS3);break;case er.JOB_TYPE_ENUM.empty_trash:break;case er.JOB_TYPE_ENUM.export_local:await en(e,DP.export_local);break;case er.JOB_TYPE_ENUM.export_to_s3:await en(e,DP.export_to_s3);break;case er.JOB_TYPE_ENUM.delete_files_before:case er.JOB_TYPE_ENUM.delete_records_before:await en(e,LP.deleteFilesBefore);break;case er.JOB_TYPE_ENUM.delete_audit_logs_before:await en(e,LP.deleteAuditLogsBefore);break;case er.JOB_TYPE_ENUM.delete_transaction_logs_before:await en(e,k9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(V9,"parseMessage");async function en(e,t){try{e.job.status=er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=G9().valueOf(),await UP.updateJob(e.job),await $9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):qd.error(`There was an error running ${t.name} job with id ${e.job.id}`),qd.error(s),e.job.message=s,e.job.status=er.JOB_STATUS_ENUM.ERROR;try{await UP.updateJob(e.job)}catch(n){throw qd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(en,"runJob");async function $9(e){qd.trace("launching job thread:",e),x9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a($9,"launchJobThread");MP.exports={parseMessage:V9,RunnerMessage:mT}});var BP=m((Q_e,vP)=>{"use strict";var ST=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};vP.exports=ST});var jP=m((J_e,AT)=>{"use strict";var kd=Or(),RT=pd(),Fd=dT(),tn=E_(),Gd=ni(),tu=ui(),Y9=Qm(),eu=br(),xd=sS(),yt=Ip(),lt=x(),K9=oS(),W9=U_(),Q9=xS(),z9=P_(),J9=kS(),X9=VS(),Z9=KS(),j9=QS(),pT=XS(),HP=Td(),e7=md(),gT=hT(),I=A(),{hdb_errors:su,handleHDBError:ru}=W(),{HTTP_STATUS_CODES:qP}=su,TT=rp(),FP=Tp(),QP=require("util"),Go=Nr(),t7=Tn(),r7=bo(),GP=PP(),xP=Sc(),kP=(nd(),ee(Hc)),VP=Tr(),$P=cd(),YP=dd(),{setServerUtilities:s7}=(Xl(),ee(pm)),{CONTEXT:n7}=(jr(),ee(tf)),{_assignPackageExport:i7}=require("../index"),{transformReq:o7}=V(),a7=sT(),KP=kd.searchByHash,c7=kd.searchByValue,u7=QP.promisify(kd.search),l7=QP.promisify(RT.evaluateSQL),_7={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=BP();async function zP(e,t){try{if(e.body.operation!=="read_log"&&(lt.log_level===I.LOG_LEVELS.INFO||lt.log_level===I.LOG_LEVELS.DEBUG||lt.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;lt.info(o)}}catch(s){lt.error(s)}let r=await a7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return _7[e.body.operation]&&t7.setSchemaDataToGlobal(s=>{s&&lt.error(s)}),r}a(zP,"processLocalTransaction");var WP=E7();AT.exports={chooseOperation:JP,getOperationFunction:XP,operation:ZP,processLocalTransaction:zP};s7(AT.exports);function JP(e){let t;try{t=XP(e)}catch(n){throw lt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=RT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=RT.checkASTPermissions(e,i);if(o)throw lt.error(`${qP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ru(new Error,o,su.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=e7.verifyPerms(i,n);if(o)throw lt.error(`${qP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ru(new Error,o,su.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw ru(n,"There was an error when trying to choose an operation path")}return r}a(JP,"chooseOperation");function XP(e){if(lt.trace(`getOperationFunction with operation: ${e.operation}`),WP.has(e.operation))return WP.get(e.operation);throw ru(new Error,su.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),su.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(XP,"getOperationFunction");i7("operation",ZP);function ZP(e,t){e.hdb_user=this[n7]?.user,e.bypass_auth=!t;let r=JP(e);return zP({body:e},r)}a(ZP,"operation");async function d7(e){lt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Go.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Go.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Go.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await tu.deleteRecord(i);break;default:lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){lt.info("Invalid operation in transaction"),lt.error(o)}}a(d7,"catchup");async function As(e){o7(e);let t,r;try{r=await gT.addJob(e),t=r.createdJob,lt.info("addJob result",r);let s=new GP.RunnerMessage(t,e);return await GP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw lt.error(n),ru(s,n)}}a(As,"executeJob");function E7(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Go.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Go.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Go.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(kd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(KP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(KP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(c7)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(u7)),e.set(I.OPERATIONS_ENUM.SQL,new B(l7)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(As,Fd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(As,Fd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(As,Fd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(As,Fd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(tn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(tn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(tn.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(tn.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(tn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(tn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(tn.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(tn.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Gd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Gd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Gd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Gd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(tu.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(eu.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(eu.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(eu.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(eu.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(xd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(xd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(xd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(xd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(eu.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(K9)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(W9)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(Q9)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(z9)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(J9)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(X9)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(VP.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(Z9.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(j9)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(pT.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(pT.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(pT.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(As,HP.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(As,tu.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(As,tu.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(As,HP.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(gT.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(gT.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(TT.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(TT.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(TT.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(FP.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(FP.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(d7)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(r7.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(As,tu.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(Y9)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(xP.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(xP.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(kP.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(kP.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(VP.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(yt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(yt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(yt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(yt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(yt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(yt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(yt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(yt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(yt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(yt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B($P.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(As,$P.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(YP.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(YP.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(tn.getBackup)),e}a(E7,"initializeOperationFunctionMap")});var $d=m((Z_e,rv)=>{"use strict";var OT=A(),f7=V(),nu=x(),{handleHDBError:NT,hdb_errors:Vd}=W(),{isMainThread:h7}=require("worker_threads"),{Readable:m7}=require("stream"),ev=require("os"),S7=require("util"),p7=SS(),T7=S7.promisify(p7.authorize),tv=jP(),{Gzip:R7}=require("zlib");function g7(e){let t=`Found an uncaught exception with message: ${e.message}. ${ev.EOL}Stack: ${e.stack} ${ev.EOL}Terminating ${h7?"HDB":"thread"}.`;console.error(t),nu.fatal(t),process.exit(1)}a(g7,"handleServerUncaughtException");function A7(e,t,r){if(nu[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Vd.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(A7,"serverErrorHandler");function O7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=NT(new Error,"Invalid JSON.",Vd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(f7.isEmpty(e.body.operation)){let s=NT(new Error,"Request body must include an 'operation' property.",Vd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(O7,"reqBodyValidationHandler");function N7(e,t,r){let s;e.body.operation!==OT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==OT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==OT.OPERATIONS_ENUM.LOGOUT?T7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{nu.warn(n),nu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(NT(n,i,Vd.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(N7,"authHandler");async function b7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=tv.chooseOperation(e.body);let n=await tv.processLocalTransaction(e,s);if(n instanceof m7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(new R7))}return n}catch(n){throw nu.error(n),n}}a(b7,"handlePostRequest");rv.exports={authHandler:N7,handlePostRequest:b7,handleServerUncaughtException:g7,serverErrorHandler:A7,reqBodyValidationHandler:O7}});var ov=m((ede,iv)=>{"use strict";var y7=require("fastify-plugin"),{handlePostRequest:sv,authHandler:I7,reqBodyValidationHandler:w7}=$d();async function C7(e){e.decorate("hdbCore",{preValidation:[w7,I7],request:t=>nv(sv(t,response)),requestWithoutAuthentication:(t,r)=>nv(sv(t,r,!0))})}a(C7,"hdbCore");async function nv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(nv,"convertAsyncIterators");iv.exports=y7(C7)});var cv=m((rde,av)=>{"use strict";var bT=require("fs"),xo=Q();xo.initSync();var{CONFIG_PARAMS:iu}=A(),U7=1024*1024*1024;function D7(e){let t=xo.get(iu.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=xo.get(iu.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:U7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=xo.get(iu.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=xo.get(iu.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=xo.get(iu.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:bT.readFileSync(`${n}`),cert:bT.readFileSync(i)+(o?`
23
23
 
24
- `+AT.readFileSync(o):"")},s.http2=!0}return s}a(b7,"getServerOptions");tv.exports=b7});var iv=m((K_e,nv)=>{"use strict";var OT=Q();OT.initSync();var{CONFIG_PARAMS:sv}=g();function y7(){let e=OT.get(sv.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=OT.get(sv.CUSTOMFUNCTIONS_NETWORK_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(y7,"getCORSOptions");nv.exports=y7});var cv=m((Q_e,av)=>{"use strict";var ov=Q();ov.initSync();var I7=g();function w7(){return ov.get(I7.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(w7,"getHeaderTimeoutConfig");av.exports=w7});var yT={};Ye(yT,{customFunctionsServer:()=>D7,handleFile:()=>U7,ready:()=>P7});async function U7(e,t,r,s){if(!tn){let c=NT.get(bT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);tn=gv(c),Et.http((await tn).server)}let n=await tn,i=(0,lv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),uv.has(i)||(uv.add(i),n.register(M7(i,o)))}async function D7(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await L7();let e=NT.get(bT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=tn=await gv(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function L7(){try{Ue.info("Custom Functions starting configuration."),await mv.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function M7(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,_v.existsSync)(e)&&r.register(hv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function gv(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Sv.default)(e),r=(0,dv.default)(t);r.server.headersTimeout=(0,Tv.default)(),r.setErrorHandler(Rv.serverErrorHandler);let s=(0,pv.default)();return s&&r.register(Ev.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(fv.default),await r.register(C7),await r.after(),Vp(r),Ue.info("Custom Functions completed buildServer."),r}function P7(){if(tn)return tn.then?tn.then(e=>e.ready()):tn.ready()}var lv,_v,dv,Ev,fv,hv,NT,bT,Ue,C7,mv,Sv,pv,Tv,Rv,tn,uv,Av=pe(()=>{lv=require("path"),_v=require("fs"),dv=D(require("fastify")),Ev=D(require("@fastify/cors")),fv=D(zp()),hv=D(require("@fastify/autoload")),NT=D(Q()),bT=D(g()),Ue=D(F()),C7=D(ev()),mv=D(Or()),Sv=D(rv()),pv=D(iv()),Tv=D(cv()),Rv=D(xd());wo();bs();uv=new Set;a(U7,"handleFile");a(D7,"customFunctionsServer");a(L7,"setUp");a(M7,"buildRouteFolder");a(gv,"buildServer");a(P7,"ready")});var IT={};Ye(IT,{start:()=>v7});function v7(e){let t=e.root;return{handleFile(r,s,n){Nv||(Nv=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=Ov.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,bv.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),Ov.set(s,n)}}}var bv,Ov,Nv,yv=pe(()=>{bv=D(require("send")),Ov=new Map;a(v7,"start")});var Dv=m((sde,Uv)=>{"use strict";var B7=require("cluster"),zr=Q();zr.initSync();var wv=g(),ede=require("util"),rn=F(),wT=require("fs"),H7=require("fastify"),tde=rc(),q7=require("@fastify/cors"),F7=require("@fastify/compress"),G7=require("@fastify/static"),x7=zp(),k7=require("path"),{PACKAGE_ROOT:V7}=g(),$7=pn(),Y7=x(),K7=Or(),W7=Va(),{server:Q7}=(bs(),te(fu)),{authHandler:z7,handlePostRequest:J7,serverErrorHandler:X7,reqBodyValidationHandler:Z7}=xd(),rde=require("net"),{registerContentHandlers:j7}=(wo(),te(PM)),eee=1024*1024*1024,Cv="TRUE",{HDB_SETTINGS_NAMES:Li,CONFIG_PARAMS:tee}=wv,ree=Li.CORS_ENABLED_KEY,see="CORS_ACCESSLIST",nee=Li.SERVER_TIMEOUT_KEY,iee=Li.SERVER_KEEP_ALIVE_TIMEOUT_KEY,oee=Li.SERVER_HEADERS_TIMEOUT_KEY,aee=Li.PRIVATE_KEY_KEY,cee=Li.CERT_KEY,uee=Li.HTTP_SECURE_ENABLED_KEY,Di;Uv.exports={hdbServer:Iv,start:Iv};async function Iv(e){try{rn.info("In Fastify server"+process.cwd()),rn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),rn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=B7.isMaster,await lee();let t=zr.get(uee),r=t&&(t===!0||t.toUpperCase()===Cv);Di=_ee(r),await Di.ready(),e||(e={}),e.isOperationsServer=!0,Di.server.cantCleanupProperly=!0;try{Q7.http(Di.server,e),Di.server.closeIdleConnections||await Di.listen({port:0,host:"::"})}catch(s){throw Di.close(),rn.error(s),rn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),rn.fatal(t),process.exit(1)}}a(Iv,"operationsServer");async function lee(){rn.trace("Configuring HarperDB process."),$7.setSchemaDataToGlobal(),await K7.setUsersToGlobal(),await W7.getLicense()}a(lee,"setUp");function _ee(e){rn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=dee(e),r=H7(t);r.server.headersTimeout=fee(),r.setErrorHandler(X7);let s=Eee();s&&r.register(q7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(x7),r.register(F7),r.register(G7,{root:k7.join(V7,"docs")}),j7(r);let n=zr.get(wv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Y7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[Z7,z7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),J7(i,o)}),r.get("/health",()=>"HarperDB is running."),rn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(_ee,"buildServer");function dee(e){let t=zr.get(nee),r=zr.get(iee),s={bodyLimit:eee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=zr.get(aee),i=zr.get(cee),o=zr.get(tee.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:wT.readFileSync(n),cert:wT.readFileSync(i)+(o?`
24
+ `+bT.readFileSync(o):"")},s.http2=!0}return s}a(D7,"getServerOptions");av.exports=D7});var _v=m((nde,lv)=>{"use strict";var yT=Q();yT.initSync();var{CONFIG_PARAMS:uv}=A();function L7(){let e=yT.get(uv.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=yT.get(uv.CUSTOMFUNCTIONS_NETWORK_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(L7,"getCORSOptions");lv.exports=L7});var fv=m((ode,Ev)=>{"use strict";var dv=Q();dv.initSync();var M7=A();function P7(){return dv.get(M7.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(P7,"getHeaderTimeoutConfig");Ev.exports=P7});var CT={};xe(CT,{customFunctionsServer:()=>H7,handleFile:()=>B7,ready:()=>G7});async function B7(e,t,r,s){if(!rn){let c=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);rn=Iv(c),et.http((await rn).server)}let n=await rn,i=(0,mv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),hv.has(i)||(hv.add(i),n.register(F7(i,o)))}async function H7(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await q7();let e=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=rn=await Iv(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function q7(){try{Ue.info("Custom Functions starting configuration."),await Av.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function F7(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Sv.existsSync)(e)&&r.register(gv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Iv(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Ov.default)(e),r=(0,pv.default)(t);r.server.headersTimeout=(0,bv.default)(),r.setErrorHandler(yv.serverErrorHandler);let s=(0,Nv.default)();return s&&r.register(Tv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Rv.default),await r.register(v7),await r.after(),Wp(r),Ue.info("Custom Functions completed buildServer."),r}function G7(){if(rn)return rn.then?rn.then(e=>e.ready()):rn.ready()}var mv,Sv,pv,Tv,Rv,gv,IT,wT,Ue,v7,Av,Ov,Nv,bv,yv,rn,hv,wv=Se(()=>{mv=require("path"),Sv=require("fs"),pv=C(require("fastify")),Tv=C(require("@fastify/cors")),Rv=C(Zp()),gv=C(require("@fastify/autoload")),IT=C(Q()),wT=C(A()),Ue=C(x()),v7=C(ov()),Av=C(br()),Ov=C(cv()),Nv=C(_v()),bv=C(fv()),yv=C($d());Uo();Pr();hv=new Set;a(B7,"handleFile");a(H7,"customFunctionsServer");a(q7,"setUp");a(F7,"buildRouteFolder");a(Iv,"buildServer");a(G7,"ready")});var UT={};xe(UT,{start:()=>x7});function x7(e){let t=e.root;return{handleFile(r,s,n){Uv||(Uv=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=Cv.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,Dv.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),Cv.set(s,n)}}}var Dv,Cv,Uv,Lv=Se(()=>{Dv=C(require("send")),Cv=new Map;a(x7,"start")});var Hv=m((hde,Bv)=>{"use strict";var k7=require("cluster"),Jr=Q();Jr.initSync();var Pv=A(),dde=require("util"),sn=x(),DT=require("fs"),V7=require("fastify"),Ede=oc(),$7=require("@fastify/cors"),Y7=require("@fastify/compress"),K7=require("@fastify/static"),W7=Zp(),Q7=require("path"),{PACKAGE_ROOT:z7}=A(),J7=Tn(),X7=V(),Z7=br(),j7=Ka(),{server:eee}=(Pr(),ee(Zo)),{authHandler:tee,handlePostRequest:ree,serverErrorHandler:see,reqBodyValidationHandler:nee}=$d(),fde=require("net"),{registerContentHandlers:iee}=(Uo(),ee(GM)),oee=1024*1024*1024,vv="TRUE",{HDB_SETTINGS_NAMES:Pi,CONFIG_PARAMS:aee}=Pv,cee=Pi.CORS_ENABLED_KEY,uee="CORS_ACCESSLIST",lee=Pi.SERVER_TIMEOUT_KEY,_ee=Pi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,dee=Pi.SERVER_HEADERS_TIMEOUT_KEY,Eee=Pi.PRIVATE_KEY_KEY,fee=Pi.CERT_KEY,hee=Pi.HTTP_SECURE_ENABLED_KEY,Mi;Bv.exports={hdbServer:Mv,start:Mv};async function Mv(e){try{sn.info("In Fastify server"+process.cwd()),sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=k7.isMaster,await mee();let t=Jr.get(hee),r=t&&(t===!0||t.toUpperCase()===vv);Mi=See(r),await Mi.ready(),e||(e={}),e.isOperationsServer=!0,Mi.server.cantCleanupProperly=!0;try{eee.http(Mi.server,e),Mi.server.closeIdleConnections||await Mi.listen({port:0,host:"::"})}catch(s){throw Mi.close(),sn.error(s),sn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),sn.fatal(t),process.exit(1)}}a(Mv,"operationsServer");async function mee(){sn.trace("Configuring HarperDB process."),J7.setSchemaDataToGlobal(),await Z7.setUsersToGlobal(),await j7.getLicense()}a(mee,"setUp");function See(e){sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=pee(e),r=V7(t);r.server.headersTimeout=Ree(),r.setErrorHandler(see);let s=Tee();s&&r.register($7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(W7),r.register(Y7),r.register(K7,{root:Q7.join(z7,"docs")}),iee(r);let n=Jr.get(Pv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!X7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[nee,tee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ree(i,o)}),r.get("/health",()=>"HarperDB is running."),sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(See,"buildServer");function pee(e){let t=Jr.get(lee),r=Jr.get(_ee),s={bodyLimit:oee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Jr.get(Eee),i=Jr.get(fee),o=Jr.get(aee.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:DT.readFileSync(n),cert:DT.readFileSync(i)+(o?`
25
25
 
26
- `+wT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(dee,"getServerOptions");function Eee(){let e=zr.get(ree),t=zr.get(see),r;return e&&(e===!0||e.toUpperCase()===Cv)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Eee,"getCORSOpts");function fee(){return zr.get(oee)}a(fee,"getHeaderTimeoutConfig")});var Vv=m((ade,kv)=>{"use strict";var{decode:hee}=require("msgpackr"),{isMainThread:mee,parentPort:See,threadId:ide}=require("worker_threads"),CT=st(),Go=Be(),pee=g(),su=F(),Lv=Q(),vv=g();tt();var Tee=Vs(),{recordAction:Ree,recordActionBinary:gee}=(lo(),te(r_)),{publishToStream:Aee}=CT,ode={durable:Go.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Go.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Oee,Nee,bee,Bv,Hv;kv.exports={initialize:qv,workQueueListener:xv,setSubscription:yee,setIgnoreOrigin:wee,getDatabaseSubscriptions:Iee};async function qv(){Hv=!0,su.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await CT.getNATSReferences();Oee=e,Nee=e.info.server_name,bee=t,Bv=r}a(qv,"initialize");var Vd=new Map;function yee(e,t,r){let s=Vd.get(e);s||Vd.set(e,s=new Map),s.set(t,r),Hv||qv().then(xv)}a(yee,"setSubscription");function Iee(){return Vd}a(Iee,"getDatabaseSubscriptions");var Fv;function wee(e){Fv=e}a(wee,"setIgnoreOrigin");var Gv=100,Mv=new Array(Gv),kd=0;async function xv(){let t=await(await Bv.consumers.get(Go.WORK_QUEUE_CONSUMER_NAMES.stream_name,Go.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Mv[kd],Mv[kd]=Cee(r).catch(s=>{su.error(s)}),++kd>=Gv&&(kd=0)}a(xv,"workQueueListener");mee||See.on("message",async e=>{let{type:t}=e;t===vv.ITC_EVENT_TYPES.SHUTDOWN&&CT.closeConnection()});async function Cee(e){let t=hee(e.data);Ree(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Go.MSG_HEADERS.ORIGIN)===Lv.get(pee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!Fv;if(gee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;su.trace("processing message:",i,o,u,(l?"records: "+l.map(y=>y.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),su.trace(`messageProcessor nats msg id: ${e.headers.get(Go.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},S=Vd.get(o)?.get(u);if(!S)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,S.send(t);else if(l.length===1&&!c)S.send({type:Pv(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let y=l.map((O,H)=>({type:Pv(i),value:O,id:_?.[H],table:u}));for(;c;)y.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;S.send({type:"transaction",writes:y,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}Lv.get(vv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Aee(e.subject.split(".").slice(0,-1).join("."),Tee.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){su.error(i)}e.ack()}a(Cee,"messageProcessor");function Pv(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Pv,"convertOperation")});var vT={};Ye(vT,{disableNATS:()=>Dee,setNATSReplicator:()=>UT,start:()=>Uee});function Uee(){Yd.default.get(Kd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mee()}function Dee(e=!0){Qv=e}function Mee(){if(Qv)return;let e=Gr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];UT(n,r,i)}}fm((r,s)=>{UT(r.tableName,r.databaseName,r),s&&Jv(r)}),!$v&&($v=!0)}function UT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ie],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ie],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ie]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ie],record:o},c)}invalidate(o){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ie]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ie],this.getContext())}static defineSchema(o){Jv(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Xr;return(0,Yv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Lee}static isNATSReplicator=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new $d(i.transaction,i)),o.user=i.user):o=zv),o}a(n,"getNATSTransaction")}function Jv(e){let t=Yd.default.get(Kd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,LT.publishToStream)(`${MT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PT.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var LT,MT,PT,Yv,Kv,Yd,Kd,Wv,Qv,Lee,zv,$v,$d,DT,Xv=pe(()=>{de();Zr();LT=D(st()),MT=D(Be()),PT=D(Vs());ua();Yv=D(Vv()),Kv=D(qt()),Yd=D(Q()),Kd=D(g()),Wv=D(F());a(Uee,"start");a(Dee,"disableNATS");Lee=2;a(Mee,"assignReplicationSource");a(UT,"setNATSReplicator");a(Jv,"publishSchema");$d=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Yd.default.get(Kd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(Wv.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,LT.publishToStream)(`${MT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,PT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},DT=class extends $d{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Kv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};zv=new DT});async function jv({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await BT.getResource(e,{});n=new qT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await BT.get(e);i&&i.delete()}n=new Qd(e,t)}return n}function HT(){return Wd++,Wd>65500&&(Wd=1),Wd}var Zv,nu,BT,Wd,Qd,qT,eB=pe(()=>{de();fa();Zv=D(qt()),nu=D(F());Wn();BT=rt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(jv,"getSession");Wd=1;a(HT,"getNextMessageId");Qd=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=En.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,S=h.Resource,y=await Ke(f,async()=>{let O=await S.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let H of O)try{let Y;if(H.type&&H.type!=="put"&&H.type!=="delete"&&H.type!=="message"||s&&!s(H))continue;r?(H.topic=n,Y=this.needsAcknowledge(H)):Y=HT();let A=H.id;Array.isArray(A)&&(A=Fi(A)),A==null&&(A=""),this.listener(T+"/"+A,H.value,Y,t)}catch(Y){(0,nu.warn)(Y)}})(),O});return y.topic=n,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){return HT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=En.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ke(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},qT=class extends Qd{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=HT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,nu.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,Zv.getNextMonotonicTime)()),(0,nu.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),BT.put(this.sessionRecord)),t.qos}}});var xT={};Ye(xT,{start:()=>vee});async function vee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=sB(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Pee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,nB.getSuperUser)());let{onMessage:u,onClose:l}=sB(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function sB(e,t,r,s,n){rB||(rB=!0,Lm(_=>{_.push({metric:"mqtt-connections",connections:FT})})),FT++;let i,o={protocolVersion:4},c=(0,zd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){FT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await Et.auth(_.username,_.password.toString()),(0,GT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&tB.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,GT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&tB.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=jv({user:s,..._}),i=await i}catch(O){return(0,sn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,H,Y,A)=>{try{let w=O.indexOf("/",1),G=w>0?O.slice(0,w):O;d({cmd:"publish",topic:O,payload:E(H),messageId:Y||Math.floor(Math.random()*1e8),qos:A.qos},G)}catch(w){(0,sn.error)(w),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let H;try{H=(await i.addSubscription(O,O.qos>=1)).qos||0}catch(Y){(0,sn.error)(Y),H=128}f.push(H)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=Mo(r?.headers["content-type"])),S=_.payload?.length>0?T(_.payload):void 0,y;try{y=await i.publish(_,S)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:y===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,zd.generate)(f,o);t(T),hi(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var zd,nB,GT,nn,sn,tB,Pee,rB,FT,iB=pe(()=>{zd=require("mqtt-packet");eB();nB=D(Or());wo();lo();bs();GT=D(Q()),nn=D(g()),sn=D(F()),tB=(0,sn.loggerWithTag)("auth-event"),Pee=!0;a(vee,"start");FT=0;a(sB,"onSocket")});var hB={};Ye(hB,{loadComponent:()=>Jd,loadComponentDirectories:()=>fB});function fB(e,t){t&&(VT=t),e&&($T=e);let r=[];if((0,gs.existsSync)(kT)){let n=(0,gs.readdirSync)(kT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dr.join)(kT,o);r.push(Jd(c,VT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Jd(s,VT,s)),Promise.all(r).then(()=>{EB=!0})}async function Jd(e,t,r,s,n){if(!aB.has(e)){aB.set(e,!0),n&&($T=n);try{let i,o=(0,Dr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,cB.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Fee;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,gs.existsSync)(f=(0,Dr.join)(E,"node_modules",u));)if(E=(0,Dr.dirname)(E),E.length<(0,dB.getHdbBasePath)().length){f=null;break}if(f)_=await Jd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=qee[u];if(_)try{c.push(_);let E=a(S=>(S.origin=r,rt(S)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(iu.isMainThread&&(_=await _.startOnMainThread?.({server:Et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let S of[T,h])try{if(+S&&!oB.includes(S)){oB.push(S);let y=YT.get(KT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);WT(S,y)}}catch(y){console.error("Error listening on socket",S,y,u)}if(t.isWorker&&(_=await _.start?.({server:Et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),$T.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,_B.handleHDBError)("Can not reference parent directories");let S=(0,Dr.join)(e,l.files);for(let y of await(0,uB.default)(S,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:H}=y,Y=(0,Dr.relative)(e,O),A=(0,Dr.basename)(e),w=l.path||"/";w=w.startsWith("/")?w:w.startsWith("./")?"/"+A+w.slice(2):w==="."?"/"+A:"/"+A+"/"+w,w+=(w.endsWith("/")?"":"/")+Y;try{if(H.isFile()){let G=await Hee(O);iu.isMainThread&&await _.setupFile?.(G,w,O,t),t.isWorker&&await _.handleFile?.(G,w,O,t)}else iu.isMainThread&&await _.setupDirectory?.(w,O,t),t.isWorker&&await _.handleDirectory?.(w,O,t)}catch(G){console.error(`Could not load ${H.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,G),t.set(l.path||"/",new ou(G))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new ou(E),null,!0)}}if(iu.isMainThread&&!EB&&(0,lB.watchDir)(e,async()=>fB()),i.extensionModule)return await zl((0,Dr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new ou(i))}}}var gs,Dr,iu,cB,YT,KT,uB,lB,_B,dB,Bee,Hee,kT,$T,EB,VT,qee,Fee,oB,aB,ou,mB=pe(()=>{gs=require("fs"),Dr=require("path"),iu=require("worker_threads"),cB=require("yaml"),YT=D(Q()),KT=D(g());tw();iw();ow();HM();Av();yv();uB=D(require("fast-glob")),lB=D(tt());pm();bs();_B=D(W());Zr();de();QT();dB=D(Q()),Bee=D(Dv());td();Xv();iB();({readFile:Hee}=gs.promises),kT=YT.get(KT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),$T=new Map;a(fB,"loadComponentDirectories");qee={REST:Qp,graphqlSchema:Sm,jsResource:Rm,fastifyRoutes:yT,login:Am,static:IT,operationsApi:Bee,customFunctions:{},clustering:vT,authentication:Pc,mqtt:xT},Fee={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},oB=[],aB=new Map;a(Jd,"loadComponent");ou=class extends mt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var AB=m((vde,gB)=>{"use strict";var jd=require("fs-extra"),zT=require("path"),Xd=F(),SB=x(),Zd=g(),RB=Q(),Gee=Tr();gB.exports=xee;async function xee(){let e=kee(),t=RB.get(Zd.CONFIG_PARAMS.ROOTPATH),r=zT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Zd.PACKAGE_ROOT}},n=zT.join(t,"node_modules");await jd.ensureDir(n);let i,o=!0,c=!1;try{i=await jd.readJson(r)}catch(u){if(SB.isEmptyOrZeroLength(e))return;if(u.code!==Zd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!SB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await pB(l);s.dependencies[u]=_+l}if(!o){Xd.notify("Installing components"),await TB(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await pB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Xd.notify("Removing component",u),c=!0);c&&(Xd.notify("Updating components."),await TB(r,s))}a(xee,"installComponents");function kee(){let e=Gee.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(kee,"getComponentsConfig");async function pB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":zT.extname(e)||await jd.pathExists(e)?"file:":"github:"}a(pB,"getPkgPrefix");async function TB(e,t){Xd.trace("npm installing components package.json",t),await jd.writeFile(e,JSON.stringify(t,null," ")),await ud().installAllRootModules(RB.get(Zd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(TB,"installPackages")});var eE=m((Hde,NB)=>{var{isMainThread:OB}=require("worker_threads"),{getTables:Vee}=(de(),te(Ne)),{loadComponentDirectories:$ee,loadComponent:Yee}=(mB(),te(hB)),{resetResources:Kee}=(fa(),te(CA)),Wee=AB(),Qee=Tr(),{dirname:zee}=require("path"),{getConnection:Jee}=st(),Xee=Q(),Zee=g(),JT=new Map;async function jee(e=!1){!OB&&Xee.get(Zee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Jee(),OB&&await Wee();let t=Kee();Vee(),t.isWorker=e,await Yee(zee(Qee.getConfigFilePath()),t,"hdb",!0,JT),await $ee(JT,t);let r=[];for(let[s]of JT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(jee,"loadRootComponents");NB.exports.loadRootComponents=jee});var tt=m((Gde,Hn)=>{"use strict";var{Worker:ete,MessageChannel:tte,parentPort:As,isMainThread:tR,threadId:rte,workerData:au}=require("worker_threads"),{PACKAGE_ROOT:ste}=g(),{join:IB,isAbsolute:nte,extname:rE}=require("path"),{server:ite}=(bs(),te(fu)),{watch:ote,readdir:ate}=require("fs/promises"),{totalmem:bB}=require("os"),rR=g(),Mi=F(),Fde=g(),{randomBytes:cte}=require("crypto"),ute=1024*1024,Bn=[],vn=[],lte=50,wB=1e4,_te="restart",CB="request_thread_info",UB="resource_report",DB="thread_info",LB="added-port",dte="ack",XT;Hn.exports={startWorker:ZT,restartWorkers:sR,shutdownWorkers:mte,workers:Bn,setMonitorListener:Nte,onMessageFromWorkers:Ste,onMessageByType:pte,broadcast:Tte,broadcastWithAcknowledgement:gte,setChildListenerByType:hte,getWorkerIndex:PB,getTicketKeys:vB,setMainIsWorker:Ete,restartNumber:au?.restartNumber||1};var MB;function PB(){return au?au.workerIndex:MB?0:void 0}a(PB,"getWorkerIndex");function Ete(e){MB=e}a(Ete,"setMainIsWorker");var tE;function vB(){return tE||(tE=tR?cte(48):au.ticketKeys,tE)}a(vB,"getTicketKeys");Object.defineProperty(ite,"workerIndex",{get(){return PB()}});var BB={[CB](e,t){Ate(t)},[UB](e,t){Ote(t,e)}};function ZT(e,t={}){let r=process.constrainedMemory?.()||bB();r=Math.min(r,bB());let s=Math.max(Math.floor(r/ute/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of vn){let{port1:u,port2:l}=new tte;c.postMessage({type:LB,port:u},[u]),i.push(l)}rE(e)||(e+=".js");let o=new ete(nte(e)?e:IB(ste,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Hn.exports.restartNumber,ticketKeys:vB()},transferList:i},t));return nE(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{ZT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Mi.error("Worker error:",c)}),o.on("exit",c=>{Bn.splice(Bn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<lte?(t.unexpectedRestarts=o.unexpectedRestarts+1,ZT(e,t)):Mi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{BB[c.type]?.(c,o)}),Bn.push(o),yte(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(ZT,"startWorker");var fte=[rR.THREAD_TYPES.HTTP];async function sR(e=null,t=2,r=!0){if(tR){if(r){let{loadRootComponents:n}=eE();await n()}Hn.exports.restartNumber++,t<1&&(t=t*Bn.length);let s=[];for(let n of Bn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Hn.exports.restartNumber,type:rR.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=fte.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),wB*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else As.postMessage({type:_te,workerType:e})}a(sR,"restartWorkers");function hte(e,t){BB[e]=t}a(hte,"setChildListenerByType");function mte(e){return sR(e,1/0,!1)}a(mte,"shutdownWorkers");var HB=[];function Ste(e){HB.push(e)}a(Ste,"onMessageFromWorkers");var jT=new Map;function pte(e,t){let r=jT.get(e);r||jT.set(e,r=[]),r.push(t)}a(pte,"onMessageByType");function Tte(e){for(let t of vn)try{t.postMessage(e)}catch(r){Mi.error("Unable to send message to worker",r)}}a(Tte,"broadcast");var sE=new Map,Rte=1;function gte(e){return new Promise(t=>{let r=0;for(let s of vn)try{let n=Rte++,i=a(()=>{sE.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,sE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of sE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Mi.error("Unable to send message to worker",n)}r===0&&t()})}a(gte,"broadcastWithAcknowledgement");function Ate(e){e.postMessage({type:DB,workers:qB()})}a(Ate,"sendThreadInfo");function qB(){let e=Date.now();return Bn.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}))}a(qB,"getChildWorkerInfo");function Ote(e,t){e.resources=t,e.resources.updated=Date.now()}a(Ote,"recordResourceReport");var eR;function Nte(e){eR=e}a(Nte,"setMonitorListener");var bte=1e3,yB=!1;function yte(){yB||(yB=!0,setInterval(()=>{for(let e of Bn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}eR&&eR()},bte).unref())}a(yte,"startMonitoring");var Ite=1e3;if(As){nE(As);for(let e of au.addPorts)nE(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:UB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Ite).unref(),XT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:CB});function r(s){s.type===DB&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else XT=qB;Hn.exports.getThreadInfo=XT;function nE(e,t){vn.push(e),e.on("message",r=>{if(r.type===LB)nE(r.port);else if(r.type===dte){let s=sE.get(r.id);s&&s()}else{for(let n of HB)n(r,e);let s=jT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Mi.error(i)}}}).on("close",()=>{vn.splice(vn.indexOf(e),1)}).on("exit",()=>{vn.splice(vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(nE,"addPort");if(tR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await ate(s,{withFileTypes:!0}))i.isDirectory()&&r(IB(s,i.name));for await(let{filename:i}of ote(s,{persistent:!1}))(rE(i)===".ts"||rE(i)===".js"||rE(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await sR(),Mi.info("Reloaded HarperDB components")},100))},"watch_dir");Hn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===rR.ITC_EVENT_TYPES.SHUTDOWN&&(Hn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{Mi.warn("Thread did not voluntarily terminate",rte),process.exit(0)},wB).unref())})});var VB=m(uE=>{"use strict";var{isMainThread:wte,parentPort:uu,threadId:Cte}=require("worker_threads"),{Socket:Ute}=require("net"),{createServer:Dte,IncomingMessage:Lte}=require("http"),{createServer:Mte}=require("https"),{readFileSync:xo}=require("fs"),iE=F(),Os=Q(),ko=g(),{server:cE}=(bs(),te(fu)),{WebSocketServer:Pte}=require("ws"),{createServer:vte}=require("tls"),{getTicketKeys:Bte}=tt();process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:kde,CONFIG_PARAMS:Vde}=ko;Os.initSync();var Fn={};uE.registerServer=lR;uE.httpServer=_R;uE.deliverSocket=uR;cE.http=_R;cE.request=xte;cE.socket=kte;cE.ws=Vte;var nR=[],iR=[],Hte,cu={},oE={},qte=[],oR=[];wte||eE().loadRootComponents(!0).then(()=>{uu.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)uR(r,t,s);else if(e.requestId)Fte(e);else if(e.type===ko.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Fn){let i=Fn[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||iE.warn("Had to forcefully exit the thread",Cte),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),uu.postMessage({type:ko.ITC_EVENT_TYPES.CHILD_STARTED})});function uR(e,t,r){let s=e?.read?e:new Ute({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Fn[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(iE.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(uR,"deliverSocket");var FB=new Map;function Fte(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=FB.get(n),r){case"connection":i=uR(void 0,t),FB.set(n,i),i.write=(c,u,l)=>(uu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(uu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),uu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Fte,"proxyRequest");function lR(e,t){+t||(t=parseInt(Os.get(ko.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Fn[t];if(r){let s=r.lastServer||r;s.off("unhandled",GB),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Fn[t]=e;e.on("unhandled",GB)}a(lR,"registerServer");function xB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[{port:parseInt(Os.get(ko.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:Os.get(ko.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(xB,"getPorts");function _R(e,t){for(let{port:r,secure:s}of xB(t))kB(r,s,t?.isOperationsServer),typeof e=="function"?oR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):lR(e,r),oE[r]=aR(oR,r),Hte=aR(qte,r)}a(_R,"httpServer");function kB(e,t,r){if(!cu[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=Os.get(n+"_tls_privatekey"),o=Os.get(n+"_tls_certificate"),c=Os.get(n+"_tls_certificateauthority");s={key:xo(i),cert:xo(o)+(c?`
26
+ `+DT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(pee,"getServerOptions");function Tee(){let e=Jr.get(cee),t=Jr.get(uee),r;return e&&(e===!0||e.toUpperCase()===vv)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Tee,"getCORSOpts");function Ree(){return Jr.get(dee)}a(Ree,"getHeaderTimeoutConfig")});var zv=m((Tde,Qv)=>{"use strict";var{decode:gee}=require("msgpackr"),{isMainThread:Aee,parentPort:Oee,threadId:Sde}=require("worker_threads"),LT=it(),ko=Be(),Nee=A(),ou=x(),qv=Q(),xv=A();st();var bee=$s(),{recordAction:yee,recordActionBinary:Iee}=(di(),ee(Wl)),{publishToStream:wee}=LT,pde={durable:ko.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:ko.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Cee,Uee,Dee,kv,Vv;Qv.exports={initialize:$v,workQueueListener:Wv,setSubscription:Lee,setIgnoreOrigin:Pee,getDatabaseSubscriptions:Mee};async function $v(){Vv=!0,ou.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await LT.getNATSReferences();Cee=e,Uee=e.info.server_name,Dee=t,kv=r}a($v,"initialize");var Kd=new Map;function Lee(e,t,r){let s=Kd.get(e);s||Kd.set(e,s=new Map),s.set(t,r),Vv||$v().then(Wv)}a(Lee,"setSubscription");function Mee(){return Kd}a(Mee,"getDatabaseSubscriptions");var Yv;function Pee(e){Yv=e}a(Pee,"setIgnoreOrigin");var Kv=100,Fv=new Array(Kv),Yd=0;async function Wv(){let t=await(await kv.consumers.get(ko.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Fv[Yd],Fv[Yd]=vee(r).catch(s=>{ou.error(s)}),++Yd>=Kv&&(Yd=0)}a(Wv,"workQueueListener");Aee||Oee.on("message",async e=>{let{type:t}=e;t===xv.ITC_EVENT_TYPES.SHUTDOWN&&LT.closeConnection()});async function vee(e){let t=gee(e.data);yee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(ko.MSG_HEADERS.ORIGIN)===qv.get(Nee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!Yv;if(Iee(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;ou.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),ou.trace(`messageProcessor nats msg id: ${e.headers.get(ko.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Kd.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:Gv(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:Gv(i),value:O,id:_?.[k],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}qv.get(xv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wee(e.subject.split(".").slice(0,-1).join("."),bee.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){ou.error(i)}e.ack()}a(vee,"messageProcessor");function Gv(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Gv,"convertOperation")});var qT={};xe(qT,{disableNATS:()=>Hee,setNATSReplicator:()=>MT,start:()=>Bee});function Bee(){Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Fee()}function Hee(e=!0){eB=e}function Fee(){if(eB)return;let e=xr(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];MT(n,r,i)}}Om((r,s)=>{MT(r.tableName,r.databaseName,r),s&&rB(r)}),!Jv&&(Jv=!0)}function MT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){rB(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Zr;return(0,Xv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<qee}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Wd(i.transaction,i)),o.user=i.user):o=tB),o}a(n,"getNATSTransaction")}function rB(e){let t=Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,HT.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var vT,BT,HT,Xv,Zv,Qd,zd,jv,eB,qee,tB,Jv,Wd,PT,sB=Se(()=>{de();jr();vT=C(it()),BT=C(Be()),HT=C($s());da();Xv=C(zv()),Zv=C(qt()),Qd=C(Q()),zd=C(A()),jv=C(x());a(Bee,"start");a(Hee,"disableNATS");qee=2;a(Fee,"assignReplicationSource");a(MT,"setNATSReplicator");a(rB,"publishSchema");Wd=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=Qd.default.get(zd.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(jv.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,HT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},PT=class extends Wd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Zv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};tB=new PT});async function iB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await FT.getResource(e,{});n=new xT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await FT.get(e);i&&i.delete()}n=new Xd(e,t)}return n}function GT(){return Jd++,Jd>65500&&(Jd=1),Jd}var nB,au,FT,Jd,Xd,xT,oB=Se(()=>{de();Sa();nB=C(qt()),au=C(x());Qn();FT=nt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(iB,"getSession");Jd=1;a(GT,"getNextMessageId");Xd=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=fn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ke(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=GT();let U=k.id;Array.isArray(U)&&(U=xi(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,au.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return GT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=fn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ke(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},xT=class extends Xd{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=GT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,au.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,nB.getNextMonotonicTime)()),(0,au.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),FT.put(this.sessionRecord)),t.qos}}});var $T={};xe($T,{start:()=>xee});async function xee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:l,onClose:_}=uB(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Gee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,lB.getSuperUser)());let{onMessage:u,onClose:l}=uB(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function uB(e,t,r,s,n){cB||(cB=!0,fm(_=>{_.push({metric:"mqtt-connections",connections:kT})})),kT++;let i,o={protocolVersion:4},c=(0,Zd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){kT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await et.auth(_.username,_.password.toString()),(0,VT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&aB.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,VT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&aB.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=iB({user:s,..._}),i=await i}catch(O){return(0,nn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,nn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,nn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=vo(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Zd.generate)(f,o);t(T),Es(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Zd,lB,VT,on,nn,aB,Gee,cB,kT,_B=Se(()=>{Zd=require("mqtt-packet");oB();lB=C(br());Uo();di();Pr();VT=C(Q()),on=C(A()),nn=C(x()),aB=(0,nn.loggerWithTag)("auth-event"),Gee=!0;a(xee,"start");kT=0;a(uB,"onSocket")});var gB={};xe(gB,{loadComponent:()=>jd,loadComponentDirectories:()=>RB});function RB(e,t){t&&(KT=t),e&&(WT=e);let r=[];if((0,Os.existsSync)(YT)){let n=(0,Os.readdirSync)(YT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(YT,o);r.push(jd(c,KT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(jd(s,KT,s)),Promise.all(r).then(()=>{TB=!0})}async function jd(e,t,r,s,n){if(!EB.has(e)){EB.set(e,!0),n&&(WT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(o)?i=(0,fB.parseDocument)((0,Os.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Yee;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Os.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,pB.getHdbBasePath)().length){f=null;break}if(f)_=await jd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=$ee[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,nt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(cu.isMainThread&&(_=await _.startOnMainThread?.({server:et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!dB.includes(p)){dB.push(p);let R=QT.get(zT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);JT(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:et,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),WT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,SB.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,hB.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await Vee(O);cu.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else cu.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new uu(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new uu(E),null,!0)}}if(cu.isMainThread&&!TB&&(0,mB.watchDir)(e,async()=>RB()),i.extensionModule)return await s_((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new uu(i))}}}var Os,Mr,cu,fB,QT,zT,hB,mB,SB,pB,kee,Vee,YT,WT,TB,KT,$ee,Yee,dB,EB,uu,AB=Se(()=>{Os=require("fs"),Mr=require("path"),cu=require("worker_threads"),fB=require("yaml"),QT=C(Q()),zT=C(A());Rw();Nw();bw();VM();wv();Lv();hB=C(require("fast-glob")),mB=C(st());Im();Pr();SB=C(W());jr();de();XT();pB=C(Q()),kee=C(Hv());nd();sB();_B();({readFile:Vee}=Os.promises),YT=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),WT=new Map;a(RB,"loadComponentDirectories");$ee={REST:Xp,graphqlSchema:ym,jsResource:Cm,fastifyRoutes:CT,login:Dm,static:UT,operationsApi:kee,customFunctions:{},clustering:qT,authentication:Hc,mqtt:$T},Yee={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},dB=[],EB=new Map;a(jd,"loadComponent");uu=class extends mt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var wB=m((Wde,IB)=>{"use strict";var rE=require("fs-extra"),ZT=require("path"),eE=x(),OB=V(),tE=A(),yB=Q(),Kee=Tr();IB.exports=Wee;async function Wee(){let e=Qee(),t=yB.get(tE.CONFIG_PARAMS.ROOTPATH),r=ZT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+tE.PACKAGE_ROOT}},n=ZT.join(t,"node_modules");await rE.ensureDir(n);let i,o=!0,c=!1;try{i=await rE.readJson(r)}catch(u){if(OB.isEmptyOrZeroLength(e))return;if(u.code!==tE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!OB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await NB(l);s.dependencies[u]=_+l}if(!o){eE.notify("Installing components"),await bB(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await NB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(eE.notify("Removing component",u),c=!0);c&&(eE.notify("Updating components."),await bB(r,s))}a(Wee,"installComponents");function Qee(){let e=Kee.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Qee,"getComponentsConfig");async function NB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZT.extname(e)||await rE.pathExists(e)?"file:":"github:"}a(NB,"getPkgPrefix");async function bB(e,t){eE.trace("npm installing components package.json",t),await rE.writeFile(e,JSON.stringify(t,null," ")),await dd().installAllRootModules(yB.get(tE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(bB,"installPackages")});var sE=m((zde,UB)=>{var{isMainThread:CB}=require("worker_threads"),{getTables:zee}=(de(),ee(Ne)),{loadComponentDirectories:Jee,loadComponent:Xee}=(AB(),ee(gB)),{resetResources:Zee}=(Sa(),ee(LA)),jee=wB(),ete=Tr(),{dirname:tte}=require("path"),{getConnection:rte}=it(),ste=Q(),nte=A(),jT=new Map;async function ite(e=!1){!CB&&ste.get(nte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&rte(),CB&&await jee();let t=Zee();zee(),t.isWorker=e,await Xee(tte(ete.getConfigFilePath()),t,"hdb",!0,jT),await Jee(jT,t);let r=[];for(let[s]of jT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ite,"loadRootComponents");UB.exports.loadRootComponents=ite});var st=m((Zde,qn)=>{"use strict";var{Worker:ote,MessageChannel:ate,parentPort:Ns,isMainThread:nR,threadId:cte,workerData:lu}=require("worker_threads"),{PACKAGE_ROOT:ute}=A(),{join:MB,isAbsolute:lte,extname:iE}=require("path"),{server:_te}=(Pr(),ee(Zo)),{watch:dte,readdir:Ete}=require("fs/promises"),{totalmem:DB}=require("os"),iR=A(),vi=x(),Xde=A(),{randomBytes:fte}=require("crypto"),hte=1024*1024,Hn=[],Bn=[],mte=50,PB=1e4,Ste="restart",vB="request_thread_info",BB="resource_report",HB="thread_info",qB="added-port",pte="ack",eR;qn.exports={startWorker:tR,restartWorkers:oR,shutdownWorkers:Ate,workers:Hn,setMonitorListener:Ute,onMessageFromWorkers:Ote,onMessageByType:Nte,broadcast:bte,broadcastWithAcknowledgement:Ite,setChildListenerByType:gte,getWorkerIndex:GB,getTicketKeys:xB,setMainIsWorker:Tte,restartNumber:lu?.restartNumber||1};var FB;function GB(){return lu?lu.workerIndex:FB?0:void 0}a(GB,"getWorkerIndex");function Tte(e){FB=e}a(Tte,"setMainIsWorker");var nE;function xB(){return nE||(nE=nR?fte(48):lu.ticketKeys,nE)}a(xB,"getTicketKeys");Object.defineProperty(_te,"workerIndex",{get(){return GB()}});var kB={[vB](e,t){wte(t)},[BB](e,t){Cte(t,e)}};function tR(e,t={}){let r=process.constrainedMemory?.()||DB();r=Math.min(r,DB());let s=Math.max(Math.floor(r/hte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Bn){let{port1:u,port2:l}=new ate;c.postMessage({type:qB,port:u},[u]),i.push(l)}iE(e)||(e+=".js");let o=new ote(lte(e)?e:MB(ute,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:qn.exports.restartNumber,ticketKeys:xB()},transferList:i},t));return aE(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{tR(e,t)},o.on("error",c=>{console.error("Worker error:",c),vi.error("Worker error:",c)}),o.on("exit",c=>{Hn.splice(Hn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<mte?(t.unexpectedRestarts=o.unexpectedRestarts+1,tR(e,t)):vi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{kB[c.type]?.(c,o)}),Hn.push(o),Lte(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(tR,"startWorker");var Rte=[iR.THREAD_TYPES.HTTP];async function oR(e=null,t=2,r=!0){if(nR){if(r){let{loadRootComponents:n}=sE();await n()}qn.exports.restartNumber++,t<1&&(t=t*Hn.length);let s=[];for(let n of Hn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:qn.exports.restartNumber,type:iR.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Rte.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),PB*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Ns.postMessage({type:Ste,workerType:e})}a(oR,"restartWorkers");function gte(e,t){kB[e]=t}a(gte,"setChildListenerByType");function Ate(e){return oR(e,1/0,!1)}a(Ate,"shutdownWorkers");var VB=[];function Ote(e){VB.push(e)}a(Ote,"onMessageFromWorkers");var rR=new Map;function Nte(e,t){let r=rR.get(e);r||rR.set(e,r=[]),r.push(t)}a(Nte,"onMessageByType");function bte(e){for(let t of Bn)try{t.postMessage(e)}catch(r){vi.error("Unable to send message to worker",r)}}a(bte,"broadcast");var oE=new Map,yte=1;function Ite(e){return new Promise(t=>{let r=0;for(let s of Bn)try{let n=yte++,i=a(()=>{oE.delete(n),--r===0&&t(),s!==Ns&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,oE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of oE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){vi.error("Unable to send message to worker",n)}r===0&&t()})}a(Ite,"broadcastWithAcknowledgement");function wte(e){e.postMessage({type:HB,workers:$B()})}a(wte,"sendThreadInfo");function $B(){let e=Date.now();return Hn.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}))}a($B,"getChildWorkerInfo");function Cte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Cte,"recordResourceReport");var sR;function Ute(e){sR=e}a(Ute,"setMonitorListener");var Dte=1e3,LB=!1;function Lte(){LB||(LB=!0,setInterval(()=>{for(let e of Hn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}sR&&sR()},Dte).unref())}a(Lte,"startMonitoring");var Mte=1e3;if(Ns){aE(Ns);for(let e of lu.addPorts)aE(e);setInterval(()=>{let e=process.memoryUsage();Ns.postMessage({type:BB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Mte).unref(),eR=a(()=>new Promise((e,t)=>{Ns.on("message",r),Ns.postMessage({type:vB});function r(s){s.type===HB&&(Ns.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eR=$B;qn.exports.getThreadInfo=eR;function aE(e,t){Bn.push(e),e.on("message",r=>{if(r.type===qB)aE(r.port);else if(r.type===pte){let s=oE.get(r.id);s&&s()}else{for(let n of VB)n(r,e);let s=rR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){vi.error(i)}}}).on("close",()=>{Bn.splice(Bn.indexOf(e),1)}).on("exit",()=>{Bn.splice(Bn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(aE,"addPort");if(nR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Ete(s,{withFileTypes:!0}))i.isDirectory()&&r(MB(s,i.name));for await(let{filename:i}of dte(s,{persistent:!1}))(iE(i)===".ts"||iE(i)===".js"||iE(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await oR(),vi.info("Reloaded HarperDB components")},100))},"watch_dir");qn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ns.on("message",async e=>{let{type:t}=e;t===iR.ITC_EVENT_TYPES.SHUTDOWN&&(qn.exports.restartNumber=e.restartNumber,Ns.unref(),setTimeout(()=>{vi.warn("Thread did not voluntarily terminate",cte),process.exit(0)},PB).unref())})});var zB=m(dE=>{"use strict";var{isMainThread:Pte,parentPort:du,threadId:vte}=require("worker_threads"),{Socket:Bte}=require("net"),{createServer:Hte,IncomingMessage:qte}=require("http"),{createServer:Fte}=require("https"),{readFileSync:Vo}=require("fs"),cE=x(),bs=Q(),$o=A(),{server:_E}=(Pr(),ee(Zo)),{WebSocketServer:Gte}=require("ws"),{createServer:xte}=require("tls"),{getTicketKeys:kte}=st(),{Headers:Vte}=(j_(),ee(TL));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eEe,CONFIG_PARAMS:tEe}=$o;bs.initSync();var Gn={};dE.registerServer=ER;dE.httpServer=fR;dE.deliverSocket=dR;_E.http=fR;_E.request=Qte;_E.socket=zte;_E.ws=Jte;var aR=[],cR=[],$te,_u={},uE={},Yte=[],uR=[];Pte||sE().loadRootComponents(!0).then(()=>{du.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)dR(r,t,s);else if(e.requestId)Kte(e);else if(e.type===$o.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Gn){let i=Gn[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||cE.warn("Had to forcefully exit the thread",vte),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),du.postMessage({type:$o.ITC_EVENT_TYPES.CHILD_STARTED})});function dR(e,t,r){let s=e?.read?e:new Bte({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Gn[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Gn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(cE.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(dR,"deliverSocket");var YB=new Map;function Kte(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=YB.get(n),r){case"connection":i=dR(void 0,t),YB.set(n,i),i.write=(c,u,l)=>(du.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(du.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),du.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Kte,"proxyRequest");function ER(e,t){+t||(t=parseInt(bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Gn[t];if(r){let s=r.lastServer||r;s.off("unhandled",KB),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Gn[t]=e;e.on("unhandled",KB)}a(ER,"registerServer");function WB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[{port:parseInt(bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:bs.get($o.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(WB,"getPorts");function fR(e,t){for(let{port:r,secure:s}of WB(t))QB(r,s,t?.isOperationsServer),typeof e=="function"?uR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):ER(e,r),uE[r]=lR(uR,r),$te=lR(Yte,r)}a(fR,"httpServer");function QB(e,t,r){if(!_u[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=bs.get(n+"_tls_privatekey"),o=bs.get(n+"_tls_certificate"),c=bs.get(n+"_tls_certificateauthority");s={key:Vo(i),cert:Vo(o)+(c?`
27
27
 
28
- `+xo(c):""),ticketKeys:Bte()}}cu[e]=(t?Mte:Dte)(s,async(n,i)=>{try{let o=new aE(n);r&&(o.isOperationsServer=!0);let c=await oE[e](o);if(i.setHeader("Server","HarperDB"),c.status===-1){for(let l in c.headers)i.setHeader(l,c.headers[l]);return n.baseRequest=o,i.baseResponse=c,cu[e].emit("unhandled",n,i)}c.handlesHeaders||i.writeHead(c.status||200,c.headers);let u=c.body;u?.pipe?(u.pipe(i),u.destroy&&i.on("close",()=>{u.destroy()})):u?.then?u.then(l=>{i.end(l)},l=>{i.writeHead(l.http_resp_code||500),i.end(l.toString()),iE.error(l)}):i.end(u)}catch(o){i.writeHead(o.http_resp_code||500),i.end(o.toString()),iE.error(o)}}),lR(cu[e],e)}return cu[e]}a(kB,"getHTTPServer");function aR(e,t){let r=Gte;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(aR,"makeCallbackChain");function Gte(e){return e.user&&(e[qn].user=e.user),{status:-1,body:"Not found",headers:{}}}a(Gte,"unhandled");function xte(e,t){_R(e,{requestOnly:!0,...t})}a(xte,"onRequest");function kte(e,t){if(t.securePort){let r=Os.get("customfunctions_tls_privatekey"),s=Os.get("customfunctions_tls_certificate"),n=Os.get("customfunctions_tls_certificateauthority"),i=vte({key:xo(r),cert:xo(s)+(n?`
28
+ `+Vo(c):""),ticketKeys:kte()}}_u[e]=(t?Fte:Hte)(s,async(n,i)=>{try{let o=new lE(n);r&&(o.isOperationsServer=!0);let c=await uE[e](o);if(c.headers?.set?.("Server","HarperDB"),c.status===-1){for(let l of c.headers||[])i.setHeader(l[0],l[1]);return n.baseRequest=o,i.baseResponse=c,_u[e].emit("unhandled",n,i)}c.handlesHeaders||i.writeHead(c.status||200,c.headers&&(c.headers[Symbol.iterator]?Array.from(c.headers):c.headers));let u=c.body;u?.pipe?(u.pipe(i),u.destroy&&i.on("close",()=>{u.destroy()})):u?.then?u.then(l=>{i.end(l)},l=>{i.writeHead(l.statusCode||500),i.end(l.toString()),cE.error(l)}):i.end(u)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),cE.error(o)}}),ER(_u[e],e)}return _u[e]}a(QB,"getHTTPServer");function lR(e,t){let r=Wte;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(lR,"makeCallbackChain");function Wte(e){return e.user&&(e[Fn].user=e.user),{status:-1,body:"Not found",headers:new Vte}}a(Wte,"unhandled");function Qte(e,t){fR(e,{requestOnly:!0,...t})}a(Qte,"onRequest");function zte(e,t){if(t.securePort){let r=bs.get("customfunctions_tls_privatekey"),s=bs.get("customfunctions_tls_certificate"),n=bs.get("customfunctions_tls_certificateauthority"),i=xte({key:Vo(r),cert:Vo(s)+(n?`
29
29
 
30
- `+xo(n):"")},e);Fn[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Fn[t.port]=e)}a(kte,"onSocket");Object.defineProperty(Lte.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Vte(e,t){for(let{port:r,secure:s}of xB(t)){iR[r]||(iR[r]=new Pte({server:kB(r,s)}),iR[r].on("connection",async(i,o)=>{let c=new aE(o);c.isWebSocket=!0;let u=oE[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<nR.length;_++){let d=nR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";nR.push({listener:e,protocol:n}),oE[r]=aR(oR,r)}}a(Vte,"onWebSocket");function GB(e,t){t.writeHead(404),t.end(`Not found
31
- `)}a(GB,"defaultNotFound");var qn=Symbol("node request"),aE=class{static{a(this,"Request")}[qn];#e;constructor(t){this.method=t.method;let r=t.url;this[qn]=t,this.url=r,this.headers=t.headers,this.headers.get=$te}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this[qn].socket.encrypted?"https":"http"}get ip(){return this[qn].socket.remoteAddress}get body(){return this.#e||(this.#e=new cR(this[qn]))}get host(){return this[qn].authority||this[qn].headers.host}get isAborted(){return!1}},cR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function $te(e){return this[e.toLowerCase()]}a($te,"get")});var XB={};Ye(XB,{debugMode:()=>zB,startHTTPThreads:()=>Kte,startSocketServer:()=>WT,updateWorkerIdleness:()=>JB});async function Kte(e=2,t){if(t)fR(0,1,!0);else{let{loadRootComponents:r}=eE();if(e===0||zB)return(0,Gn.setMainIsWorker)(!0),dR=VB(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)fR(r,e);return Promise.all(QB)}function fR(e,t=1,r){if(ER++,(0,Gn.startWorker)("server/threads/threadServer.js",{name:dE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===dE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});QB.push(n),await n,Vo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=_E.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Vo.indexOf(s);o>-1&&Vo.splice(o,1)}if(a(i,"removeWorker"),$o){let o=$o;$o=[];for(let c of o)WB[c.localPort](c)}}}),r){let s=setInterval(()=>{hR?hR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Gn.shutdownWorkers)(),ER=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function WT(e=0,t){if(typeof e=="string")try{(0,EE.existsSync)(e)&&(0,EE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Wte:r=Qte(t):r=mR;let s=(0,YB.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},WB[e]=i=>{hR=!0,r(i,(o,c)=>{if(!o){dR?(dR.deliverSocket(i,e,c),i.resume()):ER>0?($o.length===0&&setTimeout(()=>{$o.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),$o.push(i)):(console.log("start up a dynamic thread to handle request"),fR(0));return}o.requests++,i._handle.fd>=0?o.postMessage({port:e,fd:i._handle.fd,data:c}):Xte(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=rc();return KB.info(`HarperDB ${n.version} Server running on port ${e}`),s}function mR(e,t){let r,s=0;for(let n of Vo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=lE)return lE=i,t(r);s=i}lE=0,t(r)}function Wte(e,t){let r=e.remoteAddress,s=Yo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);mR(e,i=>{Yo.set(r,{worker:i,lastUsed:n}),t(i)})}function Qte(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Yo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);mR(s,_=>{Yo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function JB(){lE=0;for(let e of Vo)e.expectedIdle=e.recentELU.idle+zte,e.requests=1;Vo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Xte(e,t,r){let s=Jte++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),_E.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),_E.delete(s)),n.event=="destroy"&&(e.destroy(),_E.delete(s))})}var Gn,YB,dE,KB,EE,Yte,Vo,$o,WB,dR,ER,QB,zB,hR,lE,$B,Yo,zte,_E,Jte,QT=pe(()=>{Gn=D(tt()),YB=require("net"),dE=D(g()),KB=D(F()),EE=require("fs"),{isMainThread:Yte}=require("worker_threads"),Vo=[],$o=[],WB=[],ER=0,QB=[];Yte&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(Kte,"startHTTPThreads");a(fR,"startHTTPWorker");a(WT,"startSocketServer");lE=0;a(mR,"findMostIdleWorker");$B=36e5,Yo=new Map;a(Wte,"findByRemoteAddressAffinity");a(Qte,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Yo)r.lastUsed+$B<e&&Yo.delete(t)},$B).unref();zte=1e3;a(JB,"updateWorkerIdleness");(0,Gn.setMonitorListener)(JB);_E=new Map,Jte=1;a(Xte,"proxySocket")});RE();var{startHTTPThreads:Zte,startSocketServer:ZB}=(QT(),te(XB));Zte(0,!0);ZB(9925);ZB(9926);
30
+ `+Vo(n):"")},e);Gn[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Gn[t.port]=e)}a(zte,"onSocket");Object.defineProperty(qte.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Jte(e,t){for(let{port:r,secure:s}of WB(t)){cR[r]||(cR[r]=new Gte({server:QB(r,s)}),cR[r].on("connection",async(i,o)=>{let c=new lE(o);c.isWebSocket=!0;let u=uE[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<aR.length;_++){let d=aR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";aR.push({listener:e,protocol:n}),uE[r]=lR(uR,r)}}a(Jte,"onWebSocket");function KB(e,t){t.writeHead(404),t.end(`Not found
31
+ `)}a(KB,"defaultNotFound");var Fn=Symbol("node request"),lE=class{static{a(this,"Request")}[Fn];#e;constructor(t){this.method=t.method;let r=t.url;this[Fn]=t,this.url=r,this.headers=t.headers,this.headers.get=Xte}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this[Fn].socket.encrypted?"https":"http"}get ip(){return this[Fn].socket.remoteAddress}get body(){return this.#e||(this.#e=new _R(this[Fn]))}get host(){return this[Fn].authority||this[Fn].headers.host}get isAborted(){return!1}},_R=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function Xte(e){return this[e.toLowerCase()]}a(Xte,"get")});var rH={};xe(rH,{debugMode:()=>eH,startHTTPThreads:()=>jte,startSocketServer:()=>JT,updateWorkerIdleness:()=>tH});async function jte(e=2,t){if(t)SR(0,1,!0);else{let{loadRootComponents:r}=sE();if(e===0||eH)return(0,xn.setMainIsWorker)(!0),hR=zB(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)SR(r,e);return Promise.all(jB)}function SR(e,t=1,r){if(mR++,(0,xn.startWorker)("server/threads/threadServer.js",{name:hE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===hE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});jB.push(n),await n,Yo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=fE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Yo.indexOf(s);o>-1&&Yo.splice(o,1)}if(a(i,"removeWorker"),Ko){let o=Ko;Ko=[];for(let c of o)ZB[c.localPort](c)}}}),r){let s=setInterval(()=>{pR?pR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,xn.shutdownWorkers)(),mR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function JT(e=0,t){if(typeof e=="string")try{(0,SE.existsSync)(e)&&(0,SE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=ere:r=tre(t):r=TR;let s=(0,XB.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},ZB[e]=i=>{pR=!0,r(i,(o,c)=>{if(!o){hR?(hR.deliverSocket(i,e,c),i.resume()):mR>0?(Ko.length===0&&setTimeout(()=>{Ko.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),Ko.push(i)):(console.log("start up a dynamic thread to handle request"),SR(0));return}o.requests++;let u=i._handle.fd;mE.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):nre(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=oc();return mE.info(`HarperDB ${n.version} Server running on port ${e}`),s}function TR(e,t){let r,s=0;for(let n of Yo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=EE)return EE=i,t(r);s=i}EE=0,t(r)}function ere(e,t){let r=e.remoteAddress,s=Wo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);TR(e,i=>{Wo.set(r,{worker:i,lastUsed:n}),t(i)})}function tre(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Wo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);TR(s,_=>{Wo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function tH(){EE=0;for(let e of Yo)e.expectedIdle=e.recentELU.idle+rre,e.requests=1;Yo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function nre(e,t,r){let s=sre++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),fE.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),fE.delete(s)),n.event=="destroy"&&(e.destroy(),fE.delete(s))})}var xn,XB,hE,mE,SE,Zte,Yo,Ko,ZB,hR,mR,jB,eH,pR,EE,JB,Wo,rre,fE,sre,XT=Se(()=>{xn=C(st()),XB=require("net"),hE=C(A()),mE=C(x()),SE=require("fs"),{isMainThread:Zte}=require("worker_threads"),Yo=[],Ko=[],ZB=[],mR=0,jB=[];Zte&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(jte,"startHTTPThreads");a(SR,"startHTTPWorker");a(JT,"startSocketServer");EE=0;a(TR,"findMostIdleWorker");JB=36e5,Wo=new Map;a(ere,"findByRemoteAddressAffinity");a(tre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Wo)r.lastUsed+JB<e&&Wo.delete(t)},JB).unref();rre=1e3;a(tH,"updateWorkerIdleness");(0,xn.setMonitorListener)(tH);fE=new Map,sre=1;a(nre,"proxySocket")});NE();var{startHTTPThreads:ire,startSocketServer:sH}=(XT(),ee(rH));ire(0,!0);sH(9925);sH(9926);