harperdb 4.7.0-alpha.5 → 4.7.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var j3=Object.create;var Qf=Object.defineProperty;var Q3=Object.getOwnPropertyDescriptor;var J3=Object.getOwnPropertyNames;var X3=Object.getPrototypeOf,Z3=Object.prototype.hasOwnProperty;var o=(e,t)=>Qf(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)Qf(e,r,{get:t[r],enumerable:!0})},HM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of J3(t))!Z3.call(e,s)&&s!==r&&Qf(e,s,{get:()=>t[s],enumerable:!(n=Q3(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?j3(X3(e)):{},HM(t||!e||!e.__esModule?Qf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>HM(Qf({},"__esModule",{value:!0}),e);var bt=M((xwe,$M)=>{var{join:eX,dirname:qM}=require("node:path"),{existsSync:tX,readFileSync:rX}=require("node:fs");function nX(){let t=__dirname,r,n=0;for(;!tX(r=eX(t,"package.json"));)if(t===(t=qM(t))||n++>10)throw new Error("Could not find package root");return r}o(nX,"findPackageJson");var GM=nX(),sX=JSON.parse(rX(GM,"utf8")),iX=qM(GM);$M.exports={packageJson:sX,PACKAGE_ROOT:iX}});var W={};Ie(W,{AUTH_AUDIT_STATUS:()=>si,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>CX,BOOT_PROP_PARAMS:()=>YM,CLUSTERING_FLAG:()=>mA,CLUSTERING_PROCESSES:()=>hX,CLUSTER_MESSAGE_TYPE_ENUM:()=>fA,CLUSTER_OPERATIONS:()=>VX,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>WM,DATABASES_DIR_NAME:()=>Fc,DATABASES_PARAM_CONFIG:()=>zX,DEFAULT_DATABASE_NAME:()=>_X,ESCAPED_FORWARD_SLASH_REGEX:()=>wX,FORWARD_SLASH_REGEX:()=>bX,FUNC_VAL:()=>i5,GEO_CONVERSION_ENUM:()=>YX,HDB_COMPONENT_CONFIG_FILE:()=>cX,HDB_CONFIG_FILE:()=>oX,HDB_DEFAULT_CONFIG_FILE:()=>aX,HDB_FILE_PERMISSIONS:()=>PX,HDB_HOME_DIR_NAME:()=>NX,HDB_PID_FILE:()=>EX,HDB_PROCESS_SERVICES:()=>pX,HDB_PROC_NAME:()=>lX,HDB_RESTART_SCRIPT:()=>uX,HDB_ROOT_DIR_NAME:()=>cA,HDB_SETTINGS_NAMES:()=>Zf,HDB_SUPPORT_ADDRESS:()=>KM,INFO_TABLE_HASH_ATTRIBUTE:()=>xX,INSERT_MAX_CHARACTER_SIZE:()=>vX,INSTALL_PROMPTS:()=>MX,ITC_EVENT_TYPES:()=>QE,JOB_STATUS_ENUM:()=>HX,JOB_TYPE_ENUM:()=>jX,JWT_ENUM:()=>em,LAUNCH_SERVICE_SCRIPTS:()=>SX,LEGACY_CONFIG_PARAMS:()=>WX,LEGACY_DATABASES_DIR_NAME:()=>WE,LICENSE_FILE_NAME:()=>kX,LICENSE_KEY_DIR_NAME:()=>dA,LICENSE_VALUES:()=>QX,LOG_LEVELS:()=>Jf,LOG_NAMES:()=>gX,METADATA_PROPERTY:()=>ZX,NODE_ERROR_CODES:()=>XX,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>n5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>r5,PRE_4_0_0_VERSION:()=>o5,PROCESS_DESCRIPTORS:()=>mX,PROCESS_NAME_ENV_PROP:()=>DX,RAM_ALLOCATION_ENUM:()=>JX,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>jE,REG_KEY_FILE_NAME:()=>FX,RESTART_TIMEOUT_MS:()=>OX,ROLE_TYPES_ENUM:()=>TX,S3_BUCKET_AUTH_KEYS:()=>GX,SEARCH_NOT_FOUND_MESSAGE:()=>RX,SEARCH_WILDCARDS:()=>s5,SERVICE_ACTIONS_ENUM:()=>KX,SUPPORT_HELP_MSG:()=>yX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>BX,SYSTEM_SCHEMA_NAME:()=>Xf,SYSTEM_TABLE_NAMES:()=>yu,THREAD_TYPES:()=>hA,TIME_STAMP_NAMES:()=>t5,TIME_STAMP_NAMES_ENUM:()=>e5,TRANSACTIONS_DIR_NAME:()=>LX,UNICODE_FORWARD_SLASH:()=>IX,UNICODE_PERIOD:()=>AX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>UX,VALID_S3_FILE_TYPES:()=>qX,VALID_SQL_OPS_ENUM:()=>$X,VALUE_SEARCH_COMPARATORS:()=>zE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>pA});var KE,YE,oX,aX,cA,cX,lX,uX,VM,aA,lA,uA,dX,fX,mX,pX,hX,EX,_X,gX,Jf,SX,TX,KM,yX,RX,AX,bX,IX,wX,Xf,NX,dA,CX,OX,PX,Fc,WE,LX,DX,YM,MX,vX,UX,yu,xX,BX,FX,kX,HX,V,qX,GX,$X,VX,KX,YX,Zf,WX,B,WM,zX,jX,fA,QX,JX,XX,ZX,mA,zM,jM,e5,t5,r5,zE,pA,n5,s5,i5,jE,em,QE,hA,o5,si,ba,H=ie(()=>{KE=require("node:path"),YE=w(bt()),oX="harperdb-config.yaml",aX="defaultConfig.yaml",cA="hdb",cX="config.yaml",lX="harperdb.js",uX="restartHdb.js",VM="HarperDB",aA="Custom Functions",lA="Clustering Hub",uA="Clustering Leaf",dX="Clustering Ingest Service",fX="Clustering Reply Service",mX={HDB:VM,CLUSTERING_HUB:lA,CLUSTERING_LEAF:uA,CLUSTERING_INGEST_SERVICE:dX,CLUSTERING_REPLY_SERVICE:fX,CUSTOM_FUNCTIONS:aA,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"},pX={harperdb:VM,"clustering hub":lA,"clustering leaf":uA,"custom functions":aA,custom_functions:aA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},hX={CLUSTERING_HUB_PROC_DESCRIPTOR:lA,CLUSTERING_LEAF_PROC_DESCRIPTOR:uA},EX="hdb.pid",_X="data",gX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},SX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},TX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},KM="support@harperdb.io",yX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${KM}`,RX="None of the specified records were found.",AX="U+002E",bX=/\//g,IX="U+002F",wX=/U\+002F/g,Xf="system",NX=".harperdb",dA="keys",CX="hdb_boot_properties.file",OX=6e4,PX=448,Fc="database",WE="schema",LX="transactions",DX="PROCESS_NAME",YM={SETTINGS_PATH_KEY:"settings_path"},MX={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},vX=250,UX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},yu={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"},xX="info_id",BX={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"},FX="060493.ks",kX=".license",HX={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={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",DESCRIBE_METRIC:"describe_metric",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",SET_NODE_REPLICATION:"set_node_replication",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",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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},qX={CSV:".csv",JSON:".json"},GX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},$X={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},VX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},KX={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},YX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zf={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"},WX={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",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_ROTATION_RETENTION:"logging_rotation_retention",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_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_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},WM={settings_path:YM.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];WM[t.toLowerCase()]=t}zX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},jX={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.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",restart_service:"restart_service"},fA={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"},QX={VERSION_DEFAULT:"2.2.0"},JX={DEVELOPMENT:8192,DEFAULT:512},XX={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},ZX=Symbol("metadata"),mA="__clustering__",zM="__createdtime__",jM="__updatedtime__",e5={CREATED_TIME:zM,UPDATED_TIME:jM},t5=[zM,jM],r5=15984864e5,zE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},pA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},n5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},s5=["*","%"],i5="func_val",jE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},em={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},QE={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},hA={HTTP:"http"},o5="3.x.x",si={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var kc=M((Fwe,XM)=>{"use strict";var QM=require("minimist");XM.exports=a5;function a5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=JM(process.env),n=JM(QM(process.argv))):(r=process.env,n=QM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(a5,"assignCMDENVVariables");function JM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(JM,"objKeysToLowerCase")});var ii=M(zn=>{"use strict";global.Resource=zn.Resource=void 0;global.tables=zn.tables={};global.databases=zn.databases={};global.getUser=zn.getUser=void 0;global.authenticateUser=zn.authenticateUser=void 0;global.server=zn.server={};global.contentTypes=zn.contentTypes=null;global.threads=zn.threads=[];global.logger={};global.RequestTarget=zn.RequestTarget=void 0;global.operation=zn.operation=void 0;zn._assignPackageExport=(e,t)=>{global[e]=zn[e]=t}});var EA=M(an=>{"use strict";var c5={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,`\r
1
+ "use strict";var Z3=Object.create;var Qf=Object.defineProperty;var eX=Object.getOwnPropertyDescriptor;var tX=Object.getOwnPropertyNames;var rX=Object.getPrototypeOf,nX=Object.prototype.hasOwnProperty;var o=(e,t)=>Qf(e,"name",{value:t,configurable:!0});var ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ie=(e,t)=>{for(var r in t)Qf(e,r,{get:t[r],enumerable:!0})},$M=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of tX(t))!nX.call(e,s)&&s!==r&&Qf(e,s,{get:()=>t[s],enumerable:!(n=eX(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?Z3(rX(e)):{},$M(t||!e||!e.__esModule?Qf(r,"default",{value:e,enumerable:!0}):r,e)),D=e=>$M(Qf({},"__esModule",{value:!0}),e);var Tt=M((Gwe,YM)=>{var{join:sX,dirname:VM}=require("node:path"),{existsSync:iX,readFileSync:oX}=require("node:fs");function aX(){let t=__dirname,r,n=0;for(;!iX(r=sX(t,"package.json"));)if(t===(t=VM(t))||n++>10)throw new Error("Could not find package root");return r}o(aX,"findPackageJson");var KM=aX(),cX=JSON.parse(oX(KM,"utf8")),lX=VM(KM);YM.exports={packageJson:cX,PACKAGE_ROOT:lX}});var W={};Ie(W,{AUTH_AUDIT_STATUS:()=>si,AUTH_AUDIT_TYPES:()=>ba,BOOT_PROPS_FILE_NAME:()=>DX,BOOT_PROP_PARAMS:()=>jM,CLUSTERING_FLAG:()=>mA,CLUSTERING_PROCESSES:()=>SX,CLUSTER_MESSAGE_TYPE_ENUM:()=>fA,CLUSTER_OPERATIONS:()=>zX,CONFIG_PARAMS:()=>B,CONFIG_PARAM_MAP:()=>QM,DATABASES_DIR_NAME:()=>Fc,DATABASES_PARAM_CONFIG:()=>XX,DEFAULT_DATABASE_NAME:()=>yX,ESCAPED_FORWARD_SLASH_REGEX:()=>PX,FORWARD_SLASH_REGEX:()=>CX,FUNC_VAL:()=>l5,GEO_CONVERSION_ENUM:()=>QX,HDB_COMPONENT_CONFIG_FILE:()=>fX,HDB_CONFIG_FILE:()=>uX,HDB_DEFAULT_CONFIG_FILE:()=>dX,HDB_FILE_PERMISSIONS:()=>vX,HDB_HOME_DIR_NAME:()=>LX,HDB_PID_FILE:()=>TX,HDB_PROCESS_SERVICES:()=>gX,HDB_PROC_NAME:()=>mX,HDB_RESTART_SCRIPT:()=>pX,HDB_ROOT_DIR_NAME:()=>cA,HDB_SETTINGS_NAMES:()=>Zf,HDB_SUPPORT_ADDRESS:()=>zM,INFO_TABLE_HASH_ATTRIBUTE:()=>HX,INSERT_MAX_CHARACTER_SIZE:()=>FX,INSTALL_PROMPTS:()=>BX,ITC_EVENT_TYPES:()=>QE,JOB_STATUS_ENUM:()=>VX,JOB_TYPE_ENUM:()=>ZX,JWT_ENUM:()=>em,LAUNCH_SERVICE_SCRIPTS:()=>AX,LEGACY_CONFIG_PARAMS:()=>JX,LEGACY_DATABASES_DIR_NAME:()=>WE,LICENSE_FILE_NAME:()=>$X,LICENSE_KEY_DIR_NAME:()=>dA,LICENSE_VALUES:()=>e5,LOG_LEVELS:()=>Jf,LOG_NAMES:()=>RX,METADATA_PROPERTY:()=>n5,NODE_ERROR_CODES:()=>r5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>a5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>o5,PRE_4_0_0_VERSION:()=>u5,PROCESS_DESCRIPTORS:()=>_X,PROCESS_NAME_ENV_PROP:()=>xX,RAM_ALLOCATION_ENUM:()=>t5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>jE,REG_KEY_FILE_NAME:()=>qX,RESTART_TIMEOUT_MS:()=>MX,ROLE_TYPES_ENUM:()=>bX,S3_BUCKET_AUTH_KEYS:()=>YX,SEARCH_NOT_FOUND_MESSAGE:()=>wX,SEARCH_WILDCARDS:()=>c5,SERVICE_ACTIONS_ENUM:()=>jX,SUPPORT_HELP_MSG:()=>IX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>GX,SYSTEM_SCHEMA_NAME:()=>Xf,SYSTEM_TABLE_NAMES:()=>yu,THREAD_TYPES:()=>hA,TIME_STAMP_NAMES:()=>i5,TIME_STAMP_NAMES_ENUM:()=>s5,TRANSACTIONS_DIR_NAME:()=>UX,UNICODE_FORWARD_SLASH:()=>OX,UNICODE_PERIOD:()=>NX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>kX,VALID_S3_FILE_TYPES:()=>KX,VALID_SQL_OPS_ENUM:()=>WX,VALUE_SEARCH_COMPARATORS:()=>zE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>pA});var KE,YE,uX,dX,cA,fX,mX,pX,WM,aA,lA,uA,hX,EX,_X,gX,SX,TX,yX,RX,Jf,AX,bX,zM,IX,wX,NX,CX,OX,PX,Xf,LX,dA,DX,MX,vX,Fc,WE,UX,xX,jM,BX,FX,kX,yu,HX,GX,qX,$X,VX,V,KX,YX,WX,zX,jX,QX,Zf,JX,B,QM,XX,ZX,fA,e5,t5,r5,n5,mA,JM,XM,s5,i5,o5,zE,pA,a5,c5,l5,jE,em,QE,hA,u5,si,ba,H=ie(()=>{KE=require("node:path"),YE=w(Tt()),uX="harperdb-config.yaml",dX="defaultConfig.yaml",cA="hdb",fX="config.yaml",mX="harperdb.js",pX="restartHdb.js",WM="HarperDB",aA="Custom Functions",lA="Clustering Hub",uA="Clustering Leaf",hX="Clustering Ingest Service",EX="Clustering Reply Service",_X={HDB:WM,CLUSTERING_HUB:lA,CLUSTERING_LEAF:uA,CLUSTERING_INGEST_SERVICE:hX,CLUSTERING_REPLY_SERVICE:EX,CUSTOM_FUNCTIONS:aA,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"},gX={harperdb:WM,"clustering hub":lA,"clustering leaf":uA,"custom functions":aA,custom_functions:aA,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},SX={CLUSTERING_HUB_PROC_DESCRIPTOR:lA,CLUSTERING_LEAF_PROC_DESCRIPTOR:uA},TX="hdb.pid",yX="data",RX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Jf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},AX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,KE.join)(YE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},bX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},zM="support@harperdb.io",IX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${zM}`,wX="None of the specified records were found.",NX="U+002E",CX=/\//g,OX="U+002F",PX=/U\+002F/g,Xf="system",LX=".harperdb",dA="keys",DX="hdb_boot_properties.file",MX=6e4,vX=448,Fc="database",WE="schema",UX="transactions",xX="PROCESS_NAME",jM={SETTINGS_PATH_KEY:"settings_path"},BX={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",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",DEFAULTS_MODE:"DEFAULTS_MODE",REPLICATION_HOSTNAME:"REPLICATION_HOSTNAME",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},FX=250,kX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},yu={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"},HX="info_id",GX={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"},qX="060493.ks",$X=".license",VX={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={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",DESCRIBE_METRIC:"describe_metric",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",SET_NODE_REPLICATION:"set_node_replication",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_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",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},KX={CSV:".csv",JSON:".json"},YX={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},WX={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zX={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},jX={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},QX={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Zf={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"},JX={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"},B={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",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_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",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_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_TIMEOUT:"http_mtls_certificateVerification_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CACHETTL:"http_mtls_certificateVerification_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",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_ROTATION_RETENTION:"logging_rotation_retention",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_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_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",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_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},QM={settings_path:jM.SETTINGS_PATH_KEY,hdb_root_key:B.ROOTPATH,hdb_root:B.ROOTPATH,rootpath:B.ROOTPATH,server_port_key:B.OPERATIONSAPI_NETWORK_PORT,server_port:B.OPERATIONSAPI_NETWORK_PORT,cert_key:B.TLS_CERTIFICATE,certificate:B.TLS_CERTIFICATE,private_key_key:B.TLS_PRIVATEKEY,private_key:B.TLS_PRIVATEKEY,http_secure_enabled_key:B.OPERATIONSAPI_NETWORK_HTTPS,https_on:B.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:B.OPERATIONSAPI_NETWORK_CORS,cors_on:B.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:B.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:B.LOGGING_LEVEL,log_level:B.LOGGING_LEVEL,log_path_key:B.LOGGING_ROOT,log_path:B.LOGGING_ROOT,clustering_node_name_key:B.CLUSTERING_NODENAME,node_name:B.CLUSTERING_NODENAME,clustering_enabled_key:B.CLUSTERING_ENABLED,clustering:B.CLUSTERING_ENABLED,max_http_threads:B.THREADS_COUNT,max_hdb_processes:B.THREADS_COUNT,server_timeout_key:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:B.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:B.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:B.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:B.LOGGING_AUDITLOG,disable_transaction_log:B.LOGGING_AUDITLOG,operation_token_timeout_key:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:B.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:B.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:B.HTTP_PORT,custom_functions_port:B.HTTP_PORT,custom_functions_directory_key:B.COMPONENTSROOT,custom_functions_directory:B.COMPONENTSROOT,max_custom_function_processes:B.THREADS_COUNT,logging_console:B.LOGGING_CONSOLE,log_to_file:B.LOGGING_FILE,log_to_stdstreams:B.LOGGING_STDSTREAMS,local_studio_on:B.LOCALSTUDIO_ENABLED,clustering_port:B.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:B.CLUSTERING_USER,customfunctions_network_port:B.HTTP_PORT,customfunctions_tls_certificate:B.TLS_CERTIFICATE,customfunctions_network_cors:B.HTTP_CORS,customfunctions_network_corsaccesslist:B.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:B.HTTP_HEADERSTIMEOUT,customfunctions_network_https:B.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:B.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:B.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:B.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:B.HTTP_TIMEOUT,customfunctions_tls:B.TLS,http_threads:B.THREADS_COUNT,threads:B.THREADS_COUNT,threads_count:B.THREADS_COUNT,customfunctions_processes:B.THREADS_COUNT,customfunctions_root:B.COMPONENTSROOT,operationsapi_root:B.ROOTPATH};for(let e in B){let t=B[e];QM[t.toLowerCase()]=t}XX={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},ZX={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.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",restart_service:"restart_service"},fA={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"},e5={VERSION_DEFAULT:"2.2.0"},t5={DEVELOPMENT:8192,DEFAULT:512},r5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},n5=Symbol("metadata"),mA="__clustering__",JM="__createdtime__",XM="__updatedtime__",s5={CREATED_TIME:JM,UPDATED_TIME:XM},i5=[JM,XM],o5=15984864e5,zE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},pA={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},a5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},c5=["*","%"],l5="func_val",jE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},em={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},QE={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",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},hA={HTTP:"http"},u5="3.x.x",si={SUCCESS:"success",FAILURE:"failure"},ba={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var kc=M(($we,tv)=>{"use strict";var ZM=require("minimist");tv.exports=d5;function d5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=ev(process.env),n=ev(ZM(process.argv))):(r=process.env,n=ZM(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(d5,"assignCMDENVVariables");function ev(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(ev,"objKeysToLowerCase")});var ii=M(zn=>{"use strict";global.Resource=zn.Resource=void 0;global.tables=zn.tables={};global.databases=zn.databases={};global.getUser=zn.getUser=void 0;global.authenticateUser=zn.authenticateUser=void 0;global.server=zn.server={};global.contentTypes=zn.contentTypes=null;global.threads=zn.threads=[];global.logger={};global.RequestTarget=zn.RequestTarget=void 0;global.operation=zn.operation=void 0;zn._assignPackageExport=(e,t)=>{global[e]=zn[e]=t}});var EA=M(an=>{"use strict";var f5={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,`\r
2
2
  `),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,`\r
3
- `)},l5="certificate.pem",u5="privateKey.pem",d5="caCertificate.pem",f5="natsCertificate.pem",m5="natsCaCertificate.pem",It={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},p5={tls_certificate:It.SERVER,tlsCertificateAuthority:It.CA,customFunctions_tls_certificate:It.SERVER,customFunctionsTlsCertificateAuthority:It.CA,operationsApi_tls_certificate:It["OPERATIONS-API"],operationsApiTlsCertificateAuthority:It["OPERATIONS-CA"]},h5={[It.SERVER]:2,[It.DEFAULT]:1},E5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},_5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},g5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},S5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},T5={[It.CA]:2,[It["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=l5;an.PRIVATEKEY_PEM_NAME=u5;an.CA_PEM_NAME=d5;an.CERT_NAME=It;an.CERT_CONFIG_NAME_MAP=p5;an.CERT_PREFERENCE_APP=h5;an.CERT_PREFERENCE_OPS=E5;an.CERT_PREFERENCE_REP=_5;an.CA_CERT_PREFERENCE_REP=g5;an.CA_CERT_PREFERENCE_OPS=S5;an.CA_CERT_PREFERENCE_APP=T5;an.CERTIFICATE_VALUES=c5;an.NATS_CERTIFICATE_PEM_NAME=f5;an.NATS_CA_PEM_NAME=m5});var ft=M((Gwe,ZM)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};ZM.exports={validateObject:y5,validateObjectAsync:R5,validateBySchema:A5};function y5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(y5,"validateObject");async function R5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(R5,"validateObjectAsync");function A5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(A5,"validateBySchema")});var gA=M((Kwe,iv)=>{"use strict";var nv=require("fs-extra"),ge=require("joi"),b5=require("os"),{boolean:Ke,string:Et,number:cr,array:Ia}=ge.types(),{totalmem:ev}=require("os"),Hc=require("path"),I5=Q(),_A=oe(),Vwe=EA(),tv=(H(),D(W)),w5=ft(),rv="log",N5="components",C5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",O5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",P5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",L5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",D5="rootPath config parameter is undefined",wn=ge.alternatives([cr.min(0),Et]).optional().empty(null),JE=ge.alternatives([Ia.items(Et,{host:Et.required(),port:wn},{hostname:Et.required(),port:wn}).empty(null),Ia.items(Et)]),vi,sv=!1;iv.exports={configValidator:M5,routesValidator:k5,routeConstraints:JE};function M5(e,t=!1){if(sv=t,vi=e.rootPath,_A.isEmpty(vi))throw D5;let r=Ke.optional(),n=cr.min(0).max(1e3).empty(null).default(F5),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tm),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(tm),l=ge.custom(U5).empty(null).default(tm),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:JE}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:JE}).required(),streams:ge.object({maxAge:cr.min(120).allow(null).optional(),maxBytes:cr.min(1).allow(null).optional(),maxMsgs:cr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:Et.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:cr.required(),cookie:ge.object({domains:Ia.items(Et).optional(),expires:Et.optional()}),enableSessions:Ke,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:cr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(Et,cr).optional().empty(null),url:Et.optional().empty(null),port:wn,securePort:wn,routes:Ia.optional().empty(null),databases:ge.alternatives(Et,Ia),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:Et.custom(B5).optional().empty(null),maxSize:Et.custom(x5).optional().empty(null),path:Et.optional().empty(null).default(tm)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:cr.min(1).optional(),keepAliveTimeout:cr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(tm),securePort:wn,timeout:cr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:cr.optional(),cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:cr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:cr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ia.optional(),Et.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:cr.min(1).optional(),host:Et.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:cr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:Et.optional(),threshold:cr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:cr.optional(),maxFreeSpaceToRetain:cr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(M5,"configValidator");function v5(e){return sv||nv.existsSync(e)?null:`Specified path ${e} does not exist.`}o(v5,"doesPathExist");function U5(e,t){ge.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=v5(e);if(r)return t.message(r)}o(U5,"validatePath");function x5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(C5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(P5):e}o(x5,"validateRotationMaxSize");function B5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(O5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L5):e}o(B5,"validateRotationInterval");function F5(e,t){let r=t.state.path.join("."),n=b5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||ev();return i=Math.round(Math.min(i,ev())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(F5,"setDefaultThreads");function tm(e,t){let r=t.state.path.join(".");if(!_A.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(_A.isEmpty(vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Hc.join(vi,N5);case"logging.root":return Hc.join(vi,rv);case"clustering.leafServer.streams.path":return Hc.join(vi,"clustering","leaf");case"storage.path":let n=Hc.join(vi,tv.LEGACY_DATABASES_DIR_NAME);return nv.existsSync(n)?n:Hc.join(vi,tv.DATABASES_DIR_NAME);case"logging.rotation.path":return Hc.join(vi,rv);case"operationsApi.network.domainSocket":return r==null?null:Hc.join(vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(tm,"setDefaultRoot");function k5(e){let t=ge.object({routes:JE});return w5.validateBySchema({routes:e},t)}o(k5,"routesValidator")});var $t=M((Wwe,av)=>{"use strict";var H5="__dbis__",q5="__txns__",G5="__environment_name__",$5="__dbi_defintion__",V5={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"},K5=["__createdtime__","__updatedtime__"],Y5="\uFFFF",ov={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},W5=Object.values(ov);av.exports={AUDIT_STORE_NAME:q5,INTERNAL_DBIS_NAME:H5,DBI_DEFINITION_NAME:$5,SEARCH_TYPES:V5,TIMESTAMP_NAMES:K5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:G5,TRANSACTIONS_DBI_NAMES_ENUM:ov,TRANSACTIONS_DBIS:W5,OVERFLOW_MARKER:Y5}});var Kr=M((zwe,Ev)=>{"use strict";var cv=(H(),D(W)),lv=$t(),uv={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},dv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),fv={500:dv("There was an error processing your request."),400:"Invalid request"},z5=fv[uv.INTERNAL_SERVER_ERROR],j5={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},Q5={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},J5={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},X5={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:"value is required",SEARCH_VALUE_TOO_LARGE:"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 ${lv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${lv.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"},Z5={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${cv.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${cv.INSERT_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"},mv={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"},e6={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:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_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:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},t6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},r6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},n6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},s6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},pv={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},hv={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:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},i6={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},o6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},a6={...mv,...J5,...j5,...e6,...t6,...r6,...n6,...s6,...Z5,...pv,...hv,...i6,...o6,...Q5};Ev.exports={CHECK_LOGS_WRAPPER:dv,HDB_ERROR_MSGS:a6,DEFAULT_ERROR_MSGS:fv,DEFAULT_ERROR_RESP:z5,HTTP_STATUS_CODES:uv,LMDB_ERRORS_ENUM:X5,AUTHENTICATION_ERROR_MSGS:mv,VALIDATION_ERROR_MSGS:pv,ITC_ERRORS:hv}});var _e=M((Qwe,Sv)=>{"use strict";var Ru=Kr(),c6=Q(),l6=(H(),D(W)),XE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,_v),this.statusCode=n||Ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ru.DEFAULT_ERROR_MSGS[n]?Ru.DEFAULT_ERROR_MSGS[n]:Ru.DEFAULT_ERROR_MSGS[Ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&c6[s](i)}},SA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},TA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _v(e,t,r,n=l6.LOG_LEVELS.ERROR,s=null,i=!1){if(gv(e))return e;let a=new XE(e,t,r,n,s);return i&&delete a.stack,a}o(_v,"handleHDBError");function Au(e){this.message=e}o(Au,"Violation");Au.prototype=Object.create(Error.prototype);Au.prototype.constructor=Au;Au.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var yA=class extends Au{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function gv(e){return e.__proto__.constructor.name===XE.name}o(gv,"isHDBError");Sv.exports={isHDBError:gv,handleHDBError:_v,ClientError:SA,ServerError:TA,AccessViolation:yA,Violation:Au,hdbErrors:Ru}});var rm={};Ie(rm,{server:()=>Ue});var Tv,Ue,xr=ie(()=>{Tv=w(ii()),Ue={};(0,Tv._assignPackageExport)("server",Ue)});var Tt=M(tr=>{"use strict";var Is=(H(),D(W)),Ir=oe(),lr=Q(),{configValidator:u6,routesValidator:yv}=gA(),cn=require("fs-extra"),Av=require("yaml"),Qn=require("path"),d6=require("is-number"),bv=require("properties-reader"),f6=require("lodash"),{handleHDBError:m6}=_e(),{HTTP_STATUS_CODES:p6,HDB_ERROR_MSGS:bu}=Kr(),{server:h6}=(xr(),D(rm)),{PACKAGE_ROOT:Iv}=bt(),{DATABASES_PARAM_CONFIG:nm,CONFIG_PARAMS:jn,CONFIG_PARAM_MAP:oi}=Is,E6="Unable to get config value because config is uninitialized",_6="Config successfully initialized",g6="Error backing up config file",S6="Empty parameter sent to getConfigValue",wv=Qn.join(Iv,"config","yaml",Is.HDB_DEFAULT_CONFIG_FILE),T6=Qn.join(Iv,"config","yaml","defaultNatsConfig.yaml"),y6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Rv={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"},ZE,Ut,e_;tr.createConfigFile=R6;tr.getDefaultConfig=A6;tr.getConfigValue=Cv;tr.initConfig=t_;tr.flattenConfig=Iu;tr.updateConfigValue=Ov;tr.updateConfigObject=I6;tr.getConfiguration=C6;tr.setConfiguration=O6;tr.readConfigFile=IA;tr.getClusteringRoutes=P6;tr.initOldConfig=Pv;tr.getConfigFromFile=L6;tr.getConfigFilePath=qc;tr.addConfig=D6;tr.deleteConfigFromFile=M6;tr.getConfigObj=v6;tr.resolvePath=RA;tr.getFlatConfigObj=U6;function RA(e){if(e?.startsWith("~/"))return Qn.join(Ir.getHomeDir(),e.slice(1));let t=ue();try{return Qn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(RA,"resolvePath");function R6(e,t=!1){let r=wa(wv);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=Av.parseDocument(cn.readFileSync(T6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}ZE=Iu(r.toJSON());let n;for(let c in e){let l=oi[c.toLowerCase()];if(l===jn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=AA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){lr.error(f)}}}n&&Nv(r,n),bA(r,t);let s=r.toJSON();Ut=Iu(s);let i=r.getIn(["rootPath"]),a=Qn.join(i,Is.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),lr.trace(`Config file written to ${a}`)}o(R6,"createConfigFile");function Nv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ir.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(nm.TABLES))for(let i in n[s][nm.TABLES])for(let a in n[s][nm.TABLES][i]){let c=n[s][nm.TABLES][i][a],l=[jn.DATABASES,s,nm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[jn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){lr.error("Error parsing schemas CLI/env config arguments",n)}}o(Nv,"setSchemasConfig");function A6(e){if(ZE===void 0){let r=wa(wv);ZE=Iu(r.toJSON())}let t=oi[e.toLowerCase()];if(t!==void 0)return ZE[t.toLowerCase()]}o(A6,"getDefaultConfig");function Cv(e){if(e==null){lr.info(S6);return}if(Ut===void 0){lr.trace(E6);return}let t=oi[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}o(Cv,"getConfigValue");function qc(e=Ir.getPropsFilePath()){let t=Ir.getEnvCliRootPath();if(t)return RA(Qn.join(t,Is.HDB_CONFIG_FILE));let r=bv(e);return RA(r.get(Is.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(qc,"getConfigFilePath");function t_(e=!1){if(Ut===void 0||e){let t;if(!Ir.noBootFile()){t=Ir.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw lr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=qc(t),n;if(r.includes("config/settings.js"))try{Pv(r);return}catch(i){if(i.code!==Is.NODE_ERROR_CODES.ENOENT)throw i}try{n=wa(r)}catch(i){if(i.code===Is.NODE_ERROR_CODES.ENOENT){lr.trace(`HarperDB config file not found at ${r}.
4
- This can occur during early stages of install where the config file has not yet been created`);return}else throw lr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}b6(n,r),bA(n);let s=n.toJSON();if(h6.config=s,Ut=Iu(s),Ut.logging_rotation_rotate)for(let i in Rv)Ut[i]&&lr.error(`Config ${Rv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lr.trace(_6)}}o(t_,"initConfig");function b6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(lr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(b6,"checkForUpdatedConfig");function bA(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw bu.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw bu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=u6(r,t);if(n.error)throw bu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(bA,"validateConfig");function I6(e,t){Ut===void 0&&(Ut={});let r=oi[e.toLowerCase()];if(r===void 0){lr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}o(I6,"updateConfigObject");function Ov(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&t_();let a=Cv(oi.hdb_root),c=Qn.join(a,Is.HDB_CONFIG_FILE),l=wa(c),u;if(r&&Ut){let m=!1;for(let p in r)if(r[p]!=Ut[p.toLowerCase()]){m=!0;break}if(!m){lr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===jn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=oi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=AA(m,t);l.setIn([...p],h)}else for(let m in r){let p=oi[m.toLowerCase()];if(p===jn.HTTP_SECUREPORT&&r[m]===Ut[jn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===jn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ut[jn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===jn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Is.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=AA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){lr.error(A)}}}u&&Nv(l,u),bA(l);let d=l.getIn(["rootPath"]),f=Qn.join(d,Is.HDB_CONFIG_FILE);if(n===!0&&w6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Ut=Iu(l.toJSON())),lr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Ov,"updateConfigValue");function w6(e,t){try{let r=Qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Is.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),lr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lr.error(g6),lr.error(r)}}o(w6,"backupConfigFile");var N6=["databases"];function Iu(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),e_=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!N6.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!jn[l.toUpperCase()]&&oi[l]&&(s[oi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Iu,"flattenConfig");function AA(e,t){if(e===jn.CLUSTERING_NODENAME||e===jn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(d6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ir.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 Ir.autoCast(t)}o(AA,"castConfigValue");function C6(){let e=Ir.getPropsFilePath(),t=qc(e);return wa(t).toJSON()}o(C6,"getConfiguration");async function O6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Ov(void 0,void 0,s,!0),y6}catch(i){throw typeof i=="string"||i instanceof String?m6(i,i,p6.BAD_REQUEST,void 0,void 0,!0):i}}o(O6,"setConfiguration");function IA(){let e=Ir.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ir.noBootFile())throw lr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=qc(e);return wa(t).toJSON()}o(IA,"readConfigFile");function wa(e){return Av.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(wa,"parseYamlDoc");function P6(){let e=IA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ir.isEmptyOrZeroLength(t)?[]:t;let r=yv(t);if(r)throw bu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ir.isEmptyOrZeroLength(n)?[]:n;let s=yv(n);if(s)throw bu.CONFIG_VALIDATION(s.message);if(!Ir.isEmptyOrZeroLength(n)&&!Ir.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ir.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw bu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(P6,"getClusteringRoutes");function Pv(e){let t=bv(e);Ut={};for(let r in oi){let n=t.get(r.toUpperCase());if(Ir.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=oi[r].toLowerCase();s===jn.LOGGING_ROOT?Ut[s]=Qn.dirname(n):Ut[s]=n}return Ut}o(Pv,"initOldConfig");function L6(e){let t=IA();return f6.get(t,e.replaceAll("_","."))}o(L6,"getConfigFromFile");async function D6(e,t){let r=wa(qc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await cn.writeFile(qc(),String(r))}o(D6,"addConfig");function M6(e){let t=qc(Ir.getPropsFilePath()),r=wa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Qn.join(n,Is.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(M6,"deleteConfigFromFile");function v6(){return e_||(t_(),e_)}o(v6,"getConfigObj");function U6(){return Ut||t_(),Ut}o(U6,"getFlatConfigObj")});var ue=M((Uv,xv)=>{"use strict";var wA=require("fs-extra"),Gc=require("path"),Lv=require("os"),x6=require("properties-reader"),im=Q(),sm=oe(),ke=(H(),D(W)),r_=Tt(),B6="Error initializing environment manager",n_="BOOT_PROPS_FILE_PATH",Dv=!1,F6={[ke.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ro={};Object.assign(Uv,xv.exports={BOOT_PROPS_FILE_PATH:n_,getHdbBasePath:k6,setHdbBasePath:H6,get:Mv,initSync:G6,setProperty:Ze,initTestEnvironment:V6,setCloneVar:$6});function k6(){return Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(k6,"getHdbBasePath");function H6(e){Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(H6,"setHdbBasePath");function Mv(e){let t=r_.getConfigValue(e);return t===void 0?Ro[e]:t}o(Mv,"get");function Ze(e,t){F6[e]&&(Ro[e]=t),r_.updateConfigObject(e,t)}o(Ze,"setProperty");function q6(){let e;try{e=sm.getPropsFilePath(),wA.accessSync(e,wA.constants.F_OK|wA.constants.R_OK),Dv=!0;let t=x6(e);return Ro[ke.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ke.HDB_SETTINGS_NAMES.INSTALL_USER),Ro[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ro[n_]=e,!0}catch{return im.trace(`Environment manager found no properties file at ${e}`),!1}}o(q6,"doesPropFileExist");function G6(e=!1){try{((Dv||q6()||sm.noBootFile())&&!vv||e)&&(r_.initConfig(e),Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=r_.getConfigValue(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){im.error(B6),im.error(t),console.error(t),process.exit(1)}}o(G6,"initSync");var vv=!1;function $6(e){vv=e}o($6,"setCloneVar");function V6(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Gc.join(__dirname,"../../","unitTests");Ro[n_]=Gc.join(l,"hdb_boot_properties.file"),Ze(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Gc.join(l,"settings.test")),Ze(ke.HDB_SETTINGS_NAMES.INSTALL_USER,Lv.userInfo()?Lv.userInfo().username:void 0),Ze(ke.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Gc.join(l,"envDir","log")),Ze(ke.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Gc.join(l,"envDir")),Ze(ke.CONFIG_PARAMS.STORAGE_PATH,Gc.join(l,"envDir")),s&&(Ze(ke.CONFIG_PARAMS.HTTP_SECUREPORT,Mv(ke.CONFIG_PARAMS.HTTP_PORT)),Ze(ke.CONFIG_PARAMS.HTTP_PORT,null)),Ze(ke.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(ke.CONFIG_PARAMS.HTTP_PORT,9926),Ze(ke.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(ke.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(ke.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,sm.isEmpty(i)?!1:i),Ze(ke.CONFIG_PARAMS.HTTP_CORS,sm.isEmpty(i)?!1:i),Ze(ke.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(ke.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Gc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(ke.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,sm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(ke.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(ke.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(ke.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(ke.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${n_}. Please check your boot props and settings files`;im.fatal(r),im.error(t)}}o(V6,"initTestEnvironment")});var NA=M((tNe,Bv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=bt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",ee=>{console.error("Error trying to compile TypeScript",ee)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=Bv.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),ee=F+".js";if(s(ee))return ee;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var yt=M((rNe,Vv)=>{"use strict";var um=(H(),D(W)),K6=oe(),Nn=ue(),dm=require("path"),Y6=require("minimist"),Fv=require("fs-extra"),kv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:s_}=um,am,cm,lm;function Hv(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o(Hv,"getBaseSchemaPath");function qv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=$v(s_),cm}o(qv,"getSystemSchemaPath");function Gv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(Gv,"getTransactionAuditStoreBasePath");function W6(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(Gv(),e.toString())}o(W6,"getTransactionAuditStorePath");function $v(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join(Hv(),e)}o($v,"getSchemaPath");function z6(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Y6(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!K6.isObject(n))throw a;i=n}for(let a of i){let c=a[s_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return kv.set(l,[s_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return kv.set(l,[s_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!Fv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return Fv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return qv()}o(z6,"initSystemSchemaPaths");function j6(){am=void 0,cm=void 0,lm=void 0}o(j6,"resetPaths");Vv.exports={getBaseSchemaPath:Hv,getSystemSchemaPath:qv,getTransactionAuditStorePath:W6,getTransactionAuditStoreBasePath:Gv,getSchemaPath:$v,initSystemSchemaPaths:z6,resetPaths:j6}});var Cn=M((oNe,jv)=>{"use strict";var Q6=Kr().LMDB_ERRORS_ENUM,sNe=require("lmdb"),J6=$t(),iNe=require("buffer").Buffer,{OVERFLOW_MARKER:Kv,MAX_SEARCH_KEY_LENGTH:i_}=J6,Yv=["number","string","symbol","boolean","bigint"];function X6(e){if(e=e?.primaryStore||e,!e)throw new Error(Q6.ENV_REQUIRED)}o(X6,"validateEnv");function Z6(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(Z6,"stringifyData");function e8(e){return e instanceof Date?e.valueOf():e}o(e8,"convertKeyValueToWrite");function t8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(Yv.includes(typeof e))return e.length>i_?[e.slice(0,i_)+Kv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(Yv.includes(typeof i))i.length>i_?r.push(i.slice(0,i_)+Kv):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(t8,"getIndexedValues");var o_=0,Wv=0;function zv(){Wv=Date.now()-performance.now()}o(zv,"adjustStartTime");zv();var r8=6e4;setInterval(zv,r8).unref();function n8(){let e=performance.now()+Wv;return e>o_?(o_=e,e):(o_+=488e-6,o_)}o(n8,"getNextMonotonicTime");jv.exports={validateEnv:X6,stringifyData:Z6,convertKeyValueToWrite:e8,getNextMonotonicTime:n8,getIndexedValues:t8}});var fm=M((cNe,Qv)=>{"use strict";var s8=(H(),D(W)).OPERATIONS_ENUM,CA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=s8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Qv.exports=CA});var mm=M((dNe,eU)=>{"use strict";var uNe=fm(),a_=(H(),D(W)),OA=oe(),Jv=Q(),i8=require("uuid"),{handleHDBError:c_,hdbErrors:o8}=_e(),{HDB_ERROR_MSGS:l_,HTTP_STATUS_CODES:u_}=o8;eU.exports=Xv;function Xv(e,t,r){for(let s=0;s<t.length;s++)Zv(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];a8(i,r,e.operation)}}o(Xv,"processRows");Xv.validateAttribute=Zv;function Zv(e){if(Buffer.byteLength(String(e))>a_.INSERT_MAX_CHARACTER_SIZE)throw c_(new Error,l_.ATTR_NAME_LENGTH_ERR(e),u_.BAD_REQUEST,void 0,void 0,!0);if(OA.isEmptyOrZeroLength(e)||OA.isEmpty(e.trim()))throw c_(new Error,l_.ATTR_NAME_NULLISH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(Zv,"validateAttribute");function a8(e,t,r){if(!e.hasOwnProperty(t)||OA.isEmptyOrZeroLength(e[t])){if(r===a_.OPERATIONS_ENUM.INSERT||r===a_.OPERATIONS_ENUM.UPSERT){e[t]=i8.v4();return}throw Jv.error("Update transaction aborted due to record with no hash value:",e),c_(new Error,l_.RECORD_MISSING_HASH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>a_.INSERT_MAX_CHARACTER_SIZE)throw Jv.error(e),c_(new Error,l_.HASH_VAL_LENGTH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(a8,"validateHash")});function aU(e){LA=e}function d8(){u8=setInterval(function(){for(let e of PA)if(e.stale){let t=e.getContext()?.url;sU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},l8).unref()}var DA,nU,sU,iU,oU,tU,PA,c8,Ao,pm,rU,LA,bo,d_,l8,u8,hm=ie(()=>{DA=w(Cn()),nU=w(_e()),sU=w(Q()),iU=w(ue());H();oU=w(oe()),tU=100,PA=new Set,c8=(0,oU.convertToMS)(iU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(aU,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),PA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(PA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-rU>c8)throw new nU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,DA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Ao.LINGERING:Ao.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<tU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return pm||(pm=s,rU=performance.now(),pm.then(()=>{pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];LA&&p&&i.push(LA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+tU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},d_=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DA.getNextMonotonicTime)())}getReadTxn(){}},l8=3e4;o(d8,"startMonitoringTxns");d8()});var cU,Jn,MA,wu=ie(()=>{cU=require("events"),Jn=class extends cU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new MA;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},MA=class{static{o(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 Rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new bo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var lU,Ca=ie(()=>{lU=w(ii());hm();o(Rt,"transaction");(0,lU._assignPackageExport)("transaction",Rt);Rt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Rt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var UA={};Ie(UA,{add:()=>f_,applyReverse:()=>uU,getRecordAtTime:()=>vA,rebuildUpdateBefore:()=>m_});function f_(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function m_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,f_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function uU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=f8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=dU}}function vA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":uU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===dU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var f8,dU,p_=ie(()=>{Io();o(f_,"add");f_.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};f8={add:f_};o(m_,"rebuildUpdateBefore");o(uU,"applyReverse");dU={};o(vA,"getRecordAtTime")});var Xn=M(E_=>{var h_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])h_.logsAtLevel(e)&&(E_[e]=h_[e]);E_.loggerWithTag=e=>h_.loggerWithTag(e,!0);E_.setLogLevel=h_.setLogLevel});var gU={};Ie(gU,{parse:()=>FA,streamAsJSON:()=>_m,stringify:()=>$c});function _m(e){return new xA({value:e})}function fU(e){return console.error(e),JSON.stringify(Em(e))}function mU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function $c(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===EU)return _U(e);if(t.resolution)return t.resolution.then(()=>$c(e));throw t}}function _U(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=_U(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+$c(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function FA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),h8.test(e)?m8.parse(e):JSON.parse(e)):null}var pU,BA,hU,m8,p8,EU,Em,xA,h8,kA=ie(()=>{pU=require("stream"),BA=w(Q()),hU=w(require("json-bigint-fixes")),m8=(0,hU.default)({useNativeBigInt:!0}),p8=1e4,EU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw EU};({errorToString:Em}=BA);o(_m,"streamAsJSON");xA=class extends pU.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(BA.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),fU)}catch(s){yield fU(s)}else yield $c(t)}else yield $c(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);mU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Em(t)),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>p8?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 mU(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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(Em(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(fU,"handleError");o(mU,"when");o($c,"stringify");o(_U,"jsStringify");h8=/[[,:]\s*-?\d{16,}/;o(FA,"parse")});var CU={};Ie(CU,{asyncSerialization:()=>VA,contentTypes:()=>$A,findBestSerializer:()=>g_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>KA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>__});function E8(e){try{return e?.[0]===123?GA(e):e}catch{return e}}function Tm(e){e.register(_8,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Vc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Kc.Readable.from((0,Ui.encodeIter)(t,Sm)):(0,Ui.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),__(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ui.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function g_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new yU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(e,t,r){let n=TU&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof ws)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=g_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),qA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>TU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=g_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function VA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function KA(){return!!wo}function g8(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function T8(e){return S8.includes(e)}function y8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Oo(e="",t=!1){let r=y8(e),n=r.type&&ln.get(r.type)?.deserialize||R8(r);return t?s=>g8(s).then(n):n}function R8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!T8(e.parameters.charset)&&qA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return GA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function A8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function __(e,t){let r=Kc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new bU.Transform(n,s);return r.pipe(i)}var Ui,Vc,No,yU,Kc,RU,HA,AU,qA,bU,IU,wU,gm,GA,Sm,ln,$A,SU,NU,_8,TU,wo,S8,Po=ie(()=>{kA();Ui=require("msgpackr"),Vc=require("cbor-x"),No=require("zlib"),yU=w(_e()),Kc=w(require("stream"));xr();RU=w(ii()),HA=w(ue());H();AU=w(require("yaml")),qA=w(Xn());Ns();bU=require("json2csv"),IU=w(require("fastify-plugin")),wU=HA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=wU?$c:JSON.stringify,GA=wU?FA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},ln=new Map,$A=ln;Ue.contentTypes=$A;(0,RU._assignPackageExport)("contentTypes",$A);ln.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return GA(e)},q:.8});SU=new Vc.Encoder(Sm);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Vc.EncoderStream(Sm).end(e)},serialize:SU.encode,deserialize:SU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Kc.Readable.from((0,Ui.encodeIter)(e,Sm)):(0,Ui.pack)(e)},serialize:Ui.pack,deserialize:Ui.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),__(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),__(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Kc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return AU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Kc.Readable.from(A8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
3
+ `)},m5="certificate.pem",p5="privateKey.pem",h5="caCertificate.pem",E5="natsCertificate.pem",_5="natsCaCertificate.pem",It={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},g5={tls_certificate:It.SERVER,tlsCertificateAuthority:It.CA,customFunctions_tls_certificate:It.SERVER,customFunctionsTlsCertificateAuthority:It.CA,operationsApi_tls_certificate:It["OPERATIONS-API"],operationsApiTlsCertificateAuthority:It["OPERATIONS-CA"]},S5={[It.SERVER]:2,[It.DEFAULT]:1},T5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},y5={[It["OPERATIONS-API"]]:3,[It.SERVER]:2,[It.DEFAULT]:1},R5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},A5={[It["OPERATIONS-CA"]]:3,[It.CA]:2,[It["DEFAULT-CA"]]:1},b5={[It.CA]:2,[It["DEFAULT-CA"]]:1};an.CERTIFICATE_PEM_NAME=m5;an.PRIVATEKEY_PEM_NAME=p5;an.CA_PEM_NAME=h5;an.CERT_NAME=It;an.CERT_CONFIG_NAME_MAP=g5;an.CERT_PREFERENCE_APP=S5;an.CERT_PREFERENCE_OPS=T5;an.CERT_PREFERENCE_REP=y5;an.CA_CERT_PREFERENCE_REP=R5;an.CA_CERT_PREFERENCE_OPS=A5;an.CA_CERT_PREFERENCE_APP=b5;an.CERTIFICATE_VALUES=f5;an.NATS_CERTIFICATE_PEM_NAME=E5;an.NATS_CA_PEM_NAME=_5});var ft=M((Wwe,rv)=>{"use strict";var In=require("validate.js");In.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||In.validators.type.checks[t](e)?null:` must be a '${t}' value`};In.validators.type.checks={Object:o(function(e){return In.isObject(e)&&!In.isArray(e)},"Object"),Array:In.isArray,Integer:In.isInteger,Number:In.isNumber,String:In.isString,Date:In.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};In.validators.hasValidFileExt=function(e,t){return In.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};rv.exports={validateObject:I5,validateObjectAsync:w5,validateBySchema:N5};function I5(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=In(e,t,{format:"flat"});return r?new Error(r):null}o(I5,"validateObject");async function w5(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await In.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(w5,"validateObjectAsync");function N5(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(N5,"validateBySchema")});var gA=M((Qwe,cv)=>{"use strict";var ov=require("fs-extra"),ge=require("joi"),C5=require("os"),{boolean:Ke,string:Et,number:cr,array:Ia}=ge.types(),{totalmem:nv}=require("os"),Hc=require("path"),O5=Q(),_A=oe(),jwe=EA(),sv=(H(),D(W)),P5=ft(),iv="log",L5="components",D5="Invalid logging.rotation.maxSize unit. Available units are G, M or K",M5="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",v5="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",U5="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",x5="rootPath config parameter is undefined",wn=ge.alternatives([cr.min(0),Et]).optional().empty(null),JE=ge.alternatives([Ia.items(Et,{host:Et.required(),port:wn},{hostname:Et.required(),port:wn}).empty(null),Ia.items(Et)]),vi,av=!1;cv.exports={configValidator:B5,routesValidator:$5,routeConstraints:JE};function B5(e,t=!1){if(av=t,vi=e.rootPath,_A.isEmpty(vi))throw x5;let r=Ke.optional(),n=cr.min(0).max(1e3).empty(null).default(q5),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tm),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ge.string().empty(null).default(tm),l=ge.custom(k5).empty(null).default(tm),u=e.clustering?.enabled,d=ge.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=ge.object({enabled:r,hubServer:ge.object({cluster:ge.object({name:ge.required().empty(null),network:ge.object({port:wn,routes:JE}).required()}).required(),leafNodes:ge.object({network:ge.object({port:wn}).required()}).required(),network:ge.object({port:wn}).required()}).required(),leafServer:ge.object({network:ge.object({port:wn,routes:JE}).required(),streams:ge.object({maxAge:cr.min(120).allow(null).optional(),maxBytes:cr.min(1).allow(null).optional(),maxMsgs:cr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ge.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Ke.optional(),databaseLevel:Ke.optional(),tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.required(),verify:Ke.optional()}),user:Et.optional().empty(null)}).optional():f=ge.object({enabled:r,tls:ge.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Ke.optional()})}).optional(),ge.object({authentication:ge.alternatives(ge.object({authorizeLocal:Ke,cacheTTL:cr.required(),cookie:ge.object({domains:Ia.items(Et).optional(),expires:Et.optional()}),enableSessions:Ke,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),Ke).optional(),analytics:ge.object({aggregatePeriod:cr,replicate:Ke.optional()}),replication:ge.object({hostname:ge.alternatives(Et,cr).optional().empty(null),url:Et.optional().empty(null),port:wn,securePort:wn,routes:Ia.optional().empty(null),databases:ge.alternatives(Et,Ia),enableRootCAs:Ke.optional(),copyTablesToCatchUp:Ke.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:ge.object({enabled:r}).required(),logging:ge.object({auditAuthEvents:ge.object({logFailed:Ke,logSuccessful:Ke}),file:Ke.required(),level:ge.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ge.object({enabled:Ke.optional(),compress:Ke.optional(),interval:Et.custom(G5).optional().empty(null),maxSize:Et.custom(H5).optional().empty(null),path:Et.optional().empty(null).default(tm)}).required(),root:s,stdStreams:Ke.required(),auditLog:Ke.required()}).required(),operationsApi:ge.object({network:ge.object({cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:cr.min(1).optional(),keepAliveTimeout:cr.min(1).optional(),port:wn,domainSocket:ge.optional().empty("hdb/operations-server").default(tm),securePort:wn,timeout:cr.min(1).optional()}).optional(),tls:ge.alternatives([ge.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ge.object({network:ge.object({port:wn,securePort:wn,mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})])}).required(),webSocket:Ke.optional(),requireAuthentication:Ke.optional()}),http:ge.object({compressionThreshold:cr.optional(),cors:Ke.optional(),corsAccessList:Ia.optional(),headersTimeout:cr.min(1).optional(),port:wn,securePort:wn,maxHeaderSize:cr.optional(),mtls:ge.alternatives([Ke.optional(),ge.object({user:Et.optional(),certificateAuthority:i,required:Ke.optional()})]),threadRange:ge.alternatives([Ia.optional(),Et.optional()])}).required(),threads:ge.alternatives(n.optional(),ge.object({count:n.optional(),debug:ge.alternatives(Ke.optional(),ge.object({startingPort:cr.min(1).optional(),host:Et.optional(),waitForDebugger:Ke.optional()})),maxHeapMemory:cr.min(0).optional()})),storage:ge.object({writeAsync:Ke.required(),overlappingSync:Ke.optional(),caching:Ke.optional(),compression:ge.alternatives([Ke.optional(),ge.object({dictionary:Et.optional(),threshold:cr.optional()})]),compactOnStart:Ke.optional(),compactOnStartKeepBackup:Ke.optional(),noReadAhead:Ke.optional(),path:l,prefetchWrites:Ke.optional(),maxFreeSpaceToLoad:cr.optional(),maxFreeSpaceToRetain:cr.optional()}).required(),ignoreScripts:Ke.optional(),tls:ge.alternatives([ge.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(B5,"configValidator");function F5(e){return av||ov.existsSync(e)?null:`Specified path ${e} does not exist.`}o(F5,"doesPathExist");function k5(e,t){ge.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=F5(e);if(r)return t.message(r)}o(k5,"validatePath");function H5(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(D5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(v5):e}o(H5,"validateRotationMaxSize");function G5(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(M5);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(U5):e}o(G5,"validateRotationInterval");function q5(e,t){let r=t.state.path.join("."),n=C5.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||nv();return i=Math.round(Math.min(i,nv())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),O5.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(q5,"setDefaultThreads");function tm(e,t){let r=t.state.path.join(".");if(!_A.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(_A.isEmpty(vi))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Hc.join(vi,L5);case"logging.root":return Hc.join(vi,iv);case"clustering.leafServer.streams.path":return Hc.join(vi,"clustering","leaf");case"storage.path":let n=Hc.join(vi,sv.LEGACY_DATABASES_DIR_NAME);return ov.existsSync(n)?n:Hc.join(vi,sv.DATABASES_DIR_NAME);case"logging.rotation.path":return Hc.join(vi,iv);case"operationsApi.network.domainSocket":return r==null?null:Hc.join(vi,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(tm,"setDefaultRoot");function $5(e){let t=ge.object({routes:JE});return P5.validateBySchema({routes:e},t)}o($5,"routesValidator")});var $t=M((Xwe,uv)=>{"use strict";var V5="__dbis__",K5="__txns__",Y5="__environment_name__",W5="__dbi_defintion__",z5={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"},j5=["__createdtime__","__updatedtime__"],Q5="\uFFFF",lv={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},J5=Object.values(lv);uv.exports={AUDIT_STORE_NAME:K5,INTERNAL_DBIS_NAME:V5,DBI_DEFINITION_NAME:W5,SEARCH_TYPES:z5,TIMESTAMP_NAMES:j5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Y5,TRANSACTIONS_DBI_NAMES_ENUM:lv,TRANSACTIONS_DBIS:J5,OVERFLOW_MARKER:Q5}});var Kr=M((Zwe,Sv)=>{"use strict";var dv=(H(),D(W)),fv=$t(),mv={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},pv=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hv={500:pv("There was an error processing your request."),400:"Invalid request"},X5=hv[mv.INTERNAL_SERVER_ERROR],Z5={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},e6={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},t6={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),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:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},r6={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:"value is required",SEARCH_VALUE_TOO_LARGE:"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 ${fv.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${fv.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"},n6={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${dv.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),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 ${dv.INSERT_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"},Ev={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"},s6={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:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_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:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},i6={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_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:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),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:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},o6={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},a6={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},c6={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},_v={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},gv={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:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},l6={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.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},u6={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},d6={...Ev,...t6,...Z5,...s6,...i6,...o6,...a6,...c6,...n6,..._v,...gv,...l6,...u6,...e6};Sv.exports={CHECK_LOGS_WRAPPER:pv,HDB_ERROR_MSGS:d6,DEFAULT_ERROR_MSGS:hv,DEFAULT_ERROR_RESP:X5,HTTP_STATUS_CODES:mv,LMDB_ERRORS_ENUM:r6,AUTHENTICATION_ERROR_MSGS:Ev,VALIDATION_ERROR_MSGS:_v,ITC_ERRORS:gv}});var _e=M((tNe,Rv)=>{"use strict";var Ru=Kr(),f6=Q(),m6=(H(),D(W)),XE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,Tv),this.statusCode=n||Ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ru.DEFAULT_ERROR_MSGS[n]?Ru.DEFAULT_ERROR_MSGS[n]:Ru.DEFAULT_ERROR_MSGS[Ru.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&f6[s](i)}},SA=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},TA=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Tv(e,t,r,n=m6.LOG_LEVELS.ERROR,s=null,i=!1){if(yv(e))return e;let a=new XE(e,t,r,n,s);return i&&delete a.stack,a}o(Tv,"handleHDBError");function Au(e){this.message=e}o(Au,"Violation");Au.prototype=Object.create(Error.prototype);Au.prototype.constructor=Au;Au.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var yA=class extends Au{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function yv(e){return e.__proto__.constructor.name===XE.name}o(yv,"isHDBError");Rv.exports={isHDBError:yv,handleHDBError:Tv,ClientError:SA,ServerError:TA,AccessViolation:yA,Violation:Au,hdbErrors:Ru}});var rm={};Ie(rm,{server:()=>Ue});var Av,Ue,xr=ie(()=>{Av=w(ii()),Ue={};(0,Av._assignPackageExport)("server",Ue)});var yt=M(tr=>{"use strict";var Is=(H(),D(W)),Ir=oe(),lr=Q(),{configValidator:p6,routesValidator:bv}=gA(),cn=require("fs-extra"),wv=require("yaml"),Qn=require("path"),h6=require("is-number"),Nv=require("properties-reader"),E6=require("lodash"),{handleHDBError:_6}=_e(),{HTTP_STATUS_CODES:g6,HDB_ERROR_MSGS:bu}=Kr(),{server:S6}=(xr(),D(rm)),{PACKAGE_ROOT:Cv}=Tt(),{DATABASES_PARAM_CONFIG:nm,CONFIG_PARAMS:jn,CONFIG_PARAM_MAP:oi}=Is,T6="Unable to get config value because config is uninitialized",y6="Config successfully initialized",R6="Error backing up config file",A6="Empty parameter sent to getConfigValue",Ov=Qn.join(Cv,"config","yaml",Is.HDB_DEFAULT_CONFIG_FILE),b6=Qn.join(Cv,"config","yaml","defaultNatsConfig.yaml"),I6="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Iv={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"},ZE,Ut,e_;tr.createConfigFile=w6;tr.getDefaultConfig=N6;tr.getConfigValue=Lv;tr.initConfig=t_;tr.flattenConfig=Iu;tr.updateConfigValue=Dv;tr.updateConfigObject=O6;tr.getConfiguration=D6;tr.setConfiguration=M6;tr.readConfigFile=IA;tr.getClusteringRoutes=v6;tr.initOldConfig=Mv;tr.getConfigFromFile=U6;tr.getConfigFilePath=Gc;tr.addConfig=x6;tr.deleteConfigFromFile=B6;tr.getConfigObj=F6;tr.resolvePath=RA;tr.getFlatConfigObj=k6;function RA(e){if(e?.startsWith("~/"))return Qn.join(Ir.getHomeDir(),e.slice(1));let t=ue();try{return Qn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(RA,"resolvePath");function w6(e,t=!1){let r=wa(Ov);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=wv.parseDocument(cn.readFileSync(b6,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}ZE=Iu(r.toJSON());let n;for(let c in e){let l=oi[c.toLowerCase()];if(l===jn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=AA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){lr.error(f)}}}n&&Pv(r,n),bA(r,t);let s=r.toJSON();Ut=Iu(s);let i=r.getIn(["rootPath"]),a=Qn.join(i,Is.HDB_CONFIG_FILE);if(cn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);cn.writeFileSync(a,String(r)),lr.trace(`Config file written to ${a}`)}o(w6,"createConfigFile");function Pv(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Ir.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(nm.TABLES))for(let i in n[s][nm.TABLES])for(let a in n[s][nm.TABLES][i]){let c=n[s][nm.TABLES][i][a],l=[jn.DATABASES,s,nm.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[jn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){lr.error("Error parsing schemas CLI/env config arguments",n)}}o(Pv,"setSchemasConfig");function N6(e){if(ZE===void 0){let r=wa(Ov);ZE=Iu(r.toJSON())}let t=oi[e.toLowerCase()];if(t!==void 0)return ZE[t.toLowerCase()]}o(N6,"getDefaultConfig");function Lv(e){if(e==null){lr.info(A6);return}if(Ut===void 0){lr.trace(T6);return}let t=oi[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}o(Lv,"getConfigValue");function Gc(e=Ir.getPropsFilePath()){let t=Ir.getEnvCliRootPath();if(t)return RA(Qn.join(t,Is.HDB_CONFIG_FILE));let r=Nv(e);return RA(r.get(Is.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Gc,"getConfigFilePath");function t_(e=!1){if(Ut===void 0||e){let t;if(!Ir.noBootFile()){t=Ir.getPropsFilePath();try{cn.accessSync(t,cn.constants.F_OK|cn.constants.R_OK)}catch(i){throw lr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gc(t),n;if(r.includes("config/settings.js"))try{Mv(r);return}catch(i){if(i.code!==Is.NODE_ERROR_CODES.ENOENT)throw i}try{n=wa(r)}catch(i){if(i.code===Is.NODE_ERROR_CODES.ENOENT){lr.trace(`HarperDB config file not found at ${r}.
4
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw lr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}C6(n,r),bA(n);let s=n.toJSON();if(S6.config=s,Ut=Iu(s),Ut.logging_rotation_rotate)for(let i in Iv)Ut[i]&&lr.error(`Config ${Iv[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lr.trace(y6)}}o(t_,"initConfig");function C6(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(lr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);cn.writeFileSync(t,String(e))}}o(C6,"checkForUpdatedConfig");function bA(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw bu.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw bu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=p6(r,t);if(n.error)throw bu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(bA,"validateConfig");function O6(e,t){Ut===void 0&&(Ut={});let r=oi[e.toLowerCase()];if(r===void 0){lr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}o(O6,"updateConfigObject");function Dv(e,t,r=void 0,n=!1,s=!1,i=!1){Ut===void 0&&t_();let a=Lv(oi.hdb_root),c=Qn.join(a,Is.HDB_CONFIG_FILE),l=wa(c),u;if(r&&Ut){let m=!1;for(let p in r)if(r[p]!=Ut[p.toLowerCase()]){m=!0;break}if(!m){lr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===jn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=oi[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=AA(m,t);l.setIn([...p],h)}else for(let m in r){let p=oi[m.toLowerCase()];if(p===jn.HTTP_SECUREPORT&&r[m]===Ut[jn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===jn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ut[jn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===jn.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Is.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=AA(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(A){lr.error(A)}}}u&&Pv(l,u),bA(l);let d=l.getIn(["rootPath"]),f=Qn.join(d,Is.HDB_CONFIG_FILE);if(n===!0&&P6(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);cn.writeFileSync(f,String(l)),s&&(Ut=Iu(l.toJSON())),lr.trace(`Config parameter: ${e} updated with value: ${t}`)}o(Dv,"updateConfigValue");function P6(e,t){try{let r=Qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Is.HDB_CONFIG_FILE}.bak`);cn.copySync(e,r),lr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lr.error(R6),lr.error(r)}}o(P6,"backupConfigFile");var L6=["databases"];function Iu(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),e_=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!L6.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!jn[l.toUpperCase()]&&oi[l]&&(s[oi[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(Iu,"flattenConfig");function AA(e,t){if(e===jn.CLUSTERING_NODENAME||e===jn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(h6(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Ir.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 Ir.autoCast(t)}o(AA,"castConfigValue");function D6(){let e=Ir.getPropsFilePath(),t=Gc(e);return wa(t).toJSON()}o(D6,"getConfiguration");async function M6(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return Dv(void 0,void 0,s,!0),I6}catch(i){throw typeof i=="string"||i instanceof String?_6(i,i,g6.BAD_REQUEST,void 0,void 0,!0):i}}o(M6,"setConfiguration");function IA(){let e=Ir.getPropsFilePath();try{cn.accessSync(e,cn.constants.F_OK|cn.constants.R_OK)}catch(n){if(!Ir.noBootFile())throw lr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gc(e);return wa(t).toJSON()}o(IA,"readConfigFile");function wa(e){return wv.parseDocument(cn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(wa,"parseYamlDoc");function v6(){let e=IA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Ir.isEmptyOrZeroLength(t)?[]:t;let r=bv(t);if(r)throw bu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Ir.isEmptyOrZeroLength(n)?[]:n;let s=bv(n);if(s)throw bu.CONFIG_VALIDATION(s.message);if(!Ir.isEmptyOrZeroLength(n)&&!Ir.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Ir.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw bu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(v6,"getClusteringRoutes");function Mv(e){let t=Nv(e);Ut={};for(let r in oi){let n=t.get(r.toUpperCase());if(Ir.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=oi[r].toLowerCase();s===jn.LOGGING_ROOT?Ut[s]=Qn.dirname(n):Ut[s]=n}return Ut}o(Mv,"initOldConfig");function U6(e){let t=IA();return E6.get(t,e.replaceAll("_","."))}o(U6,"getConfigFromFile");async function x6(e,t){let r=wa(Gc());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await cn.writeFile(Gc(),String(r))}o(x6,"addConfig");function B6(e){let t=Gc(Ir.getPropsFilePath()),r=wa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Qn.join(n,Is.HDB_CONFIG_FILE);cn.writeFileSync(s,String(r))}o(B6,"deleteConfigFromFile");function F6(){return e_||(t_(),e_)}o(F6,"getConfigObj");function k6(){return Ut||t_(),Ut}o(k6,"getFlatConfigObj")});var ue=M((Fv,kv)=>{"use strict";var wA=require("fs-extra"),qc=require("path"),vv=require("os"),H6=require("properties-reader"),im=Q(),sm=oe(),ke=(H(),D(W)),r_=yt(),G6="Error initializing environment manager",n_="BOOT_PROPS_FILE_PATH",Uv=!1,q6={[ke.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ro={};Object.assign(Fv,kv.exports={BOOT_PROPS_FILE_PATH:n_,getHdbBasePath:$6,setHdbBasePath:V6,get:xv,initSync:Y6,setProperty:Ze,initTestEnvironment:z6,setCloneVar:W6});function $6(){return Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o($6,"getHdbBasePath");function V6(e){Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(V6,"setHdbBasePath");function xv(e){let t=r_.getConfigValue(e);return t===void 0?Ro[e]:t}o(xv,"get");function Ze(e,t){q6[e]&&(Ro[e]=t),r_.updateConfigObject(e,t)}o(Ze,"setProperty");function K6(){let e;try{e=sm.getPropsFilePath(),wA.accessSync(e,wA.constants.F_OK|wA.constants.R_OK),Uv=!0;let t=H6(e);return Ro[ke.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ke.HDB_SETTINGS_NAMES.INSTALL_USER),Ro[ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ro[n_]=e,!0}catch{return im.trace(`Environment manager found no properties file at ${e}`),!1}}o(K6,"doesPropFileExist");function Y6(e=!1){try{((Uv||K6()||sm.noBootFile())&&!Bv||e)&&(r_.initConfig(e),Ro[ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=r_.getConfigValue(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){im.error(G6),im.error(t),console.error(t),process.exit(1)}}o(Y6,"initSync");var Bv=!1;function W6(e){Bv=e}o(W6,"setCloneVar");function z6(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=qc.join(__dirname,"../../","unitTests");Ro[n_]=qc.join(l,"hdb_boot_properties.file"),Ze(ke.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,qc.join(l,"settings.test")),Ze(ke.HDB_SETTINGS_NAMES.INSTALL_USER,vv.userInfo()?vv.userInfo().username:void 0),Ze(ke.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ze(ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY,qc.join(l,"envDir","log")),Ze(ke.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ze(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,qc.join(l,"envDir")),Ze(ke.CONFIG_PARAMS.STORAGE_PATH,qc.join(l,"envDir")),s&&(Ze(ke.CONFIG_PARAMS.HTTP_SECUREPORT,xv(ke.CONFIG_PARAMS.HTTP_PORT)),Ze(ke.CONFIG_PARAMS.HTTP_PORT,null)),Ze(ke.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Ze(ke.CONFIG_PARAMS.HTTP_PORT,9926),Ze(ke.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ze(ke.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Ze(ke.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,sm.isEmpty(i)?!1:i),Ze(ke.CONFIG_PARAMS.HTTP_CORS,sm.isEmpty(i)?!1:i),Ze(ke.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ze(ke.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ze(ke.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,qc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ze(ke.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,sm.isEmpty(c)?!1:c),a&&(Ze("CORS_ACCESSLIST",a),Ze(ke.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Ze(ke.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ze(ke.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Ze(ke.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ze(ke.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${n_}. Please check your boot props and settings files`;im.fatal(r),im.error(t)}}o(z6,"initTestEnvironment")});var NA=M((oNe,Hv)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=Tt(),p=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],h="ts-build";if(u){let A=!1,S=!1;if(S=s(n(m,h))){let R=new Set;e.sync(p.map(N=>`${N}/**/*.ts`),{cwd:m}).forEach(N=>{let O=0,F=0;try{R.add(N),O=i(n(m,N)).mtimeMs-5e3,F=i(n(m,h,N.replace(/.ts$/,".js"))).mtimeMs}catch{}O>F&&(A=!0)}),e.sync(p.map(N=>`${N}/**/*.js`),{cwd:n(m,h)}).forEach(N=>{if(!R.has(N.replace(/.js$/,".ts")))try{l(n(m,h,N))}catch{}})}else A=!0;if(A){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),S){let N=n(t(),"harperdb-tsc.pid"),O=!1;if(s(N))try{process.kill(+a(N,"utf8"),0),O=!0}catch{}if(!O){console.log("Starting background TypeScript compilation...");let F=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});F.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),F.pid&&c(N,String(F.pid),"utf-8"),F.unref()}}}}let E=Hv.constructor,g=E._findPath;E._findPath=function(A,S,R){if(A.startsWith(".")&&!R&&S.length===1&&S[0].startsWith(m)&&!S[0].includes("node_modules")){let N=r(m,S[0]),O;N.startsWith(h)?O=n(m,r(h,N)):O=n(m,h,N),(A.endsWith(".js")||A.endsWith(".ts"))&&(A=A.slice(0,-3));let F=n(O,A),te=F+".js";if(s(te))return te;if(F.includes(".")&&s(F))return F}return g(A,S,R)}}});var Rt=M((aNe,Wv)=>{"use strict";var um=(H(),D(W)),j6=oe(),Nn=ue(),dm=require("path"),Q6=require("minimist"),Gv=require("fs-extra"),qv=require("lodash");Nn.initSync();var{CONFIG_PARAMS:Na,DATABASES_PARAM_CONFIG:om,SYSTEM_SCHEMA_NAME:s_}=um,am,cm,lm;function $v(){if(am!==void 0)return am;if(Nn.getHdbBasePath()!==void 0)return am=Nn.get(Na.STORAGE_PATH)||dm.join(Nn.getHdbBasePath(),um.DATABASES_DIR_NAME),am}o($v,"getBaseSchemaPath");function Vv(){if(cm!==void 0)return cm;if(Nn.getHdbBasePath()!==void 0)return cm=Yv(s_),cm}o(Vv,"getSystemSchemaPath");function Kv(){if(lm!==void 0)return lm;if(Nn.getHdbBasePath()!==void 0)return lm=Nn.get(um.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||dm.join(Nn.getHdbBasePath(),um.TRANSACTIONS_DIR_NAME),lm}o(Kv,"getTransactionAuditStoreBasePath");function J6(e,t){let r=Nn.get(Na.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||dm.join(Kv(),e.toString())}o(J6,"getTransactionAuditStorePath");function Yv(e,t){e=e.toString(),t=t&&t.toString();let r=Nn.get(um.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||dm.join($v(),e)}o(Yv,"getSchemaPath");function X6(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Q6(process.argv));let n=r[Na.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!j6.isObject(n))throw a;i=n}for(let a of i){let c=a[s_];if(!c)continue;let l=Nn.get(Na.DATABASES);l=l??{};let u=c?.tables?.[t]?.[om.PATH];if(u)return qv.set(l,[s_,om.TABLES,t,om.PATH],u),Nn.setProperty(Na.DATABASES,l),u;let d=c?.[om.PATH];if(d)return qv.set(l,[s_,om.PATH],d),Nn.setProperty(Na.DATABASES,l),d}}let s=r[Na.STORAGE_PATH.toUpperCase()];if(s){if(!Gv.pathExistsSync(s))throw new Error(s+" does not exist");let i=dm.join(s,e);return Gv.mkdirsSync(i),Nn.setProperty(Na.STORAGE_PATH,s),i}return Vv()}o(X6,"initSystemSchemaPaths");function Z6(){am=void 0,cm=void 0,lm=void 0}o(Z6,"resetPaths");Wv.exports={getBaseSchemaPath:$v,getSystemSchemaPath:Vv,getTransactionAuditStorePath:J6,getTransactionAuditStoreBasePath:Kv,getSchemaPath:Yv,initSystemSchemaPaths:X6,resetPaths:Z6}});var Cn=M((dNe,Xv)=>{"use strict";var e8=Kr().LMDB_ERRORS_ENUM,lNe=require("lmdb"),t8=$t(),uNe=require("buffer").Buffer,{OVERFLOW_MARKER:zv,MAX_SEARCH_KEY_LENGTH:i_}=t8,jv=["number","string","symbol","boolean","bigint"];function r8(e){if(e=e?.primaryStore||e,!e)throw new Error(e8.ENV_REQUIRED)}o(r8,"validateEnv");function n8(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(n8,"stringifyData");function s8(e){return e instanceof Date?e.valueOf():e}o(s8,"convertKeyValueToWrite");function i8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(jv.includes(typeof e))return e.length>i_?[e.slice(0,i_)+zv]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(jv.includes(typeof i))i.length>i_?r.push(i.slice(0,i_)+zv):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(i8,"getIndexedValues");var o_=0,Qv=0;function Jv(){Qv=Date.now()-performance.now()}o(Jv,"adjustStartTime");Jv();var o8=6e4;setInterval(Jv,o8).unref();function a8(){let e=performance.now()+Qv;return e>o_?(o_=e,e):(o_+=488e-6,o_)}o(a8,"getNextMonotonicTime");Xv.exports={validateEnv:r8,stringifyData:n8,convertKeyValueToWrite:s8,getNextMonotonicTime:a8,getIndexedValues:i8}});var fm=M((mNe,Zv)=>{"use strict";var c8=(H(),D(W)).OPERATIONS_ENUM,CA=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=c8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Zv.exports=CA});var mm=M((ENe,nU)=>{"use strict";var hNe=fm(),a_=(H(),D(W)),OA=oe(),eU=Q(),l8=require("uuid"),{handleHDBError:c_,hdbErrors:u8}=_e(),{HDB_ERROR_MSGS:l_,HTTP_STATUS_CODES:u_}=u8;nU.exports=tU;function tU(e,t,r){for(let s=0;s<t.length;s++)rU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];d8(i,r,e.operation)}}o(tU,"processRows");tU.validateAttribute=rU;function rU(e){if(Buffer.byteLength(String(e))>a_.INSERT_MAX_CHARACTER_SIZE)throw c_(new Error,l_.ATTR_NAME_LENGTH_ERR(e),u_.BAD_REQUEST,void 0,void 0,!0);if(OA.isEmptyOrZeroLength(e)||OA.isEmpty(e.trim()))throw c_(new Error,l_.ATTR_NAME_NULLISH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(rU,"validateAttribute");function d8(e,t,r){if(!e.hasOwnProperty(t)||OA.isEmptyOrZeroLength(e[t])){if(r===a_.OPERATIONS_ENUM.INSERT||r===a_.OPERATIONS_ENUM.UPSERT){e[t]=l8.v4();return}throw eU.error("Update transaction aborted due to record with no hash value:",e),c_(new Error,l_.RECORD_MISSING_HASH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>a_.INSERT_MAX_CHARACTER_SIZE)throw eU.error(e),c_(new Error,l_.HASH_VAL_LENGTH_ERR,u_.BAD_REQUEST,void 0,void 0,!0)}o(d8,"validateHash")});function uU(e){LA=e}function h8(){p8=setInterval(function(){for(let e of PA)if(e.stale){let t=e.getContext()?.url;aU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},m8).unref()}var DA,oU,aU,cU,lU,sU,PA,f8,Ao,pm,iU,LA,bo,d_,m8,p8,hm=ie(()=>{DA=w(Cn()),oU=w(_e()),aU=w(Q()),cU=w(ue());H();lU=w(oe()),sU=100,PA=new Set,f8=(0,lU.convertToMS)(cU.get(B.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Ao={CLOSED:0,OPEN:1,LINGERING:2};o(uU,"replicationConfirmation");bo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Ao.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Ao.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),PA.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(PA.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(pm&&!this.overloadChecked&&performance.now()-iU>f8)throw new oU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Ao.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Ao.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,DA.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let A=g[p===0?"before":"beforeIntermediate"];if(A){let S=A();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Ao.LINGERING:Ao.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<sU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return pm||(pm=s,iU=performance.now(),pm.then(()=>{pm=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];LA&&p&&i.push(LA(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+sU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Ao.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},d_=class extends bo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,DA.getNextMonotonicTime)())}getReadTxn(){}},m8=3e4;o(h8,"startMonitoringTxns");h8()});var dU,Jn,MA,wu=ie(()=>{dU=require("events"),Jn=class extends dU.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new MA;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(){let t=this.queue?.shift();return t||this.emit("drained"),t}waitForDrain(){return new Promise(t=>{!this.queue||this.queue.length===0?t(!0):(this.once("drained",()=>t(!0)),this.currentDrainResolver=t,this.drainCloseListener||(this.drainCloseListener=!0,this.on("close",()=>{this.currentDrainResolver?.(!1)})))})}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)}},MA=class{static{o(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 At(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Ao.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new bo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var fU,Ca=ie(()=>{fU=w(ii());hm();o(At,"transaction");(0,fU._assignPackageExport)("transaction",At);At.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};At.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var UA={};Ie(UA,{add:()=>f_,applyReverse:()=>mU,getRecordAtTime:()=>vA,rebuildUpdateBefore:()=>m_});function f_(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n+BigInt(r.value):isNaN(e[t])?e[t]=r.value:e[t]=n+r.value}function m_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,f_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function mU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=E8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=pU}}function vA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":mU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===pU&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var E8,pU,p_=ie(()=>{Io();o(f_,"add");f_.reverse=function(e,t,r){let n=e[t];typeof n=="bigint"?e[t]=n-BigInt(r.value):isNaN(e[t])||(e[t]=n-r.value)};E8={add:f_};o(m_,"rebuildUpdateBefore");o(mU,"applyReverse");pU={};o(vA,"getRecordAtTime")});var Xn=M(E_=>{var h_=Q();for(let e of["trace","debug","info","warn","error","fatal","notify"])h_.logsAtLevel(e)&&(E_[e]=h_[e]);E_.loggerWithTag=e=>h_.loggerWithTag(e,!0);E_.setLogLevel=h_.setLogLevel});var yU={};Ie(yU,{parse:()=>FA,streamAsJSON:()=>_m,stringify:()=>$c});function _m(e){return new xA({value:e})}function hU(e){return console.error(e),JSON.stringify(Em(e))}function EU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function $c(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===SU)return TU(e);if(t.resolution)return t.resolution.then(()=>$c(e));throw t}}function TU(e){let t=typeof e;if(t==="object"){if(e===null)return"null";e.toJSON&&(e=e.toJSON());let r;if(Array.isArray(e)){r="[";for(let n=0;n<e.length;n++)n>0&&(r+=","),r+=TU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+$c(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function FA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),S8.test(e)?_8.parse(e):JSON.parse(e)):null}var _U,BA,gU,_8,g8,SU,Em,xA,S8,kA=ie(()=>{_U=require("stream"),BA=w(Q()),gU=w(require("json-bigint-fixes")),_8=(0,gU.default)({useNativeBigInt:!0}),g8=1e4,SU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw SU};({errorToString:Em}=BA);o(_m,"streamAsJSON");xA=class extends _U.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(BA.warn("Error serializing in stream",c),a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Em(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),hU)}catch(s){yield hU(s)}else yield $c(t)}else yield $c(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);EU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Em(t)),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>g8?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 EU(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))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(Em(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(hU,"handleError");o(EU,"when");o($c,"stringify");o(TU,"jsStringify");S8=/[[,:]\s*-?\d{16,}/;o(FA,"parse")});var LU={};Ie(LU,{asyncSerialization:()=>VA,contentTypes:()=>$A,findBestSerializer:()=>g_,getDeserializer:()=>Oo,hasAsyncSerialization:()=>KA,registerContentHandlers:()=>Tm,serialize:()=>ym,serializeMessage:()=>Co,toCsvStream:()=>__});function T8(e){try{return e?.[0]===123?qA(e):e}catch{return e}}function Tm(e){e.register(y8,{serializers:[{regex:/^application\/json$/,serializer:_m},{regex:/^application\/cbor$/,serializer:o(function(t){return new Vc.EncoderStream(Sm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Kc.Readable.from((0,Ui.encodeIter)(t,Sm)):(0,Ui.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),__(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Ui.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function g_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=ln.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,a=m)}}if(!n){if(r)throw new bU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(ln.keys()).join(", "),406);n=ln.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function ym(e,t,r){let n=AU&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof ws)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=g_(t);if(i.serializer.compressible===!1&&(n=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&e&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){if(e.mapError){let c=e.getColumns;e=e.mapError(l=>(l.toJSON=()=>({error:l.name,message:l.message,...l.partialObject}),GA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,No.createBrotliCompress)({params:{[No.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?No.constants.BROTLI_MODE_TEXT:No.constants.BROTLI_MODE_GENERIC,[No.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>AU?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,No.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function Co(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;wo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=g_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=gm(e);return wo?.length>0?(wo.length===1?wo[0]:Promise.all(wo)).then(()=>Co(e,t,!0)):n}finally{wo=void 0}}function VA(e){if(wo)wo.push(e);else throw new Error("Unable to serialize asynchronously")}function KA(){return!!wo}function R8(e){return new Promise((t,r)=>{let n=[];e.on("data",s=>n.push(s)),e.on("end",()=>t(Buffer.concat(n))),e.on("error",r)})}function b8(e){return A8.includes(e)}function I8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Oo(e="",t=!1){let r=I8(e),n=r.type&&ln.get(r.type)?.deserialize||w8(r);return t?s=>R8(s).then(n):n}function w8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!b8(e.parameters.charset)&&GA.default.info(`Unknown Buffer encoding ${e.parameters.charset} in content-type. Proceeding anyways.`),t=>({contentType:e.type,data:t.toString(e.parameters?.charset||"utf-8")})):e.type==="application/octet-stream"?t=>t:t=>{if(e.type==="")try{if(t?.[0]===123)return qA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function N8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function __(e,t){let r=Kc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new NU.Transform(n,s);return r.pipe(i)}var Ui,Vc,No,bU,Kc,IU,HA,wU,GA,NU,CU,OU,gm,qA,Sm,ln,$A,RU,PU,y8,AU,wo,A8,Po=ie(()=>{kA();Ui=require("msgpackr"),Vc=require("cbor-x"),No=require("zlib"),bU=w(_e()),Kc=w(require("stream"));xr();IU=w(ii()),HA=w(ue());H();wU=w(require("yaml")),GA=w(Xn());Ns();NU=require("json2csv"),CU=w(require("fastify-plugin")),OU=HA.default.get(B.SERIALIZATION_BIGINT)!==!1,gm=OU?$c:JSON.stringify,qA=OU?FA:JSON.parse,Sm={useRecords:!1,useToJSON:!0},ln=new Map,$A=ln;Ue.contentTypes=$A;(0,IU._assignPackageExport)("contentTypes",$A);ln.set("application/json",{serializeStream:_m,serialize:gm,deserialize(e){return qA(e)},q:.8});RU=new Vc.Encoder(Sm);ln.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Vc.EncoderStream(Sm).end(e)},serialize:RU.encode,deserialize:RU.decode,q:1});ln.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Kc.Readable.from((0,Ui.encodeIter)(e,Sm)):(0,Ui.pack)(e)},serialize:Ui.pack,deserialize:Ui.unpack,q:.9});ln.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),__(e,e?.getColumns?.())},serialize(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),e&&!e[Symbol.iterator]&&(e=[e.toJSON?e.toJSON():e]),__(e,e?.getColumns?.())},q:.1});ln.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Kc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});ln.set("text/yaml",{serialize(e){return wU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});ln.set("text/event-stream",{serializeStream:o(function(e){return Kc.Readable.from(N8(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
5
5
  `),e.data){let r=e.data;typeof r=="object"&&(r=gm(r)),t+="data: "+r+`
6
6
  `}return e.id&&(t+="id: "+e.id+`
7
7
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -10,33 +10,33 @@
10
10
 
11
11
  `:`data: ${e}
12
12
 
13
- `},"serialize"),compressible:!1,q:.8});ln.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});NU={type:"application/json",serializeStream:_m,serialize:gm,deserialize:E8,q:.5};ln.set("*/*",NU);ln.set("",NU);o(E8,"tryJSONParse");o(Tm,"registerContentHandlers");_8=(0,IU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=g_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(g_,"findBestSerializer");TU=HA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(VA,"asyncSerialization");o(KA,"hasAsyncSerialization");o(g8,"streamToBuffer");S8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(T8,"isBufferEncoding");o(y8,"parseContentType");o(Oo,"getDeserializer");o(R8,"deserializerUnknownType");o(A8,"transformIterable");o(__,"toCsvStream")});var JA={};Ie(JA,{Blob:()=>ws,blobsWereEncoded:()=>Yc,databasePaths:()=>WA,decodeBlobsWithWrites:()=>N_,decodeFromDatabase:()=>Wc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>b_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>QA,encodeBlobsAsBuffers:()=>M8,encodeBlobsWithFilePath:()=>w_,findBlobsInObject:()=>Cu,getFileId:()=>I_,getFilePathForBlob:()=>BU,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>N8});function vU(){}function b_(e){let t=BU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},UU)}function N8(e){UU=e}function xU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return O8(t),t.source?YA(e,t.source,t):t.contentBuffer?C8(e,t):YA(e,Am.Readable.from(e.stream()),t),t}function YA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(I8),p=(0,R_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(b8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?jA:MU)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,rt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function I_(e){return On.get(e)?.fileId}function BU(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=WA.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,A_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,A_.getHdbBasePath)(),"blobs",e.databaseName)],WA.set(e,t)}return t}async function QA(e){let t=Im(e);t&&await Promise.all(t.map(r=>FU(r)))}async function FU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Cs.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await FU((0,Mo.join)(e,t.name));else try{await(0,Cs.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Cs.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function C8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<DU))return e.size=n,YA(e,Am.Readable.from([r]),t)}function O8(e){let t=Im(e.store),r=P8(),n=t?.length>1?L8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,rt.existsSync)(a)||(0,zA.ensureDirSync)(a),e.filePath=i}function P8(){let e=LU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),LU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function L8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(y_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,D8(e)),e.frequencyTable[t%y_]}async function D8(e){if(!Cs.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Cs.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,zA.ensureDirSync)(s),a=await(0,Cs.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(y_),n=t.map(s=>1/s);for(let s=0;s<y_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function w_(e,t,r){Nu=t,Pn=r,Yc=!1;try{return e()}finally{Nu=void 0,Pn=void 0}}function M8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function N_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function Wc(e,t){return Pn=t,e()}function Oa(e){Cu(e,t=>{b_(t)})}function Cu(e,t){if(e instanceof ws)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Cu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Cu(e[r],t)}}function U8(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var xi,Cs,rt,R_,Am,zA,A_,Mo,Lo,DU,wr,MU,jA,OU,b8,I8,PU,On,Do,ws,Nu,Yr,Pn,Yc,Rm,S_,w8,T_,UU,WA,LU,y_,v8,Ns=ie(()=>{xi=require("msgpackr"),Cs=require("node:fs/promises"),rt=require("node:fs"),R_=require("node:zlib"),Am=require("node:stream"),zA=require("fs-extra"),A_=w(ue());H();Mo=require("path"),Lo=w(Xn());Po();DU=8192,wr=8,MU=0,jA=1,OU=255,b8=new Uint8Array([0,MU,255,255,255,255,255,255]),I8=new Uint8Array([0,jA,255,255,255,255,255,255]),PU=0xffffffffffff,On=new WeakMap,ws=global.Blob||U8(),Yc=!1,Rm=new Uint8Array(8),S_=new DataView(Rm.buffer),w8=6e4;o(vU,"InstanceOfBlobWithNoConstructor");vU.prototype=ws.prototype;T_=class e extends vU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=On.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(KA()&&VA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=On.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Cs.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=S_.getBigUint64(0);if(Number(f>>48n)===OU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<PU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===jA?new Promise((f,m)=>{(0,R_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=On.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(ee){(0,rt.close)(a),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(q=>q(ee))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,rt.read)(a,F,0,F.length,c,(ee,q,k)=>{if(l+=q,ee)return O(ee);if(c===0){if(q<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=S_.getBigUint64(0);if(Number(J>>48n)===OU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<PU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(wr,q),l-=wr}else if(q===0){let J=Buffer.allocUnsafe(8);return(0,rt.read)(a,J,0,wr,0,Y=>{if(Y)return O(Y);if(Rm.set(J),g=Number(S_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},w8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,rt.close)(a),E.close(),R()})}else k=k.subarray(0,q);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=q,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=q;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};On.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return xU(this).saving??Promise.resolve()}},UU=500;o(b_,"deleteBlob");o(N8,"setDeletionDelay");global.createBlob=function(e,t){let r=new T_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(xU,"saveBlob");o(YA,"writeBlobWithStream");o(I_,"getFileId");o(BU,"getFilePathForBlob");WA=new Map;o(Im,"getRootBlobPathsForDB");o(QA,"deleteRootBlobPathsForDB");o(FU,"rimrafSteadily");o(bm,"getFilePath");o(C8,"writeBlobWithBuffer");o(O8,"generateFilePath");LU=new Map;o(P8,"getNextFileId");y_=128;o(L8,"getNextStorageIndex");o(D8,"createFrequencyTableForStoragePaths");o(w_,"encodeBlobsWithFilePath");o(M8,"encodeBlobsAsBuffers");o(N_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Wc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Cu,"findBlobsInObject");v8=new xi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,xi.addExtension)({Class:ws,type:11,unpack:o(function(e){let t=v8.unpack(e),r=new T_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=On.get(e);if(Nu!==void 0&&(Yc=!0,t?.recordId!==void 0&&t.recordId!==Nu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<DU)return r.size=t.contentBuffer.length,(0,xi.pack)([r,t.contentBuffer])}if(Nu!==void 0){if(t=xU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Nu,(0,xi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,xi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(S_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,xi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,xi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(U8,"polyfillBlob")});var $U={};Ie($U,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>tb,setAvailableSpaceRatioGetter:()=>B8});function Nm(e,t,r){(r||(0,O_.getWorkerIndex)()===(0,O_.getWorkerCount)()-1)&&(C_.has(e)||C_.set(e,[]),C_.get(e).push({priority:0,handler:t}),eb||(eb=setTimeout(tb,HU).unref()))}async function tb(){for(let[e,t]of C_)try{let r=await GU(e),n=x8/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ZA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ZA.default.error?.("Error running storage reclamation handlers",r)}eb=setTimeout(tb,HU).unref()}function B8(e){GU=e??qU}var XA,O_,ZA,P_,kU,C_,x8,HU,eb,qU,GU,L_=ie(()=>{XA=require("node:fs/promises"),O_=w(nt()),ZA=w(Xn());H();P_=w(ue()),kU=w(oe());P_.default.initSync();C_=new Map,x8=P_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,HU=(0,kU.convertToMS)(P_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");qU=o(async e=>{if(XA.statfs){let t=await(0,XA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),GU=qU;o(tb,"runReclamationHandlers");o(B8,"setAvailableSpaceRatioGetter")});var rx={};Ie(rx,{ACTION_32_BIT:()=>x_,ACTION_64_BIT:()=>q8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>B_,createAuditEntry:()=>Xc,getLastRemoved:()=>k8,openAuditStore:()=>v_,readAuditEntry:()=>xt,removeAuditEntry:()=>U_,setAuditRetention:()=>H8,transactionKeyEncoder:()=>XU});function v_(e){let t=e.auditStore=e.openDB(rb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(rb.AUDIT_STORE_NAME,Pm),KU(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=sb;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-nb/(1+i*i)})){try{m=U_(t,h,E)}catch(g){Ou.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=F8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,nb/10):(KU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!VU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(VU=!0,Ou.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function U_(e,t,r){let n=G8(r),s;if(n&Ln){s=xt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Wc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===ib){s=s||xt(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function KU(e,t){ob[0]=t,e.put(Symbol.for("last-removed"),ZU)}function k8(e){let t=e.get(Symbol.for("last-removed"));if(t)return ZU.set(t),ob[0]}function H8(e,t=sb){nb=e,sb=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=ex[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pa.setFloat64(0,n):Os.set(ab),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Qc&&A(u),l&Jc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(tx[m]),i?g(i):Os[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Os[n?8:0]=p;let E=Os.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,Os,h);let N=h-R-1;N>127?N>16383?(Ou.error("Key or username was too large for audit entry",S),h=R+1,Os[R]=0):(Os.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Os[R]=N}function A(S){S<128?Os[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Os[h]=255,Pa.setUint32(h+1,S),h+=5)}}function G8(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=tx[R]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:ex[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,zc.readKey)(e,g,A):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,N,O){if(i&D_||i&Cm&&!N)return S||(S=Wc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return vA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(D_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ou.error("Reading audit entry error",n,e),{}}}var zc,M_,rb,Om,JU,Ou,Os,Pa,XU,Pm,nb,F8,ob,ZU,sb,VU,D_,Cm,YU,ib,WU,zU,jU,QU,x_,q8,B_,Qc,Jc,Dm,Mm,Ln,ex,tx,jc,Io=ie(()=>{zc=require("ordered-binary"),M_=w(ue()),rb=w($t());H();Om=w(nt()),JU=w(oe());Zc();Ou=w(Q());p_();Ns();L_();(0,M_.initSync)();Os=Buffer.alloc(2816),Pa=new DataView(Os.buffer,Os.byteOffset,2816),XU={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:XU},nb=(0,JU.convertToMS)((0,M_.get)(B.LOGGING_AUDITRETENTION))||86400*3,F8=1e3,ob=new Float64Array(1),ZU=new Uint8Array(ob.buffer),sb=1e4,VU=!1;o(v_,"openAuditStore");o(U_,"removeAuditEntry");o(KU,"updateLastRemoved");o(k8,"getLastRemoved");o(H8,"setAuditRetention");D_=16,Cm=32,YU=1,ib=2,WU=3,zU=4,jU=5,QU=6,x_=14,q8=15,B_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Ln=8192,ex={put:YU|D_,[YU]:"put",delete:ib,[ib]:"delete",message:WU|D_,[WU]:"message",invalidate:zU|Cm,[zU]:"invalidate",patch:jU|Cm,[jU]:"patch",relocate:QU,[QU]:"relocate"},tx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o(G8,"readAction");o(xt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function F_(){return cb||(cb=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),cb}function V8(e){return e=e.replace($8,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function K8(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function ub(e){let t=nx.default.createHash("shake128",{outputLength:4}),r;return(0,sx.isIPv6)(e)?r=V8(e):r=e.toLowerCase(),K8(Uint8Array.from(t.update(r).digest()))}var nx,sx,lb,cb,$8,db=ie(()=>{Oe();nx=w(require("crypto")),sx=require("node:net"),lb=new Map;o(F_,"getAnalyticsHostnameTable");$8=/(\d{1,3}\.){3}\d{1,3}$/;o(V8,"normalizeIPv6");o(K8,"nodeHashToNumber");o(ub,"stableNodeId")});var vo,fb=ie(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var q_={};Ie(q_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Eb,calculateCPUUtilization:()=>Rx,diffResourceUsage:()=>Ax,onAnalyticsAggregate:()=>Sb,recordAction:()=>Je,recordActionBinary:()=>zr,recordHostname:()=>_b,setAnalyticsEnabled:()=>z8});function z8(e){_x=e,clearTimeout(Um),Um=null}function j8(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function Q8(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},H_.set(e,a)}function Je(e,t,r,n,s){if(!_x)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=H_.get(i);a?j8(e,a):Q8(i,e,t,r,n,s),Um||J8()}function zr(e,t,r,n,s){Je(!!e,t,r,n,s)}function Bm(e){Sx.push(e)}function J8(){mb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-mb;mb=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of H_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of yx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await bx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Sx)s(t);H_=new Map,el.parentPort?el.parentPort.postMessage({type:gx,report:r}):Nx({report:r})},Eb).unref()}async function _b(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=ub(e);Wr.trace?.("recordHostname nodeId:",t);let r=F_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Pu(e,t){let r=Ue.hostname,n=lb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=ub(r),Wr.trace?.("storeMetric new nodeId:",n),lb.set(r,n));let s={id:[(0,hb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Rx(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function Ax(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function X8(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Pu(e,l),n+=c}return n}function ix(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Ex.statSync(s.primaryStore.env.path).size,c=X8(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Pu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function ox(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};Pu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function Z8(e,t=6e4){let r=gb(),n=Ix(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let ee of O||[]){let{path:q,method:k,type:J,metric:Y,count:le,total:ae,distribution:re,threads:Re,...Te}=ee;le||(le=1);let Fe=Y+(q?"-"+q:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let qe=c.get(Fe);if(qe){if(qe.threads){let Zt=qe.threads[F];if(Zt)qe=Zt;else{qe.threads[F]={...Te};continue}}qe.count||(qe.count=1);let Rr=qe.count;for(let Zt in Te){let Ht=Te[Zt];typeof Ht=="number"&&(qe[Zt]=(qe[Zt]*Rr+Ht*le)/(Rr+le))}qe.count+=le,ae>=0&&(qe.total+=ae,qe.ratio=qe.total/qe.count)}else qe={period:t,...ee},delete qe.distribution,c.set(Fe,qe),qe.byThread&&(qe.threads=[],qe.threads[F]={...Te},u.push(qe));if(re){re=re.map(Zt=>typeof Zt=="number"?{value:Zt,count:1}:Zt);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await bx()}for(let R of u){let{path:N,method:O,type:F,metric:ee,count:q,total:k,distribution:J,threads:Y,...le}=R;Y=Y.filter(ae=>ae);for(let ae in le){if(typeof R[ae]!="number")continue;let re=0;for(let Re of Y){let Te=Re[ae];typeof Te=="number"&&(re+=Te)}R[ae]=re}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((Zt,Ht)=>Zt.value>Ht.value?1:-1);let F=O.count-1,ee=[],q=0,k=0,J;for(let Zt of yx){let Ht=F*Zt;for(;q<Ht;)J=N[k++],q+=J.count,k===1&&q--;let er=N[k>1?k-2:0];J||(J=N[0]),ee.push(J.value-(J.value-er.value)*(q-Ht)/J.count)}let[Y,le,ae,re,Re,Te,Fe,qe,Rr]=ee;Object.assign(O,{p1:Y,p10:le,p25:ae,median:re,p75:Re,p90:Te,p95:Fe,p99:qe,p999:Rr})}let f;for(let[,R]of c)R.time=d,Pu(n,R),f=!0;if(f)for(let R of Tx)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-ax,active:h-cx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Pu(n,R)}ax=p,cx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=Ax(k_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=k_.time?m-k_.time:t,g.cpuUtilization=Rx(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Pu(n,A),k_=E;let S=at();ix(n,S),ix(n,{system:S.system}),ox(n,S),ox(n,{system:S.system})}async function lx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function gb(){return ux||(ux=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ix(){return dx||(dx=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function rZ(){wx=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Z8(Eb,e),await lx(gb(),eZ),await lx(Ix(),tZ)},Math.min(e/2,2147483647)).unref()}function Nx(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(fx+=n.mean*n.count);r.totalBytesProcessed=fx,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(mx.get(t))}),mx.set(t,t.performance.eventLoopUtilization())),r.id=(0,hb.getNextMonotonicTime)(),gb().primaryStore.put(r.id,r),wx||rZ(),nZ&&(Cx=iZ(r))}async function iZ(e){if(await Cx,!La){let r=(0,vm.dirname)(Y8());try{La=await(0,pb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,pb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>sZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
14
- `,t)}function Sb(e){e&&Tx.push(e)}var el,px,hx,vm,pb,hb,xm,Ex,Y8,W8,Wr,H_,_x,Um,mb,Eb,gx,Sx,Tx,yx,ax,cx,k_,bx,eZ,tZ,ux,dx,wx,fx,mx,nZ,Cx,La,sZ,Ps=ie(()=>{el=require("worker_threads"),px=w(nt());Oe();hx=w(Q()),vm=require("path"),pb=require("fs/promises"),hb=w(Cn()),xm=w(ue());H();xr();Ex=w(require("node:fs"));db();fb();({getLogFilePath:Y8,forComponent:W8}=hx.default),Wr=W8("analytics").conditional;(0,xm.initSync)();H_=new Map,_x=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(z8,"setAnalyticsEnabled");o(j8,"recordExistingAction");o(Q8,"recordNewAction");o(Je,"recordAction");Ue.recordAnalytics=Je;o(zr,"recordActionBinary");mb=0,Eb=1e3,gx="analytics-report",Sx=[],Tx=[];o(Bm,"addAnalyticsListener");yx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(J8,"sendAnalytics");o(_b,"recordHostname");o(Pu,"storeMetric");o(Rx,"calculateCPUUtilization");o(Ax,"diffResourceUsage");o(X8,"storeTableSizeMetrics");o(ix,"storeDBSizeMetrics");o(ox,"storeVolumeMetrics");o(Z8,"aggregation");ax=0,cx=0,k_={userCPUTime:0,systemCPUTime:0},bx=o(()=>new Promise(setImmediate),"rest");o(lx,"cleanup");eZ=36e5,tZ=31536e6;o(gb,"getRawAnalyticsTable");o(Ix,"getAnalyticsTable");(0,px.setChildListenerByType)(gx,Nx);o(rZ,"startScheduledTasks");fx=0,mx=new Map,nZ=!1;o(Nx,"recordAnalytics");sZ=1e6;o(iZ,"logAnalytics");o(Sb,"onAnalyticsAggregate")});var Mx={};Ie(Mx,{ENTRY:()=>aZ,HAS_EXPIRATION:()=>V_,HAS_RESIDENCY_ID:()=>Ib,HAS_STRUCTURE_UPDATE:()=>K_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>oZ,METADATA:()=>Mu,NEW_TIMESTAMP_PLACEHOLDER:()=>Px,NO_TIMESTAMP:()=>Tb,PENDING_LOCAL_TIME:()=>wb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ab,RecordEncoder:()=>bb,TIMESTAMP_ASSIGN_LAST:()=>lZ,TIMESTAMP_ASSIGN_NEW:()=>Lx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Dx,TIMESTAMP_PLACEHOLDER:()=>G_,TIMESTAMP_RECORD_PREVIOUS:()=>yb,entryMap:()=>Da,handleLocalTimeForGets:()=>Y_,lastMetadata:()=>ct,recordUpdater:()=>Nb,removeEntry:()=>rl});function fZ(){return km[0]=km[0]^64,cZ.getFloat64(0)}function Y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Mu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Da.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Da.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Mu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Nb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Du=i?.localTime?yb|Dx:Tb:Du=l?i?.localTime?yb|16384:Lx|16384:Tb;let p=u?.expiresAt;if(p>=0&&(c|=V_),Fm=c,Rb=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Du>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Ab=S,Fm|=Ib,g|=Qc),A!==S&&(g|=Jc,A||(A=0)),c&V_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=w_(()=>e.put(n,s,h),n,e.rootStore),Yc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(w_(()=>e.encoder.encode(m),n,e.rootStore),Yc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=K_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let ee=xt(F).previousLocalTime;return R=r.put(O,Xc(a,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Lu,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?Px:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Lu,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&uZ.has(d)&&Je(Lu?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var Ox,$_,G_,Lm,ab,Px,oZ,Mu,aZ,km,cZ,Tb,Lx,lZ,Dx,yb,V_,Ib,wb,K_,uZ,Da,dZ,Lu,Du,Fm,Rb,Ab,ct,bb,tl,Zc=ie(()=>{Ox=require("msgpackr");Io();$_=w(Q());Ns();Ns();Ps();G_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),ab=new Uint8Array([1,1,1,1,3,64,0,0]),Px=new Uint8Array([1,1,1,1,0,64,0,0]),oZ=Symbol("local-timestamp"),Mu=Symbol("metadata"),aZ=Symbol("entry"),km=new Uint8Array(8),cZ=new DataView(km.buffer,0,8),Tb=0,Lx=0,lZ=1,Dx=3,yb=4,V_=16,Ib=32,wb=1,K_=256,uZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Du=0,Fm=-1,Rb=-1,Ab=0,ct=null,bb=class extends Ox.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Du||Fm>=0){let c=0,l=Du;l&&(c+=8,Du=0);let u=Fm,d=Rb,f=Ab;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Rb=-1),f&&(c+=4,Ab=0));let m=dZ=n.call(this,i,a|2048|c);Lu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(G_[4]=l,G_[5]=l>>8,m.set(G_,p),p+=8),Yc&&(u|=Ln),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|x_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Lu=n.call(this,i,a),Lu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=fZ(),i=t[c]}let u,d;i<32&&(i===x_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&V_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Ib&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Wc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Mu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Wc(()=>super.decode(t,r),this.rootStore)}catch(c){return $_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(fZ,"getTimestamp");o(Y_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?($_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):$_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(Nb,"recordUpdater");o(rl,"removeEntry")});function Pb(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?Pb(f.conditions,f.operator,r,n,s,i,a,c):Bu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=qm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=yZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Bu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=Fi(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,ee=Bu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let q=!!Fi(O.attributes,N.relationship.to)?.elements;ee=_Z(ee,N,O.primaryStore,q,F)}if(N.relationship.from){let q=o(k=>(k?.key!==void 0&&(k=k.key),Bu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,ee=gZ(ee,N,O.primaryStore,F,q)):ee=ee.flatMap(q)}return ee}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Lb[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Bi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ls.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,E=!1,A=qm(e,n,null,i,d)),typeof p=="string"&&p.length>Ls.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,h=!0,A=A??qm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??qm(e,n,null,i,d),!A)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,ee)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(q){ee(q)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(ee){F(ee)}}))})}function Fi(e,t){if(Array.isArray(t))if(t.length>1){let r=Fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Fi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function _Z(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function gZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function qm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Fi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=qm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=ct):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(ee=>ee.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let q=g(R);return g.idFilter&&(S.idFilter=g.idFilter),q}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(q){let k=A(q).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Lb[a]||a){case Ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Bi.compareKeys)(d,l[0])>=0&&(0,Bi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Bi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Bi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Bi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Bi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Bi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&z_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Bu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(q=>t.primaryStore.get(q)[A.to]):F=O.map(Fu);let ee=new Set(F);A.idFilter=q=>ee.has(Fu(q)),A.idFilter.idSet=ee}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function z_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Lb[n]||n,n===Ls.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=z_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Uo(e.indices[i.relationship.from])/(Uo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=hZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=pZ*Uo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=Uo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=mZ*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function j_(e,t){if(e)if(xo=e,vu.lastIndex=0,SZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new xu,Hm(ai,""),Br!==xo.length&&Vt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new Cb(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Vt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=vu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&Vt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Vt(`invalid FIQL operator ${d}`),l=vx):(l=decodeURIComponent,i="equals",d||Vt("attribute must be specified before equality comparator"),s=Uu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=EZ[f],l=Ob[i]?vx:decodeURIComponent,d||Vt(`attribute must be specified before comparator ${f}`),s=Uu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Vt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Vt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Vt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Ux(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else W_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Vt("conditions/comparisons are not allowed in a property list"):e.push(Uu(d)),s=void 0;break;case"(":vu.lastIndex=Br;let p=Hm(d?[]:new xu,")");switch(d){case"":W_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Vt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Vt("group by is not implemented yet");case"sort":e.sort=xx(p);break;default:Vt(`unknown query function call ${d}`)}xo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&Vt("property sets are not allowed in a queries"),d||Vt("property sets must have a defined parent property name"),vu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(vu.lastIndex=Br,d?(m=Hm(new xu,"]"),m.name=d):m=Hm(e.conditions?new xu:[],"]"),e.conditions)if(W_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=Uu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&Ux(h,d),W_(e,u),e.conditions.push(h)}else d&&Vt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Uu(d));return e}else Vt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Vt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?TZ:vu,r.lastIndex=Br),Br===xo.length)return e}t&&Vt(`expected '${t}', but encountered end of string`)}function W_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Vt("Can not mix operators within a condition grouping"):e.operator=t)}function Uu(e){return e.indexOf(".")>-1?e.split(".").map(Uu):decodeURIComponent(e)}function vx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Ux(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function xx(e){let t=Bx(e[0]);return e.length>1&&(t.next=xx(e.slice(1))),t}function Bx(e){if(Array.isArray(e)){let t=Bx(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Vt(`Unknown sort type ${e}`)}function Fu(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function yZ(e,t,r){return t*r/Uo(e)}var jr,Ls,Bi,Ma,mZ,pZ,hZ,EZ,Ob,Lb,Cb,SZ,vu,TZ,Br,ai,xo,xu,Q_=ie(()=>{jr=w(_e()),Ls=w($t()),Bi=require("ordered-binary"),Ma=require("lmdb");J_();Zc();mZ=.3,pZ=.1,hZ=.05,EZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Ob={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Pb,"executeConditions");o(Bu,"searchByIndex");o(Fi,"findAttribute");o(_Z,"joinTo");o(gZ,"joinFrom");Lb={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(qm,"filterByType");o(z_,"estimateCondition");Cb=class extends jr.Violation{static{o(this,"SyntaxViolation")}},SZ=/[()[\]|!<>.]|(=\w*=)/,vu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,TZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(j_,"parseQuery");o(Vt,"recordError");o(Hm,"parseBlock");o(W_,"assignOperator");o(Uu,"decodeProperty");o(vx,"typedDecoding");o(Ux,"wildcardDecoding");o(xx,"toSortObject");o(Bx,"toSortEntry");xu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Fu,"flattenKey");o(Uo,"estimatedEntryCount");o(yZ,"intersectionEstimate")});var Fx,ci,X_=ie(()=>{Fx=w(ii()),ci=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,Fx._assignPackageExport)("Resource",Resource)});var $x={};Ie($x,{MultiPartId:()=>Z_,Resource:()=>Fr,contextStorage:()=>Hu,snakeCase:()=>AZ,transformForSelect:()=>qu});function AZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function kx(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Z_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ku.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Hu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>Hu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return Rt(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new ku.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new ku.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Zn(e,t){let r=new ku.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function Db(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function qu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):Db(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(Db(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(Db(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=qu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var Hx,qx,ku,Gx,Hu,RZ,Fr,nl,Z_,Ua=ie(()=>{Hx=require("crypto");hm();wu();qx=w(ii()),ku=w(_e());Ca();Q_();Gx=require("async_hooks");X_();Hu=new Gx.AsyncLocalStorage,RZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=qu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Mn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Zn(t,"put")},{hasContent:!0,type:"update"});static patch=Mn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Zn(t,"patch")},{hasContent:!0,type:"update"});static delete=Mn(function(t,r,n,s){return t.delete?t.delete(r):Zn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Hx.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Hu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),Rt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Zn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Zn(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Zn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Zn(t,"subscribe")},{type:"read"});static publish=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Zn(t,"publish")},{hasContent:!0,type:"create"});static search=Mn(function(t,r,n){let s=t.search?t.search(r):Zn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=qu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Zn(t,"search")},{hasContent:!0,type:"read"});static copy=Mn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Zn(t,"copy")},{hasContent:!0,type:"create"});static move=Mn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Zn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Zn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return j_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&RZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:kx(t,this),isCollection:nl}}let i=kx(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,qx._assignPackageExport)("Resource",Fr);o(AZ,"snakeCase");o(kx,"pathToId");Z_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(Zn,"missingMethod");o(Db,"selectFromObject");o(qu,"transformForSelect")});var sl,Mb=ie(()=>{sl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 vb={};Ie(vb,{Resources:()=>Gu,keyArrayToString:()=>$u,resetResources:()=>bZ,resources:()=>Ds});function bZ(){return Ds=new Gu,Ue.resources=Ds,Ds}function $u(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Vx,Kx,Gu,Ds,xa=ie(()=>{Ca();Mb();Vx=w(Q()),Kx=w(_e());xr();Gu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new Kx.ServerError(`Conflicting paths for ${t}`);Vx.default.error(c),i.Resource=new sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(bZ,"resetResources");o($u,"keyArrayToString")});function Bb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Wx,IZ(e.primaryStore,e.auditStore)):(c=Yx,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{zx(Yx[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=$u(t);let d=new xb(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function zx(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),jx(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=$u(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,Ub.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,Ub.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function IZ(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=Wx[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{zx(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function jx(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Qx(e){return e.nextTransaction||(Bb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),jx(e)),e.nextTransaction}var Ub,Yx,Wx,xb,Fb=ie(()=>{Ub=w(Q());wu();xa();Io();Yx=Object.create(null),Wx=Object.create(null);o(Bb,"addSubscription");xb=class extends Jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;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;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(zx,"notifyFromTransactionData");o(IZ,"listenToCommits");o(jx,"nextTransaction");o(Qx,"whenNextTransaction")});var Xx=M((CCe,Jx)=>{"use strict";var kb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Jx.exports=kb});var e0=M((PCe,Zx)=>{"use strict";var Hb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Zx.exports=Hb});var Gm=M(r0=>{"use strict";var t0=ue(),wZ=(H(),D(W)),{RecordEncoder:NZ}=(Zc(),D(Mx));t0.initSync();var CZ=t0.get(wZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,qb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=CZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:NZ})}};r0.OpenDBIObject=qb});var $m=M((vCe,n0)=>{"use strict";var es=ue(),Ms=(H(),D(W));es.initSync();var eg=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",es.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=es.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),es.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=es.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=es.get(Ms.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};n0.exports=eg;eg.MAX_DBS=1e4});var _t=M((xCe,m0)=>{"use strict";var $b=require("lmdb"),li=require("fs-extra"),ts=require("path"),tg=Cn(),o0=Q(),vn=Kr().LMDB_ERRORS_ENUM,rg=e0(),{OpenDBIObject:Vb}=Gm(),a0=$m(),Ba=$t(),s0=(H(),D(W)),{table:OZ,resetDatabases:PZ}=(Oe(),D(mt)),i0=ue(),ui=Ba.INTERNAL_DBIS_NAME,c0=Ba.DBI_DEFINITION_NAME,LZ="data.mdb",DZ="lock.mdb",Vm=".mdb",MZ="-lock",Gb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vs(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new $b.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ng(e,t){if(e===void 0)throw new Error(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(ng,"pathEnvNameValidation");async function Kb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=ts.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(ts.join(e,t,LZ),li.constants.R_OK|li.constants.F_OK),ts.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Kb,"validateEnvironmentPath");function sg(e,t){if(tg.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(sg,"validateEnvDBIName");async function vZ(e,t,r=!1,n=!1){ng(e,t);let s=ts.basename(e);t=t.toString();let i=i0.get(s0.CONFIG_PARAMS.DATABASES);i||i0.setProperty(s0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Kb(e,t,n),l0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=ts.join(e,t);await li.mkdirp(n?c:e);let l=new a0(n?c:c+Vm,!1),u=$b.open(l);u.dbis=Object.create(null);let d=new Vb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Yb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(vZ,"createEnvironment");async function UZ(e,t,r,n=!0){ng(e,t),t=t.toString();let s=ts.join(e,t);return OZ({table:t,database:ts.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(UZ,"copyEnvironment");async function l0(e,t,r=!1){ng(e,t),t=t.toString();let n=Yb(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Kb(e,t),i=ts.join(e,t+Vm),a=s!=i,c=new a0(s,a),l=$b.open(c);l.dbis=Object.create(null);let u=d0(l);for(let d=0;d<u.length;d++)vs(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(l0,"openEnvironment");async function xZ(e,t,r=!1){ng(e,t),t=t.toString();let n=ts.join(e,t+Vm),s=await Kb(e,t);if(global.lmdb_map!==void 0){let i=Yb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await u0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+MZ:ts.join(ts.dirname(s),DZ))}o(xZ,"deleteEnvironment");async function u0(e){tg.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(u0,"closeEnvironment");function Yb(e,t,r=!1){let s=`${ts.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Yb,"getCachedEnvironmentName");function BZ(e){tg.validateEnv(e);let t=Object.create(null),r=vs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new rg,s)}catch{o0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(BZ,"listDBIDefinitions");function d0(e){tg.validateEnv(e);let t=[],r=vs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(d0,"listDBIs");function FZ(e,t){let n=vs(e,ui).getEntry(t),s=new rg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{o0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(FZ,"getDBIDefinition");function f0(e,t,r,n=!r){if(sg(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vs(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Vb(r,n===!0),a=e.openDB(t,i),c=new rg(r===!0,n);return a[c0]=c,vs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(f0,"createDBI");function vs(e,t){if(sg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=FZ(e,t):r=new rg,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Vb(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(vn.DBI_DOES_NOT_EXIST):s}return n[c0]=r,e.dbis[t]=n,n}o(vs,"openDBI");function kZ(e,t){sg(e,t),t=t.toString();let r=vs(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(kZ,"statDBI");async function HZ(e,t){try{let r=ts.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(HZ,"environmentDataSize");function qZ(e,t){if(sg(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);vs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vs(e,ui).removeSync(t)}o(qZ,"dropDBI");function GZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vs(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)f0(e,i,i!==t,i===t),n=!0;else throw a}}n&&PZ()}o(GZ,"initializeDBIs");m0.exports={openDBI:vs,openEnvironment:l0,createEnvironment:vZ,listDBIs:d0,listDBIDefinitions:BZ,createDBI:f0,dropDBI:qZ,statDBI:kZ,deleteEnvironment:xZ,initializeDBIs:GZ,TransactionCursor:Gb,environmentDataSize:HZ,copyEnvironment:UZ,closeEnvironment:u0}});var E0=M((FCe,h0)=>{"use strict";var Wb=_t(),$Z=Q(),p0=Kr().LMDB_ERRORS_ENUM;h0.exports=VZ;async function VZ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Wb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==p0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Wb.closeEnvironment(global.lmdb_map[n]),await Wb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==p0.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){$Z.error(t)}}o(VZ,"cleanLMDBMap")});var Hi=M((HCe,g0)=>{"use strict";var _0=oe(),KZ=(H(),D(W)),Vu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ki=require("joi"),Fa={schema_format:{pattern:Vu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},YZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number(),ki.array()).required(),WZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number()),zZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number()).required();function jZ(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Vu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(jZ,"checkValidTable");function QZ(e,t){return _0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(QZ,"validateSchemaExists");function JZ(e,t){let r=t.state.ancestors[0].schema;return _0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(JZ,"validateTableExists");function XZ(e,t){return e.toLowerCase()===KZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(XZ,"validateSchemaName");g0.exports={commonValidators:Fa,schemaRegex:Vu,hdbSchemaTable:YZ,validateSchemaExists:QZ,validateTableExists:JZ,validateSchemaName:XZ,checkValidTable:jZ,hdbDatabase:WZ,hdbTable:zZ}});var jb=M((GCe,T0)=>{var{hdbTable:ZZ,hdbDatabase:S0}=Hi(),e9=ft(),zb=require("joi"),t9={undefined:"undefined",null:"null"},r9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||t9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),n9=zb.object({database:S0,schema:S0,table:ZZ,records:zb.array().items(zb.object().custom(r9)).required()});T0.exports=function(e){return e9.validateBySchema(e,n9)}});var R0=M((VCe,y0)=>{"use strict";var Qb=class{static{o(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")}};y0.exports=Qb});var b0=M((YCe,A0)=>{"use strict";var Jb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};A0.exports=Jb});var w0=M((zCe,I0)=>{"use strict";var Xb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};I0.exports=Xb});var C0=M((QCe,N0)=>{"use strict";var Zb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};N0.exports=Zb});var ol=M((tOe,L0)=>{"use strict";var s9=_t(),i9=b0(),o9=w0(),a9=C0(),qi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,c9=$t(),Bo=(H(),D(W)),l9=oe(),u9=require("uuid"),XCe=require("lmdb"),{handleHDBError:d9,hdbErrors:f9}=_e(),{OVERFLOW_MARKER:ZCe,MAX_SEARCH_KEY_LENGTH:eOe}=c9,O0=ue();O0.initSync();var ig=O0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),eI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m9(e,t,r,n,s=qi.getNextMonotonicTime()){sI(e,t,r,n),tI(e,t,r);let i=new i9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];P0(u,!0,s);let d=p9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return rI(a,c,n,i,s)}o(m9,"insertRecords");function p9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Bo.FUNC_VAL],n[a]=c)}let l=qi.getIndexedValues(c),u=e.dbis[a];if(l){ig&&u.prefetch(l.map(d=>({key:d,value:s})),og);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}ig&&e.dbis[t].prefetch([s],og),e.dbis[t].put(s,n,n[il])})}o(p9,"insertRecord");function h9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(h9,"removeSkippedRecords");function P0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=qi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[eI]))&&(e[eI]=r||qi.getNextMonotonicTime()):delete e[eI]}o(P0,"setTimestamps");function tI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),s9.initializeDBIs(e,t,r)}o(tI,"initializeTransaction");async function E9(e,t,r,n,s=qi.getNextMonotonicTime()){sI(e,t,r,n),tI(e,t,r);let i=new o9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=nI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return rI(c,l,n,i,s,a)}o(E9,"updateRecords");async function _9(e,t,r,n,s=qi.getNextMonotonicTime()){try{sI(e,t,r,n)}catch(l){throw d9(l,l.message,f9.HTTP_STATUS_CODES.BAD_REQUEST)}tI(e,t,r);let i=new a9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;l9.isEmpty(u[t])?(d=u9.v4(),u[t]=d):d=u[t];let f=nI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return rI(a,c,n,i,s)}o(_9,"upsertRecords");async function rI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||qi.getNextMonotonicTime(),h9(r,i),n}o(rI,"finalizeWrite");function nI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(P0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=qi.getIndexedValues(A);if(S){ig&&g.prefetch(S.map(R=>({key:R,value:n})),og);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=qi.getIndexedValues(E),S){ig&&g.prefetch(S.map(R=>({key:R,value:n})),og);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:nI(e,t,r,n,s,i,a))}o(nI,"updateUpsertRecord");function g9(e,t,r){if(qi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(g9,"validateBasic");function sI(e,t,r,n){if(g9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(sI,"validateWrite");function og(){}o(og,"noop");L0.exports={insertRecords:m9,updateRecords:E9,upsertRecords:_9}});var Gi=M((nOe,S9)=>{S9.exports={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:"hash_function"},{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:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},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:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var M0=M((sOe,D0)=>{"use strict";var T9=require("uuid"),iI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||T9.v4(),this.schema_table=`${this.schema}.${this.table}`}};D0.exports=iI});var ag=M((oOe,v0)=>{"use strict";var y9=M0(),oI=class extends y9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};v0.exports=oI});var x0=M((cOe,U0)=>{"use strict";U0.exports=A9;var R9="inserted";function A9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===R9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(A9,"returnObject")});var cg=M((dOe,F0)=>{"use strict";var b9=(H(),D(W)),aI=_t(),I9=ol(),{getSystemSchemaPath:w9,getSchemaPath:N9}=yt(),uOe=Gi(),{validateBySchema:C9}=ft(),Ym=require("joi"),O9=ag(),P9=x0(),{handleHDBError:L9,hdbErrors:D9,ClientError:M9}=_e(),B0=oe(),{HTTP_STATUS_CODES:v9}=D9,U9="inserted";F0.exports=x9;async function x9(e){let t=C9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new M9(t.message);let r=!e.skip_table_check&&B0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw L9(new Error,r,v9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=B0.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new O9(e.schema,e.table,e.attribute,e.id);try{let i=await aI.openEnvironment(N9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);aI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await aI.openEnvironment(w9(),b9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await I9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return P9(U9,c,{records:[s]},l)}catch(i){throw i}}o(x9,"lmdbCreateAttribute")});var Wm=M((pOe,H0)=>{"use strict";var Fo=oe(),k0=Q(),mOe=jb(),{getDatabases:B9}=(Oe(),D(mt)),{ClientError:al}=_e();H0.exports=F9;function F9(e){if(Fo.isEmpty(e))throw new al("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=B9()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new al(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Fo.isEmptyOrZeroLength(a[r]))throw k0.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw k0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(F9,"insertUpdateValidate")});var lg=M((EOe,G0)=>{"use strict";var q0=oe(),k9=(H(),D(W)),H9=Q(),q9=cg(),G9=ag(),$9=ko(),{SchemaEventMsg:V9}=rs(),K9="already exists in";G0.exports=Y9;async function Y9(e,t,r){if(q0.isEmptyOrZeroLength(r))return r;let n=[];q0.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await W9(e,t.schema,t.name,i)})),s}o(Y9,"lmdbCheckForNewAttributes");async function W9(e,t,r,n){let s=new G9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await z9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(K9))H9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(W9,"createNewAttribute");async function z9(e){let t;return t=await q9(e),$9.signalSchemaChange(new V9(process.pid,k9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(z9,"createAttribute")});var Ku=M((gOe,$0)=>{"use strict";var cI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};$0.exports=cI});var K0=M((TOe,V0)=>{"use strict";var j9=Ku(),Q9=(H(),D(W)).OPERATIONS_ENUM,lI=class extends j9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(Q9.INSERT,r,n,s,i),this.records=t}};V0.exports=lI});var W0=M((ROe,Y0)=>{"use strict";var J9=Ku(),X9=(H(),D(W)).OPERATIONS_ENUM,uI=class extends J9{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(X9.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};Y0.exports=uI});var j0=M((bOe,z0)=>{"use strict";var Z9=Ku(),e7=(H(),D(W)).OPERATIONS_ENUM,dI=class extends Z9{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(e7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};z0.exports=dI});var J0=M((wOe,Q0)=>{"use strict";var t7=Ku(),r7=(H(),D(W)).OPERATIONS_ENUM,fI=class extends t7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(r7.DELETE,n,s,t,i),this.original_records=r}};Q0.exports=fI});var zm=M((OOe,tB)=>{"use strict";var COe=require("path"),X0=_t(),n7=K0(),s7=W0(),i7=j0(),o7=J0(),Yu=$t(),Z0=oe(),{CONFIG_PARAMS:a7}=(H(),D(W)),eB=ue();eB.initSync();var ug=(H(),D(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:c7}=yt();tB.exports=l7;async function l7(e,t){if(eB.get(a7.LOGGING_AUDITLOG)===!1)return;let r=c7(e.schema,e.table),n=await X0.openEnvironment(r,e.table,!0),s=u7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){X0.initializeDBIs(n,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Z0.isEmpty(s.user_name)||n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(l7,"writeTransaction");function u7(e,t){let r=Z0.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ug.INSERT)return new n7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.UPDATE)return new s7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.UPSERT)return new i7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.DELETE)return new o7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(u7,"createTransactionObject")});var mI=M((DOe,rB)=>{"use strict";var d7=Wm(),LOe=fm(),jm=(H(),D(W)),f7=mm(),m7=ol().insertRecords,p7=_t(),h7=Q(),E7=lg(),{getSchemaPath:_7}=yt(),g7=zm();rB.exports=S7;async function S7(e){try{let{schemaTable:t,attributes:r}=d7(e);f7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await E7(e.hdb_auth_header,t,r),s=_7(e.schema,e.table),i=await p7.openEnvironment(s,e.table),a=await m7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await g7(e,a)}catch(c){h7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(S7,"lmdbCreateRecords")});var iB=M((vOe,sB)=>{"use strict";var nB=(H(),D(W)),T7=mI(),y7=fm(),R7=require("fs-extra"),{getSchemaPath:A7}=yt();sB.exports=b7;async function b7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new y7(nB.SYSTEM_SCHEMA_NAME,nB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await T7(r),await R7.mkdirp(A7(e.schema))}o(b7,"lmdbCreateSchema")});var aB=M((xOe,oB)=>{"use strict";var pI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};oB.exports=pI});var dB=M((qOe,uB)=>{"use strict";var cB=_t(),hI=Cn(),EI=Kr().LMDB_ERRORS_ENUM,I7=$t(),lB=Q(),FOe=oe(),w7=require("lmdb"),N7=aB(),C7=(H(),D(W)),{OVERFLOW_MARKER:kOe,MAX_SEARCH_KEY_LENGTH:HOe}=I7,O7=C7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function P7(e,t,r,n){if(hI.validateEnv(e),t===void 0)throw new Error(EI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(EI.IDS_REQUIRED):new Error(EI.IDS_MUST_BE_ITERABLE);try{let s=cB.listDBIs(e);cB.initializeDBIs(e,t,s);let i=new N7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[O7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,w7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],R=h[A];if(R!=null)try{let N=hI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{lB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){lB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=hI.getNextMonotonicTime(),i}catch(s){throw s}}o(P7,"deleteRecords");uB.exports={deleteRecords:P7}});var Qm=M(($Oe,mB)=>{"use strict";var Wu=oe(),L7=dB(),D7=_t(),{getSchemaPath:M7}=yt(),v7=zm(),U7=Q();mB.exports=x7;async function x7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wu.isEmptyOrZeroLength(e.hash_values)&&!Wu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wu.isEmpty(l)||e.hash_values.push(l)}}if(Wu.isEmptyOrZeroLength(e.hash_values))return fB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=M7(e.schema,e.table),i=await D7.openEnvironment(s,e.table),a=await L7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await v7(e,a)}catch(c){U7.error(`unable to write transaction due to ${c.message}`)}return fB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(x7,"lmdbDeleteRecords");function fB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(fB,"createDeleteResponse")});var gI=M((YOe,pB)=>{"use strict";var B7=(H(),D(W)),KOe=Cn();function _I(e,t){let r=Object.create(null);if(t.length===1&&B7.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(_I,"parseRow");function F7(e,t,r,n){let s=_I(r,e);n.push(s)}o(F7,"searchAll");function k7(e,t,r,n){let s=_I(r,e);n[t]=s}o(k7,"searchAllToMap");function H7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(H7,"iterateDBI");function cl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(cl,"pushResults");function q7(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(q7,"endsWith");function G7(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o(G7,"contains");function $7(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o($7,"greaterThanCompare");function V7(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(V7,"greaterThanEqualCompare");function K7(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(K7,"lessThanCompare");function Y7(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(Y7,"lessThanEqualCompare");pB.exports={parseRow:_I,searchAll:F7,searchAllToMap:k7,iterateDBI:H7,endsWith:q7,contains:G7,greaterThanCompare:$7,greaterThanEqualCompare:V7,lessThanCompare:K7,lessThanEqualCompare:Y7,pushResults:cl}});var zu=M((JOe,yB)=>{"use strict";var ka=_t(),zOe=Q(),ns=Cn(),dg=$t(),rr=Kr().LMDB_ERRORS_ENUM,jOe=oe(),W7=(H(),D(W)),fg=gI(),{parseRow:z7}=fg,QOe=require("lmdb"),{OVERFLOW_MARKER:hB,MAX_SEARCH_KEY_LENGTH:j7}=dg;function EB(e,t,r,n=!1,s=void 0,i=void 0){return ll(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(EB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[dg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ll,"setupTransaction");function _B(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(hB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.openDBI(e,l[u]),!s[dg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(_B,"getOverflowCheck");function Q7(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(mg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>z7(u.value,r))))}o(Q7,"searchAll");function J7(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);mg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of EB(e,t,t,n,s,i))a.set(c,fg.parseRow(l,r));return a}o(J7,"searchAllToMap");function X7(e,t,r=!1,n=void 0,s=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=EB(e,void 0,t,r,n,s),c=a.transaction,l=_B(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(X7,"iterateDBI");function Z7(e,t){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(Z7,"countAll");function eee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=ns.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(eee,"equals");function tee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(tee,"count");function ree(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ll(e,null,r,(c,l)=>{n=ns.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(ree,"startsWith");function nee(e,t,r,n,s=!1,i=void 0,a=void 0){return gB(e,t,r,n,s,i,a,!0)}o(nee,"endsWith");function gB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=_B(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(hB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[dg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(gB,"contains");function see(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(see,"greaterThan");function iee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(iee,"greaterThanEqual");function oee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(oee,"lessThan");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(aee,"lessThanEqual");function cee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(ns.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=ns.convertKeyValueToWrite(n),s=ns.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(cee,"between");function lee(e,t,r,n){ns.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(mg(r),r=Xm(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=fg.parseRow(c,r)),a}o(lee,"searchByHash");function uee(e,t,r){ns.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(uee,"checkHashExists");function dee(e,t,r,n,s=[]){return TB(e,t,r,n,s),SB(e,t,r,n,s).map(i=>i[1])}o(dee,"batchSearchByHash");function fee(e,t,r,n,s=[]){TB(e,t,r,n,s);let i=new Map;for(let[a,c]of SB(e,t,r,n,s))i.set(a,c);return i}o(fee,"batchSearchByHashToMap");function SB(e,t,r,n,s=[]){return ll(e,t,t,(i,a,c)=>{r=Xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,fg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(SB,"batchHashSearch");function TB(e,t,r,n,s){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(mg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(TB,"initializeBatchSearchByHash");function mg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(mg,"validateFetchAttributes");function Ha(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>j7)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&W7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");yB.exports={searchAll:Q7,searchAllToMap:J7,count:tee,countAll:Z7,equals:eee,startsWith:ree,endsWith:nee,contains:gB,searchByHash:lee,setGetWholeRowAttributes:Xm,batchSearchByHash:dee,batchSearchByHashToMap:fee,checkHashExists:uee,iterateDBI:X7,greaterThan:see,greaterThanEqual:iee,lessThan:oee,lessThanEqual:aee,between:cee}});var ju=M((ZOe,wB)=>{var RB=require("lodash"),AB=ft(),Ye=require("joi"),mee=oe(),{hdbSchemaTable:Zm,checkValidTable:bB,hdbTable:IB,hdbDatabase:pg}=Hi(),{handleHDBError:pee,hdbErrors:hee}=_e(),{getDatabases:Eee}=(Oe(),D(mt)),{HTTP_STATUS_CODES:_ee}=hee,gee=Ye.object({database:pg,schema:pg,table:IB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),See=Ye.object({database:pg,schema:pg,table:IB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});wB.exports=function(e,t){let r=null;switch(t){case"value":r=AB.validateBySchema(e,gee);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(bB("database",e.schema)),i(bB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=AB.validateBySchema(e,See);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=mee.checkGlobalSchemaTable(e.schema,e.table);if(s)return pee(new Error,s,_ee.NOT_FOUND);let a=Eee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=RB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!RB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var SI=M((tPe,NB)=>{"use strict";var Tee=_t(),yee=ju(),{getSchemaPath:Ree}=yt();NB.exports=Aee;function Aee(e){let t=yee(e,"hashes");if(t)throw t;let r=Ree(e.schema,e.table);return Tee.openEnvironment(r,e.table)}o(Aee,"initialize")});var TI=M((nPe,CB)=>{"use strict";var bee=zu(),Iee=SI();CB.exports=wee;async function wee(e){let t=await Iee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return bee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(wee,"lmdbGetDataByHash")});var Qu=M((iPe,OB)=>{"use strict";var yI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};OB.exports=yI});var LB=M((cPe,PB)=>{"use strict";var aPe=Qu(),Nee=zu(),Cee=SI();PB.exports=Oee;async function Oee(e){let t=await Cee(e),r=global.hdb_schema[e.schema][e.table];return Nee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Oee,"lmdbSearchByHash")});var di=M((uPe,DB)=>{"use strict";var RI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};DB.exports=RI});var hg=M((fPe,FB)=>{"use strict";var un=zu(),Pee=_t(),Lee=oe(),We=$t(),ul=(H(),D(W)),Dee=Gi(),MB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Mee}=yt(),Ho=ul.SEARCH_WILDCARDS;async function vee(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=Dee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=BB(e,n.hash_attribute,r,t);return UB(e,s,n.hash_attribute,r)}o(vee,"prepSearch");async function UB(e,t,r,n){let s=Mee(e.schema,e.table),i=await Pee.openEnvironment(s,e.table),a=xB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(Uee(e,r)===!1){let d=e.attribute;if(d===r)return n?vB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?vB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(UB,"executeSearch");function xB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(xB,"searchByType");function vB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(vB,"createMapFromIterable");function Uee(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(Uee,"checkToFetchMore");function BB(e,t,r,n){if(Lee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(MB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(MB.UNKNOWN_SEARCH_TYPE)}}o(BB,"createSearchTypeFromSearchObject");FB.exports={executeSearch:UB,createSearchTypeFromSearchObject:BB,prepSearch:vee,searchByType:xB}});var HB=M((hPe,kB)=>{"use strict";var pPe=di(),xee=ju(),Bee=oe(),Fee=(H(),D(W)),kee=hg();kB.exports=Hee;function Hee(e,t){if(!Bee.isEmpty(t)&&Fee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=xee(e,"value");if(n)throw n;return kee.prepSearch(e,t,!0)}o(Hee,"lmdbGetDataByValue")});var ep=M((gPe,qB)=>{"use strict";var _Pe=di(),qee=ju(),Gee=oe(),$ee=(H(),D(W)),Vee=hg();qB.exports=Kee;async function Kee(e,t){if(!Gee.isEmpty(t)&&$ee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=qee(e,"value");if(n)throw n;return Vee.prepSearch(e,t,!1)}o(Kee,"lmdbSearchByValue")});var $B=M((yPe,GB)=>{"use strict";var TPe=$t(),AI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},bI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},II=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};GB.exports={SearchByConditionsObject:AI,SearchCondition:bI,SortAttribute:II}});var zB=M((wPe,WB)=>{"use strict";var{SearchByConditionsObject:APe,SearchCondition:bPe}=$B(),Yee=di(),Wee=ju(),wI=zu(),Eg=$t(),{Resource:IPe}=(Ua(),D($x)),YB=hg(),zee=gI(),jee=require("lodash"),{getSchemaPath:Qee}=yt(),VB=_t(),{handleHDBError:Jee,hdbErrors:Xee}=_e(),{HTTP_STATUS_CODES:Zee}=Xee,ete=1e8;WB.exports=tte;async function tte(e){let t=Wee(e,"conditions");if(t)throw Jee(t,t.message,Zee.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=Qee(e.schema,e.table),n=await VB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)VB.openDBI(n,u.attribute);let i=jee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Eg.SEARCH_TYPES.EQUALS?u.estimated_count=wI.count(n,u.attribute,u.value):d===Eg.SEARCH_TYPES.CONTAINS||d===Eg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=ete}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await KB(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(YB.filterByType),f=d.length,m=wI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>zee.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await KB(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=wI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(tte,"lmdbSearchByConditions");async function KB(e,t,r,n){let s=new Yee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Eg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,YB.searchByType(e,s,i,n).map(a=>a.value)}o(KB,"executeConditionSearch")});var tp=M((CPe,jB)=>{"use strict";var rte=(H(),D(W)).OPERATIONS_ENUM,NI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=rte.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};jB.exports=NI});var CI=M((PPe,nF)=>{"use strict";var ZB=di(),eF=tp(),tF=ep(),rF=Qm(),Un=(H(),D(W)),QB=oe(),JB=_t(),{getTransactionAuditStorePath:nte,getSchemaPath:ste}=yt(),XB=Q();nF.exports=ite;async function ite(e){try{if(QB.isEmpty(global.hdb_schema[e.schema])||QB.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ote(e),await ate(e);let t=ste(e.schema,e.table);try{await JB.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")XB.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=nte(e.schema,e.table);await JB.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")XB.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(ite,"lmdbDropTable");async function ote(e){let t=new ZB(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await tF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new eF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await rF(s)}o(ote,"deleteAttributesFromSystem");async function ate(e){let t=new ZB(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await tF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new eF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await rF(s)}catch(i){throw i}}o(ate,"dropTableFromSystem")});var iF=M((DPe,sF)=>{"use strict";var cte=require("fs-extra"),lte=di(),ute=Qu(),dte=tp(),fte=CI(),mte=Qm(),pte=TI(),hte=ep(),qo=(H(),D(W)),{getSchemaPath:Ete}=yt(),{handleHDBError:_te,hdbErrors:gte}=_e(),{HDB_ERROR_MSGS:Ste,HTTP_STATUS_CODES:Tte}=gte;sF.exports=yte;async function yte(e){let t;try{t=await Rte(e.schema);let r=new lte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await hte(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await fte(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new dte(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await mte(s);let i=Ete(t);await cte.remove(i)}catch(r){throw r}}o(yte,"lmdbDropSchema");async function Rte(e){let t=new ute(qo.SYSTEM_SCHEMA_NAME,qo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[qo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await pte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw _te(new Error,Ste.SCHEMA_NOT_FOUND(e),Tte.NOT_FOUND,void 0,void 0,!0);return n}o(Rte,"validateDropSchema")});var rp=M((vPe,oF)=>{"use strict";var OI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};oF.exports=OI});var LI=M((BPe,aF)=>{"use strict";var Ate=require("fs-extra"),_g=_t(),{getTransactionAuditStorePath:bte}=yt(),PI=$t(),xPe=rp();aF.exports=Ite;async function Ite(e){let t;try{let r=bte(e.schema,e.table);await Ate.mkdirp(r),t=await _g.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{_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Ite,"createTransactionsAuditEnvironment")});var uF=M((HPe,lF)=>{"use strict";var DI=(H(),D(W)),cF=_t(),wte=ol(),{getSystemSchemaPath:Nte,getSchemaPath:Cte}=yt(),kPe=Gi(),Ote=cg(),MI=ag(),Pte=Q(),Lte=LI();lF.exports=Dte;async function Dte(e,t){let r=Cte(t.schema,t.table),n=new MI(t.schema,t.table,DI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new MI(t.schema,t.table,DI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new MI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await cF.createEnvironment(r,t.table),e!==void 0){let a=await cF.openEnvironment(Nte(),DI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await wte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await vI(n),await vI(s),await vI(i)}await Lte(t)}catch(a){throw a}}o(Dte,"lmdbCreateTable");async function vI(e){try{await Ote(e)}catch(t){Pte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(vI,"createAttribute")});var fF=M((GPe,dF)=>{"use strict";var Mte=Wm(),vte=mm(),Ute=lg(),np=(H(),D(W)),xte=ol().updateRecords,Bte=_t(),{getSchemaPath:Fte}=yt(),kte=zm(),Hte=Q();dF.exports=qte;async function qte(e){try{let{schemaTable:t,attributes:r}=Mte(e);vte(e,r,t.hash_attribute),e.schema!==np.SYSTEM_SCHEMA_NAME&&(r.includes(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Ute(e.hdb_auth_header,t,r),s=Fte(e.schema,e.table),i=await Bte.openEnvironment(s,e.table),a=await xte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await kte(e,a)}catch(c){Hte.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(qte,"lmdbUpdateRecords")});var pF=M((VPe,mF)=>{"use strict";var Gte=(H(),D(W)).OPERATIONS_ENUM,UI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Gte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mF.exports=UI});var EF=M((WPe,hF)=>{"use strict";var YPe=pF(),$te=Wm(),Vte=mm(),Kte=lg(),sp=(H(),D(W)),Yte=ol().upsertRecords,Wte=_t(),{getSchemaPath:zte}=yt(),jte=zm(),Qte=Q(),{handleHDBError:Jte,hdbErrors:Xte}=_e();hF.exports=Zte;async function Zte(e){let t;try{t=$te(e)}catch(l){throw Jte(l,l.message,Xte.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;Vte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Kte(e.hdb_auth_header,r,n),i=zte(e.schema,e.table),a=await Wte.openEnvironment(i,e.table),c=await Yte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await jte(e,c)}catch(l){Qte.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(Zte,"lmdbUpsertRecords")});var gF=M((jPe,_F)=>{"use strict";var xI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};_F.exports=xI});var TF=M((JPe,SF)=>{"use strict";var BI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};SF.exports=BI});var AF=M((eLe,RF)=>{"use strict";var FI=_t(),{getTransactionAuditStorePath:ere}=yt(),ZPe=gF(),ip=$t(),tre=oe(),yF=TF(),rre=require("util").promisify,nre=rre(setTimeout),sre=1e4,ire=100;RF.exports=ore;async function ore(e){let t=ere(e.schema,e.table),r=await FI.openEnvironment(t,e.table,!0),n=FI.listDBIs(r);FI.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new yF;do s=await are(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await nre(ire);while(s.transactions_deleted>0);return i}o(ore,"deleteAuditLogsBefore");async function are(e,t){let r=new yF;try{let n=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];tre.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>sre)break}return await s,r}catch(n){throw n}}o(are,"deleteTransactions")});var IF=M((rLe,bF)=>{"use strict";var kI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};bF.exports=kI});var NF=M((iLe,wF)=>{"use strict";var cre=di(),lre=tp(),sLe=IF(),$i=(H(),D(W)),ure=oe(),HI=_t(),dre=Gi(),fre=ep(),mre=Qm(),{getSchemaPath:pre}=yt();wF.exports=hre;async function hre(e,t=!0){let r;e.schema===$i.SYSTEM_SCHEMA_NAME?r=dre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await _re(e),s=pre(e.schema,e.table),i=await HI.openEnvironment(s,e.table);return t===!0&&await Ere(e,i,r.hash_attribute),HI.dropDBI(i,e.attribute),n}o(hre,"lmdbDropAttribute");async function Ere(e,t,r){let n=HI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Ere,"removeAttributeFromAllObjects");async function _re(e){let t=new cre($i.SYSTEM_SCHEMA_NAME,$i.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await fre(t)).filter(a=>a[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(ure.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new lre($i.SYSTEM_SCHEMA_NAME,$i.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return mre(i)}o(_re,"dropAttributeFromSystem")});var MF=M((cLe,DF)=>{"use strict";var qI=_t(),Ju=$t(),aLe=Cn(),GI=(H(),D(W)),CF=oe(),{getTransactionAuditStorePath:gre}=yt(),Sre=zu(),gg=Ku(),Tre=Q();DF.exports=yre;async function yre(e){let t=gre(e.schema,e.table),r=await qI.openEnvironment(t,e.table,!0),n=qI.listDBIs(r);qI.initializeDBIs(r,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case GI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return OF(r,e.search_values);case GI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Are(r,e.search_values,s);case GI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Rre(r,e.search_values);default:return OF(r)}}o(yre,"readAuditLog");function OF(e,t=[0,Date.now()]){CF.isEmpty(t[0])&&(t[0]=0),CF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new gg,s))}o(OF,"searchTransactionsByTimestamp");function Rre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,LF(e,i))}return Object.fromEntries(r)}o(Rre,"searchTransactionsByUsername");function Are(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Sre.equals(e,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=LF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);PF(l,"records",r,d,a),PF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Are,"searchTransactionsByHashValues");function PF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new gg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new gg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(PF,"loopRecords");function LF(e,t){let r=[];try{let n=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new gg,i);r.push(a)}}catch(i){Tre.warn(i)}return r}catch(n){throw n}}o(LF,"batchSearchTransactions")});var UF=M((fLe,vF)=>{"use strict";var{getSchemaPath:uLe}=yt(),dLe=_t(),{database:bre}=(Oe(),D(mt));vF.exports={writeTransaction:Ire};async function Ire(e,t,r){return bre({database:e,table:t}).transaction(r)}o(Ire,"writeTransaction")});var kF=M((pLe,FF)=>{"use strict";var{getSchemaPath:xF}=yt(),BF=_t();FF.exports={flush:wre,resetReadTxn:Nre};async function wre(e,t){return(await BF.openEnvironment(xF(e,t),t.toString())).flushed}o(wre,"flush");async function Nre(e,t){try{(await BF.openEnvironment(xF(e,t),t.toString())).resetReadTxn()}catch{}}o(Nre,"resetReadTxn")});var $F=M((ELe,GF)=>{"use strict";var{Readable:Cre}=require("stream"),{getDatabases:Ore}=(Oe(),D(mt)),{readSync:Pre,openSync:Lre,createReadStream:HF}=require("fs"),{open:Dre}=require("lmdb"),{OpenDBIObject:qF}=Gm(),Mre=$m(),{AUDIT_STORE_OPTIONS:vre}=(Io(),D(rx)),{INTERNAL_DBIS_NAME:Ure,AUDIT_STORE_NAME:xre}=$t();GF.exports=Fre;var $I=32768,Bre=100;async function Fre(e){let t=e.database||e.schema||"data",r=Ore()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=Dre({noSync:!0,maxDbs:Mre.MAX_DBS}),m,p=f.openDB(Ure,new qF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:ee,value:q}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,q,ee),E++%Bre===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new qF(!O,O);await g(S,F)}e.include_audit&&await g(xre,{...vre}),await m;let A=HF(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=Lre(a.path);return a.transaction(()=>{let u=Buffer.alloc($I);Pre(c,u,0,$I),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=HF(null,{fd:c,start:$I}),m=new Cre.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(Fre,"getBackup")});var YF=M((gLe,KF)=>{"use strict";var kre=Q(),{handleHDBError:Hre}=_e(),qre=R0(),Gre=cg(),$re=mI(),Vre=iB(),Kre=Qm(),Yre=TI(),Wre=LB(),zre=HB(),jre=ep(),Qre=zB(),Jre=iF(),Xre=uF(),Zre=fF(),ene=EF(),tne=AF(),rne=CI(),nne=NF(),sne=MF(),ine=UF(),VF=kF(),one=$F(),VI=class extends qre{static{o(this,"LMDBBridge")}async searchByConditions(t){return Qre(t)}async getDataByHash(t){return await Yre(t)}async searchByHash(t){return await Wre(t)}async getDataByValue(t,r){return await zre(t,r)}async searchByValue(t){return await jre(t)}async createSchema(t){return await Vre(t)}async dropSchema(t){return await Jre(t)}async createTable(t,r){return await Xre(t,r)}async dropTable(t){return await rne(t)}async createAttribute(t){return await Gre(t)}async createRecords(t){return await $re(t)}async updateRecords(t){return await Zre(t)}async upsertRecords(t){try{return await ene(t)}catch(r){throw Hre(r,null,null,kre.ERR,r)}}async deleteRecords(t){return await Kre(t)}async dropAttribute(t){return await nne(t)}async deleteAuditLogsBefore(t){return await tne(t)}async readAuditLog(t){return await sne(t)}writeTransaction(t,r,n){return ine.writeTransaction(t,r,n)}flush(t,r){return VF.flush(t,r)}resetReadTxn(t,r){return VF.resetReadTxn(t,r)}getBackup(t){return one(t)}};KF.exports=VI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ss.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof ws||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=KI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?jF:zF);break}c=l}while(c&&c!==zF&&c!==jF)}function QF(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(WF[t])return WF[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=KI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function ane(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function KI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new fl(e);case Array:let n=new Tg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=KI(a,t?.elements)),n[s]=a}return n;default:return e}}function yg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=yg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function qa(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=qa(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=UA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=qa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)cne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Sg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Sg(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Sg(s))return!0}else return!0}else return!0}}return!1}var ss,WF,zF,jF,fl,cne,dl,Tg,op,YI=ie(()=>{ss=w(_e());p_();Ns();o(xn,"getChanges");o(ap,"assignTrackedAccessors");WF=Object.prototype,zF=new Proxy({},{get:QF}),jF=new Proxy({},{get:QF,set:ane});o(QF,"getProxiedProperty");o(ane,"setProxiedProperty");o(KI,"trackObject");fl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};ap(fl,{},!0);o(yg,"collapseData");cne=Object.prototype.hasOwnProperty;o(qa,"updateAndFreeze");o(Sg,"hasChanges");dl=Symbol.for("has-array-changes"),Tg=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};Tg.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var sk={};Ie(sk,{ResourceBridge:()=>jI});function QI({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 JF(e,t){let r=Vi(e),n=QI(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;Rt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&yg(d)}catch(f){d={message:(0,nk.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Vi(e){let t=e.database||e.schema||une,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,lne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function XF(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*ZF(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var ek,Rg,fi,tk,WI,zI,rk,nk,lne,une,dne,fne,jI,ik=ie(()=>{ek=w(YF()),Rg=w(ju()),fi=w(_e());Oe();tk=w(Wm());H();WI=w(ko()),zI=w(rs()),rk=w(oe());Ca();YI();nk=w(Q()),{HDB_ERROR_MSGS:lne}=fi.hdbErrors,une="data",dne=1e4,fne=10,jI=class extends ek.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Vi(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Rg.default)(t,"conditions");if(s)throw(0,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:QI(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Vi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Vi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Vi(t).dropTable()}createSchema(t){return Xu({database:t.schema,table:null}),WI.signalSchemaChange(new zI.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await JI(t.schema),WI.signalSchemaChange(new zI.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,tk.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),Rt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=yg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Rt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return XF(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:zE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,rk.asyncSetTimeout)(fne),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%dne===0&&await u();return l.length>0&&await u(),s?XF(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Rg.default)(t,"hashes");if(r)throw r;return JF(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of JF(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&pA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Rg.default)(t,"value");if(n)throw n;let s=Vi(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.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===zE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:QI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Vi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Vi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Vi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Vi(t),n={};switch(t.search_type){case jE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case jE.USERNAME:{let s=t.search_values;for await(let i of ZF(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return ZF(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(QI,"getSelect");o(JF,"getRecords");o(Vi,"getTable");o(XF,"createDeleteResponse");o(ZF,"groupRecordsInHistory")});var is=M((OLe,ok)=>{"use strict";var{ResourceBridge:mne}=(ik(),D(sk)),pne=ue();pne.initSync();var Ag;function hne(){return Ag||(Ag=new mne,Ag)}o(hne,"getBridge");ok.exports=hne()});var Ki=M((LLe,lk)=>{var Ene=Gi(),{promisify:_ne}=require("util"),{getDatabases:ck}=(Oe(),D(mt));lk.exports={setSchemaDataToGlobal:ak,getTableSchema:gne,getSystemSchema:Sne,setSchemaDataToGlobalAsync:_ne(ak)};function ak(e){global.hdb_schema=ck(),e&&e()}o(ak,"setSchemaDataToGlobal");function gne(e,t,r){let n=ck()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(gne,"getTableSchema");function Sne(){return Ene}o(Sne,"getSystemSchema")});var Bn=M((MLe,mk)=>{"use strict";var Ig=jb(),Qr=oe(),Tne=require("util"),wg=is(),yne=Ki(),uk=Q(),{handleHDBError:ml,hdbErrors:Rne}=_e(),{HTTP_STATUS_CODES:pl}=Rne,Ane=Tne.promisify(yne.getTableSchema),bne="updated",dk="inserted",fk="upserted";mk.exports={insert:wne,update:Nne,upsert:Cne,validation:Ine,flush:One};async function Ine(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ane(e.schema,e.table),r=Ig(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw uk.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw uk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Ine,"validation");async function wne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.createRecords(e);return bg(dk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(wne,"insertData");async function Nne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?bg(bne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):bg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Nne,"updateData");async function Cne(e){if(e.operation!=="upsert")throw ml(new Error,"invalid operation, must be upsert",pl.INTERNAL_SERVER_ERROR);let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.upsertRecords(e);return bg(fk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Cne,"upsertData");function bg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===dk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===fk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(bg,"returnObject");function One(e){return Qr.transformReq(e),wg.flush(e.schema,e.table)}o(One,"flush")});var ZI=M((ULe,Ek)=>{var Pne=ft(),XI=require("joi"),{hdbTable:Lne,hdbDatabase:pk}=Hi(),hk={schema:pk,database:pk,table:Lne},Dne={date:XI.date().iso().required()},Mne={timestamp:XI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ek.exports=function(e,t){let r=t==="timestamp"?{...hk,...Mne}:{...hk,...Dne},n=XI.object(r);return Pne.validateBySchema(e,n)}});var Sk=M((xLe,gk)=>{var vne=ft(),ew=require("joi"),{hdbTable:Une,hdbDatabase:_k}=Hi(),xne=ew.object({schema:_k,database:_k,table:Une,hash_values:ew.array().required(),ids:ew.array()});gk.exports=function(e){return vne.validateBySchema(e,xne)}});var sw=M((BLe,Tk)=>{"use strict";var tw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},rw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},nw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Tk.exports={InsertObject:tw,NoSQLSeachObject:rw,DeleteResponseObject:nw}});var _l=M((kLe,Ik)=>{"use strict";var Rk=ZI(),Bne=Sk(),hl=oe(),yk=require("moment"),Ak=Q(),{promisify:Fne,callbackify:kne}=require("util"),El=(H(),D(W)),Hne=Ki(),iw=Fne(Hne.getTableSchema),ow=is(),{DeleteResponseObject:qne}=sw(),{handleHDBError:Ga,hdbErrors:Gne}=_e(),{HDB_ERROR_MSGS:Ng,HTTP_STATUS_CODES:$a}=Gne,$ne="records successfully deleted",Vne=kne(bk);Ik.exports={delete:Vne,deleteRecord:bk,deleteFilesBefore:Kne,deleteAuditLogsBefore:Yne};async function Kne(e){let t=Rk(e,"date");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),!yk(e.date,yk.ISO_8601).isValid())throw Ga(new Error,Ng.INVALID_DATE,$a.BAD_REQUEST,El.LOG_LEVELS.ERROR,Ng.INVALID_DATE,!0);let n=hl.checkSchemaTableExist(e.schema,e.table);if(n)throw Ga(new Error,n,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,n,!0);let s=await ow.deleteRecordsBefore(e);if(await iw(e.schema,e.table),Ak.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Kne,"deleteFilesBefore");async function Yne(e){let t=Rk(e,"timestamp");if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),isNaN(e.timestamp))throw Ga(new Error,Ng.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,El.LOG_LEVELS.ERROR,Ng.INVALID_VALUE("Timestamp"),!0);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,r,!0);let n=await ow.deleteAuditLogsBefore(e);return await iw(e.schema,e.table),Ak.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Yne,"deleteAuditLogsBefore");async function bk(e){e.ids&&(e.hash_values=e.ids);let t=Bne(e);if(t)throw Ga(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);hl.transformReq(e);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw Ga(new Error,r,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,r,!0);try{await iw(e.schema,e.table);let n=await ow.deleteRecords(e);return hl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$ne}`),n}catch(n){if(n.message===El.SEARCH_NOT_FOUND_MESSAGE){let s=new qne;return s.message=El.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(bk,"deleteRecord")});var dw={};Ie(dw,{HASH_FUNCTION:()=>kr,hash:()=>lw,validate:()=>uw});function aw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function lw(e,t=kr[Nk?.toUpperCase()]??kr.SHA256){return cw[t](e)}function uw(e,t,r=kr[Nk?.toUpperCase()]??kr.SHA256){return e?Wne[r](e,t):!1}var cp,Zu,wk,Nk,lp,Ck,kr,cw,Wne,fw=ie(()=>{cp=w(require("node:crypto")),Zu=w(require("argon2")),wk=w(ue());H();Nk=(0,wk.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,Ck=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(aw,"generateSalt");cw={[kr.MD5]:(e,t=void 0)=>{t=t??aw(Ck);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??aw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=aw(lp),r=await Zu.hash(e,{type:Zu.argon2id,salt:Buffer.from(t)});return t+r}},Wne={[kr.MD5]:(e,t)=>{let r=e.slice(0,Ck);return e===cw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===cw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await Zu.verify(e.slice(lp),t)};o(lw,"hash");o(uw,"validate")});var Pk=M(($Le,Ok)=>{var mw=ft(),dn={username:{presence:!0,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 zne(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,mw.validateObject(e,dn)}o(zne,"addUserValidation");function jne(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,mw.validateObject(e,dn)}o(jne,"alterUserValidation");function Qne(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,mw.validateObject(e,dn)}o(Qne,"dropUserValidation");Ok.exports={addUserValidation:zne,alterUserValidation:jne,dropUserValidation:Qne}});var $k=M((YLe,Gk)=>{"use strict";var pw=require("recursive-iterator"),Jne=require("alasql"),hw=require("clone"),Lk=oe(),{handleHDBError:Dk,hdbErrors:Xne}=_e(),{HDB_ERROR_MSGS:Mk,HTTP_STATUS_CODES:vk}=Xne,{getDatabases:Zne}=(Oe(),D(mt)),ese=["DISTINCT_ARRAY"],Uk=Symbol("validateTables"),Ew=Symbol("validateTable"),KLe=Symbol("getAllColumns"),xk=Symbol("validateAllColumns"),Cg=Symbol("findColumn"),Bk=Symbol("validateOrderBy"),up=Symbol("validateSegment"),_w=Symbol("validateColumn"),Fk=Symbol("setColumnsForTable"),kk=Symbol("checkColumnsForAsterisk"),Hk=Symbol("validateGroupBy"),qk=Symbol("hasColumns"),gw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Uk](),this[kk](),this[xk]()}[Uk](){if(this[qk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ew](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ew](t.table)})}}[qk](){let t=!1,r=new pw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ew](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Zne();if(!r[t.databaseid])throw Dk(new Error,Mk.SCHEMA_NOT_FOUND(t.databaseid),vk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Dk(new Error,Mk.TABLE_NOT_FOUND(t.databaseid,t.tableid),vk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=hw(s);i.table=hw(t),this.attributes.push(i)})}[Cg](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)}[kk](){let t=new pw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Fk](r.tableid)}[Fk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new Jne.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[xk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[Hk](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new pw(t),s=[];for(let{node:i,path:a}of n)!Lk.isEmpty(i)&&!Lk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Bk](i):s.push(this[_w](i)));return s}[Hk](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&ese.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=hw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Cg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Cg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.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`}[Bk](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[_w](t)}[_w](t){let r=this[Cg](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Gk.exports=gw});var Wk=M((zLe,Yk)=>{"use strict";var Vk=require("lodash"),dp=require("mathjs"),tse=require("jsonata"),Kk=oe();Yk.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Vk.uniqWith(e,Vk.isEqual):e,"distinct_array"),searchJSON:rse,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(fp,"aggregateFunction");function rse(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(Kk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Kk.isEmpty(this.__ala__.res[r])){let n=tse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(rse,"searchJSON")});var jk=M((QLe,zk)=>{"use strict";var ur=require("moment"),Sw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;zk.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(Sw),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(Sw),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(Sw),"offset_utc")}});var Zk=M((XLe,Xk)=>{"use strict";var nse=require("@turf/area"),sse=require("@turf/length"),ise=require("@turf/circle"),ose=require("@turf/difference"),ase=require("@turf/distance"),cse=require("@turf/boolean-contains"),lse=require("@turf/boolean-equal"),use=require("@turf/boolean-disjoint"),dse=require("@turf/helpers"),Qk=(H(),D(W)),ze=oe(),Go=Q();Xk.exports={geoArea:fse,geoLength:mse,geoCircle:pse,geoDifference:hse,geoDistance:Jk,geoNear:Ese,geoContains:_se,geoEqual:gse,geoCrosses:Sse,geoConvert:Tse};function fse(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return nse.default(e)}catch(t){return Go.trace(t,e),NaN}}o(fse,"geoArea");function mse(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return sse.default(e,{units:t||"kilometers"})}catch(r){return Go.trace(r,e),NaN}}o(mse,"geoLength");function pse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return ise.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(pse,"geoCircle");function hse(e,t){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return ose(e,t)}catch(r){return Go.trace(r,e,t),NaN}}o(hse,"geoDifference");function Jk(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return ase.default(e,t,{units:r||"kilometers"})}catch(n){return Go.trace(n,e,t),NaN}}o(Jk,"geoDistance");function Ese(e,t,r,n){if(ze.isEmpty(e)||ze.isEmpty(t))return!1;if(ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Jk(e,t,n)<=r}catch(s){return Go.trace(s,e,t),!1}}o(Ese,"geoNear");function _se(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return cse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(_se,"geoContains");function gse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return lse.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(gse,"geoEqual");function Sse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return!use.default(e,t)}catch(r){return Go.trace(r,e,t),!1}}o(Sse,"geoCrosses");function Tse(e,t,r){if(ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ze.isEmpty(t))throw new Error("geo_type is required");if(ze.isEmpty(Qk.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(Qk.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),dse[t](e,r)}o(Tse,"geoConvert")});var Og=M((eDe,eH)=>{var gl=Wk(),os=jk(),Yi=Zk();eH.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=os.current_date,e.fn.current_time=e.fn.CURRENT_TIME=os.current_time,e.fn.extract=e.fn.EXTRACT=os.extract,e.fn.date=e.fn.DATE=os.date,e.fn.date_format=e.fn.DATE_FORMAT=os.date_format,e.fn.date_add=e.fn.DATE_ADD=os.date_add,e.fn.date_sub=e.fn.DATE_SUB=os.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=os.date_diff,e.fn.now=e.fn.NOW=os.now,e.fn.offset_utc=e.fn.OFFSET_UTC=os.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=os.get_server_time,e.fn.getdate=e.fn.GETDATE=os.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=os.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Yi.geoNear}});var sH=M((tDe,nH)=>{"use strict";var mp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var yse=Og(),tH=require("clone"),Pg=require("recursive-iterator"),Ve=Q(),st=oe(),ed=is(),Rse=(H(),D(W)),{hdbErrors:Ase}=_e(),{getDatabases:rH}=(Oe(),D(mt)),bse="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";yse(Fn);var Tw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ve.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(mi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}}_getColumns(){let t=new Pg(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(tH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=rH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Pg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Pg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(Rse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&mp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Fn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(tH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.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(bse)>-1&&this.tables.forEach(s=>{let i={columnid:rH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ed.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await ed.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await ed.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,c.value="*";let d=await ed.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(mi)}}}_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 Fn.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(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 s=t.is_func?new Fn.yy.FuncValue:new Fn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Fn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Pg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=mp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(mi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await ed.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.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}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(Ase.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await ed.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(mi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};nH.exports=Tw});var fn=M((nDe,iH)=>{"use strict";var Ise=$k();iH.exports={searchByConditions:Nse,searchByHash:Cse,searchByValue:Ose,search:Pse};var yw=is(),{transformReq:Rw}=oe(),wse=sH();async function Nse(e){return Rw(e),yw.searchByConditions(e)}o(Nse,"searchByConditions");async function Cse(e){Rw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yw.searchByHash(e))r&&t.push(r);return t}o(Cse,"searchByHash");async function Ose(e){Rw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yw.searchByValue(e))t.push(r);return t}o(Ose,"searchByValue");function Pse(e,t){try{let r=new Ise(e);r.validate(),new wse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(Pse,"search")});var Wi=M((iDe,lH)=>{"use strict";var pp=require("crypto"),Lse=ue(),{CONFIG_PARAMS:Dse}=(H(),D(W)),aH="aes-256-cbc",Mse=32,vse=16,Aw=64,cH=32,Use=Aw+cH,oH=new Map;lH.exports={encrypt:xse,decrypt:Bse,createNatsTableStreamName:Fse};function xse(e){let t=pp.randomBytes(Mse),r=pp.randomBytes(vse),n=pp.createCipheriv(aH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(xse,"encrypt");function Bse(e){let t=e.substr(0,Aw),r=e.substr(Aw,cH),n=e.substr(Use,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(aH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Bse,"decrypt");function Fse(e,t){let r=Lse.get(Dse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=oH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),oH.set(r,n)),n}o(Fse,"createNatsTableStreamName")});var wt=M((cDe,dH)=>{"use strict";var{platform:aDe}=require("os"),kse="nats-server.zip",bw="nats-server",Hse=process.platform==="win32"?`${bw}.exe`:bw,qse=/^[^\s.,*>]+$/,uH="__request__",Gse=o(e=>`${e}.${uH}`,"REQUEST_SUBJECT"),$se={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Vse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kse={HUB:"hub.pid",LEAF:"leaf.pid"},Yse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Wse={SUCCESS:"success",ERROR:"error"},zse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},jse={TXN:"txn",MSGID:"msgid"},td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Qse={[td.ERR]:1,[td.WRN]:2,[td.INF]:3,[td.DBG]:4,[td.TRC]:5},Jse={debug:"-D",trace:"-DVV"};dH.exports={NATS_SERVER_ZIP:kse,NATS_SERVER_NAME:bw,NATS_BINARY_NAME:Hse,PID_FILES:Kse,NATS_CONFIG_FILES:Vse,SERVER_SUFFIX:Yse,NATS_TERM_CONSTRAINTS_RX:qse,REQUEST_SUFFIX:uH,UPDATE_REMOTE_RESPONSE_STATUSES:Wse,CLUSTER_STATUS_STATUSES:zse,REQUEST_SUBJECT:Gse,SUBJECT_PREFIXES:jse,MSG_HEADERS:$se,LOG_LEVELS:td,LOG_LEVEL_FLAGS:Jse,LOG_LEVEL_HIERARCHY:Qse}});var as=M((uDe,Hr)=>{"use strict";var pH="username is required",hH="nothing to update, must supply active, role or password to update",EH="password cannot be an empty string",_H="If role is specified, it cannot be empty.",gH="active must be true or false";Hr.exports.addUser=oie;Hr.exports.alterUser=aie;Hr.exports.dropUser=lie;Hr.exports.getSuperUser=pie;Hr.exports.userInfo=uie;Hr.exports.listUsers=Dg;Hr.exports.listUsersExternal=die;Hr.exports.setUsersWithRolesCache=Sl;Hr.exports.findAndValidateUser=Mw;Hr.exports.getClusterUser=hie;Hr.exports.getUsersWithRolesCache=mie;Hr.exports.USERNAME_REQUIRED=pH;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=hH;Hr.exports.EMPTY_PASSWORD=EH;Hr.exports.EMPTY_ROLE=_H;Hr.exports.ACTIVE_BOOLEAN=gH;var SH=Bn(),Xse=_l(),hp=(fw(),D(dw)),TH=Pk(),Ep=fn(),Ow=ko(),zi=oe(),yH=require("validate.js"),Pw=Q(),{promisify:Zse}=require("util"),Lw=Wi(),ww=(H(),D(W)),fH=wt(),eie=Tt(),tie=ue(),rie=Gi(),{hdbErrors:nie,ClientError:pi}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:Iw,HDB_ERROR_MSGS:rd}=nie,{UserEventMsg:Dw}=rs(),Nw=require("lodash"),{server:Lg}=(xr(),D(rm)),sie=Q();Lg.getUser=(e,t)=>Mw(e,t,t!=null);Lg.authenticateUser=(e,t)=>Mw(e,t);var RH={username:!0,active:!0,role:!0,password:!0},mH=new Map,iie=Zse(Xse.delete),Cw=tie.get(ww.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,ji;async function oie(e){let t=yH.cleanAttributes(e,RH),r=TH.addUserValidation(t);if(r)throw new pi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new pi(rd.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new pi(rd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Lw.encrypt(t.password)),t.password=await hp.hash(t.password,Cw),t.hash_function=Cw,t.role=n[0].id;let s=await SH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Pw.debug(s),await Sl(),s.skipped_hashes.length===1)throw new pi(rd.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return Ow.signalUserChange(new Dw(process.pid)),`${t.username} successfully added`}o(oie,"addUser");async function aie(e){let t=yH.cleanAttributes(e,RH);if(zi.isEmptyOrZeroLength(t.username))throw new Error(pH);if(zi.isEmptyOrZeroLength(t.password)&&zi.isEmptyOrZeroLength(t.role)&&zi.isEmptyOrZeroLength(t.active))throw new Error(hH);if(!zi.isEmpty(t.password)&&zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(EH);if(!zi.isEmpty(t.active)&&!zi.isBoolean(t.active))throw new Error(gH);if(!zi.isEmpty(t.password)&&!zi.isEmptyOrZeroLength(t.password.trim())&&(cie(t.username)&&(t.hash=Lw.encrypt(t.password)),t.password=await hp.hash(t.password,Cw)),t.role==="")throw new Error(_H);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new pi(rd.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new pi(rd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await SH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Sl(),Ow.signalUserChange(new Dw(process.pid)),r}o(aie,"alterUser");function cie(e){let t=!1,r=ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(cie,"isClusterUser");async function lie(e){let t=TH.dropUserValidation(e);if(t)throw new pi(t.message);if(ji.get(e.username)===void 0)throw new pi(rd.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await iie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Pw.debug(r),await Sl(),Ow.signalUserChange(new Dw(process.pid)),`${e.username} successfully deleted`}o(lie,"dropUser");async function uie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Nw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(uie,"userInfo");async function die(){let e=await Dg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(die,"listUsersExternal");async function Dg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Nw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Nw.cloneDeep(s),s.role=t[s.role],fie(s.role),n.set(s.username,s);return n}o(Dg,"listUsers");function fie(e){if(!e){Pw.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(rie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(fie,"appendSystemTablesToRole");async function Sl(e=void 0){e?ji=e:ji=await Dg()}o(Sl,"setUsersWithRolesCache");async function mie(){return ji||await Sl(),ji}o(mie,"getUsersWithRolesCache");async function Mw(e,t,r=!0){ji||await Sl();let n=ji.get(e);if(!n){if(!r)return{username:e};throw new pi(Iw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new pi(Iw.USER_INACTIVE,$o.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(mH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)mH.set(t,n.password);else throw new pi(Iw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(Mw,"findAndValidateUser");async function pie(){ji||await Sl();for(let[,e]of ji)if(e.role.role==="super_user")return e}o(pie,"getSuperUser");async function hie(){let e=await Dg(),t=eie.getConfigFromFile(ww.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ww.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Lw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fH.SERVER_SUFFIX.ADMIN,r}o(hie,"getClusterUser");var AH=[];Lg.invalidateUser=function(e){for(let t of AH)try{t(e)}catch(r){sie.error("Error invalidating user",r)}};Lg.onInvalidatedUser=function(e){AH.push(e)}});var Ge,nd=ie(()=>{Ge={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var sd,vw=ie(()=>{nd();sd=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ge.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ge.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ge.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ge.WARNING,t)}markLoading(t){this.updateStatus(Ge.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ge.HEALTHY}hasError(){return this.status===Ge.ERROR}isLoading(){return this.status===Ge.LOADING}hasWarning(){return this.status===Ge.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Tl,Va,Uw,id,xw,od,Bw,Mg=ie(()=>{Tl=w(Kr()),Va=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},Uw=class extends Va{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Tl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},id=class extends Va{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Tl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},xw=class extends Va{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},od=class extends Va{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Bw=class extends Va{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Tl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
- `)}}});var bH,yl,IH,Ka,_p,ad,Eie,vg,Fw=ie(()=>{bH=w(rs()),yl=w(nt());H();IH=w(Xn());nd();Mg();Ka=(0,IH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,yl.onMessageByType)(QE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ka.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(Ka.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,yl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ka.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ka.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,bH.sendItcEvent)({type:QE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new id("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,yl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ka.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof id?Ka.error?.(`ITC failure during component status collection: ${r.message}`):Ka.warn?.("Failed to collect component status from all threads:",r),Ka.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,yl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ad=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ge.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ge.ERROR,Ge.WARNING,Ge.LOADING,Ge.UNKNOWN,Ge.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ge.UNKNOWN}},Eie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),vg=new _p(Eie)});var Ya,Ug=ie(()=>{vw();nd();Fw();Mg();Ya=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new od(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ge).includes(r))throw new od(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ge).join(", ")}`);this.statusMap.set(t,new sd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ge.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ge.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ge.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ge.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ge.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Ge.HEALTHY]:0,[Ge.ERROR]:0,[Ge.WARNING]:0,[Ge.LOADING]:0,[Ge.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await vg.collect(t);return ad.aggregate(r)}}});var dr,xg=ie(()=>{Ug();dr=new Ya});function NH(e){let t=wH.get(e);return t||(t=new kw(e),wH.set(e,t)),t}function CH(){dr.reset()}var kw,wH,Vo,OH,PH=ie(()=>{xg();nd();kw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,Ge.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,Ge.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,Ge.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,Ge.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,Ge.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},wH=new Map;o(NH,"statusForComponent");Vo={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(CH,"reset");OH=Ge});var gp={};Ie(gp,{AggregationError:()=>xw,COMPONENT_STATUS_LEVELS:()=>Ge,ComponentStatus:()=>sd,ComponentStatusError:()=>Va,ComponentStatusOperationError:()=>od,ComponentStatusRegistry:()=>Ya,CrossThreadCollectionError:()=>Bw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>Uw,ITCError:()=>id,StatusAggregator:()=>ad,componentStatusRegistry:()=>dr,crossThreadCollector:()=>vg,query:()=>_ie});var _ie,LH=ie(()=>{xg();Ug();vw();Ug();Fw();xg();Mg();nd();_ie={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Ya.getAggregatedFromAllThreads(dr)}}});var Hw={};Ie(Hw,{STATUS:()=>OH,internal:()=>gp,lifecycle:()=>Vo,reset:()=>CH,statusForComponent:()=>NH});var Sp=ie(()=>{PH();LH()});var yp=M((VDe,vH)=>{"use strict";var cs=Q(),mn=(H(),D(W)),gie=E0(),Sie=as(),{validateEvent:qw}=rs(),Tp=is(),Tie=require("process"),{resetDatabases:yie}=(Oe(),D(mt)),Rie={[mn.ITC_EVENT_TYPES.SCHEMA]:Aie,[mn.ITC_EVENT_TYPES.USER]:MH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Iie};async function Aie(e){let t=qw(e);if(t){cs.error(t);return}cs.trace("ITC schemaHandler received schema event:",e),await gie(e.message),await bie(e.message)}o(Aie,"schemaHandler");async function bie(e){try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=yie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){cs.error(t)}}o(bie,"syncSchemaMetadata");var DH=[];async function MH(e){try{try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){cs.warn(r)}let t=qw(e);if(t){cs.error(t);return}cs.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${Tie.pid} received user event:`,e),await Sie.setUsersWithRolesCache();for(let r of DH)r()}catch(t){cs.error(t)}}o(MH,"userHandler");MH.addListener=function(e){DH.push(e)};async function Iie(e){try{let t=qw(e);if(t){cs.error(t);return}cs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Hw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=rs(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?cs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?cs.debug("No originator threadId, falling back to broadcast"):cs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){cs.error("Error handling component status request:",t)}}o(Iie,"componentStatusRequestHandler");vH.exports=Rie});var rs=M((QDe,xH)=>{"use strict";var YDe=Q(),Gw=oe(),wie=(H(),D(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:WDe,threadId:Nie,isMainThread:Cie,workerData:zDe}=require("worker_threads"),{onMessageFromWorkers:Oie,broadcast:jDe,broadcastWithAcknowledgement:Pie}=nt();xH.exports={sendItcEvent:Lie,validateEvent:UH,SchemaEventMsg:Die,UserEventMsg:Mie};var Bg;Oie(async(e,t)=>{Bg=Bg||yp(),UH(e),Bg[e.type]&&await Bg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Lie(e){return!Cie&&e.message&&(e.message.originator=Nie),Pie(e)}o(Lie,"sendItcEvent");function UH(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Gw.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||Gw.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Gw.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(wie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(UH,"validateEvent");function Die(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(Die,"SchemaEventMsg");function Mie(e){this.originator=e}o(Mie,"UserEventMsg")});var ko=M((ZDe,HH)=>{"use strict";var BH=(H(),D(W)),XDe=oe(),Fg=Q(),FH=Xx(),cd,{sendItcEvent:kH}=rs();function vie(e){try{Fg.debug("signalSchemaChange called with message:",e),cd=cd||yp();let t=new FH(BH.ITC_EVENT_TYPES.SCHEMA,e);return cd.schema(t),kH(t)}catch(t){Fg.error(t)}}o(vie,"signalSchemaChange");function Uie(e){try{Fg.trace("signalUserChange called with message:",e),cd=cd||yp();let t=new FH(BH.ITC_EVENT_TYPES.USER,e);return cd.user(t),kH(t)}catch(t){Fg.error(t)}}o(Uie,"signalUserChange");HH.exports={signalSchemaChange:vie,signalUserChange:Uie}});function Ap(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function qH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Us,bp=ie(()=>{Us=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}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]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Ap,"appendHeader");o(qH,"mergeHeaders")});function kg(e,t,r=Bie){let n;return function(...i){return n?n.length*$w>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();$w=($w*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var VH,xie,Bie,GH,Fie,Vw,$H,$w,Kw=ie(()=>{VH=w(Xn()),xie=3e3,Bie=2e4,GH=0,Fie=3e4,Vw=3e3,$H=performance.now()+Vw,$w=0;o(kg,"throttle");setInterval(()=>{let e=performance.now();e-$H-Vw>xie&&GH+Fie<e&&(VH.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),GH=e),$H=e},Vw).unref()});var tq={};Ie(tq,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>qg,makeTable:()=>$g});function $g(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=Nb(i,n,l),N,O,F={},ee=Promise.resolve(),q,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(q=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let Y,le=[],ae=[],re=1,Re=2,Te={},Fe={},qe=864e5,Rr=0,Zt,Ht,er,qf=!1,Dc,qt,Gf,$f=Al.get(B.REPLICATION_DATABASES);if(Array.isArray($f)){for(let K of $f)if(K.name===c&&K.replicateTo>=0){Gf=K.replicateTo;break}}let kE=i.getRange({start:!1,end:!1}).constructor,HE=10,eA=6;g&&Su(),Nm(i.env.path,K=>{if(O)return Uc(K)});class Vf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new op(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=q;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,G)=>{if(L?.source!==U)return U[I](x,G,L)}}else return(U,L,x)=>{let G=[];for(let j of v){if(U?.source===j)break;G.push(j[I](L,x,U))}return Promise.all(G)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let G=L.value,j=L.table?Me[c][L.table]:Le;if(c===Xf&&(L.table===yu.ROLE_TABLE_NAME||L.table===yu.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=G[j.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:yo(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await j.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!0,X);case"patch":return P?be._writeInvalidate($,G,X):be._writeUpdate($,G,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,G,X);case"invalidate":return be._writeInvalidate($,G,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},G=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Rl.getWorkerIndex)(),x):(0,Rl.getWorkerIndex)()===0,j=L&&G&&await _.subscribe?.(x);if(j){let X;for await(let $ of j)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=Rt($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Xe({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Ra(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!qt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!Qie(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;qt=new BigInt64Array([BigInt(I)+1n]),qt=new BigInt64Array(i.getUserSharedBuffer("id",qt.buffer)),qt.maxSafeId=P.end}let T=Number(Atomics.add(qt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=qt.maxSafeId){let b=o(P=>{qt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(qt[0]);for(let G of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=G;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(qt.maxSafeId<I){if(L.end>qt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,qt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:qt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${qt.maxSafeId}, but id of ${I} detected`);let G=y(x);G.alreadyUpdated||Atomics.store(qt,0,BigInt(G.start+1)),qt.maxSafeId=G.end}},"updateEnd");T+C===qt.maxSafeId?setImmediate(b):T+100>=qt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,G;do{x=Math.floor(Math.random()*P),G={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let j of i.getKeys({start:x,limit:1,reverse:!0}))v=j;U=P;for(let j of i.getKeys({start:x+1,end:P,limit:1}))U=j;I*=.875,I<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let j=i.getEntry(Symbol.for("id_allocation"));return(j?.version??null)==b?(xe.default.info?.("Allocated new id range",G),i.put(Symbol.for("id_allocation"),G,Date.now()),G):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...j.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,Uc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=Gf;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Su(),Le.audit=_}static coerceId(_){return _===""?null:qg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Ww.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Yf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new lt.AccessViolation(C.user);let U=!0;return Mc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let x=Ra(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(G=>G?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?qu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||qf&&b){if(T||(T={}),b){let P=y?.length>0&&Yw(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=er[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!er[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=Yw(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return vc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=Yw(b,"insert");for(let I in T)if(!P[I])return!1;return vc(this.getContext())}else return vc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&vc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new lt.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new Vf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===YH?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new op(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(Aa(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(Aa(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=xc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=yo(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{To(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);rl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?YH:Yie;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Sg(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),q&&(I?.value?T[q.name]=I?.value[q.name]:T[q.name]=q.type==="Date"?new Date(U):q.type==="String"?new Date(U).toISOString():U),T=qa(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,qa(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,qa(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let G=L?.value,j;this.#s=0;let X=!1,$=Aa(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=xt(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=Aa(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),j=m_(j??T,ve,C),!j)return}}else{if(C)return;j=m_(j??T,G,C),xe.default.debug?.("Rebuilding update without audit:",j)}xe.default.trace?.("Rebuilt record to save:",j," is full update:",C)}let pe;if(C&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=qa(G,j??T):(this.#e=G,pe=qa(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=xc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=yo(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),To(_,G,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&Uc()},"commit")};P.addWrite(v)}async delete(_){if(Yf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(Aa(b,P,T?.nodeId)<=0)&&(To(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Uc()):rl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=Gie);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:Fi(S,De);if(ve)(ve.type||Ob[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,lt.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,Wn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,Wn=$e):(vr=$e,Wn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Mi=Wn.comparator==="ge"||Wn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(Mi?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Wn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?kie(ne,z_(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>qg(Ee,me)):qg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let G=typeof _.sort=="object"&&_.sort,j;if(G&&x!=="or"){let ne=G.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(P=y.find(me=>Fu(me.attribute)===Fu(ne)),!P){let me=Fi(S,ne);if(!me)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...G,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!G.descending)}y=U(y,x),G&&(P&&y[0]===P?G.next&&(j={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(P&&y.splice(y.indexOf(P),1),j=G));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:j,selectApplied:!!X};let $=C.useReadTxn(),be=Pb(y,x,Le,$,_,T,(ne,me)=>Wf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,j,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new kE;if(C){_=Wf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),G,j=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=_u(Ee,z.attribute,y),ve=_u(fe,z.attribute,y),$e=me?(0,bl.compareKeys)(ve,De):(0,bl.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(G)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(G=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),j){let me=_u(ne,j,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let G=T[x],j;if(G.name===L.attribute[0]){for(j=G.sort||(G.sort={});j.next;)j=j.next;j.attribute=L.attribute.slice(1),j.descending=L.descending}else G===L.attribute[0]&&(T[x]=j={name:G,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return za.SKIP;if(L=Mc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,G=>G),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let G=Ra(L.key??L,L,T);if(G?.then)return G.then(U)}}if(x==null)return P?za.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let G,j=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=er?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:Fu(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Mi=>{for(;!Mi.done;){if(Mi?.then)return Mi.then(vr);ve.push(Mi.value),Mi=$e.next()}be(ve,pe)},"nextValue"),Wn=vr($e.next());Wn&&(G||(G=[]),G.push(Wn));return}else if(Ee=De.call(this,Ee),Ee?.then){G||(G=[]),G.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(G||(G=[]),G.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")j(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:j($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else j(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new lt.ClientError("Invalid select"+_);return G?Promise.all(G).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=Bb(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),G=v.type;if(!x&&G==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),G="put"}let j={id:I,localTime:U,value:x,version:v.version,type:G,beginTxn:L};C?C.push(j):(Je(v.size??1,"db-message",s,null),this.send(j))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let G=xt(x);if(G.tableId!==n)continue;let j=G.recordId;if(I==null||QH(I,j)){let X=G.getValue(i,T,L);if(P({id:j,localTime:L,value:X,version:G.version,type:G.type,size:G.size}),y.queue?.length>zH&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:G}of l.getRange({start:"z",end:!1,reverse:!0}))try{let j=xt(G);if(j.tableId!==n)continue;let X=j.recordId;if(I==null||QH(I,X)){let $=j.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:j.version,type:j.type}),--v<=0)break}}catch(j){xe.default.error("Error getting history entry",x,j)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:G,localTime:j,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:j,value:x,version:G,type:"put",size:X}),y.queue?.length>zH&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===wb&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],G=L;do{let j=l.get(G);if(j){_.omitCurrent=!0;let X=xt(j),$=X.getValue(i,T,G);T&&(X.type="put"),x.push({id:I,value:$,localTime:G,...X}),G=X.previousLocalTime}else break;v&&v--}while(G>U&&v!==0);for(let j=x.length;j>0;)P(x[--j]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Je(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new lt.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&Uc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let G=y(b[x.name],x,I+"."+x.name);G&&(b[x.name]=G)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof ws)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new lt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new lt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");Hie(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=Ww.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Wa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Wa();let x=U*2,G=(I+L)/x,j=Math.pow((I-L+1)/U/2,2)+G*(1-G)/x,X=Math.max(Math.sqrt(j)*T,1),$=Math.round(G*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){er=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),qf=!0,T.to)_.elements?.definition?(er[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Bu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=_.definition||_.elements?.definition;y?(er[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,G=U?.map(j=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](j,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(G).then(j=>j.filter(JH)):G.filter(JH):x?Promise.all(G):G}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),er[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let y=r[_.name].customIndex;er[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},er[_.name].directReturn=!0}}ap(this,this),ap(Vf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Hu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=Fi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Wa(),xt(b).tableId===n&&(C=U_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Wa(),P===null&&I<_&&(C=rl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Wa();let b=xt(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Wa();let P=l.get(y);if(P){let I=xt(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){Y?.remove()}}let qE=kg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let Kf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&GE(),Le;function To(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=er[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),G=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:G}),G?.length>0){let j=new Set(G);if(x=x?x.filter(X=>{if(j.has(X))j.delete(X);else return!0}):[],G=Array.from(j),(G.length>0||x.length>0)&&KH){let X=G.concat(x).map($=>({key:$,value:K}));b.prefetch(X,jH)}for(let X=0,$=G.length;X<$;X++)b.remove(G[X],K)}else x?.length>0&&KH&&b.prefetch(x.map(j=>({key:j,value:K})),jH);if(x)for(let j=0,X=x.length;j<X;j++)b.put(x[j],K)}return C}o(To,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>WH)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,bl.writeKey)(K,Wie,0)>WH)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Yf(K){return typeof K=="object"&&K&&K.isCollection}o(Yf,"isSearchTarget");function tA(K){}o(tA,"isRequestTarget");function Mc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=xc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(eq.default.trace?.("Recording db-read action for",`${c}.${s}`),Je(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(le.push(K),ae.push(U),le.length>eA&&(re--,v()));function v(){if(le.length>0){let L=ae;i.prefetch(le,()=>{re===-1?v():re++;for(let x of L)x()}),le=[],ae=[],Re>2&&Re--}else re=Re,Re<HE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(Mc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return zie;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Ra(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=gu(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new d_}o(br,"txnForContext");function _u(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=er,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=er[_];return y?y(C,T,K):C[_]}o(_u,"getAttributeValue");function Wf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return za.SKIP;for(let G=0;G<b;G++)if(!I?.includes(G)&&!y[G](x,U))return za.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return za.SKIP;for(let x=0;x<b;x++){let j=y[x].idFilter;if(j){if(!j(L))return za.SKIP;I||(I=[]),I.push(x)}}return Mc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==za.SKIP)),U.hasEntries=!0,U}return K}o(Wf,"transformToEntries");function Aa(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=xt(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(Aa,"precedesExistingVersion");async function gu(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(gu(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},Kie)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let G;xs(Rt(v,async j=>{let X=performance.now(),$,be,pe;try{$=await qE(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Je(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),j.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}G=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Je(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=To(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=xc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=yo(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):rl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},j=>{i.unlock(K,y),G&&xe.default.error?.("Error committing cache update",j)})})}o(gu,"getFromSource");function vc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(vc,"checkContextPermissions");function Uc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(qe===Zt&&!_)&&(Zt=qe,(0,Rl.getWorkerIndex)()===(0,Rl.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=qe/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),Ht=setTimeout(()=>ee=ee.then(async()=>{if(P(Math.max(I+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(Al.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),G=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${G}ms`);function j(X,$,be,pe){let de=X+G-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Cu(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(j,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+Vie<Date.now()?me=rl(i,$,de):z!=null&&j(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Wa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(Uc,"scheduleCleanup");function Su(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Su,"addDeleteRemoval");function GE(){(0,Rl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dc){Dc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Wa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Dc=!1}}},$ie).unref()}o(GE,"runRecordExpirationEviction");function xc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(xc,"residencyFromFunction");function yo(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(yo,"getResidencyId")}function Yw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function jH(){}function qg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Hg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Hg(+e);case"Float":return e==="null"?null:Hg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;jie.test(e)||(e+="Z");let n=new Date(e);return Hg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Gg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Hg(e){if(isNaN(e))throw new SyntaxError;return e}function QH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function xs(e,t,r){return e?.then?e.then(t,r):t(e)}function JH(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function Qie(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var za,Ip,XH,ZH,Al,lt,wp,Np,xe,bl,Rl,Gg,Ww,eq,kie,Hie,qie,Gie,$ie,Vie,KH,Kie,YH,Yie,Dn,va,Wie,WH,zH,zie,yMe,jie,Wa,J_=ie(()=>{H();za=require("lmdb"),Ip=w(Cn()),XH=w(require("lodash")),ZH=w(mm());Ua();hm();Al=w(ue());Fb();lt=w(_e()),wp=w(ko()),Np=w(rs());Oe();Q_();xe=w(Xn());YI();Ca();bl=require("ordered-binary"),Rl=w(nt());Io();Gg=w(oe());Zc();Ps();p_();bp();Ww=w(require("node:fs"));Ns();L_();eq=w(Q());Kw();({sortBy:kie}=XH.default),{validateAttribute:Hie}=ZH.default,qie=new Uint8Array(9);qie[8]=192;Gie=1/0,$ie=6e4,Vie=864e5;Al.initSync();KH=Al.get(B.STORAGE_PREFETCHWRITES),Kie=1e4,YH=1,Yie=2,Dn=1,va=8,Wie=Buffer.allocUnsafeSlow(8192),WH=1978,zH=100,zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},yMe=(0,Gg.convertToMS)(Al.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o($g,"makeTable");o(Yw,"attributesAsObject");o(jH,"noop");jie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(qg,"coerceType");o(Hg,"rejectNaN");o(QH,"isDescendantId");Wa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(JH,"exists");o(Bs,"stringify");o(Qie,"hasOtherProcesses")});function Vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function Kg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var rq=ie(()=>{o(Vg,"euclideanDistance");o(Kg,"cosineDistance")});var nq,sq,ud,Qi,ld,Jie,Xie,Yg,iq=ie(()=>{rq();nq=require("msgpackr"),sq=w(Xn()),ud=w(_e()),Qi=(0,sq.loggerWithTag)("HNSW"),ld=Symbol.for("entryPoint"),Jie=Symbol.for("key"),Xie=10,Yg=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=nq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Vg:Kg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[Jie,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ld,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Xie),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ld,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Qi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<J.length;le++){let{id:ae,distance:re}=J[le],Re=1+this.optimizeRouting*(1+.5*le/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:qe}=A[Te];if(Fe===ae){N*Y>qe+re?k=!0:re*Re>N+qe&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===J){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let ee=c[E],q=ee?.find(({id:k})=>k===R);if(q){let k=ee?.indexOf(q);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(ld);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ld,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Qi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new ud.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new ud.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Kg;else if(s==="euclidean")c=Vg;else{if(s)throw new ud.ClientError("Unknown distance function");c=this.distance}if(!t)throw new ud.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new ud.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Vg:Kg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var zw,oq=ie(()=>{iq();zw={HNSW:Yg}});var mt={};Ie(mt,{database:()=>Xu,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>JI,dropTableMeta:()=>soe,getDatabases:()=>at,getDefaultCompression:()=>Zg,getTables:()=>eoe,onRemovedDB:()=>vp,onUpdatedTable:()=>Il,readMetaDb:()=>Cp,resetDatabases:()=>hd,table:()=>Xe,tables:()=>pn});function Mp(e,t){let r=Jg.OpenDBIObject??Jg.default.OpenDBIObject;return new r(e,t)}function eoe(){return Qg||at(),pn||{}}function at(){if(Qg)return Me;Qg=!0,md=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Bt.join)((0,Kt.getHdbBasePath)(),Fc),t=(0,Kt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||e&&((0,ls.existsSync)(e)?e:(0,Bt.join)((0,Kt.getHdbBasePath)(),WE)),!e)return;if((0,ls.existsSync)(e))for(let n of(0,ls.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,ls.existsSync)((0,fd.getBaseSchemaPath)())){for(let n of(0,ls.readdirSync)((0,fd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,fd.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,fd.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ls.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ls.existsSync)(i))for(let c of(0,ls.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,ls.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=md.get(n);if(s){let i=Me[n];n.includes("delete")&&Nr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Nr.trace(`delete table class ${a}`),delete i[a])}else if(delete Me[n],n==="data"){for(let i in pn)delete pn[i];delete pn[Xg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Kt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return md=null,Me}function hd(){Qg=!1;for(let[,e]of Ko)e.needsDeletion=!0;at();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=Jw,n,s){let i=new jw.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,pd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Wg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ls.existsSync)(n)&&(i.path=n,u=(0,pd.open)(i),u.isLegacy=!0):u=v_(a));let d=dq(r),f=d[Xg],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Kt.get)(B.LOGGING_AUDITLOG),ee=g.trackDeletes,q=g.expiration,k=g.eviction,J=g.sealed,Y=g.splitSegments,le=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(dd)||0)&&(l.putSync(dd,N+1),Nr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(dd),N||(N=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(dd,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||uq;re.compression.threshold=Re}O=Y_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ae;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=mq(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ae=!0}}catch(Re){Nr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ae=!0)}if(A)ae&&(A.schemaVersion++,A.updatedAttributes());else{A=fq(d,p,$g({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:Y,replicate:le,expirationMS:q&&q*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function dq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=pn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),md&&!md.has(e)){let r=new Set;t[Xg]=r,md.set(e,r)}return t}function fq(e,t,r){return e[t]=r,r}function Xu({database:e,table:t}){e||(e=Jw),at();let r=dq(e),n=(0,Bt.join)((0,Kt.getHdbBasePath)(),Fc),s=(0,Kt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||((0,ls.existsSync)(n)?n:(0,Bt.join)((0,Kt.getHdbBasePath)(),WE));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new jw.default(a,!1);c=(0,pd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=v_(c)),c}async function JI(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Xu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[Xg]}delete Me[e],Pp.forEach(n=>n(e)),await QA(r)}function mq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&zw[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=Jw);let h=Xu({database:r,table:t}),E=Me[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,R;m==null&&(m=!0);let N=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,F;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=Zg(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Kt.get)(B.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let le=new Mp(!1,!0);le.compression=S.compression;let ae=t+"/";if(R=h.dbisDb=h.openDB(Wg.INTERNAL_DBIS_NAME,N),J(),R.get(ae))return F&&F(),hd(),Xe(e);let re=Y_(h.openDB(ae,le),h);h.databaseName=r,re.tableId=R.get(dd),Nr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(dd,re.tableId+1),S.tableId=re.tableId,g=fq(E,t,$g({primaryStore:re,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ae,S)}let ee=g.indices;R=R||(h.dbisDb=h.openDB(Wg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let q=[];for(let{key:Y,value:le}of R.getRange({start:!0})){let[ae,re]=Y.toString().split("/");if(re===""&&(re=le.name),re){if(ae!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&le.indexed&&!le.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(Y),Te)){let Fe=g.indices[ae];Fe&&q.push(Fe)}}let k=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let ae=R.get(le);if(Y.isPrimaryKey){if(ae=ae||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ae.expiration||void 0)||(+s||void 0)!==(+ae.eviction||void 0)||Y.type!==ae.type){let Re={...ae};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,J(),R.put(le,Re)}continue}ae?.attribute&&!ae.name&&(ae.indexed=!0);let re=!ae||ae.type!==Y.type||JSON.stringify(ae.indexed)!==JSON.stringify(Y.indexed)||ae.nullable!==Y.nullable||ae.version!==Y.version||JSON.stringify(ae.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ae.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=mq(le,h,Y);(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ae=R.get(le),(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ae?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),k.push(Y))),R.put(le,Y)),ae?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,ee[Y.name]=Re}else re&&(O=!0,J(),R.put(le,Y))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),k.length>0||q.length>0?g.indexingOperation=noe(g,k,q):O&&zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(Y){F=Y}}))}o(J,"startTxn")}async function noe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,pd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,aq.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==lq.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>toe?await s:d>roe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function soe({table:e,database:t}){let r=Xu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Il(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function Zg(){let e=(0,Kt.get)(B.STORAGE_COMPRESSION),t=(0,Kt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||uq,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Kt,Wg,pd,Bt,ls,fd,jw,Lp,Qw,aq,zg,jg,Dp,cq,lq,Jg,Zie,Nr,Jw,Xg,uq,pn,Me,dd,Op,Pp,Qg,Ko,md,toe,roe,Oe=ie(()=>{Kt=w(ue()),Wg=w($t()),pd=require("lmdb"),Bt=require("path"),ls=require("fs"),fd=w(yt());J_();jw=w($m());H();Lp=w(require("fs-extra")),Qw=w(ii()),aq=w(Cn()),zg=w(ko()),jg=w(rs()),Dp=require("worker_threads"),cq=w(Q()),lq=w(nt());Io();Zc();Ns();oq();Jg=w(Gm()),{forComponent:Zie}=cq.default;o(Mp,"OpenDBIObject");Nr=Zie("storage"),Jw="data",Xg=Symbol("defined-tables"),uq=((0,Kt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Kt.initSync)();pn=Object.create(null),Me=Object.create(null);(0,Qw._assignPackageExport)("databases",Me);(0,Qw._assignPackageExport)("tables",pn);dd=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(eoe,"getTables");o(at,"getDatabases");o(hd,"resetDatabases");o(Cp,"readMetaDb");o(dq,"ensureDB");o(fq,"setTable");o(Xu,"database");o(JI,"dropDatabase");o(mq,"openIndex");o(Xe,"table");toe=1e3,roe=10;o(noe,"runIndexing");o(soe,"dropTableMeta");o(Il,"onUpdatedTable");o(vp,"onRemovedDB");o(Zg,"getDefaultCompression")});var eN={};Ie(eN,{loadGQLSchema:()=>aoe,start:()=>Zw,startOnMainThread:()=>ooe});function Zw({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(q){if(q.kind==="NonNullType"){let Y=F(q.type);return Y.nullable=!1,Y}if(q.kind==="ListType")return{type:"array",elements:F(q.type)};let J={type:q.name?.value};return Object.defineProperty(J,"location",{value:q.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let q of A.directives){if(q.name.value==="table"){for(let J of q.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="splitSegments"&&(N.splitSegments=!0),q.name.value==="replicate"&&(N.replicate=!0),q.name.value==="export"){N.export=!0;for(let J of q.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,ee={};for(let q of A.fields){let k=F(q.type);k.name=q.name.value,R.push(k),ee[k.name]=void 0;for(let J of q.directives){let Y=J.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let le={};for(let ae of J.arguments||[])le[ae.name.value]=ae.value.value;k.indexed=le}else if(Y==="computed"){for(let le of J.arguments||[])if(le.name.value==="from"){let ae=le.value.value;k.computed={from:g(ae,le,ee)},k.version==null&&(k.version=ae)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let ae of J.arguments)le[ae.name.value]=ae.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let ae of J.arguments)ae.name.value==="role"&&le.push(ae.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):ioe.includes(A.type)||(0,hq.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,Xw.dirname)(n),A.tableClass):i.set((0,Xw.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new pq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var Xw,pq,hq,ioe,ooe,aoe,Eq=ie(()=>{Xw=require("path"),pq=require("node:vm");Oe();hq=w(nt());xa();ioe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(Zw,"start");ooe=Zw,aoe=o(e=>Zw({ensureTable:Xe}).handleFile(e,null,null,new Gu),"loadGQLSchema")});var rN={};Ie(rN,{start:()=>Eoe});function coe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new qr(`Unexpected non-executable definition type ${e.kind}.`)}function _q(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function tN(e){return parseInt(e.value,10)}function Sq(e){return parseFloat(e.value)}function Tq(e,t,r){let n=r.get(e.name.value);return yq(n)?Rq(n,t):{attribute:t,value:n}}function yq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Rq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],yq(n)?Rq(n,t):{attribute:t,value:n}))}function loe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:tN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:Sq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Tq(e.value,t,r);case He.Kind.OBJECT:return Aq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.value.kind}, is not supported.`)}}function Aq(e,t,r){return e.fields.flatMap(n=>loe(n,t,r))}function uoe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:tN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:Sq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Tq(e.value,e.name.value,t);case He.Kind.OBJECT:return Aq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Argument type, ${e.value.kind}, is not supported.`)}}function doe(e,t){return e.flatMap(r=>uoe(r,t))}function eS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new qr(`Fragment \`${n}\` not found.`);return eS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return eS(r.selectionSet,t)}})}function bq(e,t){return eS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:bq(r.selectionSet,t)}:r.name.value)}async function foe(e,t,r,n){let s=Ds.getMatch(e.name.value,"graphql");if(s===void 0)throw new qr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:bq(e.selectionSet,r),conditions:doe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function Iq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return tN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Iq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new qr(`Value type, ${e.kind}, is not supported.`)}}function moe(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=Iq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new qr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function poe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new qr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new qr("Mutations are not supported yet.");let s=moe(e.variableDefinitions,t),i=await Promise.all(eS(e.selectionSet,r).map(c=>foe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function gq({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(coe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new qr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new qr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new qr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new qr(`Operation \`${r}\` not found.`);let l=await poe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function hoe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return _q(r),gq(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return _q(r),gq(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function Eoe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await hoe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof qr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof qr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,qr,Ji,wq=ie(()=>{He=w(require("graphql"));Po();xa();o(coe,"assertExecutableDefinitionNode");o(_q,"assertRequestParams");o(tN,"processIntValueNode");o(Sq,"processFloatValueNode");o(Tq,"processVariableNode");o(yq,"isObject");o(Rq,"transformObjectIntoQueryCondition");o(loe,"processObjectFieldNode");o(Aq,"processObjectValueNode");o(uoe,"processArgumentNode");o(doe,"buildConditionsQuery");o(eS,"fillInFragments");o(bq,"buildSelectQuery");o(foe,"processFieldNode");o(Iq,"processConstValueNode");o(moe,"resolveVariables");o(poe,"executeOperation");o(gq,"resolver");qr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(hoe,"graphqlQueryingHandler");o(Eoe,"start")});var Dq=M(($Me,Lq)=>{var Ed=require("validate.js"),Cq=ft(),_d=(H(),D(W)),{handleHDBError:_oe,hdbErrors:goe}=_e(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:Soe}=goe,nN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Toe={STRUCTURE_USER:"structure_user"},Nq=Object.values(_d.ROLE_TYPES_ENUM),yoe="attribute_permissions",Roe="attribute_name",{PERMS_CRUD_ENUM:gd}=_d,Aoe=[yoe,...Object.values(gd)],Oq=[gd.READ,gd.INSERT,gd.UPDATE],boe=[Roe,...Oq];function Ioe(e){let t=nN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Pq(e,t)}o(Ioe,"addRoleValidation");function woe(e){let t=nN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Pq(e,t)}o(woe,"alterRoleValidation");function Noe(e){let t=nN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Cq.validateObject(e,t)}o(Noe,"dropRoleValidation");var Coe=["operation","role","id","permission","hdb_user","access"];function Pq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Coe.includes(n[a])||s.push(n[a]);s.length>0&&fr(nr.INVALID_ROLE_JSON_KEYS(s),r);let i=Cq.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Ooe(e);a&&fr(a,r),Nq.forEach(c=>{e.permission[c]&&!Ed.isBoolean(e.permission[c])&&fr(nr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(Nq.indexOf(a)<0){if(a===Toe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(nr.SCHEMA_NOT_FOUND(f),r)}continue}fr(nr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(nr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(nr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Aoe.includes(d)||fr(nr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(gd).forEach(d=>{Ed.isDefined(u[d])?Ed.isBoolean(u[d])||fr(nr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(nr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(nr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(nr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!boe.includes(E)&&E!==gd.DELETE&&fr(nr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Ed.isDefined(p.attribute_name)){fr(nr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(nr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}Oq.forEach(E=>{Ed.isDefined(p[E])?Ed.isBoolean(p[E])||fr(nr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(nr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(nr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Poe(r)}o(Pq,"customValidate");Lq.exports={addRoleValidation:Ioe,alterRoleValidation:woe,dropRoleValidation:Noe};function Ooe(e){let{operation:t,permission:r}=e;if(t===_d.OPERATIONS_ENUM.ADD_ROLE||t===_d.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return nr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?_d.ROLE_TYPES_ENUM.SUPER_USER:_d.ROLE_TYPES_ENUM.CLUSTER_USER;return nr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Ooe,"validateNoSUPerms");function Poe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:nr.ROLE_PERMS_ERROR,...e};return _oe(new Error,n,Soe.BAD_REQUEST)}else return null}o(Poe,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var xp=M((YMe,xq)=>{"use strict";var Mq=Bn(),vq=fn(),Loe=_l(),iN=Dq(),oN=ko(),KMe=require("uuid").v4,Doe=require("util"),tS=(H(),D(W)),Moe=oe(),aN=vq.searchByValue,voe=vq.searchByHash,Uoe=Doe.promisify(Loe.delete),xoe=di(),Boe=Qu(),{hdbErrors:Foe,handleHDBError:wl}=_e(),{HDB_ERROR_MSGS:Uq,HTTP_STATUS_CODES:Up}=Foe,{UserEventMsg:cN}=rs();xq.exports={addRole:koe,alterRole:Hoe,dropRole:qoe,listRoles:Goe};function sN(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}o(sN,"scrubRoleDetails");async function koe(e){let t=iN.addRoleValidation(e);if(t)throw t;e=sN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await aN(r)||[])}catch(i){throw wl(i)}if(n&&n.length>0)throw wl(new Error,Uq.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Mq.insert(s),oN.signalUserChange(new cN(process.pid)),e=sN(e),e}o(koe,"addRole");async function Hoe(e){let t=iN.alterRoleValidation(e);if(t)throw t;e=sN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Mq.update(r)}catch(s){throw wl(s)}if(n&&n?.message==="updated 0 of 1 records")throw wl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await oN.signalUserChange(new cN(process.pid)),e}o(Hoe,"alterRole");async function qoe(e){let t=iN.dropRoleValidation(e);if(t)throw wl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Boe(tS.SYSTEM_SCHEMA_NAME,tS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await voe(r));if(n.length===0)throw wl(new Error,Uq.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new xoe(tS.SYSTEM_SCHEMA_NAME,tS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await aN(s)),a=!1;if(Moe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw wl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Uoe(c),oN.signalUserChange(new cN(process.pid)),`${n[0].role} successfully deleted`}o(qoe,"dropRole");async function Goe(){return aN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Goe,"listRoles")});var lN={};Ie(lN,{start:()=>kq,startOnMainThread:()=>Koe});function kq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Bq.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if($oe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Voe(i)}}}async function Voe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Fq.isEqual)(i,e)?void 0:(e.id=r.id,(0,rS.alterRole)(e))}return(0,rS.addRole)(e)}var rS,Bq,Fq,$oe,Koe,Hq=ie(()=>{Oe();rS=w(xp()),Bq=require("yaml"),Fq=require("lodash"),$oe=["super_user","cluster_user","structure_user"];o(kq,"start");o(Voe,"ensureRole");Koe=kq});async function nS(e){let t=(0,$q.pathToFileURL)(e).toString();if(Yoe)return Bp||(Bp=Woe(joe)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Woe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:zoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Gq.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=pn,s.databases=Me}};let n=await(0,qq.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function zoe(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 joe(){return{Resource:Fr,tables:pn}}var qq,Gq,$q,Yoe,Bp,uN=ie(()=>{Ua();Oe();qq=require("fs/promises"),Gq=require("path"),$q=require("url"),Yoe=!1;o(nS,"secureImport");o(Woe,"getCompartment");o(zoe,"secureOnlyFetch");o(joe,"getGlobalVars")});var dN={};Ie(dN,{handleApplication:()=>Qoe,suppressHandleApplicationWarning:()=>Joe});function Vq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Qoe(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}nS(t.absolutePath).then(r=>{let n=(0,sS.dirname)(t.urlPath);Vq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Kq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Kq(e,t,r){for(let n in t){let s=t[n],i=(0,sS.join)(r,n);Vq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Kq(e,s,i)}}var sS,Joe,Yq=ie(()=>{uN();sS=require("path");o(Vq,"isResource");o(Qoe,"handleApplication");o(Kq,"recurseForResources");Joe=!0});var mN={};Ie(mN,{start:()=>Xoe});function Xoe({resources:e}){e.set("login",fN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var fN,Wq=ie(()=>{Ua();o(Xoe,"start");fN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function Zq(e){let t={openapi:Zoe,info:{title:"HarperDB HTTP REST interface",version:Jq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)iS[c.type]?i[c.name]=new hN(iS[c.type],c.type):c.properties?(i[c.name]=new eG(c.type),n(c)):c.elements?.properties&&(i[c.name]=new iae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new Qq(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let ee=e.allTypes.get(s.path);l=ee.sealed,c=ee.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:ee,name:q,elements:k,relationship:J,definition:Y,nullable:le}of c){let ae=Y??k?.definition;ae&&n(ae),le===!1&&p.push(q),J?ee==="array"?f[q]={type:"array",items:{$ref:Fs+k.type}}:f[q]={$ref:Fs+ee}:ae?ee==="array"?f[q]={type:"array",items:{$ref:Fs+ae.type}}:f[q]={$ref:Fs+ae.type}:ee==="array"?k.type==="Any"?f[q]={type:"array",items:{format:k.type}}:f[q]={type:"array",items:new hN(iS[k.type],k.type)}:ee==="Any"?f[q]={format:ee}:f[q]=new hN(iS[ee],ee),m.push(new EN(q,"query",f[q]))}let h=Object.keys(f),E=new EN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new EN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new Qq(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new eae(a,r,{200:new Sd({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new pN(m,r,{200:new Sd({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new tae(m,r,{200:new rae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new jq(m,r,"delete all the records that match the provided query",{204:new zq})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new pN([E],r,{200:new Sd({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new nae([E],r,a,{200:new Sd({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new sae([E],r,a,{200:new Sd({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new jq([E],r,"delete a record with the given primary key",{204:new zq})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new pN([E,g],r,{200:new Sd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function eae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function pN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function rae(){this.description=Xq,this.headers={},this.content={}}function Sd(e,t){this.description=Xq,this.content={"application/json":{schema:e}},this.headers=t}function zq(){this.description="successfully processed request, no content returned to client"}function nae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function sae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function jq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Qq(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function hN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function eG(e){this.$ref=`#/components/schemas/${e}`}function iae(e){this.type="array",this.items=new eG(e)}function EN(e,t,r){this.name=e,this.in=t,this.schema=r}var Jq,Zoe,iS,Fs,Xq,tG=ie(()=>{Jq=w(bt()),Zoe="3.0.3",iS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",Xq="successful operation";o(Zq,"generateJsonApi");o(eae,"Post");o(pN,"Get");o(tae,"Options");o(rae,"ResponseOptions200");o(Sd,"Response200");o(zq,"Response204");o(nae,"Put");o(sae,"Patch");o(jq,"Delete");o(Qq,"ResourceSchema");o(hN,"Type");o(eG,"Ref");o(iae,"ArrayRef");o(EN,"Parameter")});var nG={};Ie(nG,{Request:()=>ja,createReuseportFd:()=>oS});var rG,ja,_N,gN,oS,Fp=ie(()=>{rG=require("os"),ja=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new gN(t.headers)}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._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new _N(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},_N=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},gN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,rG.platform)()!="win32"&&(oS=require("node-unix-socket").createReuseportFd)});var cS={};Ie(cS,{parseHeaderValue:()=>TN,start:()=>cae});async function aae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&j_(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==sG){let g=aS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=TN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=TN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await Rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Td.ClientError(g,400)}if(e.authorize=!0,a===sG&&s==="GET"){if(e?.user?.role?.permission?.super_user)return Zq(aS);throw new Td.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Td.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Td.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,SN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=qH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){oae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),SN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?hi.warn(a):hi.info(a):hi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=ym(a.contentType?a:aG(a),e,c),c}}function cae(e){SN=e,e.includeExpensiveRecordCountEstimates&&(ja.prototype.includeExpensiveRecordCountEstimates=!0),!iG&&(iG=!0,aS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return aae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Jn;oG||(oG=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,hi.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Je(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=aS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Je(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await Rt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(p.value,r);t.send(h),Je(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?hi.warn(l):hi.info(l):hi.error(l),t.close(lae[l.statusCode]||1011,aG(l))}t.close()},e))}function TN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var hi,Td,aG,Jr,oae,SN,sG,iG,aS,oG,kp,lae,cG=ie(()=>{Po();Ps();hi=w(Q()),Td=w(_e());Q_();wu();Ca();bp();tG();Fp();X_();({errorToString:aG}=hi),Jr=new Uint8Array(8),oae=new Float64Array(Jr.buffer,0,1),SN={},sG="openapi";o(aae,"http");kp=0;o(cae,"start");lae={401:3e3,403:3003};o(TN,"parseHeaderValue")});var yN=M((gve,uG)=>{var{recordAction:lS,recordActionBinary:lG}=(Ps(),D(q_)),uae=require("fastify-plugin"),dae=200;uG.exports=uae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),lS(a,"duration",u,f,d),lG(s.raw.statusCode<400,"success",u,f,d),lG(1,"response_"+s.raw.statusCode,u,f,d);let m=dae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{lS(performance.now()-c,"transfer",u,f,d),lS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,lS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var fG=M((Sve,dG)=>{var fae=ft(),mae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};dG.exports=function(e){return fae.validateObject(e,mae)}});var uS=M((Tve,mG)=>{"use strict";var pae=(H(),D(W)).OPERATIONS_ENUM,RN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=pae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};mG.exports=RN});var Gp={};Ie(Gp,{createTokens:()=>IN,getJWTRSAKeys:()=>hS,refreshOperationToken:()=>wN,validateOperationToken:()=>NN,validateRefreshToken:()=>ES});async function hS(){if(dS)return dS;try{let e=Hp.default.join(qp.default.getHdbBasePath(),dA),t=await fS.default.readFile(Hp.default.join(e,em.JWT_PASSPHRASE_NAME),"utf8"),r=await fS.default.readFile(Hp.default.join(e,em.JWT_PRIVATE_KEY_NAME),"utf8");return dS={publicKey:await fS.default.readFile(Hp.default.join(e,em.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},dS}catch(e){throw pS.default.error(e),new Ei.ClientError(Rd.NO_ENCRYPTION_KEYS,yd.INTERNAL_SERVER_ERROR)}}async function IN(e){let t=(0,AN.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new Ei.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,bN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new Ei.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED)}if(!r)throw new Ei.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await hS(),c=await Ad.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??gG,algorithm:mS,subject:bd.OPERATION}),l=await Ad.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:hae,algorithm:mS,subject:bd.REFRESH}),u=lw(l,kr.SHA256);if((await(0,pG.update)(new hG.default(Xf,yu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ei.ClientError(Rd.REFRESH_TOKEN_SAVE_FAILED,yd.INTERNAL_SERVER_ERROR);return EG.default.signalUserChange(new _G.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function wN(e){let t=(0,AN.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new Ei.ClientError(t.message);let{refresh_token:r}=e;await ES(r);let n=await hS(),s=await Ad.default.decode(r);return{operation_token:await Ad.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:gG,algorithm:mS,subject:bd.OPERATION})}}async function NN(e){return SG(e,bd.OPERATION)}async function ES(e){return SG(e,bd.REFRESH)}async function SG(e,t){try{let r=await hS(),n=await Ad.default.verify(e,r.publicKey,{algorithms:mS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,bN.findAndValidateUser)(n.username,void 0,!1);if(t===bd.REFRESH&&!uw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new Ei.ClientError(Rd.TOKEN_EXPIRED,yd.FORBIDDEN):new Ei.ClientError(Rd.INVALID_TOKEN,yd.UNAUTHORIZED)}}var Ad,fS,Hp,Xi,AN,Ei,pS,bN,pG,hG,EG,_G,qp,yd,Rd,gG,hae,mS,bd,dS,Id=ie(()=>{Ad=w(require("jsonwebtoken")),fS=w(require("fs-extra")),Hp=w(require("node:path")),Xi=w(require("joi")),AN=w(ft());H();Ei=w(_e()),pS=w(Q());fw();bN=w(as()),pG=w(Bn()),hG=w(uS()),EG=w(ko()),_G=w(rs()),qp=w(ue()),{HTTP_STATUS_CODES:yd,AUTHENTICATION_ERROR_MSGS:Rd}=Ei.hdbErrors;qp.default.initSync();gG=qp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",hae=qp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",mS="RS256",bd={OPERATION:"operation",REFRESH:"refresh"};o(hS,"getJWTRSAKeys");o(IN,"createTokens");o(wN,"refreshOperationToken");o(NN,"validateOperationToken");o(ES,"validateRefreshToken");o(SG,"validateToken")});var CN=M((Ive,RG)=>{"use strict";var Eae=fG(),wd=require("passport"),_ae=require("passport-local").Strategy,gae=require("passport-http").BasicStrategy,Sae=require("util"),Tae=as(),yG=Sae.callbackify(Tae.findAndValidateUser),bve=Kr(),yae=(H(),D(W)),TG=(Id(),D(Gp));wd.use(new _ae(function(e,t,r){yG(e,t,r)}));wd.use(new gae(function(e,t,r){yG(e,t,r)}));wd.serializeUser(function(e,t){t(null,e)});wd.deserializeUser(function(e,t){t(null,e)});function Rae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":wd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===yae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?TG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):TG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:wd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Rae,"authorize");function Aae(e,t){let r=Eae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Aae,"checkPermissions");RG.exports={authorize:Rae,checkPermissions:Aae}});var _S=M((Nve,AG)=>{"use strict";var bae=is();AG.exports={writeTransaction:Iae};function Iae(e,t,r){return bae.writeTransaction(e,t,r)}o(Iae,"writeTransaction")});var NG=M((Pve,wG)=>{"use strict";var wae=fn(),Nae=Ki(),bG=Q(),Cae=Bn(),Ove=_S(),Oae=require("clone"),PN=require("alasql"),Pae=Og(),IG=require("util"),Lae=IG.promisify(Nae.getTableSchema),Dae=IG.promisify(wae.search),Mae=(H(),D(W)),ON=oe();Pae(PN);wG.exports={update:Uae};var vae="There was a problem performing this update. Please check the logs and try again.";async function Uae({statement:e,hdb_user:t}){let r=await Lae(e.table.databaseid,e.table.tableid),n=xae(e.columns);ON.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Oae(s),c=ON.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=PN.parse(l).statements[0],d=await Dae(u),f=Bae(n,d);return Fae(a,f,t)}o(Uae,"update");function xae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=PN.compile(`SELECT ${r.expression.toString()} AS [${Mae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw bG.error(t),new Error(vae)}}o(xae,"createUpdateRecord");function Bae(e,t){return ON.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Bae,"buildUpdateRecords");async function Fae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Cae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){bG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(Fae,"updateRecords")});var OG=M((vve,CG)=>{var kae=require("alasql"),Hae=fn(),qae=Q(),Gae=is(),DN=require("util"),LN=oe(),$ae=(H(),D(W)),Vae=Ki(),Dve=_S(),Mve=Bn(),Kae="record",Yae="successfully deleted",Wae=DN.callbackify(Jae),zae=DN.promisify(Hae.search),jae=DN.promisify(Vae.getTableSchema);CG.exports={convertDelete:Wae};function Qae(e){return`${e.deleted_hashes.length} ${Kae}${e.deleted_hashes.length===1?"":"s"} ${Yae}`}o(Qae,"generateReturnMessage");async function Jae({statement:e,hdb_user:t}){let r=await jae(e.table.databaseid,e.table.tableid);LN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=LN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=kae.parse(a).statements[0],l={operation:$ae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await zae(c);let u=await Gae.deleteRecords(l);return LN.isEmptyOrZeroLength(u.message)&&(u.message=Qae(u)),delete u.txn_time,u}catch(u){throw qae.error(u),u.hdb_code?u.message:u}}o(Jae,"convertDelete")});var Cl=M((Bve,MG)=>{"use strict";var xve=fn(),$p=Q(),{validateBySchema:PG}=ft(),Nl=require("joi"),Xae=Wi(),gS=oe(),{handleHDBError:SS,hdbErrors:Zae,ClientError:LG}=_e(),{HDB_ERROR_MSGS:TS,HTTP_STATUS_CODES:MN}=Zae,DG=ue();DG.initSync();var{getDatabases:vN}=(Oe(),D(mt)),ece=require("fs-extra"),tce=(H(),D(W));MG.exports={describeAll:rce,describeTable:yS,describeSchema:nce};async function rce(e={}){try{let t=gS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=vN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await yS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await yS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){$p.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),SS(new Error,TS.DESCRIBE_ALL_ERR)}}o(rce,"describeAll");async function yS(e,t){gS.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=PG(e,Nl.object({database:Nl.string(),table:Nl.string().required(),exact_count:Nl.boolean().strict()}));if(i)throw new LG(i.message);let c=vN()[r];if(!c)throw SS(new Error,TS.SCHEMA_NOT_FOUND(e.schema),MN.NOT_FOUND);let l=c[n];if(!l)throw SS(new Error,TS.TABLE_NOT_FOUND(e.schema,e.table),MN.NOT_FOUND);function u(p){d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await ece.stat(l.primaryStore.env.path)).size}catch(p){$p.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),DG.get(tce.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Xae.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(yS,"descTable");async function nce(e){gS.transformReq(e);let t=PG(e,Nl.object({database:Nl.string(),exact_count:Nl.boolean().strict()}));if(t)throw new LG(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=vN()[n];if(!i)throw SS(new Error,TS.SCHEMA_NOT_FOUND(e.schema),MN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),gS.isEmpty(l)||l.describe){let u=await yS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(nce,"describeSchema")});var FG=M((kve,BG)=>{"use strict";var sce=Cl(),{hdbErrors:vG}=_e(),{getDatabases:UG}=(Oe(),D(mt));BG.exports={checkSchemaExists:xG,checkSchemaTableExists:ice,schemaDescribe:sce};async function xG(e){if(!UG()[e])return vG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(xG,"checkSchemaExists");async function ice(e,t){let r=await xG(e);if(r)return r;if(!UG()[e][t])return vG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(ice,"checkSchemaTableExists")});var kN=M((Vve,QG)=>{"use strict";var{decode:oce}=require("msgpackr"),{isMainThread:qve,parentPort:Gve,threadId:$ve}=require("worker_threads"),bS=mr(),Nd=wt(),BN=(H(),D(W)),hn=Q(),xN=ue(),ace=(H(),D(W)),{onMessageByType:cce}=nt(),GG=Wi(),{recordAction:kG,recordActionBinary:lce}=(Ps(),D(q_)),{publishToStream:uce}=bS,{ConsumerEvents:HG}=require("nats"),dce=fn(),{promisify:fce}=require("util"),{decodeBlobsWithWrites:mce}=(Ns(),D(JA)),$G=fce(setTimeout),IS=1e4,wS,AS,pce,hce,VG,Vp=new Map,Cd=new Map;QG.exports={initialize:KG,ingestConsumer:FN,setSubscription:Ece,setIgnoreOrigin:Sce,getDatabaseSubscriptions:gce,updateConsumer:YG};async function KG(){cce(BN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await YG(n)}),VG=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await bS.getNATSReferences();wS=e,AS=e.info.server_name,pce=t,hce=r}o(KG,"initialize");async function YG(e){if(e.status==="start"){let{js:t,jsm:r}=await WG(e.node_domain_name);FN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Cd.get(e.node_domain_name)==="failed"&&Cd.set(e.node_domain_name,"close")}}o(YG,"updateConsumer");var NS=new Map;function Ece(e,t,r){let n=NS.get(e);n||NS.set(e,n=new Map),n.set(t,r),VG||KG().then(_ce)}o(Ece,"setSubscription");async function _ce(){let e=await dce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Nd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await WG(r),!n))break;let{schema:a,table:c}=i,l=GG.createNatsTableStreamName(a,c);FN(l,n,s,r)}}}o(_ce,"accessConsumers");async function WG(e){let t,r,n=1;for(;!r;)try{t=await wS.jetstream({domain:e}),r=await wS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Cd.get(e)==="close")break;Cd.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<IS?n++*100:IS;await $G(i)}return{js:t,jsm:r}}o(WG,"connectToRemoteJS");function gce(){return NS}o(gce,"getDatabaseSubscriptions");var zG;function Sce(e){zG=e}o(Sce,"setIgnoreOrigin");var jG=100,qG=new Array(jG),RS=0;async function FN(e,t,r,n){let{connection:s}=await bS.getNATSReferences();wS=s,AS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,AS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Cd.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await bS.createConsumer(r,e,AS,new Date(Date.now()).toISOString()));let d=a++*100<IS?a++*100:IS;await $G(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Cd.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:xN.get(BN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===HG.ConsumerDeleted&&(await l.close(),c=!0),d.type===HG.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await qG[RS],qG[RS]=Tce(d).catch(f=>{hn.error(f)}),++RS>=jG&&(RS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(FN,"ingestConsumer");async function Tce(e){let t;await mce(()=>{t=oce(e.data)}),kG(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=xN.get(BN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!zG),lce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Nd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=NS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:UN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,ee)=>({type:UN(a),value:F,expiresAt:p,id:f?.[ee],table:u}));for(;l;)O.push({type:UN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}xN.get(ace.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&uce(e.subject.split(".").slice(0,-1).join("."),GG.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&kG(N,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o(Tce,"messageProcessor");function UN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(UN,"convertOperation")});var mr=M((Jve,m$)=>{"use strict";var Gr=ue();Gr.initSync();var yce=require("fs-extra"),Rce=require("semver"),Wp=require("path"),{monotonicFactory:Ace}=require("ulidx"),XG=Ace(),bce=require("util"),ZG=require("child_process"),Ice=bce.promisify(ZG.exec),wce=ZG.spawn,Xr=wt(),et=(H(),D(W)),{packageJson:Nce,PACKAGE_ROOT:Cce}=bt(),CS=oe(),_i=Q(),OS=Wi(),Oce=_S(),Kp=Tt(),{broadcast:Pce,onMessageByType:Lce,getWorkerIndex:Dce}=nt(),{isMainThread:e$}=require("worker_threads"),{Encoder:Mce,decode:$N}=require("msgpackr"),t$=new Mce,{isEmpty:Dl}=CS,r$=as(),Yve=48*36e11;e$&&Lce(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Ll=void 0});var{connect:vce,StorageType:Uce,RetentionPolicy:xce,AckPolicy:VN,DeliverPolicy:KN,DiscardPolicy:Bce,NatsConnection:Wve,JetStreamManager:zve,JetStreamClient:jve,StringCodec:Qve,JSONCodec:Fce,createInbox:YN,headers:kce,ErrorCode:JG}=require("nats"),{recordAction:Hce}=(Ps(),D(q_)),{encodeBlobsAsBuffers:qce}=(Ns(),D(JA)),n$=Fce(),Gce="clustering",$ce=Nce.engines[Xr.NATS_SERVER_NAME],Vce=Wp.join(Cce,"dependencies"),GN=Wp.join(Vce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),HN,qN,Yp,Ol,Pl;m$.exports={runCommand:s$,checkNATSServerInstalled:Kce,createConnection:WN,getConnection:zp,getJetStreamManager:jp,getJetStream:o$,getNATSReferences:Zi,getServerList:Wce,createLocalStream:zN,listStreams:a$,deleteLocalStream:zce,getServerConfig:Od,listRemoteStreams:jce,viewStream:Qce,viewStreamIterator:Jce,publishToStream:Xce,request:tle,reloadNATS:jN,reloadNATSHub:rle,reloadNATSLeaf:nle,extractServerName:ele,requestErrorHandler:sle,createLocalTableStream:d$,createTableStreams:ale,purgeTableStream:f$,purgeSchemaTableStreams:cle,getStreamInfo:lle,updateLocalStreams:dle,closeConnection:Yce,getJsmServerName:PS,addNatsMsgHeader:c$,clearClientCache:i$,updateRemoteConsumer:ile,createConsumer:l$,updateConsumerIterator:ole};async function s$(e,t=void 0){let{stdout:r,stderr:n}=await Ice(e,{cwd:t});if(n)throw new Error(n.replace(`
13
+ `},"serialize"),compressible:!1,q:.8});ln.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});PU={type:"application/json",serializeStream:_m,serialize:gm,deserialize:T8,q:.5};ln.set("*/*",PU);ln.set("",PU);o(T8,"tryJSONParse");o(Tm,"registerContentHandlers");y8=(0,CU.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=g_(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(g_,"findBestSerializer");AU=HA.default.get(B.HTTP_COMPRESSIONTHRESHOLD);o(ym,"serialize");o(Co,"serializeMessage");o(VA,"asyncSerialization");o(KA,"hasAsyncSerialization");o(R8,"streamToBuffer");A8=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(b8,"isBufferEncoding");o(I8,"parseContentType");o(Oo,"getDeserializer");o(w8,"deserializerUnknownType");o(N8,"transformIterable");o(__,"toCsvStream")});var JA={};Ie(JA,{Blob:()=>ws,blobsWereEncoded:()=>Yc,databasePaths:()=>WA,decodeBlobsWithWrites:()=>N_,decodeFromDatabase:()=>Wc,decodeWithBlobCallback:()=>wm,deleteBlob:()=>b_,deleteBlobsInObject:()=>Oa,deleteRootBlobPathsForDB:()=>QA,encodeBlobsAsBuffers:()=>B8,encodeBlobsWithFilePath:()=>w_,findBlobsInObject:()=>Cu,getFileId:()=>I_,getFilePathForBlob:()=>HU,getRootBlobPathsForDB:()=>Im,setDeletionDelay:()=>L8});function BU(){}function b_(e){let t=HU(e);t&&setTimeout(()=>{(0,rt.unlink)(t,r=>{r&&Lo.default.debug?.("Error trying to remove blob file",r)})},FU)}function L8(e){FU=e}function kU(e){let t=On.get(e);if(!t)t={storageIndex:0,fileId:null,store:Pn},On.set(e,t);else{if(t.fileId)return t;t.store=Pn}return M8(t),t.source?YA(e,t.source,t):t.contentBuffer?D8(e,t):YA(e,Am.Readable.from(e.stream()),t),t}function YA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,rt.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.write(Buffer.concat([h(BigInt(g.length)+0xff000000000000n),g])),E(t.errored);return}let m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;a?(m||f.write(O8),p=(0,R_.createDeflate)(),t.pipe(p).pipe(f)):(m||f.write(C8),t.pipe(f)),t.on("error",E);function h(g){let A=BigInt(g),S=new Uint8Array(wr),R=new DataView(S.buffer);return A|=BigInt(a?jA:xU)<<48n,R.setBigInt64(0,A),S}o(h,"createHeader");function E(g){i.unlock(d,0);let A=f.fd;g?(A&&(0,rt.close)(A),u(g)):c?(0,rt.fdatasync)(A,S=>{S&&u(S),l(),(0,rt.close)(A)}):(l(),(0,rt.close)(A))}o(E,"finished"),f.on("error",E).on("finish",()=>{if(m)E();else{let g=p?p.bytesWritten:f.bytesWritten-wr;e.size=g,(0,rt.write)(f.fd,h(g),0,wr,0,E)}})}),e}function I_(e){return On.get(e)?.fileId}function HU(e){let t=On.get(e);return t?.fileId&&bm(t)}function Im(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=WA.get(e);if(!t){if(!e.databaseName)return Lo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,A_.get)(B.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Mo.join)(n,e.databaseName)):t=[(0,Mo.join)((0,A_.getHdbBasePath)(),"blobs",e.databaseName)],WA.set(e,t)}return t}async function QA(e){let t=Im(e);t&&await Promise.all(t.map(r=>GU(r)))}async function GU(e){if((0,rt.existsSync)(e)){for(let t of await(0,Cs.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await GU((0,Mo.join)(e,t.name));else try{await(0,Cs.unlink)((0,Mo.join)(e,t.name))}catch(r){Lo.default.warn?.("Error deleting file",r)}try{await(0,Cs.rmdir)(e)}catch(t){Lo.default.warn?.("Error deleting directory",t)}}}function bm({storageIndex:e,fileId:t,store:r}){let n=Im(r);return(0,Mo.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function D8(e,t){let r=t.contentBuffer,n=r.length;if(!(n<UU))return e.size=n,YA(e,Am.Readable.from([r]),t)}function M8(e){let t=Im(e.store),r=v8(),n=t?.length>1?U8(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=bm(e),a=(0,Mo.dirname)(i);(0,rt.existsSync)(a)||(0,zA.ensureDirSync)(a),e.filePath=i}function v8(){let e=vU.get(Pn);if(!e){let t=0,r=Im(Pn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=0;if((0,rt.existsSync)(n))for(let c of(0,rt.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>a&&(a=l)}s+=a,n=(0,Mo.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(Pn.getUserSharedBuffer("blob-file-id",e.buffer)),vU.set(Pn,e)}return Number(Atomics.add(e,0,1n))}function U8(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(y_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,x8(e)),e.frequencyTable[t%y_]}async function x8(e){if(!Cs.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a;try{a=await(0,Cs.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,zA.ensureDirSync)(s),a=await(0,Cs.statfs)(s)}let c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(y_),n=t.map(s=>1/s);for(let s=0;s<y_;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function w_(e,t,r){Nu=t,Pn=r,Yc=!1;try{return e()}finally{Nu=void 0,Pn=void 0}}function B8(e){Yr=[];let t;try{t=e()}catch(n){throw Yr=void 0,n}let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r?r.then(()=>e()):t}function N_(e,t){try{Yr=[],Do=t,e()}catch(n){throw Do=void 0,Yr=void 0,n}Do=void 0;let r=Yr.length<2?Yr[0]:Promise.all(Yr);return Yr=void 0,r}function wm(e,t,r){Pn=r;try{return Do=t,e()}finally{Do=void 0}}function Wc(e,t){return Pn=t,e()}function Oa(e){Cu(e,t=>{b_(t)})}function Cu(e,t){if(e instanceof ws)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&Cu(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&Cu(e[r],t)}}function k8(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var xi,Cs,rt,R_,Am,zA,A_,Mo,Lo,UU,wr,xU,jA,DU,C8,O8,MU,On,Do,ws,Nu,Yr,Pn,Yc,Rm,S_,P8,T_,FU,WA,vU,y_,F8,Ns=ie(()=>{xi=require("msgpackr"),Cs=require("node:fs/promises"),rt=require("node:fs"),R_=require("node:zlib"),Am=require("node:stream"),zA=require("fs-extra"),A_=w(ue());H();Mo=require("path"),Lo=w(Xn());Po();UU=8192,wr=8,xU=0,jA=1,DU=255,C8=new Uint8Array([0,xU,255,255,255,255,255,255]),O8=new Uint8Array([0,jA,255,255,255,255,255,255]),MU=0xffffffffffff,On=new WeakMap,ws=global.Blob||k8(),Yc=!1,Rm=new Uint8Array(8),S_=new DataView(Rm.buffer),P8=6e4;o(BU,"InstanceOfBlobWithNoConstructor");BU.prototype=ws.prototype;T_=class e extends BU{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=On.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(KA()&&VA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=On.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=bm(t),a,c=o(async()=>{let l,u=wr;try{if(l=await(0,Cs.readFile)(i),l.length>=wr){l.copy(Rm,0,0,wr);let f=S_.getBigUint64(0);if(Number(f>>48n)===DU)throw new Error("Error in blob: "+buffer.subarray(wr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<MU&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(a)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(a=!0,h(c()))))return a=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===jA?new Promise((f,m)=>{(0,R_.deflate)(l.subarray(wr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(wr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=On.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=bm(t),a,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=o((A,S)=>{(0,rt.open)(i,"r",(R,N)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Lo.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(A,S)},20).unref();S(R),p.#e?.forEach(O=>O(R))}else a=N,A(N)})},"openFile");return new Promise(g)},pull:o(E=>{let g=0,A=100;return new Promise(o(function S(R,N){function O(te){(0,rt.close)(a),clearTimeout(d),u&&u.close(),N(te),p.#e?.forEach(G=>G(te))}o(O,"onError");let F=Buffer.allocUnsafe(262144);(0,rt.read)(a,F,0,F.length,c,(te,G,k)=>{if(l+=G,te)return O(te);if(c===0){if(G<wr){A-- >0&&f!==!1?(h(),Lo.default.debug?.("File was empty, waiting for data to be written",i,A),setTimeout(()=>S(R,N),20).unref()):(Lo.default.debug?.("File was empty, throwing error",i,A),N(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Rm,0,0,wr);let J=S_.getBigUint64(0);if(Number(J>>48n)===DU)return O(new Error("Error in blob: "+k.subarray(wr)));if(g=Number(J&0xffffffffffffn),g<MU&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(wr,G),l-=wr}else if(G===0){let J=Buffer.allocUnsafe(8);return(0,rt.read)(a,J,0,wr,0,Y=>{if(Y)return O(Y);if(Rm.set(J),g=Number(S_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{O(new Error(`File read timed out reading from ${i}`))},P8).unref():(u=(0,rt.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(R,N))}),S(R,N)):m?O(new Error("Blob is incomplete")):(m=!0,S(R,N));return}(0,rt.close)(a),E.close(),R()})}else k=k.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,S(R,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=G;try{E.enqueue(k)}catch(J){return Lo.default.debug?.("Error enqueuing chunk",J),R()}l===g&&((0,rt.close)(a),E.close()),R()})},"readMore"))},"pull"),cancel(){(0,rt.close)(a),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=On.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};On.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};On.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(Pn=t?.primaryStore?.rootStore,!Pn)throw new Error("No target table specified");return kU(this).saving??Promise.resolve()}},FU=500;o(b_,"deleteBlob");o(L8,"setDeletionDelay");global.createBlob=function(e,t){let r=new T_(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(On.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof Am.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=Am.Readable.from(e);else throw new Error("Invalid source type");return r};o(kU,"saveBlob");o(YA,"writeBlobWithStream");o(I_,"getFileId");o(HU,"getFilePathForBlob");WA=new Map;o(Im,"getRootBlobPathsForDB");o(QA,"deleteRootBlobPathsForDB");o(GU,"rimrafSteadily");o(bm,"getFilePath");o(D8,"writeBlobWithBuffer");o(M8,"generateFilePath");vU=new Map;o(v8,"getNextFileId");y_=128;o(U8,"getNextStorageIndex");o(x8,"createFrequencyTableForStoragePaths");o(w_,"encodeBlobsWithFilePath");o(B8,"encodeBlobsAsBuffers");o(N_,"decodeBlobsWithWrites");o(wm,"decodeWithBlobCallback");o(Wc,"decodeFromDatabase");o(Oa,"deleteBlobsInObject");o(Cu,"findBlobsInObject");F8=new xi.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,xi.addExtension)({Class:ws,type:11,unpack:o(function(e){let t=F8.unpack(e),r=new T_;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(On.set(r,{storageIndex:t[1],fileId:t[2],store:Pn}),Do)return Do(r)??r;if(!Pn)throw new Error("No store specified, cannot load blob from storage")}else On.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=On.get(e);if(Nu!==void 0&&(Yc=!0,t?.recordId!==void 0&&t.recordId!==Nu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<UU)return r.size=t.contentBuffer.length,(0,xi.pack)([r,t.contentBuffer])}if(Nu!==void 0){if(t=kU(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Nu,(0,xi.pack)([r,t.storageIndex,t.fileId])}if(t){if(Do)return Do(e),(0,xi.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,rt.readFileSync)(bm(t));if(n.length>=wr&&(n.copy(Rm,0,0,wr),Number(S_.getBigUint64(0)&0xffffffffffffn)===n.length-wr))return Buffer.concat([(0,xi.pack)([r]),n]);if(Yr)Yr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Yr)return Yr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,xi.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(k8,"polyfillBlob")});var YU={};Ie(YU,{onStorageReclamation:()=>Nm,runReclamationHandlers:()=>tb,setAvailableSpaceRatioGetter:()=>G8});function Nm(e,t,r){(r||(0,O_.getWorkerIndex)()===(0,O_.getWorkerCount)()-1)&&(C_.has(e)||C_.set(e,[]),C_.get(e).push({priority:0,handler:t}),eb||(eb=setTimeout(tb,$U).unref()))}async function tb(){for(let[e,t]of C_)try{let r=await KU(e),n=H8/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(ZA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){ZA.default.error?.("Error running storage reclamation handlers",r)}eb=setTimeout(tb,$U).unref()}function G8(e){KU=e??VU}var XA,O_,ZA,P_,qU,C_,H8,$U,eb,VU,KU,L_=ie(()=>{XA=require("node:fs/promises"),O_=w(nt()),ZA=w(Xn());H();P_=w(ue()),qU=w(oe());P_.default.initSync();C_=new Map,H8=P_.default.get(B.STORAGE_RECLAMATION_THRESHOLD)??.4,$U=(0,qU.convertToMS)(P_.default.get(B.STORAGE_RECLAMATION_INTERVAL))||36e5;o(Nm,"onStorageReclamation");VU=o(async e=>{if(XA.statfs){let t=await(0,XA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),KU=VU;o(tb,"runReclamationHandlers");o(G8,"setAvailableSpaceRatioGetter")});var ix={};Ie(ix,{ACTION_32_BIT:()=>x_,ACTION_64_BIT:()=>K8,AUDIT_STORE_OPTIONS:()=>Pm,Decoder:()=>jc,HAS_BLOBS:()=>Ln,HAS_CURRENT_RESIDENCY_ID:()=>Qc,HAS_EXPIRATION_EXTENDED_TYPE:()=>Mm,HAS_ORIGINATING_OPERATION:()=>Dm,HAS_PREVIOUS_RESIDENCY_ID:()=>Jc,REMOTE_SEQUENCE_UPDATE:()=>B_,createAuditEntry:()=>Xc,getLastRemoved:()=>$8,openAuditStore:()=>v_,readAuditEntry:()=>xt,removeAuditEntry:()=>U_,setAuditRetention:()=>V8,transactionKeyEncoder:()=>tx});function v_(e){let t=e.auditStore=e.openDB(rb.AUDIT_STORE_NAME,{create:!1,...Pm});t||(t=e.auditStore=e.openDB(rb.AUDIT_STORE_NAME,Pm),zU(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=sb;Nm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-nb/(1+i*i)})){try{m=U_(t,h,E)}catch(g){Ou.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=q8){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,nb/10):(zU(t,p),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,Om.getWorkerIndex)()===(0,Om.getWorkerCount)()-1&&c(),(0,Om.getWorkerIndex)()===0&&!WU)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(WU=!0,Ou.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function U_(e,t,r){let n=Y8(r),s;if(n&Ln){s=xt(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Wc(()=>Oa(s.getValue(i)),i.rootStore)}if((n&15)===ib){s=s||xt(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function zU(e,t){ob[0]=t,e.put(Symbol.for("last-removed"),rx)}function $8(e){let t=e.get(Symbol.for("last-removed"));if(t)return rx.set(t),ob[0]}function V8(e,t=sb){nb=e,sb=t}function Xc(e,t,r,n,s,i,a,c,l,u,d,f,m){let p=nx[a];if(!p)throw new Error(`Invalid audit entry type ${a}`);let h=1;if(n&&(n>1?Pa.setFloat64(0,n):Os.set(ab),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}A(s),A(t),g(r),Pa.setFloat64(h,e),h+=8,l&Qc&&A(u),l&Jc&&A(d),l&Mm&&(Pa.setFloat64(h,f),h+=8),l&Dm&&A(sx[m]),i?g(i):Os[h++]=0,l?Pa.setUint32(n?8:0,p|l|3221225472):Os[n?8:0]=p;let E=Os.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let R=h;h+=1,h=(0,zc.writeKey)(S,Os,h);let N=h-R-1;N>127?N>16383?(Ou.error("Key or username was too large for audit entry",S),h=R+1,Os[R]=0):(Os.copyWithin(R+2,R+1,h),Pa.setUint16(R,N|32768),h++):Os[R]=N}function A(S){S<128?Os[h++]=S:S<16384?(Pa.setUint16(h,S|32768),h+=2):S<1056964608?(Pa.setUint32(h,S|3221225472),h+=4):(Os[h]=255,Pa.setUint32(h+1,S),h+=5)}}function Y8(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new jc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,p,h,E;if(i&Qc&&(m=n.readInt()),i&Jc&&(p=n.readInt()),i&Mm&&(h=n.readFloat64()),i&Dm){let R=n.readInt();E=sx[R]}l=n.readInt();let g=n.position,A=n.position+=l,S;return{type:nx[i&7],tableId:c,nodeId:a,get recordId(){return(0,zc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return A>g?(0,zc.readKey)(e,g,A):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(R,N,O){if(i&D_||i&Cm&&!N)return S||(S=Wc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),S;if(i&Cm&&O)return vA(R.getEntry(this.recordId),O,R)},getBinaryValue(){return i&(D_|Cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Ou.error("Reading audit entry error",n,e),{}}}var zc,M_,rb,Om,ex,Ou,Os,Pa,tx,Pm,nb,q8,ob,rx,sb,WU,D_,Cm,jU,ib,QU,JU,XU,ZU,x_,K8,B_,Qc,Jc,Dm,Mm,Ln,nx,sx,jc,Io=ie(()=>{zc=require("ordered-binary"),M_=w(ue()),rb=w($t());H();Om=w(nt()),ex=w(oe());Zc();Ou=w(Q());p_();Ns();L_();(0,M_.initSync)();Os=Buffer.alloc(2816),Pa=new DataView(Os.buffer,Os.byteOffset,2816),tx={writeKey(e,t,r){return e===Lm?(t.set(Lm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,zc.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,zc.readKey)(e,t,r)}},Pm={encoding:"binary",keyEncoder:tx},nb=(0,ex.convertToMS)((0,M_.get)(B.LOGGING_AUDITRETENTION))||86400*3,q8=1e3,ob=new Float64Array(1),rx=new Uint8Array(ob.buffer),sb=1e4,WU=!1;o(v_,"openAuditStore");o(U_,"removeAuditEntry");o(zU,"updateLastRemoved");o($8,"getLastRemoved");o(V8,"setAuditRetention");D_=16,Cm=32,jU=1,ib=2,QU=3,JU=4,XU=5,ZU=6,x_=14,K8=15,B_=11,Qc=512,Jc=1024,Dm=2048,Mm=4096,Ln=8192,nx={put:jU|D_,[jU]:"put",delete:ib,[ib]:"delete",message:QU|D_,[QU]:"message",invalidate:JU|Cm,[JU]:"invalidate",patch:XU|Cm,[XU]:"patch",relocate:ZU,[ZU]:"relocate"},sx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Xc,"createAuditEntry");o(Y8,"readAction");o(xt,"readAuditEntry");jc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});function F_(){return cb||(cb=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),cb}function z8(e){return e=e.replace(W8,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function j8(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function ub(e){let t=ox.default.createHash("shake128",{outputLength:4}),r;return(0,ax.isIPv6)(e)?r=z8(e):r=e.toLowerCase(),j8(Uint8Array.from(t.update(r).digest()))}var ox,ax,lb,cb,W8,db=ie(()=>{Oe();ox=w(require("crypto")),ax=require("node:net"),lb=new Map;o(F_,"getAnalyticsHostnameTable");W8=/(\d{1,3}\.){3}\d{1,3}$/;o(z8,"normalizeIPv6");o(j8,"nodeHashToNumber");o(ub,"stableNodeId")});var vo,fb=ie(()=>{vo={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var G_={};Ie(G_,{addAnalyticsListener:()=>Bm,analyticsDelay:()=>Eb,calculateCPUUtilization:()=>Ix,diffResourceUsage:()=>wx,onAnalyticsAggregate:()=>Sb,recordAction:()=>Je,recordActionBinary:()=>zr,recordHostname:()=>_b,setAnalyticsEnabled:()=>X8});function X8(e){Tx=e,clearTimeout(Um),Um=null}function Z8(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function eZ(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},H_.set(e,a)}function Je(e,t,r,n,s){if(!Tx)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=H_.get(i);a?Z8(e,a):eZ(i,e,t,r,n,s),Um||tZ()}function zr(e,t,r,n,s){Je(!!e,t,r,n,s)}function Bm(e){Rx.push(e)}function tZ(){mb||=performance.now(),Um=setTimeout(async()=>{Um=null;let e=performance.now()-mb;mb=0;let t=[],r={time:Date.now(),period:e,threadId:el.threadId,metrics:t};for(let[s,i]of H_){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of bx){let m=Math.floor(c*f),p=a[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Nx()}let n=process.memoryUsage();t.push({metric:"memory",threadId:el.threadId,byThread:!0,...n});for(let s of Rx)s(t);H_=new Map,el.parentPort?el.parentPort.postMessage({type:yx,report:r}):Px({report:r})},Eb).unref()}async function _b(){let e=Ue.hostname;Wr.trace?.("recordHostname server.hostname:",e);let t=ub(e);Wr.trace?.("recordHostname nodeId:",t);let r=F_();if(!await r.get(t)){let s={id:t,hostname:e};Wr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Pu(e,t){let r=Ue.hostname,n=lb.get(r);n?Wr.trace?.("storeMetric cached nodeId:",n):(n=ub(r),Wr.trace?.("storeMetric new nodeId:",n),lb.set(r,n));let s={id:[(0,hb.getNextMonotonicTime)(),n],...t};Wr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function Ix(e,t){let r=e.userCPUTime+e.systemCPUTime;return Wr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function wx(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function rZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:vo.TABLE_SIZE,database:t,table:s,size:c};Wr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Pu(e,l),n+=c}return n}function cx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=Sx.statSync(s.primaryStore.env.path).size,c=rZ(e,r,n),l=a-c,u={metric:vo.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Pu(e,u),Wr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Wr.warn?.("Error getting DB size metrics",s)}}function lx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:vo.STORAGE_VOLUME,database:r,...i};Pu(e,a),Wr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Wr.warn?.("Error getting DB volume metrics",s)}}async function nZ(e,t=6e4){let r=gb(),n=Cx(),s=new Promise(R=>{let N=performance.now();setImmediate(()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(O-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let O=performance.now();O-N>5e3&&Wr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(O-N)+"ms"),R(O-N)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:O,threadId:F}=N;for(let te of O||[]){let{path:G,method:k,type:J,metric:Y,count:le,total:ae,distribution:re,threads:Re,...Te}=te;le||(le=1);let Fe=Y+(G?"-"+G:"");k!==void 0&&(Fe+="-"+k),J!==void 0&&(Fe+="-"+J);let Ge=c.get(Fe);if(Ge){if(Ge.threads){let Zt=Ge.threads[F];if(Zt)Ge=Zt;else{Ge.threads[F]={...Te};continue}}Ge.count||(Ge.count=1);let Rr=Ge.count;for(let Zt in Te){let Ht=Te[Zt];typeof Ht=="number"&&(Ge[Zt]=(Ge[Zt]*Rr+Ht*le)/(Rr+le))}Ge.count+=le,ae>=0&&(Ge.total+=ae,Ge.ratio=Ge.total/Ge.count)}else Ge={period:t,...te},delete Ge.distribution,c.set(Fe,Ge),Ge.byThread&&(Ge.threads=[],Ge.threads[F]={...Te},u.push(Ge));if(re){re=re.map(Zt=>typeof Zt=="number"?{value:Zt,count:1}:Zt);let Rr=l.get(Fe);Rr?Rr.push(...re):l.set(Fe,re)}}await Nx()}for(let R of u){let{path:N,method:O,type:F,metric:te,count:G,total:k,distribution:J,threads:Y,...le}=R;Y=Y.filter(ae=>ae);for(let ae in le){if(typeof R[ae]!="number")continue;let re=0;for(let Re of Y){let Te=Re[ae];typeof Te=="number"&&(re+=Te)}R[ae]=re}R.count=Y.length,delete R.threads,delete R.byThread}for(let[R,N]of l){let O=c.get(R);N.sort((Zt,Ht)=>Zt.value>Ht.value?1:-1);let F=O.count-1,te=[],G=0,k=0,J;for(let Zt of bx){let Ht=F*Zt;for(;G<Ht;)J=N[k++],G+=J.count,k===1&&G--;let er=N[k>1?k-2:0];J||(J=N[0]),te.push(J.value-(J.value-er.value)*(G-Ht)/J.count)}let[Y,le,ae,re,Re,Te,Fe,Ge,Rr]=te;Object.assign(O,{p1:Y,p10:le,p25:ae,median:re,p75:Re,p90:Te,p95:Fe,p99:Ge,p999:Rr})}let f;for(let[,R]of c)R.time=d,Pu(n,R),f=!0;if(f)for(let R of Ax)R(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let R={metric:vo.MAIN_THREAD_UTILIZATION,idle:p-ux,active:h-dx,taskQueueLatency:await s,time:m,...process.memoryUsage()};Pu(n,R)}ux=p,dx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,Wr.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=wx(k_,E);Wr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=k_.time?m-k_.time:t,g.cpuUtilization=Ix(g,g.period);let A={metric:vo.RESOURCE_USAGE,...g};Pu(n,A),k_=E;let S=at();cx(n,S),cx(n,{system:S.system}),lx(n,S),lx(n,{system:S.system})}async function fx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function gb(){return mx||(mx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Cx(){return px||(px=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function oZ(){Ox=!0;let e=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await nZ(Eb,e),await fx(gb(),sZ),await fx(Cx(),iZ)},Math.min(e/2,2147483647)).unref()}function Px(e,t){let r=e.report;r.threadId=t?.threadId||el.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(hx+=n.mean*n.count);r.totalBytesProcessed=hx,t&&(r.metrics.push({metric:vo.UTILIZATION,...t.performance.eventLoopUtilization(Ex.get(t))}),Ex.set(t,t.performance.eventLoopUtilization())),r.id=(0,hb.getNextMonotonicTime)(),gb().primaryStore.put(r.id,r),Ox||oZ(),aZ&&(Lx=lZ(r))}async function lZ(e){if(await Lx,!La){let r=(0,vm.dirname)(Q8());try{La=await(0,pb.open)((0,vm.join)(r,"analytics.log"),"r+")}catch{La=await(0,pb.open)((0,vm.join)(r,"analytics.log"),"w+")}}let t=(await La.stat()).size;if(t>cZ){let r=Buffer.alloc(t);await La.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await La.write(r,{position:0}),await La.truncate(r.length),t=r.length}await La.write(JSON.stringify(e)+`
14
+ `,t)}function Sb(e){e&&Ax.push(e)}var el,_x,gx,vm,pb,hb,xm,Sx,Q8,J8,Wr,H_,Tx,Um,mb,Eb,yx,Rx,Ax,bx,ux,dx,k_,Nx,sZ,iZ,mx,px,Ox,hx,Ex,aZ,Lx,La,cZ,Ps=ie(()=>{el=require("worker_threads"),_x=w(nt());Oe();gx=w(Q()),vm=require("path"),pb=require("fs/promises"),hb=w(Cn()),xm=w(ue());H();xr();Sx=w(require("node:fs"));db();fb();({getLogFilePath:Q8,forComponent:J8}=gx.default),Wr=J8("analytics").conditional;(0,xm.initSync)();H_=new Map,Tx=(0,xm.get)(B.ANALYTICS_AGGREGATEPERIOD)>-1;o(X8,"setAnalyticsEnabled");o(Z8,"recordExistingAction");o(eZ,"recordNewAction");o(Je,"recordAction");Ue.recordAnalytics=Je;o(zr,"recordActionBinary");mb=0,Eb=1e3,yx="analytics-report",Rx=[],Ax=[];o(Bm,"addAnalyticsListener");bx=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(tZ,"sendAnalytics");o(_b,"recordHostname");o(Pu,"storeMetric");o(Ix,"calculateCPUUtilization");o(wx,"diffResourceUsage");o(rZ,"storeTableSizeMetrics");o(cx,"storeDBSizeMetrics");o(lx,"storeVolumeMetrics");o(nZ,"aggregation");ux=0,dx=0,k_={userCPUTime:0,systemCPUTime:0},Nx=o(()=>new Promise(setImmediate),"rest");o(fx,"cleanup");sZ=36e5,iZ=31536e6;o(gb,"getRawAnalyticsTable");o(Cx,"getAnalyticsTable");(0,_x.setChildListenerByType)(yx,Px);o(oZ,"startScheduledTasks");hx=0,Ex=new Map,aZ=!1;o(Px,"recordAnalytics");cZ=1e6;o(lZ,"logAnalytics");o(Sb,"onAnalyticsAggregate")});var xx={};Ie(xx,{ENTRY:()=>dZ,HAS_EXPIRATION:()=>V_,HAS_RESIDENCY_ID:()=>Ib,HAS_STRUCTURE_UPDATE:()=>K_,LAST_TIMESTAMP_PLACEHOLDER:()=>Lm,LOCAL_TIMESTAMP:()=>uZ,METADATA:()=>Mu,NEW_TIMESTAMP_PLACEHOLDER:()=>Mx,NO_TIMESTAMP:()=>Tb,PENDING_LOCAL_TIME:()=>wb,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ab,RecordEncoder:()=>bb,TIMESTAMP_ASSIGN_LAST:()=>mZ,TIMESTAMP_ASSIGN_NEW:()=>vx,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ux,TIMESTAMP_PLACEHOLDER:()=>q_,TIMESTAMP_RECORD_PREVIOUS:()=>yb,entryMap:()=>Da,handleLocalTimeForGets:()=>Y_,lastMetadata:()=>ct,recordUpdater:()=>Nb,removeEntry:()=>rl});function EZ(){return km[0]=km[0]^64,fZ.getFloat64(0)}function Y_(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Mu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,l.size=ct.size,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Da.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Da.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Mu],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,tl.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<tl.length;u++){let d=tl[u].deref();(!d||d.isDone||d.isCommitted)&&tl.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function Nb(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Du=i?.localTime?yb|Ux:Tb:Du=l?i?.localTime?yb|16384:vx|16384:Tb;let p=u?.expiresAt;if(p>=0&&(c|=V_),Fm=c,Rb=p,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:a,instructedWrite:Du>0},E,g=0;try{let A=i?.residencyId,S=u?.residencyId;S&&(Ab=S,Fm|=Ib,g|=Qc),A!==S&&(g|=Jc,A||(A=0)),c&V_&&(g|=Mm),u?.originatingOperation&&(g|=Dm),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&i.metadataFlags&Ln&&(r.getBinaryFast(i.localTime)||Oa(i.value));let R;if(s!==void 0&&(R=w_(()=>e.put(n,s,h),n,e.rootStore),Yc&&(g|=Ln)),l){let N=u?.user?.username;if(m&&(w_(()=>e.encoder.encode(m),n,e.rootStore),Yc&&(g|=Ln)),e.encoder.hasStructureUpdate&&(g|=K_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let O=i?.localTime,F=r.get(O);if(F){let te=xt(F).previousLocalTime;return R=r.put(O,Xc(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,Lu,g,S,A,p),{ifVersion:E}),R}}R=r.put(s===void 0?Mx:Lm,Xc(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,Lu,g,S,A,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&pZ.has(d)&&Je(Lu?.length??1,"db-write",u.tableToTrack,null),R}catch(A){throw A.message+=" id: "+n+" options: "+h,A}}}function rl(e,t,r){if(t)return t.value&&t.metadataFlags&Ln&&!e.auditStore.getBinaryFast(t.localTime)&&Oa(t.value),e.remove(t.key,r)}var Dx,$_,q_,Lm,ab,Mx,uZ,Mu,dZ,km,fZ,Tb,vx,mZ,Ux,yb,V_,Ib,wb,K_,pZ,Da,hZ,Lu,Du,Fm,Rb,Ab,ct,bb,tl,Zc=ie(()=>{Dx=require("msgpackr");Io();$_=w(Q());Ns();Ns();Ps();q_=new Uint8Array([1,1,1,1,4,64,0,0]),Lm=new Uint8Array([1,1,1,1,1,0,0,0]),ab=new Uint8Array([1,1,1,1,3,64,0,0]),Mx=new Uint8Array([1,1,1,1,0,64,0,0]),uZ=Symbol("local-timestamp"),Mu=Symbol("metadata"),dZ=Symbol("entry"),km=new Uint8Array(8),fZ=new DataView(km.buffer,0,8),Tb=0,vx=0,mZ=1,Ux=3,yb=4,V_=16,Ib=32,wb=1,K_=256,pZ=new Set(["put","patch","delete","message","publish"]),Da=new WeakMap,Du=0,Fm=-1,Rb=-1,Ab=0,ct=null,bb=class extends Dx.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Da.get(this)?.version}getExpiresAt(){return Da.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Du||Fm>=0){let c=0,l=Du;l&&(c+=8,Du=0);let u=Fm,d=Rb,f=Ab;u>=0&&(c+=4,Fm=-1,d>=0&&(c+=8,Rb=-1),f&&(c+=4,Ab=0));let m=hZ=n.call(this,i,a|2048|c);Lu=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(q_[4]=l,q_[5]=l>>8,m.set(q_,p),p+=8),Yc&&(u|=Ln),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|x_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return Lu=n.call(this,i,a),Lu};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(km,0,c),c+=8;else for(let m=0;m<8;m++)km[m]=t[c++];l=EZ(),i=t[c]}let u,d;i<32&&(i===x_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&V_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&Ib&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Wc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Mu]:a,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Wc(()=>super.decode(t,r),this.rootStore)}catch(c){return $_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(EZ,"getTimestamp");o(Y_,"handleLocalTimeForGets");tl=[];setInterval(()=>{for(let e=0;e<tl.length;e++){let t=tl[e].deref();!t||t.isDone||t.isCommitted?tl.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?($_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):$_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(Nb,"recordUpdater");o(rl,"removeEntry")});function Pb(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?Pb(f.conditions,f.operator,r,n,s,i,a,c):Bu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",R=d(h.conditions,!S,p);return S?(N,O)=>R.some(F=>F(N,O)):(N,O)=>R.every(F=>F(N,O))}let g=(h.attribute||h[0])===r.primaryKey,A=Gm(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=IZ(r.primaryStore,h.estimated_count,p)),A}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Bu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new jr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],N=Fi(n.attributes,R);if(N.relationship){if(c.length<2)throw new jr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let O=N.definition?.tableClass||N.elements?.definition?.tableClass,F=new Map,te=Bu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,O,s,F);if(N.relationship.to){i[c[0]]=F;let G=!!Fi(O.attributes,N.relationship.to)?.elements;te=yZ(te,N,O.primaryStore,G,F)}if(N.relationship.from){let G=o(k=>(k?.key!==void 0&&(k=k.key),Bu({attribute:N.relationship.from,value:k},t,r,n,s,F)),"searchEntry");N.elements?(i[c[0]]=F,te=RZ(te,N,O.primaryStore,F,G)):te=te.flatMap(G)}return te}else if(c.length===1)c=c[0];else throw new jr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(Lb[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Bi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new jr.ClientError(`Unknown query comparator "${u}"`)}let A;if(typeof m=="string"&&m.length>Ls.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,E=!1,A=Gm(e,n,null,i,d)),typeof p=="string"&&p.length>Ls.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,Ls.MAX_SEARCH_KEY_LENGTH)+Ls.OVERFLOW_MARKER,h=!0,A=A??Gm(e,n,null,i,d)),r){let R=m;m=p,p=R,R=!E,E=!h,h=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new jr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new jr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new jr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new jr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(A=A??Gm(e,n,null,i,d),!A)throw new jr.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(S).map(A?function({key:N,value:O}){return this?.isSync?O&&A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(O&&A(O)?N:Ma.SKIP)}catch(G){te(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(Dn|va))?Ma.SKIP:(a?._freezeRecords&&Object.freeze(N.value),N));return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:N,...O}=R,F=n.primaryStore.getEntry(N);return a?._freezeRecords&&Object.freeze(F?.value),{...O,...F}}return R}):f.getRange(S).map(A?function({key:R,value:N}){let O;return typeof R=="string"&&R.length>Ls.MAX_SEARCH_KEY_LENGTH?O=n.primaryStore.get(N):O={[c]:R},this.isSync?A(O)?N:Ma.SKIP:new Promise((F,te)=>setImmediate(()=>{try{F(A(O)?N:Ma.SKIP)}catch(G){te(G)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:N}){return this.isSync?N&&A(N)?R:Ma.SKIP:new Promise((O,F)=>setImmediate(()=>{try{O(N&&A(N)?R:Ma.SKIP)}catch(te){F(te)}}))})}function Fi(e,t){if(Array.isArray(t))if(t.length>1){let r=Fi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Fi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function yZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function RZ(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function Gm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Fi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=Gm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,A=o((R,N)=>{let O,F;return E?E.returnDirect?(O=E(R,r,N),F=ct):(F=E(R,r,N,!0),Array.isArray(F)?(O=F.map(te=>te.value),F=null):O=F?.value):O=R[d],{subObject:O,subEntry:F}},"getSubObject"),S=o((R,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(R);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:O,subEntry:F}=A(R,N);return O?Array.isArray(O)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let k=A(G).subObject;return Array.isArray(k)?k.filter(h).map(J=>J[m.primaryKey]):k}}),O.some(h)):h(O,F):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),Lb[a]||a){case Ls.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Bi.compareKeys)(d,l[0])>=0&&(0,Bi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Bi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Bi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Bi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Bi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Bi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new jr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&z_(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function A(S){let R=S[d],N;if(typeof R!="object"||!R||p?N=f(R):Array.isArray(R)?N=R.some(f):R instanceof Date&&(N=f(R.getTime())),m&&(g++,!N&&!A.idFilter&&++E/g*i>h)){let O=Bu(e,r.transaction.getReadTxn(),!1,t),F;A.to?F=O.flatMap(G=>t.primaryStore.get(G)[A.to]):F=O.map(Fu);let te=new Set(F);A.idFilter=G=>te.has(Fu(G)),A.idFilter.idSet=te}return N}return o(A,"recordFilter"),s&&(A.idFilter=f),A}o(u,"attributeComparator")}function z_(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/Uo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Lb[n]||n,n===Ls.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Fi(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=z_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*Uo(e.indices[i.relationship.from])/(Uo(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=Uo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=SZ*Uo(e.primaryStore)+1;else if(n==="between")r.estimated_count=gZ*Uo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=Uo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=_Z*Uo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function j_(e,t){if(e)if(xo=e,vu.lastIndex=0,AZ.test(e))try{if(t&&(t.conditions=[]),ai=t??new xu,Hm(ai,""),Br!==xo.length&&Vt("Unable to parse query, unexpected end of query"),ai.parseErrorMessage&&(ai.parseError=new Cb(t.parseErrorMessage),!t))throw ai.parseError;return ai}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Br} in '${xo}'`,ai.parseErrorMessage&&(r.message+=", "+ai.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Vt(e){let t=`${e} at position ${Br}`;ai.parseErrorMessage=ai.parseErrorMessage?ai.parseErrorMessage+", "+t:t}function Hm(e,t){let r=vu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(xo);){Br=r.lastIndex;let[,d,f]=n;a?(d&&Vt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Vt(`invalid FIQL operator ${d}`),l=Bx):(l=decodeURIComponent,i="equals",d||Vt("attribute must be specified before equality comparator"),s=Uu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=TZ[f],l=Ob[i]?Bx:decodeURIComponent,d||Vt(`attribute must be specified before comparator ${f}`),s=Uu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Vt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Vt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Vt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&Fx(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else W_(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Vt("conditions/comparisons are not allowed in a property list"):e.push(Uu(d)),s=void 0;break;case"(":vu.lastIndex=Br;let p=Hm(d?[]:new xu,")");switch(d){case"":W_(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Vt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Vt("group by is not implemented yet");case"sort":e.sort=kx(p);break;default:Vt(`unknown query function call ${d}`)}xo[Br]===","?r.lastIndex=++Br:a=!0,s=null;break;case"{":e.conditions&&Vt("property sets are not allowed in a queries"),d||Vt("property sets must have a defined parent property name"),vu.lastIndex=Br,m=Hm([],"}"),m.name=d,e.push(m),xo[Br]===","?r.lastIndex=++Br:a=!0;break;case"[":if(vu.lastIndex=Br,d?(m=Hm(new xu,"]"),m.name=d):m=Hm(e.conditions?new xu:[],"]"),e.conditions)if(W_(e,u),xo[Br]==="="){l=decodeURIComponent,i="equals",s=Uu(d),r.lastIndex=++Br;break}else e.conditions.push(m),s=null;else e.push(m);xo[Br]===","?r.lastIndex=++Br:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&Fx(h,d),W_(e,u),e.conditions.push(h)}else d&&Vt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Uu(d));return e}else Vt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Vt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?bZ:vu,r.lastIndex=Br),Br===xo.length)return e}t&&Vt(`expected '${t}', but encountered end of string`)}function W_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Vt("Can not mix operators within a condition grouping"):e.operator=t)}function Uu(e){return e.indexOf(".")>-1?e.split(".").map(Uu):decodeURIComponent(e)}function Bx(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new jr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function Fx(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new jr.ClientError("wildcard can only be used at the end of a string")}function kx(e){let t=Hx(e[0]);return e.length>1&&(t.next=kx(e.slice(1))),t}function Hx(e){if(Array.isArray(e)){let t=Hx(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}Vt(`Unknown sort type ${e}`)}function Fu(e){return Array.isArray(e)?e.join("\0"):e}function Uo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function IZ(e,t,r){return t*r/Uo(e)}var jr,Ls,Bi,Ma,_Z,gZ,SZ,TZ,Ob,Lb,Cb,AZ,vu,bZ,Br,ai,xo,xu,Q_=ie(()=>{jr=w(_e()),Ls=w($t()),Bi=require("ordered-binary"),Ma=require("lmdb");J_();Zc();_Z=.3,gZ=.1,SZ=.05,TZ={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Ob={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(Pb,"executeConditions");o(Bu,"searchByIndex");o(Fi,"findAttribute");o(yZ,"joinTo");o(RZ,"joinFrom");Lb={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(Gm,"filterByType");o(z_,"estimateCondition");Cb=class extends jr.Violation{static{o(this,"SyntaxViolation")}},AZ=/[()[\]|!<>.]|(=\w*=)/,vu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,bZ=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(j_,"parseQuery");o(Vt,"recordError");o(Hm,"parseBlock");o(W_,"assignOperator");o(Uu,"decodeProperty");o(Bx,"typedDecoding");o(Fx,"wildcardDecoding");o(kx,"toSortObject");o(Hx,"toSortEntry");xu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Fu,"flattenKey");o(Uo,"estimatedEntryCount");o(IZ,"intersectionEstimate")});var Gx,ci,X_=ie(()=>{Gx=w(ii()),ci=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,Gx._assignPackageExport)("Resource",Resource)});var Yx={};Ie(Yx,{MultiPartId:()=>Z_,Resource:()=>Fr,contextStorage:()=>Hu,snakeCase:()=>NZ,transformForSelect:()=>Gu});function NZ(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function qx(e,t){if(nl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(nl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new Z_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){nl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return nl=!0,null;e[e.length-1]==="/"&&(nl=!0)}return t.coerceId(decodeURIComponent(e))}function Mn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof bo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new ku.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a?(d=i,a=a.getContext?.()||a):a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ci,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ci,l.id=c,c==null&&(u=!0);l||(l=new ci,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Hu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=o(E=>Hu.run(a,()=>h(E)),"runAction")),a?.transaction){let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)}else return At(a,()=>{let E=this.getResource(c,a,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?E.allowRead(a.user,l,a):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(a.user,d,a):E.allowUpdate(a.user,d,a):t.type==="create"?E.allowCreate(a.user,d,a):E.allowDelete(a.user,l,a);if(g?.then)return g.then(A=>{if(!A)throw new ku.AccessViolation(a.user);return typeof d?.then=="function"?d.then(S=>e(E,l,a,S)):e(E,l,a,d)});if(!g)throw new ku.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,a,g)):e(E,l,a,d)}o(h,"authorizeActionOnResource")}}function Zn(e,t){let r=new ku.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function Db(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function Gu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):Db(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(Db(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(Db(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&a&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=Gu(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var $x,Vx,ku,Kx,Hu,wZ,Fr,nl,Z_,Ua=ie(()=>{$x=require("crypto");hm();wu();Vx=w(ii()),ku=w(_e());Ca();Q_();Kx=require("async_hooks");X_();Hu=new Kx.AsyncLocalStorage,wZ={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Fr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=Mn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=Gu(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=Mn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Zn(t,"put")},{hasContent:!0,type:"update"});static patch=Mn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Zn(t,"patch")},{hasContent:!0,type:"update"});static delete=Mn(function(t,r,n,s){return t.delete?t.delete(r):Zn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,$x.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Hu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),At(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Zn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=Mn(function(t,r,n,s){return t.invalidate?t.invalidate(r):Zn(t,"delete")},{hasContent:!1,type:"update"});static post=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=Mn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=Mn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Zn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Mn(function(t,r,n,s){return t.subscribe?t.subscribe(r):Zn(t,"subscribe")},{type:"read"});static publish=Mn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):Zn(t,"publish")},{hasContent:!0,type:"create"});static search=Mn(function(t,r,n){let s=t.search?t.search(r):Zn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=Gu(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=Mn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Zn(t,"search")},{hasContent:!0,type:"read"});static copy=Mn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Zn(t,"copy")},{hasContent:!0,type:"create"});static move=Mn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Zn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Zn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return j_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&wZ[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:qx(t,this),isCollection:nl}}let i=qx(t,this);return nl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new Jn}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new Jn}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,Vx._assignPackageExport)("Resource",Fr);o(NZ,"snakeCase");o(qx,"pathToId");Z_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(Mn,"transactional");o(Zn,"missingMethod");o(Db,"selectFromObject");o(Gu,"transformForSelect")});var sl,Mb=ie(()=>{sl=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}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 vb={};Ie(vb,{Resources:()=>qu,keyArrayToString:()=>$u,resetResources:()=>CZ,resources:()=>Ds});function CZ(){return Ds=new qu,Ue.resources=Ds,Ds}function $u(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Wx,zx,qu,Ds,xa=ie(()=>{Ca();Mb();Wx=w(Q()),zx=w(_e());xr();qu=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new zx.ServerError(`Conflicting paths for ${t}`);Wx.default.error(c),i.Resource=new sl(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return At(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(CZ,"resetResources");o($u,"keyArrayToString")});function Bb(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=Qx,OZ(e.primaryStore,e.auditStore)):(c=jx,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{Jx(jx[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=$u(t);let d=new xb(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function Jx(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),Xx(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=$u(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,Ub.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,Ub.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function OZ(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=Qx[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{Jx(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function Xx(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function Zx(e){return e.nextTransaction||(Bb({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),Xx(e)),e.nextTransaction}var Ub,jx,Qx,xb,Fb=ie(()=>{Ub=w(Q());wu();xa();Io();jx=Object.create(null),Qx=Object.create(null);o(Bb,"addSubscription");xb=class extends Jn{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;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;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(Jx,"notifyFromTransactionData");o(OZ,"listenToCommits");o(Xx,"nextTransaction");o(Zx,"whenNextTransaction")});var t0=M((MCe,e0)=>{"use strict";var kb=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};e0.exports=kb});var n0=M((UCe,r0)=>{"use strict";var Hb=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};r0.exports=Hb});var qm=M(i0=>{"use strict";var s0=ue(),PZ=(H(),D(W)),{RecordEncoder:LZ}=(Zc(),D(xx));s0.initSync();var DZ=s0.get(PZ.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Gb=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=DZ&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:LZ})}};i0.OpenDBIObject=Gb});var $m=M((kCe,o0)=>{"use strict";var es=ue(),Ms=(H(),D(W));es.initSync();var eg=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||es.get(Ms.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",es.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=es.get(Ms.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=es.get(Ms.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),es.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=es.get(Ms.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=es.get(Ms.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};o0.exports=eg;eg.MAX_DBS=1e4});var _t=M((GCe,E0)=>{"use strict";var $b=require("lmdb"),li=require("fs-extra"),ts=require("path"),tg=Cn(),l0=Q(),vn=Kr().LMDB_ERRORS_ENUM,rg=n0(),{OpenDBIObject:Vb}=qm(),u0=$m(),Ba=$t(),a0=(H(),D(W)),{table:MZ,resetDatabases:vZ}=(Oe(),D(mt)),c0=ue(),ui=Ba.INTERNAL_DBIS_NAME,d0=Ba.DBI_DEFINITION_NAME,UZ="data.mdb",xZ="lock.mdb",Vm=".mdb",BZ="-lock",qb=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=vs(t,r),this.key_type=this.dbi[Ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new $b.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ng(e,t){if(e===void 0)throw new Error(vn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(vn.ENV_NAME_REQUIRED)}o(ng,"pathEnvNameValidation");async function Kb(e,t,r=!0){try{await li.access(e)}catch(n){throw n.code==="ENOENT"?new Error(vn.INVALID_BASE_PATH):n}try{let n=ts.join(e,t+Vm);return await li.access(n,li.constants.R_OK|li.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await li.access(ts.join(e,t,UZ),li.constants.R_OK|li.constants.F_OK),ts.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(vn.INVALID_ENVIRONMENT)}else throw new Error(vn.INVALID_ENVIRONMENT);throw n}}o(Kb,"validateEnvironmentPath");function sg(e,t){if(tg.validateEnv(e),t===void 0)throw new Error(vn.DBI_NAME_REQUIRED)}o(sg,"validateEnvDBIName");async function FZ(e,t,r=!1,n=!1){ng(e,t);let s=ts.basename(e);t=t.toString();let i=c0.get(a0.CONFIG_PARAMS.DATABASES);i||c0.setProperty(a0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Kb(e,t,n),f0(e,t,r)}catch(a){if(a.message===vn.INVALID_ENVIRONMENT){let c=ts.join(e,t);await li.mkdirp(n?c:e);let l=new u0(n?c:c+Vm,!1),u=$b.open(l);u.dbis=Object.create(null);let d=new Vb(!1);u.openDB(ui,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=Yb(e,t,r);return u[Ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(FZ,"createEnvironment");async function kZ(e,t,r,n=!0){ng(e,t),t=t.toString();let s=ts.join(e,t);return MZ({table:t,database:ts.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(kZ,"copyEnvironment");async function f0(e,t,r=!1){ng(e,t),t=t.toString();let n=Yb(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Kb(e,t),i=ts.join(e,t+Vm),a=s!=i,c=new u0(s,a),l=$b.open(c);l.dbis=Object.create(null);let u=p0(l);for(let d=0;d<u.length;d++)vs(l,u[d]);return l[Ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(f0,"openEnvironment");async function HZ(e,t,r=!1){ng(e,t),t=t.toString();let n=ts.join(e,t+Vm),s=await Kb(e,t);if(global.lmdb_map!==void 0){let i=Yb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await m0(a),delete global.lmdb_map[i]}}await li.remove(s),await li.remove(s===n?s+BZ:ts.join(ts.dirname(s),xZ))}o(HZ,"deleteEnvironment");async function m0(e){tg.validateEnv(e);let t=e[Ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(m0,"closeEnvironment");function Yb(e,t,r=!1){let s=`${ts.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(Yb,"getCachedEnvironmentName");function GZ(e){tg.validateEnv(e);let t=Object.create(null),r=vs(e,ui);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ui)try{t[n]=Object.assign(new rg,s)}catch{l0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(GZ,"listDBIDefinitions");function p0(e){tg.validateEnv(e);let t=[],r=vs(e,ui);for(let{key:n}of r.getRange({start:!1}))n!==ui&&t.push(n);return t}o(p0,"listDBIs");function qZ(e,t){let n=vs(e,ui).getEntry(t),s=new rg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{l0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(qZ,"getDBIDefinition");function h0(e,t,r,n=!r){if(sg(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return vs(e,t)}catch(s){if(s.message===vn.DBI_DOES_NOT_EXIST){let i=new Vb(r,n===!0),a=e.openDB(t,i),c=new rg(r===!0,n);return a[d0]=c,vs(e,ui).putSync(t,c),e.dbis[t]=a,a}throw s}}o(h0,"createDBI");function vs(e,t){if(sg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ui?r=qZ(e,t):r=new rg,r===void 0)throw new Error(vn.DBI_DOES_NOT_EXIST);let n;try{let s=new Vb(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(vn.DBI_DOES_NOT_EXIST):s}return n[d0]=r,e.dbis[t]=n,n}o(vs,"openDBI");function $Z(e,t){sg(e,t),t=t.toString();let r=vs(e,t),n=r.getStats();return r[Ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o($Z,"statDBI");async function VZ(e,t){try{let r=ts.join(e,t+Vm);return(await li.stat(r)).size}catch{throw new Error(vn.INVALID_ENVIRONMENT)}}o(VZ,"environmentDataSize");function KZ(e,t){if(sg(e,t),t=t.toString(),t===ui)throw new Error(vn.CANNOT_DROP_INTERNAL_DBIS_NAME);vs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],vs(e,ui).removeSync(t)}o(KZ,"dropDBI");function YZ(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{vs(e,i)}catch(a){if(a.message===vn.DBI_DOES_NOT_EXIST)h0(e,i,i!==t,i===t),n=!0;else throw a}}n&&vZ()}o(YZ,"initializeDBIs");E0.exports={openDBI:vs,openEnvironment:f0,createEnvironment:FZ,listDBIs:p0,listDBIDefinitions:GZ,createDBI:h0,dropDBI:KZ,statDBI:$Z,deleteEnvironment:HZ,initializeDBIs:YZ,TransactionCursor:qb,environmentDataSize:VZ,copyEnvironment:kZ,closeEnvironment:m0}});var S0=M(($Ce,g0)=>{"use strict";var Wb=_t(),WZ=Q(),_0=Kr().LMDB_ERRORS_ENUM;g0.exports=zZ;async function zZ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await Wb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==_0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Wb.closeEnvironment(global.lmdb_map[n]),await Wb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==_0.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){WZ.error(t)}}o(zZ,"cleanLMDBMap")});var Hi=M((KCe,y0)=>{"use strict";var T0=oe(),jZ=(H(),D(W)),Vu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ki=require("joi"),Fa={schema_format:{pattern:Vu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},QZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number(),ki.array()).required(),JZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number()),XZ=ki.alternatives(ki.string().min(1).max(Fa.schema_length.maximum).pattern(Vu).messages({"string.pattern.base":"{:#label} "+Fa.schema_format.message}),ki.number()).required();function ZZ(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Fa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Vu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(ZZ,"checkValidTable");function e9(e,t){return T0.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(e9,"validateSchemaExists");function t9(e,t){let r=t.state.ancestors[0].schema;return T0.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(t9,"validateTableExists");function r9(e,t){return e.toLowerCase()===jZ.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(r9,"validateSchemaName");y0.exports={commonValidators:Fa,schemaRegex:Vu,hdbSchemaTable:QZ,validateSchemaExists:e9,validateTableExists:t9,validateSchemaName:r9,checkValidTable:ZZ,hdbDatabase:JZ,hdbTable:XZ}});var jb=M((WCe,A0)=>{var{hdbTable:n9,hdbDatabase:R0}=Hi(),s9=ft(),zb=require("joi"),i9={undefined:"undefined",null:"null"},o9=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||i9[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),a9=zb.object({database:R0,schema:R0,table:n9,records:zb.array().items(zb.object().custom(o9)).required()});A0.exports=function(e){return s9.validateBySchema(e,a9)}});var I0=M((jCe,b0)=>{"use strict";var Qb=class{static{o(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")}};b0.exports=Qb});var N0=M((JCe,w0)=>{"use strict";var Jb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};w0.exports=Jb});var O0=M((ZCe,C0)=>{"use strict";var Xb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};C0.exports=Xb});var L0=M((tOe,P0)=>{"use strict";var Zb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};P0.exports=Zb});var ol=M((oOe,v0)=>{"use strict";var c9=_t(),l9=N0(),u9=O0(),d9=L0(),Gi=Cn(),Km=Kr().LMDB_ERRORS_ENUM,f9=$t(),Bo=(H(),D(W)),m9=oe(),p9=require("uuid"),nOe=require("lmdb"),{handleHDBError:h9,hdbErrors:E9}=_e(),{OVERFLOW_MARKER:sOe,MAX_SEARCH_KEY_LENGTH:iOe}=f9,D0=ue();D0.initSync();var ig=D0.get(Bo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),eI=Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,il=Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _9(e,t,r,n,s=Gi.getNextMonotonicTime()){sI(e,t,r,n),tI(e,t,r);let i=new l9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];M0(u,!0,s);let d=g9(e,t,r,u),f=u[t];a.push(d),c.push(f)}return rI(a,c,n,i,s)}o(_9,"insertRecords");function g9(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][Bo.FUNC_VAL],n[a]=c)}let l=Gi.getIndexedValues(c),u=e.dbis[a];if(l){ig&&u.prefetch(l.map(d=>({key:d,value:s})),og);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}ig&&e.dbis[t].prefetch([s],og),e.dbis[t].put(s,n,n[il])})}o(g9,"insertRecord");function S9(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(S9,"removeSkippedRecords");function M0(e,t,r){let n=r>0;(n||!Number.isInteger(e[il]))&&(e[il]=r||(r=Gi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[eI]))&&(e[eI]=r||Gi.getNextMonotonicTime()):delete e[eI]}o(M0,"setTimestamps");function tI(e,t,r){r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c9.initializeDBIs(e,t,r)}o(tI,"initializeTransaction");async function T9(e,t,r,n,s=Gi.getNextMonotonicTime()){sI(e,t,r,n),tI(e,t,r);let i=new u9,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=nI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return rI(c,l,n,i,s,a)}o(T9,"updateRecords");async function y9(e,t,r,n,s=Gi.getNextMonotonicTime()){try{sI(e,t,r,n)}catch(l){throw h9(l,l.message,E9.HTTP_STATUS_CODES.BAD_REQUEST)}tI(e,t,r);let i=new d9,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;m9.isEmpty(u[t])?(d=p9.v4(),u[t]=d):d=u[t];let f=nI(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return rI(a,c,n,i,s)}o(y9,"upsertRecords");async function rI(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Gi.getNextMonotonicTime(),S9(r,i),n}o(rI,"finalizeWrite");function nI(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(M0(r,!d,a),Number.isInteger(r[il])&&u[il]>r[il])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let A=u[h];if(typeof E=="function"){let R=E([[u]]);Array.isArray(R)&&(E=R[0][Bo.FUNC_VAL],r[h]=E)}if(E===A)continue;let S=Gi.getIndexedValues(A);if(S){ig&&g.prefetch(S.map(R=>({key:R,value:n})),og);for(let R=0,N=S.length;R<N;R++)g.remove(S[R],n)}if(S=Gi.getIndexedValues(E),S){ig&&g.prefetch(S.map(R=>({key:R,value:n})),og);for(let R=0,N=S.length;R<N;R++)g.put(S[R],n)}}let p={...u,...r};c.put(n,p,p[il])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:nI(e,t,r,n,s,i,a))}o(nI,"updateUpsertRecord");function R9(e,t,r){if(Gi.validateEnv(e),t===void 0)throw new Error(Km.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Km.WRITE_ATTRIBUTES_REQUIRED):new Error(Km.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(R9,"validateBasic");function sI(e,t,r,n){if(R9(e,t,r),!Array.isArray(n))throw n===void 0?new Error(Km.RECORDS_REQUIRED):new Error(Km.RECORDS_MUST_BE_ARRAY)}o(sI,"validateWrite");function og(){}o(og,"noop");v0.exports={insertRecords:_9,updateRecords:T9,upsertRecords:y9}});var qi=M((cOe,A9)=>{A9.exports={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:"hash_function"},{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:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},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:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var x0=M((lOe,U0)=>{"use strict";var b9=require("uuid"),iI=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||b9.v4(),this.schema_table=`${this.schema}.${this.table}`}};U0.exports=iI});var ag=M((dOe,B0)=>{"use strict";var I9=x0(),oI=class extends I9{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};B0.exports=oI});var k0=M((mOe,F0)=>{"use strict";F0.exports=N9;var w9="inserted";function N9(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===w9?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(N9,"returnObject")});var cg=M((EOe,G0)=>{"use strict";var C9=(H(),D(W)),aI=_t(),O9=ol(),{getSystemSchemaPath:P9,getSchemaPath:L9}=Rt(),hOe=qi(),{validateBySchema:D9}=ft(),Ym=require("joi"),M9=ag(),v9=k0(),{handleHDBError:U9,hdbErrors:x9,ClientError:B9}=_e(),H0=oe(),{HTTP_STATUS_CODES:F9}=x9,k9="inserted";G0.exports=H9;async function H9(e){let t=D9(e,Ym.object({database:Ym.string(),schema:Ym.string(),table:Ym.string().required(),attribute:Ym.string().required()}));if(t)throw new B9(t.message);let r=!e.skip_table_check&&H0.checkGlobalSchemaTable(e.schema,e.table);if(r)throw U9(new Error,r,F9.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=H0.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new M9(e.schema,e.table,e.attribute,e.id);try{let i=await aI.openEnvironment(L9(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);aI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await aI.openEnvironment(P9(),C9.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await O9.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return v9(k9,c,{records:[s]},l)}catch(i){throw i}}o(H9,"lmdbCreateAttribute")});var Wm=M((SOe,$0)=>{"use strict";var Fo=oe(),q0=Q(),gOe=jb(),{getDatabases:G9}=(Oe(),D(mt)),{ClientError:al}=_e();$0.exports=q9;function q9(e){if(Fo.isEmpty(e))throw new al("invalid update parameters defined.");if(Fo.isEmptyOrZeroLength(e.schema))throw new al("invalid schema specified.");if(Fo.isEmptyOrZeroLength(e.table))throw new al("invalid table specified.");if(!Array.isArray(e.records))throw new al("records must be an array");let t=G9()[e.schema]?.[e.table];if(Fo.isEmpty(t))throw new al(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Fo.isEmptyOrZeroLength(a[r]))throw q0.error("a valid hash attribute must be provided with update record:",a),new al("a valid hash attribute must be provided with update record, check log for more info");if(!Fo.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw q0.error(`a valid hash value must be provided with ${e.operation} record:`,a),new al(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Fo.isEmpty(a[r])&&a[r]!==""&&n.has(Fo.autoCast(a[r]))&&(a.skip=!0),n.add(Fo.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(q9,"insertUpdateValidate")});var lg=M((yOe,K0)=>{"use strict";var V0=oe(),$9=(H(),D(W)),V9=Q(),K9=cg(),Y9=ag(),W9=ko(),{SchemaEventMsg:z9}=rs(),j9="already exists in";K0.exports=Q9;async function Q9(e,t,r){if(V0.isEmptyOrZeroLength(r))return r;let n=[];V0.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await J9(e,t.schema,t.name,i)})),s}o(Q9,"lmdbCheckForNewAttributes");async function J9(e,t,r,n){let s=new Y9(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await X9(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(j9))V9.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(J9,"createNewAttribute");async function X9(e){let t;return t=await K9(e),W9.signalSchemaChange(new z9(process.pid,$9.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(X9,"createAttribute")});var Ku=M((AOe,Y0)=>{"use strict";var cI=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Y0.exports=cI});var z0=M((IOe,W0)=>{"use strict";var Z9=Ku(),e7=(H(),D(W)).OPERATIONS_ENUM,lI=class extends Z9{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(e7.INSERT,r,n,s,i),this.records=t}};W0.exports=lI});var Q0=M((NOe,j0)=>{"use strict";var t7=Ku(),r7=(H(),D(W)).OPERATIONS_ENUM,uI=class extends t7{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(r7.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};j0.exports=uI});var X0=M((OOe,J0)=>{"use strict";var n7=Ku(),s7=(H(),D(W)).OPERATIONS_ENUM,dI=class extends n7{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(s7.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};J0.exports=dI});var eB=M((LOe,Z0)=>{"use strict";var i7=Ku(),o7=(H(),D(W)).OPERATIONS_ENUM,fI=class extends i7{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(o7.DELETE,n,s,t,i),this.original_records=r}};Z0.exports=fI});var zm=M((vOe,sB)=>{"use strict";var MOe=require("path"),tB=_t(),a7=z0(),c7=Q0(),l7=X0(),u7=eB(),Yu=$t(),rB=oe(),{CONFIG_PARAMS:d7}=(H(),D(W)),nB=ue();nB.initSync();var ug=(H(),D(W)).OPERATIONS_ENUM,{getTransactionAuditStorePath:f7}=Rt();sB.exports=m7;async function m7(e,t){if(nB.get(d7.LOGGING_AUDITLOG)===!1)return;let r=f7(e.schema,e.table),n=await tB.openEnvironment(r,e.table,!0),s=p7(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){tB.initializeDBIs(n,Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),rB.isEmpty(s.user_name)||n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Yu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(m7,"writeTransaction");function p7(e,t){let r=rB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ug.INSERT)return new a7(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.UPDATE)return new c7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.UPSERT)return new l7(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ug.DELETE)return new u7(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(p7,"createTransactionObject")});var mI=M((BOe,iB)=>{"use strict";var h7=Wm(),xOe=fm(),jm=(H(),D(W)),E7=mm(),_7=ol().insertRecords,g7=_t(),S7=Q(),T7=lg(),{getSchemaPath:y7}=Rt(),R7=zm();iB.exports=A7;async function A7(e){try{let{schemaTable:t,attributes:r}=h7(e);E7(e,r,t.hash_attribute),e.schema!==jm.SYSTEM_SCHEMA_NAME&&(r.includes(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(jm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T7(e.hdb_auth_header,t,r),s=y7(e.schema,e.table),i=await g7.openEnvironment(s,e.table),a=await _7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await R7(e,a)}catch(c){S7.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(A7,"lmdbCreateRecords")});var cB=M((kOe,aB)=>{"use strict";var oB=(H(),D(W)),b7=mI(),I7=fm(),w7=require("fs-extra"),{getSchemaPath:N7}=Rt();aB.exports=C7;async function C7(e){let t=[{name:e.schema,createddate:Date.now()}],r=new I7(oB.SYSTEM_SCHEMA_NAME,oB.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await b7(r),await w7.mkdirp(N7(e.schema))}o(C7,"lmdbCreateSchema")});var uB=M((GOe,lB)=>{"use strict";var pI=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};lB.exports=pI});var pB=M((YOe,mB)=>{"use strict";var dB=_t(),hI=Cn(),EI=Kr().LMDB_ERRORS_ENUM,O7=$t(),fB=Q(),$Oe=oe(),P7=require("lmdb"),L7=uB(),D7=(H(),D(W)),{OVERFLOW_MARKER:VOe,MAX_SEARCH_KEY_LENGTH:KOe}=O7,M7=D7.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function v7(e,t,r,n){if(hI.validateEnv(e),t===void 0)throw new Error(EI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(EI.IDS_REQUIRED):new Error(EI.IDS_MUST_BE_ITERABLE);try{let s=dB.listDBIs(e);dB.initializeDBIs(e,t,s);let i=new L7,a,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{a=r[m];let h=e.dbis[t].get(a);if(!h||n&&h[M7]>n){i.skipped.push(a);continue}let E=e.dbis[t].ifVersion(a,P7.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let A=s[g];if(!h.hasOwnProperty(A)||A===t)continue;let S=e.dbis[A],R=h[A];if(R!=null)try{let N=hI.getIndexedValues(R);if(N)for(let O=0,F=N.length;O<F;O++)S.remove(N[O],a)}catch{fB.warn(`cannot delete from attribute: ${A}, ${R}:${a}`)}}});c.push(E),l.push(a),i.original_records.push(h)}catch(h){fB.warn(h),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=hI.getNextMonotonicTime(),i}catch(s){throw s}}o(v7,"deleteRecords");mB.exports={deleteRecords:v7}});var Qm=M((zOe,EB)=>{"use strict";var Wu=oe(),U7=pB(),x7=_t(),{getSchemaPath:B7}=Rt(),F7=zm(),k7=Q();EB.exports=H7;async function H7(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wu.isEmptyOrZeroLength(e.hash_values)&&!Wu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Wu.isEmpty(l)||e.hash_values.push(l)}}if(Wu.isEmptyOrZeroLength(e.hash_values))return hB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wu.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=B7(e.schema,e.table),i=await x7.openEnvironment(s,e.table),a=await U7.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await F7(e,a)}catch(c){k7.error(`unable to write transaction due to ${c.message}`)}return hB(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(H7,"lmdbDeleteRecords");function hB(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(hB,"createDeleteResponse")});var gI=M((JOe,_B)=>{"use strict";var G7=(H(),D(W)),QOe=Cn();function _I(e,t){let r=Object.create(null);if(t.length===1&&G7.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(_I,"parseRow");function q7(e,t,r,n){let s=_I(r,e);n.push(s)}o(q7,"searchAll");function $7(e,t,r,n){let s=_I(r,e);n[t]=s}o($7,"searchAllToMap");function V7(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(V7,"iterateDBI");function cl(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(cl,"pushResults");function K7(e,t,r,n,s,i){t.toString().endsWith(e)&&cl(t,r,n,s,i)}o(K7,"endsWith");function Y7(e,t,r,n,s,i){t.toString().includes(e)&&cl(t,r,n,s,i)}o(Y7,"contains");function W7(e,t,r,n,s,i){t>e&&cl(t,r,n,s,i)}o(W7,"greaterThanCompare");function z7(e,t,r,n,s,i){t>=e&&cl(t,r,n,s,i)}o(z7,"greaterThanEqualCompare");function j7(e,t,r,n,s,i){t<e&&cl(t,r,n,s,i)}o(j7,"lessThanCompare");function Q7(e,t,r,n,s,i){t<=e&&cl(t,r,n,s,i)}o(Q7,"lessThanEqualCompare");_B.exports={parseRow:_I,searchAll:q7,searchAllToMap:$7,iterateDBI:V7,endsWith:K7,contains:Y7,greaterThanCompare:W7,greaterThanEqualCompare:z7,lessThanCompare:j7,lessThanEqualCompare:Q7,pushResults:cl}});var zu=M((rPe,bB)=>{"use strict";var ka=_t(),ZOe=Q(),ns=Cn(),dg=$t(),rr=Kr().LMDB_ERRORS_ENUM,ePe=oe(),J7=(H(),D(W)),fg=gI(),{parseRow:X7}=fg,tPe=require("lmdb"),{OVERFLOW_MARKER:gB,MAX_SEARCH_KEY_LENGTH:Z7}=dg;function SB(e,t,r,n=!1,s=void 0,i=void 0){return ll(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(SB,"iterateFullIndex");function Jm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return ll(e,t,r,(d,f,m,p)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return p===r?(S.values=!1,f.getRange(S).map(R=>({value:R}))):f.getRange(S)})}o(Jm,"iterateRangeBetween");function ll(e,t,r,n){let s=e.database||e,i=ka.openDBI(s,r);i[dg.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ka.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ll,"setupTransaction");function TB(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(gB)){if(!s)if(r)s=ka.openDBI(e,r);else{let l=ka.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=ka.openDBI(e,l[u]),!s[dg.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(TB,"getOverflowCheck");function eee(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ll(e,t,t,(a,c,l)=>(mg(r),r=Xm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>X7(u.value,r))))}o(eee,"searchAll");function tee(e,t,r,n=!1,s=void 0,i=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);mg(r),r=Xm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of SB(e,t,t,n,s,i))a.set(c,fg.parseRow(l,r));return a}o(tee,"searchAllToMap");function ree(e,t,r=!1,n=void 0,s=void 0){if(ns.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=SB(e,void 0,t,r,n,s),c=a.transaction,l=TB(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(ree,"iterateDBI");function nee(e,t){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return ka.statDBI(e,t).entryCount}o(nee,"countAll");function see(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ll(e,t,r,(c,l,u,d)=>(n=ns.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(see,"equals");function iee(e,t,r){return Ha(e,t,r),ka.openDBI(e,t).getValuesCount(r)}o(iee,"count");function oee(e,t,r,n,s=!1,i=void 0,a=void 0){return Ha(e,r,n),ll(e,null,r,(c,l)=>{n=ns.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(oee,"startsWith");function aee(e,t,r,n,s=!1,i=void 0,a=void 0){return yB(e,t,r,n,s,i,a,!0)}o(aee,"endsWith");function yB(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Ha(e,r,n),ll(e,null,r,(l,u,d,f)=>{let m=TB(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(gB)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[dg.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(yB,"contains");function cee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!0,!1)}o(cee,"greaterThan");function lee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Jm(e,t,r,n,l,s,i,a,!1,!1)}o(lee,"greaterThanEqual");function uee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!0)}o(uee,"lessThan");function dee(e,t,r,n,s=!1,i=void 0,a=void 0){Ha(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Jm(e,t,r,l,n,s,i,a,!1,!1)}o(dee,"lessThanEqual");function fee(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(ns.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=ns.convertKeyValueToWrite(n),s=ns.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Jm(e,t,r,n,s,i,a,c)}o(fee,"between");function mee(e,t,r,n){ns.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(mg(r),r=Xm(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=fg.parseRow(c,r)),a}o(mee,"searchByHash");function pee(e,t,r){ns.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(pee,"checkHashExists");function hee(e,t,r,n,s=[]){return AB(e,t,r,n,s),RB(e,t,r,n,s).map(i=>i[1])}o(hee,"batchSearchByHash");function Eee(e,t,r,n,s=[]){AB(e,t,r,n,s);let i=new Map;for(let[a,c]of RB(e,t,r,n,s))i.set(a,c);return i}o(Eee,"batchSearchByHashToMap");function RB(e,t,r,n,s=[]){return ll(e,t,t,(i,a,c)=>{r=Xm(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,fg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(RB,"batchHashSearch");function AB(e,t,r,n,s){if(ns.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(mg(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}o(AB,"initializeBatchSearchByHash");function mg(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(mg,"validateFetchAttributes");function Ha(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>Z7)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}o(Ha,"validateComparisonFunctions");function Xm(e,t){return t.length===1&&J7.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ka.listDBIs(e)),t}o(Xm,"setGetWholeRowAttributes");bB.exports={searchAll:eee,searchAllToMap:tee,count:iee,countAll:nee,equals:see,startsWith:oee,endsWith:aee,contains:yB,searchByHash:mee,setGetWholeRowAttributes:Xm,batchSearchByHash:hee,batchSearchByHashToMap:Eee,checkHashExists:pee,iterateDBI:ree,greaterThan:cee,greaterThanEqual:lee,lessThan:uee,lessThanEqual:dee,between:fee}});var ju=M((sPe,OB)=>{var IB=require("lodash"),wB=ft(),Ye=require("joi"),_ee=oe(),{hdbSchemaTable:Zm,checkValidTable:NB,hdbTable:CB,hdbDatabase:pg}=Hi(),{handleHDBError:gee,hdbErrors:See}=_e(),{getDatabases:Tee}=(Oe(),D(mt)),{HTTP_STATUS_CODES:yee}=See,Ree=Ye.object({database:pg,schema:pg,table:CB,attribute:Zm,value:Ye.any().required(),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),desc:Ye.bool(),limit:Ye.number().integer().min(1),offset:Ye.number().integer().min(0)}),Aee=Ye.object({database:pg,schema:pg,table:CB,operator:Ye.string().valid("and","or").default("and").lowercase(),offset:Ye.number().integer().min(0),limit:Ye.number().integer().min(1),get_attributes:Ye.array().min(1).items(Ye.alternatives(Zm,Ye.object())).optional(),sort:Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),descending:Ye.bool().optional()}).optional(),conditions:Ye.array().min(1).items(Ye.alternatives(Ye.object({operator:Ye.string().valid("and","or").default("and").lowercase(),conditions:Ye.array()}),Ye.object({attribute:Ye.alternatives(Zm,Ye.array().min(1)),comparator:Ye.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:Ye.when("comparator",{switch:[{is:"equals",then:Ye.any()},{is:"between",then:Ye.array().items(Ye.alternatives([Ye.string(),Ye.number()])).length(2)}],otherwise:Ye.alternatives(Ye.string(),Ye.number())}).required()}))).required()});OB.exports=function(e,t){let r=null;switch(t){case"value":r=wB.validateBySchema(e,Ree);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(NB("database",e.schema)),i(NB("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=wB.validateBySchema(e,Aee);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=_ee.checkGlobalSchemaTable(e.schema,e.table);if(s)return gee(new Error,s,yee.NOT_FOUND);let a=Tee()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=o(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=IB.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!IB.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var SI=M((oPe,PB)=>{"use strict";var bee=_t(),Iee=ju(),{getSchemaPath:wee}=Rt();PB.exports=Nee;function Nee(e){let t=Iee(e,"hashes");if(t)throw t;let r=wee(e.schema,e.table);return bee.openEnvironment(r,e.table)}o(Nee,"initialize")});var TI=M((cPe,LB)=>{"use strict";var Cee=zu(),Oee=SI();LB.exports=Pee;async function Pee(e){let t=await Oee(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Cee.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Pee,"lmdbGetDataByHash")});var Qu=M((uPe,DB)=>{"use strict";var yI=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};DB.exports=yI});var vB=M((mPe,MB)=>{"use strict";var fPe=Qu(),Lee=zu(),Dee=SI();MB.exports=Mee;async function Mee(e){let t=await Dee(e),r=global.hdb_schema[e.schema][e.table];return Lee.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(Mee,"lmdbSearchByHash")});var di=M((hPe,UB)=>{"use strict";var RI=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};UB.exports=RI});var hg=M((_Pe,GB)=>{"use strict";var un=zu(),vee=_t(),Uee=oe(),We=$t(),ul=(H(),D(W)),xee=qi(),xB=Kr().LMDB_ERRORS_ENUM,{getSchemaPath:Bee}=Rt(),Ho=ul.SEARCH_WILDCARDS;async function Fee(e,t,r){let n;e.schema===ul.SYSTEM_SCHEMA_NAME?n=xee[e.table]:n=global.hdb_schema[e.schema][e.table];let s=HB(e,n.hash_attribute,r,t);return FB(e,s,n.hash_attribute,r)}o(Fee,"prepSearch");async function FB(e,t,r,n){let s=Bee(e.schema,e.table),i=await vee.openEnvironment(s,e.table),a=kB(i,e,t,r),c=a.transaction||i;if([We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,We.SEARCH_TYPES.SEARCH_ALL,We.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(kee(e,r)===!1){let d=e.attribute;if(d===r)return n?BB(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?BB(a,f):a.map(f)}let u=e.attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?un.batchSearchByHashToMap(c,r,e.get_attributes,u):un.batchSearchByHash(c,r,e.get_attributes,u)}o(FB,"executeSearch");function kB(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case We.SEARCH_TYPES.EQUALS:s=un.equals(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.CONTAINS:s=un.contains(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.ENDS_WITH:case We.SEARCH_TYPES._ENDS_WITH:s=un.endsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.STARTS_WITH:case We.SEARCH_TYPES._STARTS_WITH:s=un.startsWith(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return un.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return un.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case We.SEARCH_TYPES.SEARCH_ALL:return un.searchAll(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return un.searchAllToMap(e,n,t.get_attributes,a,c,l);case We.SEARCH_TYPES.BETWEEN:s=un.between(e,i,t.attribute,t.value,t.end_value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN:case We.SEARCH_TYPES._GREATER_THAN:s=un.greaterThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.GREATER_THAN_EQUAL:case We.SEARCH_TYPES._GREATER_THAN_EQUAL:s=un.greaterThanEqual(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN:case We.SEARCH_TYPES._LESS_THAN:s=un.lessThan(e,i,t.attribute,t.value,a,c,l);break;case We.SEARCH_TYPES.LESS_THAN_EQUAL:case We.SEARCH_TYPES._LESS_THAN_EQUAL:s=un.lessThanEqual(e,i,t.attribute,t.value,a,c,l);break;default:return Object.create(null)}return s}o(kB,"searchByType");function BB(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(BB,"createMapFromIterable");function kee(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(kee,"checkToFetchMore");function HB(e,t,r,n){if(Uee.isEmpty(n)){let s=e.value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.attribute===t&&(c=!0),Ho.indexOf(s)>-1)return r===!0?We.SEARCH_TYPES.SEARCH_ALL_TO_MAP:We.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Ho[0])<0&&s.indexOf(Ho[1])<0)return c===!0?r===!0?We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:We.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:We.SEARCH_TYPES.EQUALS;if(Ho.indexOf(i)>=0&&Ho.indexOf(a)>=0)return e.value=e.value.slice(1,-1),We.SEARCH_TYPES.CONTAINS;if(Ho.indexOf(i)>=0)return e.value=e.value.substr(1),We.SEARCH_TYPES.ENDS_WITH;if(Ho.indexOf(a)>=0)return e.value=e.value.slice(0,-1),We.SEARCH_TYPES.STARTS_WITH;if(s.includes(Ho[0])||s.includes(Ho[1]))return We.SEARCH_TYPES.EQUALS;throw new Error(xB.UNKNOWN_SEARCH_TYPE)}else switch(n){case ul.VALUE_SEARCH_COMPARATORS.BETWEEN:return We.SEARCH_TYPES.BETWEEN;case ul.VALUE_SEARCH_COMPARATORS.GREATER:return We.SEARCH_TYPES.GREATER_THAN;case ul.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return We.SEARCH_TYPES.GREATER_THAN_EQUAL;case ul.VALUE_SEARCH_COMPARATORS.LESS:return We.SEARCH_TYPES.LESS_THAN;case ul.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return We.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(xB.UNKNOWN_SEARCH_TYPE)}}o(HB,"createSearchTypeFromSearchObject");GB.exports={executeSearch:FB,createSearchTypeFromSearchObject:HB,prepSearch:Fee,searchByType:kB}});var $B=M((TPe,qB)=>{"use strict";var SPe=di(),Hee=ju(),Gee=oe(),qee=(H(),D(W)),$ee=hg();qB.exports=Vee;function Vee(e,t){if(!Gee.isEmpty(t)&&qee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Hee(e,"value");if(n)throw n;return $ee.prepSearch(e,t,!0)}o(Vee,"lmdbGetDataByValue")});var ep=M((APe,VB)=>{"use strict";var RPe=di(),Kee=ju(),Yee=oe(),Wee=(H(),D(W)),zee=hg();VB.exports=jee;async function jee(e,t){if(!Yee.isEmpty(t)&&Wee.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Kee(e,"value");if(n)throw n;return zee.prepSearch(e,t,!1)}o(jee,"lmdbSearchByValue")});var YB=M((wPe,KB)=>{"use strict";var IPe=$t(),AI=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},bI=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},II=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};KB.exports={SearchByConditionsObject:AI,SearchCondition:bI,SortAttribute:II}});var JB=M((LPe,QB)=>{"use strict";var{SearchByConditionsObject:CPe,SearchCondition:OPe}=YB(),Qee=di(),Jee=ju(),wI=zu(),Eg=$t(),{Resource:PPe}=(Ua(),D(Yx)),jB=hg(),Xee=gI(),Zee=require("lodash"),{getSchemaPath:ete}=Rt(),WB=_t(),{handleHDBError:tte,hdbErrors:rte}=_e(),{HTTP_STATUS_CODES:nte}=rte,ste=1e8;QB.exports=ite;async function ite(e){let t=Jee(e,"conditions");if(t)throw tte(t,t.message,nte.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=ete(e.schema,e.table),n=await WB.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)WB.openDBI(n,u.attribute);let i=Zee.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Eg.SEARCH_TYPES.EQUALS?u.estimated_count=wI.count(n,u.attribute,u.value):d===Eg.SEARCH_TYPES.CONTAINS||d===Eg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=ste}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await zB(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(jB.filterByType),f=d.length,m=wI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:a,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Xee.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await zB(a,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=wI.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(ite,"lmdbSearchByConditions");async function zB(e,t,r,n){let s=new Qee(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Eg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,jB.searchByType(e,s,i,n).map(a=>a.value)}o(zB,"executeConditionSearch")});var tp=M((MPe,XB)=>{"use strict";var ote=(H(),D(W)).OPERATIONS_ENUM,NI=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=ote.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};XB.exports=NI});var CI=M((UPe,oF)=>{"use strict";var rF=di(),nF=tp(),sF=ep(),iF=Qm(),Un=(H(),D(W)),ZB=oe(),eF=_t(),{getTransactionAuditStorePath:ate,getSchemaPath:cte}=Rt(),tF=Q();oF.exports=lte;async function lte(e){try{if(ZB.isEmpty(global.hdb_schema[e.schema])||ZB.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await ute(e),await dte(e);let t=cte(e.schema,e.table);try{await eF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")tF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=ate(e.schema,e.table);await eF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")tF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(lte,"lmdbDropTable");async function ute(e){let t=new rF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await sF(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new nF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await iF(s)}o(ute,"deleteAttributesFromSystem");async function dte(e){let t=new rF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await sF(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new nF(Un.SYSTEM_SCHEMA_NAME,Un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await iF(s)}catch(i){throw i}}o(dte,"dropTableFromSystem")});var cF=M((BPe,aF)=>{"use strict";var fte=require("fs-extra"),mte=di(),pte=Qu(),hte=tp(),Ete=CI(),_te=Qm(),gte=TI(),Ste=ep(),Go=(H(),D(W)),{getSchemaPath:Tte}=Rt(),{handleHDBError:yte,hdbErrors:Rte}=_e(),{HDB_ERROR_MSGS:Ate,HTTP_STATUS_CODES:bte}=Rte;aF.exports=Ite;async function Ite(e){let t;try{t=await wte(e.schema);let r=new mte(Go.SYSTEM_SCHEMA_NAME,Go.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await Ste(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await Ete(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new hte(Go.SYSTEM_SCHEMA_NAME,Go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _te(s);let i=Tte(t);await fte.remove(i)}catch(r){throw r}}o(Ite,"lmdbDropSchema");async function wte(e){let t=new pte(Go.SYSTEM_SCHEMA_NAME,Go.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Go.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await gte(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yte(new Error,Ate.SCHEMA_NOT_FOUND(e),bte.NOT_FOUND,void 0,void 0,!0);return n}o(wte,"validateDropSchema")});var rp=M((kPe,lF)=>{"use strict";var OI=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};lF.exports=OI});var LI=M((qPe,uF)=>{"use strict";var Nte=require("fs-extra"),_g=_t(),{getTransactionAuditStorePath:Cte}=Rt(),PI=$t(),GPe=rp();uF.exports=Ote;async function Ote(e){let t;try{let r=Cte(e.schema,e.table);await Nte.mkdirp(r),t=await _g.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{_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),_g.createDBI(t,PI.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(Ote,"createTransactionsAuditEnvironment")});var mF=M((KPe,fF)=>{"use strict";var DI=(H(),D(W)),dF=_t(),Pte=ol(),{getSystemSchemaPath:Lte,getSchemaPath:Dte}=Rt(),VPe=qi(),Mte=cg(),MI=ag(),vte=Q(),Ute=LI();fF.exports=xte;async function xte(e,t){let r=Dte(t.schema,t.table),n=new MI(t.schema,t.table,DI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new MI(t.schema,t.table,DI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new MI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await dF.createEnvironment(r,t.table),e!==void 0){let a=await dF.openEnvironment(Lte(),DI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Pte.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await vI(n),await vI(s),await vI(i)}await Ute(t)}catch(a){throw a}}o(xte,"lmdbCreateTable");async function vI(e){try{await Mte(e)}catch(t){vte.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(vI,"createAttribute")});var hF=M((WPe,pF)=>{"use strict";var Bte=Wm(),Fte=mm(),kte=lg(),np=(H(),D(W)),Hte=ol().updateRecords,Gte=_t(),{getSchemaPath:qte}=Rt(),$te=zm(),Vte=Q();pF.exports=Kte;async function Kte(e){try{let{schemaTable:t,attributes:r}=Bte(e);Fte(e,r,t.hash_attribute),e.schema!==np.SYSTEM_SCHEMA_NAME&&(r.includes(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(np.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await kte(e.hdb_auth_header,t,r),s=qte(e.schema,e.table),i=await Gte.openEnvironment(s,e.table),a=await Hte(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await $te(e,a)}catch(c){Vte.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(Kte,"lmdbUpdateRecords")});var _F=M((jPe,EF)=>{"use strict";var Yte=(H(),D(W)).OPERATIONS_ENUM,UI=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Yte.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EF.exports=UI});var SF=M((XPe,gF)=>{"use strict";var JPe=_F(),Wte=Wm(),zte=mm(),jte=lg(),sp=(H(),D(W)),Qte=ol().upsertRecords,Jte=_t(),{getSchemaPath:Xte}=Rt(),Zte=zm(),ere=Q(),{handleHDBError:tre,hdbErrors:rre}=_e();gF.exports=nre;async function nre(e){let t;try{t=Wte(e)}catch(l){throw tre(l,l.message,rre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;zte(e,n,r.hash_attribute),e.schema!==sp.SYSTEM_SCHEMA_NAME&&(n.includes(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(sp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await jte(e.hdb_auth_header,r,n),i=Xte(e.schema,e.table),a=await Jte.openEnvironment(i,e.table),c=await Qte(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Zte(e,c)}catch(l){ere.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(nre,"lmdbUpsertRecords")});var yF=M((eLe,TF)=>{"use strict";var xI=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};TF.exports=xI});var AF=M((rLe,RF)=>{"use strict";var BI=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};RF.exports=BI});var wF=M((iLe,IF)=>{"use strict";var FI=_t(),{getTransactionAuditStorePath:sre}=Rt(),sLe=yF(),ip=$t(),ire=oe(),bF=AF(),ore=require("util").promisify,are=ore(setTimeout),cre=1e4,lre=100;IF.exports=ure;async function ure(e){let t=sre(e.schema,e.table),r=await FI.openEnvironment(t,e.table,!0),n=FI.listDBIs(r);FI.initializeDBIs(r,ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new bF;do s=await dre(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await are(lre);while(s.transactions_deleted>0);return i}o(ure,"deleteAuditLogsBefore");async function dre(e,t){let r=new bF;try{let n=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ire.isEmpty(c)||(s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[ip.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>cre)break}return await s,r}catch(n){throw n}}o(dre,"deleteTransactions")});var CF=M((aLe,NF)=>{"use strict";var kI=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};NF.exports=kI});var PF=M((uLe,OF)=>{"use strict";var fre=di(),mre=tp(),lLe=CF(),$i=(H(),D(W)),pre=oe(),HI=_t(),hre=qi(),Ere=ep(),_re=Qm(),{getSchemaPath:gre}=Rt();OF.exports=Sre;async function Sre(e,t=!0){let r;e.schema===$i.SYSTEM_SCHEMA_NAME?r=hre[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await yre(e),s=gre(e.schema,e.table),i=await HI.openEnvironment(s,e.table);return t===!0&&await Tre(e,i,r.hash_attribute),HI.dropDBI(i,e.attribute),n}o(Sre,"lmdbDropAttribute");async function Tre(e,t,r){let n=HI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Tre,"removeAttributeFromAllObjects");async function yre(e){let t=new fre($i.SYSTEM_SCHEMA_NAME,$i.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Ere(t)).filter(a=>a[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(pre.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[$i.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new mre($i.SYSTEM_SCHEMA_NAME,$i.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return _re(i)}o(yre,"dropAttributeFromSystem")});var xF=M((mLe,UF)=>{"use strict";var GI=_t(),Ju=$t(),fLe=Cn(),qI=(H(),D(W)),LF=oe(),{getTransactionAuditStorePath:Rre}=Rt(),Are=zu(),gg=Ku(),bre=Q();UF.exports=Ire;async function Ire(e){let t=Rre(e.schema,e.table),r=await GI.openEnvironment(t,e.table,!0),n=GI.listDBIs(r);GI.initializeDBIs(r,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case qI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return DF(r,e.search_values);case qI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Nre(r,e.search_values,s);case qI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return wre(r,e.search_values);default:return DF(r)}}o(Ire,"readAuditLog");function DF(e,t=[0,Date.now()]){LF.isEmpty(t[0])&&(t[0]=0),LF.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new gg,s))}o(DF,"searchTransactionsByTimestamp");function wre(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,vF(e,i))}return Object.fromEntries(r)}o(wre,"searchTransactionsByUsername");function Nre(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Are.equals(e,Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ju.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=vF(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);MF(l,"records",r,d,a),MF(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Nre,"searchTransactionsByHashValues");function MF(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new gg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new gg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(MF,"loopRecords");function vF(e,t){let r=[];try{let n=e.dbis[Ju.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new gg,i);r.push(a)}}catch(i){bre.warn(i)}return r}catch(n){throw n}}o(vF,"batchSearchTransactions")});var FF=M((_Le,BF)=>{"use strict";var{getSchemaPath:hLe}=Rt(),ELe=_t(),{database:Cre}=(Oe(),D(mt));BF.exports={writeTransaction:Ore};async function Ore(e,t,r){return Cre({database:e,table:t}).transaction(r)}o(Ore,"writeTransaction")});var qF=M((SLe,GF)=>{"use strict";var{getSchemaPath:kF}=Rt(),HF=_t();GF.exports={flush:Pre,resetReadTxn:Lre};async function Pre(e,t){return(await HF.openEnvironment(kF(e,t),t.toString())).flushed}o(Pre,"flush");async function Lre(e,t){try{(await HF.openEnvironment(kF(e,t),t.toString())).resetReadTxn()}catch{}}o(Lre,"resetReadTxn")});var YF=M((yLe,KF)=>{"use strict";var{Readable:Dre}=require("stream"),{getDatabases:Mre}=(Oe(),D(mt)),{readSync:vre,openSync:Ure,createReadStream:$F}=require("fs"),{open:xre}=require("lmdb"),{OpenDBIObject:VF}=qm(),Bre=$m(),{AUDIT_STORE_OPTIONS:Fre}=(Io(),D(ix)),{INTERNAL_DBIS_NAME:kre,AUDIT_STORE_NAME:Hre}=$t();KF.exports=qre;var $I=32768,Gre=100;async function qre(e){let t=e.database||e.schema||"data",r=Mre()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=xre({noSync:!0,maxDbs:Bre.MAX_DBS}),m,p=f.openDB(kre,new VF(!1)),h=d.useReadTransaction(),E=0,g=o(async function(S,R){R.encoding="binary",R.encoder=void 0;let N=f.openDB(S,R),O=d.openDB(S,R);for(let{key:F,version:te,value:G}of O.getRange({start:null,transaction:h,versions:O.useVersions}))m=N.put(F,G,te),E++%Gre===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:R}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,R);let[,N]=S.split("/"),O=!N,F=new VF(!O,O);await g(S,F)}e.include_audit&&await g(Hre,{...Fre}),await m;let A=$F(f.path);return A.headers=l(),A.on("close",()=>{h.done(),f.close()}),A}let a=r[Object.keys(r)[0]].primaryStore,c=Ure(a.path);return a.transaction(()=>{let u=Buffer.alloc($I);vre(c,u,0,$I),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=$F(null,{fd:c,start:$I}),m=new Dre.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(qre,"getBackup")});var jF=M((ALe,zF)=>{"use strict";var $re=Q(),{handleHDBError:Vre}=_e(),Kre=I0(),Yre=cg(),Wre=mI(),zre=cB(),jre=Qm(),Qre=TI(),Jre=vB(),Xre=$B(),Zre=ep(),ene=JB(),tne=cF(),rne=mF(),nne=hF(),sne=SF(),ine=wF(),one=CI(),ane=PF(),cne=xF(),lne=FF(),WF=qF(),une=YF(),VI=class extends Kre{static{o(this,"LMDBBridge")}async searchByConditions(t){return ene(t)}async getDataByHash(t){return await Qre(t)}async searchByHash(t){return await Jre(t)}async getDataByValue(t,r){return await Xre(t,r)}async searchByValue(t){return await Zre(t)}async createSchema(t){return await zre(t)}async dropSchema(t){return await tne(t)}async createTable(t,r){return await rne(t,r)}async dropTable(t){return await one(t)}async createAttribute(t){return await Yre(t)}async createRecords(t){return await Wre(t)}async updateRecords(t){return await nne(t)}async upsertRecords(t){try{return await sne(t)}catch(r){throw Vre(r,null,null,$re.ERR,r)}}async deleteRecords(t){return await jre(t)}async dropAttribute(t){return await ane(t)}async deleteAuditLogsBefore(t){return await ine(t)}async readAuditLog(t){return await cne(t)}writeTransaction(t,r,n){return lne.writeTransaction(t,r,n)}flush(t,r){return WF.flush(t,r)}resetReadTxn(t,r){return WF.resetReadTxn(t,r)}getBackup(t){return une(t)}};zF.exports=VI});function xn(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function ap(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a string, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a number, attempt to assign ${p}`);xn(this)[u]=m},"set");break;case"Int":d=o(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Long":d=o(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ss.ClientError(`${u} must be a number, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a boolean, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ss.ClientError(`${u} must be a Date, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof ws||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be a Blob, attempt to assign ${m}`);xn(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){xn(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ss.ClientError(`${u} must be an object, attempt to assign ${m}`);xn(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=KI(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ss.ClientError("Can not add a property to a sealed table schema");xn(this)[l]=u}),a("deleteProperty",function(l){xn(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?XF:JF);break}c=l}while(c&&c!==JF&&c!==XF)}function ZF(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(QF[t])return QF[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=KI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function dne(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function KI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends fl{static{o(this,"TrackedObject")}},ap(r,t)),new r(e)):new fl(e);case Array:let n=new Tg(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=KI(a,t?.elements)),n[s]=a}return n;default:return e}}function yg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=yg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Ga(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=Ga(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=UA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ga(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)fne.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Sg(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[dl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Sg(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Sg(s))return!0}else return!0}else return!0}}return!1}var ss,QF,JF,XF,fl,fne,dl,Tg,op,YI=ie(()=>{ss=w(_e());p_();Ns();o(xn,"getChanges");o(ap,"assignTrackedAccessors");QF=Object.prototype,JF=new Proxy({},{get:ZF}),XF=new Proxy({},{get:ZF,set:dne});o(ZF,"getProxiedProperty");o(dne,"setProxiedProperty");o(KI,"trackObject");fl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};ap(fl,{},!0);o(yg,"collapseData");fne=Object.prototype.hasOwnProperty;o(Ga,"updateAndFreeze");o(Sg,"hasChanges");dl=Symbol.for("has-array-changes"),Tg=class extends Array{static{o(this,"TrackedArray")}#e;[dl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[dl]=!0,super.splice(...t)}push(...t){return this[dl]=!0,super.push(...t)}pop(){return this[dl]=!0,super.pop()}unshift(...t){return this[dl]=!0,super.unshift(...t)}shift(){return this[dl]=!0,super.shift()}};Tg.prototype.constructor=Array;op=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var ak={};Ie(ak,{ResourceBridge:()=>jI});function QI({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 ek(e,t){let r=Vi(e),n=QI(e,r);if(!r)throw new fi.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;At(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&yg(d)}catch(f){d={message:(0,ok.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function Vi(e){let t=e.database||e.schema||pne,r=at()[t];if(!r)throw(0,fi.handleHDBError)(new Error,mne.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function tk(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*rk(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var nk,Rg,fi,sk,WI,zI,ik,ok,mne,pne,hne,Ene,jI,ck=ie(()=>{nk=w(jF()),Rg=w(ju()),fi=w(_e());Oe();sk=w(Wm());H();WI=w(ko()),zI=w(rs()),ik=w(oe());Ca();YI();ok=w(Q()),{HDB_ERROR_MSGS:mne}=fi.hdbErrors,pne="data",hne=1e4,Ene=10,jI=class extends nk.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=Vi(t);if(!r)throw new fi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let a=i;return{attribute:a.attribute??a.search_attribute,comparator:a.comparator??a.search_type,value:a.value!==void 0?a.value:a.search_value}}}o(n,"mapCondition");let s=(0,Rg.default)(t,"conditions");if(s)throw(0,fi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:QI(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new fi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await Vi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Vi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return Vi(t).dropTable()}createSchema(t){return Xu({database:t.schema,table:null}),WI.signalSchemaChange(new zI.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await JI(t.schema),WI.signalSchemaChange(new zI.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,sk.default)(t),s,i=at()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),At(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=yg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=at()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),At(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return tk(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=at()[t.schema][t.table];if(!r.createdTimeProperty)throw new fi.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:zE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,ik.asyncSetTimeout)(Ene),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%hne===0&&await u();return l.length>0&&await u(),s?tk(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Rg.default)(t,"hashes");if(r)throw r;return ek(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of ek(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&pA[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Rg.default)(t,"value");if(n)throw n;let s=Vi(t);if(!s)throw new fi.ClientError(`Table ${t.table} not found`);let i=t.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===zE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:QI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=Vi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){Vi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Vi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=Vi(t),n={};switch(t.search_type){case jE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case jE.USERNAME:{let s=t.search_values;for await(let i of rk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return rk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(QI,"getSelect");o(ek,"getRecords");o(Vi,"getTable");o(tk,"createDeleteResponse");o(rk,"groupRecordsInHistory")});var is=M((vLe,lk)=>{"use strict";var{ResourceBridge:_ne}=(ck(),D(ak)),gne=ue();gne.initSync();var Ag;function Sne(){return Ag||(Ag=new _ne,Ag)}o(Sne,"getBridge");lk.exports=Sne()});var Ki=M((xLe,fk)=>{var Tne=qi(),{promisify:yne}=require("util"),{getDatabases:dk}=(Oe(),D(mt));fk.exports={setSchemaDataToGlobal:uk,getTableSchema:Rne,getSystemSchema:Ane,setSchemaDataToGlobalAsync:yne(uk)};function uk(e){global.hdb_schema=dk(),e&&e()}o(uk,"setSchemaDataToGlobal");function Rne(e,t,r){let n=dk()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(Rne,"getTableSchema");function Ane(){return Tne}o(Ane,"getSystemSchema")});var Bn=M((FLe,Ek)=>{"use strict";var Ig=jb(),Qr=oe(),bne=require("util"),wg=is(),Ine=Ki(),mk=Q(),{handleHDBError:ml,hdbErrors:wne}=_e(),{HTTP_STATUS_CODES:pl}=wne,Nne=bne.promisify(Ine.getTableSchema),Cne="updated",pk="inserted",hk="upserted";Ek.exports={insert:Pne,update:Lne,upsert:Dne,validation:One,flush:Mne};async function One(e){if(Qr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Qr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Qr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Nne(e.schema,e.table),r=Ig(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&Qr.isEmptyOrZeroLength(c[n]))throw mk.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(!Qr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw mk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Qr.isEmpty(c[n])&&c[n]!==""&&s.has(Qr.autoCast(c[n]))&&(c.skip=!0),s.add(Qr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(One,"validation");async function Pne(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.createRecords(e);return bg(pk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Pne,"insertData");async function Lne(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.updateRecords(e);return Qr.isEmpty(n.existing_rows)?bg(Cne,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):bg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Lne,"updateData");async function Dne(e){if(e.operation!=="upsert")throw ml(new Error,"invalid operation, must be upsert",pl.INTERNAL_SERVER_ERROR);let t=Ig(e);if(t)throw ml(new Error,t.message,pl.BAD_REQUEST);Qr.transformReq(e);let r=Qr.checkSchemaTableExist(e.schema,e.table);if(r)throw ml(new Error,r,pl.BAD_REQUEST);let n=await wg.upsertRecords(e);return bg(hk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Dne,"upsertData");function bg(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===pk?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===hk?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(bg,"returnObject");function Mne(e){return Qr.transformReq(e),wg.flush(e.schema,e.table)}o(Mne,"flush")});var ZI=M((HLe,Sk)=>{var vne=ft(),XI=require("joi"),{hdbTable:Une,hdbDatabase:_k}=Hi(),gk={schema:_k,database:_k,table:Une},xne={date:XI.date().iso().required()},Bne={timestamp:XI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Sk.exports=function(e,t){let r=t==="timestamp"?{...gk,...Bne}:{...gk,...xne},n=XI.object(r);return vne.validateBySchema(e,n)}});var Rk=M((GLe,yk)=>{var Fne=ft(),ew=require("joi"),{hdbTable:kne,hdbDatabase:Tk}=Hi(),Hne=ew.object({schema:Tk,database:Tk,table:kne,hash_values:ew.array().required(),ids:ew.array()});yk.exports=function(e){return Fne.validateBySchema(e,Hne)}});var sw=M((qLe,Ak)=>{"use strict";var tw=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},rw=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=a}},nw=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Ak.exports={InsertObject:tw,NoSQLSeachObject:rw,DeleteResponseObject:nw}});var _l=M((VLe,Ck)=>{"use strict";var Ik=ZI(),Gne=Rk(),hl=oe(),bk=require("moment"),wk=Q(),{promisify:qne,callbackify:$ne}=require("util"),El=(H(),D(W)),Vne=Ki(),iw=qne(Vne.getTableSchema),ow=is(),{DeleteResponseObject:Kne}=sw(),{handleHDBError:qa,hdbErrors:Yne}=_e(),{HDB_ERROR_MSGS:Ng,HTTP_STATUS_CODES:$a}=Yne,Wne="records successfully deleted",zne=$ne(Nk);Ck.exports={delete:zne,deleteRecord:Nk,deleteFilesBefore:jne,deleteAuditLogsBefore:Qne};async function jne(e){let t=Ik(e,"date");if(t)throw qa(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),!bk(e.date,bk.ISO_8601).isValid())throw qa(new Error,Ng.INVALID_DATE,$a.BAD_REQUEST,El.LOG_LEVELS.ERROR,Ng.INVALID_DATE,!0);let n=hl.checkSchemaTableExist(e.schema,e.table);if(n)throw qa(new Error,n,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,n,!0);let s=await ow.deleteRecordsBefore(e);if(await iw(e.schema,e.table),wk.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(jne,"deleteFilesBefore");async function Qne(e){let t=Ik(e,"timestamp");if(t)throw qa(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);if(hl.transformReq(e),isNaN(e.timestamp))throw qa(new Error,Ng.INVALID_VALUE("Timestamp"),$a.BAD_REQUEST,El.LOG_LEVELS.ERROR,Ng.INVALID_VALUE("Timestamp"),!0);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw qa(new Error,r,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,r,!0);let n=await ow.deleteAuditLogsBefore(e);return await iw(e.schema,e.table),wk.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Qne,"deleteAuditLogsBefore");async function Nk(e){e.ids&&(e.hash_values=e.ids);let t=Gne(e);if(t)throw qa(t,t.message,$a.BAD_REQUEST,void 0,void 0,!0);hl.transformReq(e);let r=hl.checkSchemaTableExist(e.schema,e.table);if(r)throw qa(new Error,r,$a.NOT_FOUND,El.LOG_LEVELS.ERROR,r,!0);try{await iw(e.schema,e.table);let n=await ow.deleteRecords(e);return hl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Wne}`),n}catch(n){if(n.message===El.SEARCH_NOT_FOUND_MESSAGE){let s=new Kne;return s.message=El.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(Nk,"deleteRecord")});var dw={};Ie(dw,{HASH_FUNCTION:()=>kr,hash:()=>lw,validate:()=>uw});function aw(e=lp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(cp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function lw(e,t=kr[Pk?.toUpperCase()]??kr.SHA256){return cw[t](e)}function uw(e,t,r=kr[Pk?.toUpperCase()]??kr.SHA256){return e?Jne[r](e,t):!1}var cp,Zu,Ok,Pk,lp,Lk,kr,cw,Jne,fw=ie(()=>{cp=w(require("node:crypto")),Zu=w(require("argon2")),Ok=w(ue());H();Pk=(0,Ok.get)(B.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),lp=16,Lk=9,kr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(aw,"generateSalt");cw={[kr.MD5]:(e,t=void 0)=>{t=t??aw(Lk);let r=cp.createHash(kr.MD5).update(e+t).digest("hex");return t+r},[kr.SHA256]:(e,t=void 0)=>{t=t??aw(lp);let r=cp.createHash(kr.SHA256).update(e+t).digest("hex");return t+r},[kr.ARGON2ID]:async e=>{let t=aw(lp),r=await Zu.hash(e,{type:Zu.argon2id,salt:Buffer.from(t)});return t+r}},Jne={[kr.MD5]:(e,t)=>{let r=e.slice(0,Lk);return e===cw[kr.MD5](t,r)},[kr.SHA256]:(e,t)=>{let r=e.slice(0,lp);return e===cw[kr.SHA256](t,r)},[kr.ARGON2ID]:async(e,t)=>await Zu.verify(e.slice(lp),t)};o(lw,"hash");o(uw,"validate")});var Mk=M((zLe,Dk)=>{var mw=ft(),dn={username:{presence:!0,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 Xne(e){return dn.password.presence=!0,dn.username.presence=!0,dn.role.presence=!0,dn.active.presence=!0,mw.validateObject(e,dn)}o(Xne,"addUserValidation");function Zne(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,mw.validateObject(e,dn)}o(Zne,"alterUserValidation");function ese(e){return dn.password.presence=!1,dn.username.presence=!0,dn.role.presence=!1,dn.active.presence=!1,mw.validateObject(e,dn)}o(ese,"dropUserValidation");Dk.exports={addUserValidation:Xne,alterUserValidation:Zne,dropUserValidation:ese}});var Yk=M((JLe,Kk)=>{"use strict";var pw=require("recursive-iterator"),tse=require("alasql"),hw=require("clone"),vk=oe(),{handleHDBError:Uk,hdbErrors:rse}=_e(),{HDB_ERROR_MSGS:xk,HTTP_STATUS_CODES:Bk}=rse,{getDatabases:nse}=(Oe(),D(mt)),sse=["DISTINCT_ARRAY"],Fk=Symbol("validateTables"),Ew=Symbol("validateTable"),QLe=Symbol("getAllColumns"),kk=Symbol("validateAllColumns"),Cg=Symbol("findColumn"),Hk=Symbol("validateOrderBy"),up=Symbol("validateSegment"),_w=Symbol("validateColumn"),Gk=Symbol("setColumnsForTable"),qk=Symbol("checkColumnsForAsterisk"),$k=Symbol("validateGroupBy"),Vk=Symbol("hasColumns"),gw=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Fk](),this[qk](),this[kk]()}[Fk](){if(this[Vk]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Ew](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Ew](t.table)})}}[Vk](){let t=!1,r=new pw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[Ew](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=nse();if(!r[t.databaseid])throw Uk(new Error,xk.SCHEMA_NOT_FOUND(t.databaseid),Bk.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Uk(new Error,xk.TABLE_NOT_FOUND(t.databaseid,t.tableid),Bk.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=hw(s);i.table=hw(t),this.attributes.push(i)})}[Cg](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)}[qk](){let t=new pw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Gk](r.tableid)}[Gk](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new tse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[kk](){this[up](this.statement.columns,!1),this[up](this.statement.joins,!1),this[up](this.statement.where,!1),this[$k](this.statement.group,!1),this[up](this.statement.order,!0)}[up](t,r){if(!t)return;let n=new pw(t),s=[];for(let{node:i,path:a}of n)!vk.isEmpty(i)&&!vk.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Hk](i):s.push(this[_w](i)));return s}[$k](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&sse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=hw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Cg](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[Cg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.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`}[Hk](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[_w](t)}[_w](t){let r=this[Cg](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};Kk.exports=gw});var Qk=M((ZLe,jk)=>{"use strict";var Wk=require("lodash"),dp=require("mathjs"),ise=require("jsonata"),zk=oe();jk.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?Wk.uniqWith(e,Wk.isEqual):e,"distinct_array"),searchJSON:ose,mad:fp.bind(null,dp.mad),mean:fp.bind(null,dp.mean),mode:fp.bind(null,dp.mode),prod:fp.bind(null,dp.prod),median:fp.bind(null,dp.median)};function fp(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(fp,"aggregateFunction");function ose(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(zk.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),zk.isEmpty(this.__ala__.res[r])){let n=ise(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(ose,"searchJSON")});var Xk=M((tDe,Jk)=>{"use strict";var ur=require("moment"),Sw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;Jk.exports={current_date:o(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ur(e).utc().format(Sw),"date"),date_format:o((e,t)=>ur(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ur().utc().valueOf(),"now"),get_server_time:o(()=>ur().format(Sw),"get_server_time"),offset_utc:o((e,t)=>ur(e).utc().utcOffset(t).format(Sw),"offset_utc")}});var rH=M((nDe,tH)=>{"use strict";var ase=require("@turf/area"),cse=require("@turf/length"),lse=require("@turf/circle"),use=require("@turf/difference"),dse=require("@turf/distance"),fse=require("@turf/boolean-contains"),mse=require("@turf/boolean-equal"),pse=require("@turf/boolean-disjoint"),hse=require("@turf/helpers"),Zk=(H(),D(W)),ze=oe(),qo=Q();tH.exports={geoArea:Ese,geoLength:_se,geoCircle:gse,geoDifference:Sse,geoDistance:eH,geoNear:Tse,geoContains:yse,geoEqual:Rse,geoCrosses:Ase,geoConvert:bse};function Ese(e){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return ase.default(e)}catch(t){return qo.trace(t,e),NaN}}o(Ese,"geoArea");function _se(e,t){if(ze.isEmpty(e))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return cse.default(e,{units:t||"kilometers"})}catch(r){return qo.trace(r,e),NaN}}o(_se,"geoLength");function gse(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e));try{return lse.default(e,t,{units:r||"kilometers"})}catch(n){return qo.trace(n,e,t),NaN}}o(gse,"geoCircle");function Sse(e,t){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return use(e,t)}catch(r){return qo.trace(r,e,t),NaN}}o(Sse,"geoDifference");function eH(e,t,r){if(ze.isEmpty(e))return NaN;if(ze.isEmpty(t))return NaN;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return dse.default(e,t,{units:r||"kilometers"})}catch(n){return qo.trace(n,e,t),NaN}}o(eH,"geoDistance");function Tse(e,t,r,n){if(ze.isEmpty(e)||ze.isEmpty(t))return!1;if(ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return eH(e,t,n)<=r}catch(s){return qo.trace(s,e,t),!1}}o(Tse,"geoNear");function yse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return fse.default(e,t)}catch(r){return qo.trace(r,e,t),!1}}o(yse,"geoContains");function Rse(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return mse.default(e,t)}catch(r){return qo.trace(r,e,t),!1}}o(Rse,"geoEqual");function Ase(e,t){if(ze.isEmpty(e)||ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ze.autoCastJSON(e)),typeof t=="string"&&(t=ze.autoCastJSON(t));try{return!pse.default(e,t)}catch(r){return qo.trace(r,e,t),!1}}o(Ase,"geoCrosses");function bse(e,t,r){if(ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ze.isEmpty(t))throw new Error("geo_type is required");if(ze.isEmpty(Zk.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(Zk.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ze.autoCastJSON(e)),hse[t](e,r)}o(bse,"geoConvert")});var Og=M((iDe,nH)=>{var gl=Qk(),os=Xk(),Yi=rH();nH.exports=e=>{e.aggr.mad=e.aggr.MAD=gl.mad,e.aggr.mean=e.aggr.MEAN=gl.mean,e.aggr.mode=e.aggr.MODE=gl.mode,e.aggr.prod=e.aggr.PROD=gl.prod,e.aggr.median=e.aggr.MEDIAN=gl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=gl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=gl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=os.current_date,e.fn.current_time=e.fn.CURRENT_TIME=os.current_time,e.fn.extract=e.fn.EXTRACT=os.extract,e.fn.date=e.fn.DATE=os.date,e.fn.date_format=e.fn.DATE_FORMAT=os.date_format,e.fn.date_add=e.fn.DATE_ADD=os.date_add,e.fn.date_sub=e.fn.DATE_SUB=os.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=os.date_diff,e.fn.now=e.fn.NOW=os.now,e.fn.offset_utc=e.fn.OFFSET_UTC=os.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=os.get_server_time,e.fn.getdate=e.fn.GETDATE=os.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=os.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Yi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Yi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Yi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Yi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Yi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Yi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Yi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Yi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Yi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Yi.geoNear}});var aH=M((oDe,oH)=>{"use strict";var mp=require("lodash"),Fn=require("alasql");Fn.options.cache=!1;var Ise=Og(),sH=require("clone"),Pg=require("recursive-iterator"),Ve=Q(),st=oe(),ed=is(),wse=(H(),D(W)),{hdbErrors:Nse}=_e(),{getDatabases:iH}=(Oe(),D(mt)),Cse="IS NULL",mi="There was a problem performing this search. Please check the logs and try again.";Ise(Fn);var Tw=class{static{o(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ve.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(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ve.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ve.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ve.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ve.error(n),new Error(mi)}if(Object.keys(this.data).length===0)return Ve.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ve.error("Error thrown from processJoins in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ve.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ve.error(n),new Error(mi)}try{return t=await this._finalSQL(),t}catch(n){throw Ve.error("Error thrown from finalSQL in SQLSearch class method search."),Ve.error(n),new Error(mi)}}_getColumns(){let t=new Pg(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(sH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=mp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=iH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ve.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Pg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Fn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Fn.yy.LogicValue({value:i}):n instanceof Fn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Fn.yy.NumValue({value:i}))});if(t){Ve.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Pg(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!st.isEmpty(wse.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,value:r.right.value})}continue}if(st.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&mp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Fn.promise(r)}catch(r){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ve.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(sH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.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(Cse)>-1&&this.tables.forEach(s=>{let i={columnid:iH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=mp.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ed.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await ed.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ve.error(d),new Error(mi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await ed.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ve.error(d),new Error(mi)}else try{c.attribute=s.attribute,c.value="*";let d=await ed.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ve.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ve.error(d),new Error(mi)}}}_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 Fn.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(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Fn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Fn.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 s=t.is_func?new Fn.yy.FuncValue:new Fn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;a.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Fn.promise(h,t),t=null}catch(p){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ve.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];a.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}a.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=mp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,A=E.length;g<A;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Pg(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=mp.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ve.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ve.error(i),new Error(mi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await ed.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ve.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ve.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}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ve.trace(`Final SQL: ${s}`),n=await Fn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ve.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ve.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ve.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ve.error(Nse.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ve.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.attribute=n.attribute,i.value="*";let a=await ed.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw Ve.error("There was an error when processing this SQL operation. Check your logs"),Ve.error(a),new Error(mi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};oH.exports=Tw});var fn=M((cDe,cH)=>{"use strict";var Ose=Yk();cH.exports={searchByConditions:Lse,searchByHash:Dse,searchByValue:Mse,search:vse};var yw=is(),{transformReq:Rw}=oe(),Pse=aH();async function Lse(e){return Rw(e),yw.searchByConditions(e)}o(Lse,"searchByConditions");async function Dse(e){Rw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of yw.searchByHash(e))r&&t.push(r);return t}o(Dse,"searchByHash");async function Mse(e){Rw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of yw.searchByValue(e))t.push(r);return t}o(Mse,"searchByValue");function vse(e,t){try{let r=new Ose(e);r.validate(),new Pse(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(vse,"search")});var Wi=M((uDe,fH)=>{"use strict";var pp=require("crypto"),Use=ue(),{CONFIG_PARAMS:xse}=(H(),D(W)),uH="aes-256-cbc",Bse=32,Fse=16,Aw=64,dH=32,kse=Aw+dH,lH=new Map;fH.exports={encrypt:Hse,decrypt:Gse,createNatsTableStreamName:qse};function Hse(e){let t=pp.randomBytes(Bse),r=pp.randomBytes(Fse),n=pp.createCipheriv(uH,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(Hse,"encrypt");function Gse(e){let t=e.substr(0,Aw),r=e.substr(Aw,dH),n=e.substr(kse,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=pp.createDecipheriv(uH,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(Gse,"decrypt");function qse(e,t){let r=Use.get(xse.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=lH.get(r);return n||(n=pp.createHash("md5").update(r).digest("hex"),lH.set(r,n)),n}o(qse,"createNatsTableStreamName")});var wt=M((mDe,pH)=>{"use strict";var{platform:fDe}=require("os"),$se="nats-server.zip",bw="nats-server",Vse=process.platform==="win32"?`${bw}.exe`:bw,Kse=/^[^\s.,*>]+$/,mH="__request__",Yse=o(e=>`${e}.${mH}`,"REQUEST_SUBJECT"),Wse={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},zse={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},jse={HUB:"hub.pid",LEAF:"leaf.pid"},Qse={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jse={SUCCESS:"success",ERROR:"error"},Xse={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Zse={TXN:"txn",MSGID:"msgid"},td={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eie={[td.ERR]:1,[td.WRN]:2,[td.INF]:3,[td.DBG]:4,[td.TRC]:5},tie={debug:"-D",trace:"-DVV"};pH.exports={NATS_SERVER_ZIP:$se,NATS_SERVER_NAME:bw,NATS_BINARY_NAME:Vse,PID_FILES:jse,NATS_CONFIG_FILES:zse,SERVER_SUFFIX:Qse,NATS_TERM_CONSTRAINTS_RX:Kse,REQUEST_SUFFIX:mH,UPDATE_REMOTE_RESPONSE_STATUSES:Jse,CLUSTER_STATUS_STATUSES:Xse,REQUEST_SUBJECT:Yse,SUBJECT_PREFIXES:Zse,MSG_HEADERS:Wse,LOG_LEVELS:td,LOG_LEVEL_FLAGS:tie,LOG_LEVEL_HIERARCHY:eie}});var as=M((hDe,Hr)=>{"use strict";var _H="username is required",gH="nothing to update, must supply active, role or password to update",SH="password cannot be an empty string",TH="If role is specified, it cannot be empty.",yH="active must be true or false";Hr.exports.addUser=uie;Hr.exports.alterUser=die;Hr.exports.dropUser=mie;Hr.exports.getSuperUser=gie;Hr.exports.userInfo=pie;Hr.exports.listUsers=Dg;Hr.exports.listUsersExternal=hie;Hr.exports.setUsersWithRolesCache=Sl;Hr.exports.findAndValidateUser=Mw;Hr.exports.getClusterUser=Sie;Hr.exports.getUsersWithRolesCache=_ie;Hr.exports.USERNAME_REQUIRED=_H;Hr.exports.ALTERUSER_NOTHING_TO_UPDATE=gH;Hr.exports.EMPTY_PASSWORD=SH;Hr.exports.EMPTY_ROLE=TH;Hr.exports.ACTIVE_BOOLEAN=yH;var RH=Bn(),rie=_l(),hp=(fw(),D(dw)),AH=Mk(),Ep=fn(),Ow=ko(),zi=oe(),bH=require("validate.js"),Pw=Q(),{promisify:nie}=require("util"),Lw=Wi(),ww=(H(),D(W)),hH=wt(),sie=yt(),iie=ue(),oie=qi(),{hdbErrors:aie,ClientError:pi}=_e(),{HTTP_STATUS_CODES:$o,AUTHENTICATION_ERROR_MSGS:Iw,HDB_ERROR_MSGS:rd}=aie,{UserEventMsg:Dw}=rs(),Nw=require("lodash"),{server:Lg}=(xr(),D(rm)),cie=Q();Lg.getUser=(e,t)=>Mw(e,t,t!=null);Lg.authenticateUser=(e,t)=>Mw(e,t);var IH={username:!0,active:!0,role:!0,password:!0},EH=new Map,lie=nie(rie.delete),Cw=iie.get(ww.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??hp.HASH_FUNCTION.SHA256,ji;async function uie(e){let t=bH.cleanAttributes(e,IH),r=AH.addUserValidation(t);if(r)throw new pi(r.message);let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new pi(rd.ROLE_NAME_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new pi(rd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=Lw.encrypt(t.password)),t.password=await hp.hash(t.password,Cw),t.hash_function=Cw,t.role=n[0].id;let s=await RH.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(Pw.debug(s),await Sl(),s.skipped_hashes.length===1)throw new pi(rd.USER_ALREADY_EXISTS(t.username),$o.CONFLICT);return Ow.signalUserChange(new Dw(process.pid)),`${t.username} successfully added`}o(uie,"addUser");async function die(e){let t=bH.cleanAttributes(e,IH);if(zi.isEmptyOrZeroLength(t.username))throw new Error(_H);if(zi.isEmptyOrZeroLength(t.password)&&zi.isEmptyOrZeroLength(t.role)&&zi.isEmptyOrZeroLength(t.active))throw new Error(gH);if(!zi.isEmpty(t.password)&&zi.isEmptyOrZeroLength(t.password.trim()))throw new Error(SH);if(!zi.isEmpty(t.active)&&!zi.isBoolean(t.active))throw new Error(yH);if(!zi.isEmpty(t.password)&&!zi.isEmptyOrZeroLength(t.password.trim())&&(fie(t.username)&&(t.hash=Lw.encrypt(t.password)),t.password=await hp.hash(t.password,Cw)),t.role==="")throw new Error(TH);if(t.role){let n=await Ep.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new pi(rd.ALTER_USER_ROLE_NOT_FOUND(t.role),$o.NOT_FOUND);if(n.length>1)throw new pi(rd.DUP_ROLES_FOUND(t.role),$o.CONFLICT);t.role=n[0].id}let r=await RH.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Sl(),Ow.signalUserChange(new Dw(process.pid)),r}o(die,"alterUser");function fie(e){let t=!1,r=ji.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(fie,"isClusterUser");async function mie(e){let t=AH.dropUserValidation(e);if(t)throw new pi(t.message);if(ji.get(e.username)===void 0)throw new pi(rd.USER_NOT_EXIST(e.username),$o.NOT_FOUND);let r=await lie({table:"hdb_user",schema:"system",hash_values:[e.username]});return Pw.debug(r),await Sl(),Ow.signalUserChange(new Dw(process.pid)),`${e.username} successfully deleted`}o(mie,"dropUser");async function pie(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=Nw.cloneDeep(e.hdb_user);let r=await Ep.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(pie,"userInfo");async function hie(){let e=await Dg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(hie,"listUsersExternal");async function Dg(){let e=await Ep.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=Nw.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Ep.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=Nw.cloneDeep(s),s.role=t[s.role],Eie(s.role),n.set(s.username,s);return n}o(Dg,"listUsers");function Eie(e){if(!e){Pw.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(oie)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Eie,"appendSystemTablesToRole");async function Sl(e=void 0){e?ji=e:ji=await Dg()}o(Sl,"setUsersWithRolesCache");async function _ie(){return ji||await Sl(),ji}o(_ie,"getUsersWithRolesCache");async function Mw(e,t,r=!0){ji||await Sl();let n=ji.get(e);if(!n){if(!r)return{username:e};throw new pi(Iw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}if(n&&!n.active)throw new pi(Iw.USER_INACTIVE,$o.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(EH.get(t)===n.password)return s;{let i=hp.validate(n.password,t,n.hash_function||hp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)EH.set(t,n.password);else throw new pi(Iw.GENERIC_AUTH_FAIL,$o.UNAUTHORIZED)}}return s}o(Mw,"findAndValidateUser");async function gie(){ji||await Sl();for(let[,e]of ji)if(e.role.role==="super_user")return e}o(gie,"getSuperUser");async function Sie(){let e=await Dg(),t=sie.getConfigFromFile(ww.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==ww.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=Lw.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+hH.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+hH.SERVER_SUFFIX.ADMIN,r}o(Sie,"getClusterUser");var wH=[];Lg.invalidateUser=function(e){for(let t of wH)try{t(e)}catch(r){cie.error("Error invalidating user",r)}};Lg.onInvalidatedUser=function(e){wH.push(e)}});var qe,nd=ie(()=>{qe={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var sd,vw=ie(()=>{nd();sd=class{static{o(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==qe.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(qe.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=qe.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(qe.WARNING,t)}markLoading(t){this.updateStatus(qe.LOADING,t||"Component is loading")}isHealthy(){return this.status===qe.HEALTHY}hasError(){return this.status===qe.ERROR}isLoading(){return this.status===qe.LOADING}hasWarning(){return this.status===qe.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Tl,Va,Uw,id,xw,od,Bw,Mg=ie(()=>{Tl=w(Kr()),Va=class extends Error{static{o(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},Uw=class extends Va{static{o(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Tl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},id=class extends Va{static{o(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Tl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},xw=class extends Va{static{o(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},od=class extends Va{static{o(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Tl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},Bw=class extends Va{static{o(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Tl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
+ `)}}});var NH,yl,CH,Ka,_p,ad,Tie,vg,Fw=ie(()=>{NH=w(rs()),yl=w(nt());H();CH=w(Xn());nd();Mg();Ka=(0,CH.loggerWithTag)("componentStatus.crossThread"),_p=class{static{o(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,yl.onMessageByType)(QE.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;Ka.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(Ka.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let a=((0,yl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=o(()=>{let R=this.awaitingResponses.get(r);R&&R.length>=a&&!E&&(E=!0,S(),Ka.trace?.(`Collected all ${R.length} expected responses for request ${r}`),p(R))},"checkComplete"),A=setTimeout(()=>{if(!E){E=!0;let R=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),Ka.debug?.(`Collection timeout for request ${r}: collected ${R.length}/${a} responses`),p(R)}},this.timeout),S=o(()=>{this.awaitingResponses.delete(r),clearTimeout(A)},"cleanup");this.responseCheckers.set(r,g),(0,NH.sendItcEvent)({type:QE.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(R=>{E=!0,S(),this.responseCheckers.delete(r),h(new id("sendItcEvent",R))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,yl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return Ka.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof id?Ka.error?.(`ITC failure during component status collection: ${r.message}`):Ka.warn?.("Failed to collect component status from all threads:",r),Ka.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,yl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[a,c]of r)n.set(`${a}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},ad=class{static{o(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let a=s.indexOf("@"),c=a!==-1?s.substring(0,a):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let a=this.aggregateComponentGroup(s,i);r.set(s,a)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,a,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let A=parseInt(E.substring(7));isNaN(A)||(n.workers[A]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==qe.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!a&&(a=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:a};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[qe.ERROR,qe.WARNING,qe.LOADING,qe.UNKNOWN,qe.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return qe.UNKNOWN}},Tie=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),vg=new _p(Tie)});var Ya,Ug=ie(()=>{vw();nd();Fw();Mg();Ya=class{static{o(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new od(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(qe).includes(r))throw new od(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(qe).join(", ")}`);this.statusMap.set(t,new sd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,qe.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,qe.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,qe.WARNING,r)}initializeLoading(t,r){this.setStatus(t,qe.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,qe.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,qe.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[qe.HEALTHY]:0,[qe.ERROR]:0,[qe.WARNING]:0,[qe.LOADING]:0,[qe.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await vg.collect(t);return ad.aggregate(r)}}});var dr,xg=ie(()=>{Ug();dr=new Ya});function PH(e){let t=OH.get(e);return t||(t=new kw(e),OH.set(e,t)),t}function LH(){dr.reset()}var kw,OH,Vo,DH,MH=ie(()=>{xg();nd();kw=class{static{o(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return dr.setStatus(this.componentName,qe.HEALTHY,t),this}warning(t){return dr.setStatus(this.componentName,qe.WARNING,t),this}error(t,r){return dr.setStatus(this.componentName,qe.ERROR,t,r),this}loading(t){return dr.setStatus(this.componentName,qe.LOADING,t||"Loading..."),this}unknown(t){return dr.setStatus(this.componentName,qe.UNKNOWN,t),this}get(){return dr.getStatus(this.componentName)}},OH=new Map;o(PH,"statusForComponent");Vo={loading(e,t){dr.initializeLoading(e,t)},loaded(e,t){dr.markLoaded(e,t)},failed(e,t,r){dr.markFailed(e,t,r)}};o(LH,"reset");DH=qe});var gp={};Ie(gp,{AggregationError:()=>xw,COMPONENT_STATUS_LEVELS:()=>qe,ComponentStatus:()=>sd,ComponentStatusError:()=>Va,ComponentStatusOperationError:()=>od,ComponentStatusRegistry:()=>Ya,CrossThreadCollectionError:()=>Bw,CrossThreadStatusCollector:()=>_p,CrossThreadTimeoutError:()=>Uw,ITCError:()=>id,StatusAggregator:()=>ad,componentStatusRegistry:()=>dr,crossThreadCollector:()=>vg,query:()=>yie});var yie,vH=ie(()=>{xg();Ug();vw();Ug();Fw();xg();Mg();nd();yie={get(e){return dr.getStatus(e)},all(){return dr.getAllStatuses()},byStatus(e){return dr.getComponentsByStatus(e)},summary(){return dr.getStatusSummary()},async allThreads(){return Ya.getAggregatedFromAllThreads(dr)}}});var Hw={};Ie(Hw,{STATUS:()=>DH,internal:()=>gp,lifecycle:()=>Vo,reset:()=>LH,statusForComponent:()=>PH});var Sp=ie(()=>{MH();vH()});var yp=M((jDe,BH)=>{"use strict";var cs=Q(),mn=(H(),D(W)),Rie=S0(),Aie=as(),{validateEvent:Gw}=rs(),Tp=is(),bie=require("process"),{resetDatabases:Iie}=(Oe(),D(mt)),wie={[mn.ITC_EVENT_TYPES.SCHEMA]:Nie,[mn.ITC_EVENT_TYPES.USER]:xH,[mn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Oie};async function Nie(e){let t=Gw(e);if(t){cs.error(t);return}cs.trace("ITC schemaHandler received schema event:",e),await Rie(e.message),await Cie(e.message)}o(Nie,"schemaHandler");async function Cie(e){try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Iie();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){cs.error(t)}}o(Cie,"syncSchemaMetadata");var UH=[];async function xH(e){try{try{Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Tp.resetReadTxn(mn.SYSTEM_SCHEMA_NAME,mn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){cs.warn(r)}let t=Gw(e);if(t){cs.error(t);return}cs.trace(`ITC userHandler ${mn.HDB_ITC_CLIENT_PREFIX}${bie.pid} received user event:`,e),await Aie.setUsersWithRolesCache();for(let r of UH)r()}catch(t){cs.error(t)}}o(xH,"userHandler");xH.addListener=function(e){UH.push(e)};async function Oie(e){try{let t=Gw(e);if(t){cs.error(t);return}cs.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Sp(),D(Hw)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=rs(),i=r.componentStatusRegistry.getAllStatuses(),a=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:mn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:a,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?cs.trace(`Sent component status response directly to thread ${u}`):(u===void 0?cs.debug("No originator threadId, falling back to broadcast"):cs.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){cs.error("Error handling component status request:",t)}}o(Oie,"componentStatusRequestHandler");BH.exports=wie});var rs=M((tMe,kH)=>{"use strict";var JDe=Q(),qw=oe(),Pie=(H(),D(W)),{ITC_ERRORS:Rp}=Kr(),{parentPort:XDe,threadId:Lie,isMainThread:Die,workerData:ZDe}=require("worker_threads"),{onMessageFromWorkers:Mie,broadcast:eMe,broadcastWithAcknowledgement:vie}=nt();kH.exports={sendItcEvent:Uie,validateEvent:FH,SchemaEventMsg:xie,UserEventMsg:Bie};var Bg;Mie(async(e,t)=>{Bg=Bg||yp(),FH(e),Bg[e.type]&&await Bg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Uie(e){return!Die&&e.message&&(e.message.originator=Lie),vie(e)}o(Uie,"sendItcEvent");function FH(e){if(typeof e!="object")return Rp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||qw.isEmpty(e.type))return Rp.MISSING_TYPE;if(!e.hasOwnProperty("message")||qw.isEmpty(e.message))return Rp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||qw.isEmpty(e.message.originator))return Rp.MISSING_ORIGIN;if(Pie.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Rp.INVALID_EVENT(e.type)}o(FH,"validateEvent");function xie(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(xie,"SchemaEventMsg");function Bie(e){this.originator=e}o(Bie,"UserEventMsg")});var ko=M((sMe,$H)=>{"use strict";var HH=(H(),D(W)),nMe=oe(),Fg=Q(),GH=t0(),cd,{sendItcEvent:qH}=rs();function Fie(e){try{Fg.debug("signalSchemaChange called with message:",e),cd=cd||yp();let t=new GH(HH.ITC_EVENT_TYPES.SCHEMA,e);return cd.schema(t),qH(t)}catch(t){Fg.error(t)}}o(Fie,"signalSchemaChange");function kie(e){try{Fg.trace("signalUserChange called with message:",e),cd=cd||yp();let t=new GH(HH.ITC_EVENT_TYPES.USER,e);return cd.user(t),qH(t)}catch(t){Fg.error(t)}}o(kie,"signalUserChange");$H.exports={signalSchemaChange:Fie,signalUserChange:kie}});function Ap(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function VH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Us(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var Us,bp=ie(()=>{Us=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}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]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(Ap,"appendHeader");o(VH,"mergeHeaders")});function kg(e,t,r=Gie){let n;return function(...i){return n?n.length*$w>r?t(...i):new Promise((a,c)=>{n.push({args:i,fn(){try{let l=e(...i);a(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,a){setImmediate(()=>{let c=performance.now();$w=($w*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var WH,Hie,Gie,KH,qie,Vw,YH,$w,Kw=ie(()=>{WH=w(Xn()),Hie=3e3,Gie=2e4,KH=0,qie=3e4,Vw=3e3,YH=performance.now()+Vw,$w=0;o(kg,"throttle");setInterval(()=>{let e=performance.now();e-YH-Vw>Hie&&KH+qie<e&&(WH.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),KH=e),YH=e},Vw).unref()});var sG={};Ie(sG,{EVICTED:()=>va,INVALIDATED:()=>Dn,coerceType:()=>Gg,makeTable:()=>$g});function $g(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:A}=e;E??=0;let{attributes:S}=e;S||(S=[]);let R=Nb(i,n,l),N,O,F={},te=Promise.resolve(),G,k,J;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(J=K),K.isPrimaryKey&&(F=K);let Y,le=[],ae=[],re=1,Re=2,Te={},Fe={},Ge=864e5,Rr=0,Zt,Ht,er,Gf=!1,Dc,Gt,qf,$f=Al.get(B.REPLICATION_DATABASES);if(Array.isArray($f)){for(let K of $f)if(K.name===c&&K.replicateTo>=0){qf=K.replicateTo;break}}let kE=i.getRange({start:!1,end:!1}).constructor,HE=10,eA=6;g&&Su(),Nm(i.env.path,K=>{if(O)return Uc(K)});class Vf extends fl{static{o(this,"Updatable")}getUpdatedTime(){return Da.get(this.getRecord())?.version}getExpiresAt(){return Da.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new op(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class Le extends Fr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(I=>!I.intermediateSource)){if(this.sources.some(I=>I.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}O=O||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=o(I=>{let v=this.sources;if(v=v.filter(U=>U.intermediateSource&&U[I]&&(!U[I].reliesOnPrototype||U.prototype[I])),v.length>0)if(v.length===1){let U=v[0];return(L,x,q)=>{if(L?.source!==U)return U[I](x,q,L)}}else return(U,L,x)=>{let q=[];for(let j of v){if(U?.source===j)break;q.push(j[I](L,x,U))}return Promise.all(q)}},"getApplyToIntermediateSource"),y=this.sources[this.sources.length-1];y.intermediateSource&&(y={});let b=o(I=>{if(y[I]&&(!y[I].reliesOnPrototype||y.prototype[I]))return(v,U,L)=>{if(!v?.source)return y[I](U,L,v)}},"getApplyToCanonicalSource");Te={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let P=y.shouldRevalidateEvents;return(async()=>{let I=!1,v,U=o(async(L,x)=>{let q=L.value,j=L.table?Me[c][L.table]:Le;if(c===Xf&&(L.table===yu.ROLE_TABLE_NAME||L.table===yu.USER_TABLE_NAME)&&(I=!0),L.id===void 0&&(L.id=q[j.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=_;let X={residencyId:yo(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId,async:!0},$=L.id,be=await j.getResource($,x,X);switch(L.finished&&await L.finished,L.type){case"put":return P?be._writeInvalidate($,q,X):be._writeUpdate($,q,!0,X);case"patch":return P?be._writeInvalidate($,q,X):be._writeUpdate($,q,!1,X);case"delete":return be._writeDelete($,X);case"publish":case"message":return be._writePublish($,q,X);case"invalidate":return be._writeInvalidate($,q,X);case"relocate":return be._writeRelocate($,X);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=_.subscribe;L&&A==null&&(A=!0);let x={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Rl.getWorkerIndex)(),x):(0,Rl.getWorkerIndex)()===0,j=L&&q&&await _.subscribe?.(x);if(j){let X;for await(let $ of j)try{if(!($.type==="transaction"?$.writes[0]:$)){xe.default.error?.("Bad subscription event",$);continue}if($.source=_,$.type==="end_txn"){if(X?.resolve(),$.localTime&&v!==$.localTime){if($.remoteNodeIds?.length>0){let de=[Symbol.for("seq"),$.remoteNodeIds[0]],z=d.get(de),ne=z?.nodes;ne||(ne=[]);for(let Ee of $.remoteNodeIds.slice(1)){let fe=ne.find(De=>De.id===Ee);ne=ne.filter(De=>De.id!==Ee||De===fe),fe||(fe={id:Ee,seqId:0},ne.push(fe)),fe.seqId=Math.max(z?.seqId??1,$.localTime),Ee===X?.nodeId&&(fe.lastTxnTime=$.timestamp)}let me=Math.max(z?.seqId??1,$.localTime);xe.default.trace?.("Received txn",c,me,new Date(me),$.localTime,new Date($.localTime),$.remoteNodeIds),d.put(de,{seqId:me,nodes:ne})}v=$.localTime}$.onCommit&&X?.committed.then($.onCommit);continue}if(X)if($.beginTxn)X.resolve();else{X.write_promises.push(U($,X));continue}!$.timestamp&&$.version&&($.timestamp=$.version);let pe=At($,()=>{if($.type==="transaction"){let de=[];for(let z of $.writes)try{de.push(U(z,$))}catch(ne){throw ne.message+=" writing "+JSON.stringify(z)+" of event "+JSON.stringify($),ne}return Promise.all(de)}else if($.type==="define_schema"){let de=this.attributes.slice(0),z=!1;for(let ne of $.attributes)de.find(me=>me.name===ne.name)||(de.push(ne),z=!0);z&&(Xe({table:s,database:c,attributes:de,origin:"cluster"}),wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return $.beginTxn?(X=$,X.write_promises=[U($,$)],new Promise(de=>{X.resolve=()=>de(Promise.all(X.write_promises))})):U($,$)});X&&(X.committed=pe),I&&pe&&!pe?.waitingForUserChange&&(pe.then(()=>wp.signalUserChange(new Np.UserEventMsg(process.pid))),pe.waitingForUserChange=!0),$.onCommit&&(pe?pe.then($.onCommit):$.onCommit())}catch(be){xe.default.error?.("error in subscription handler",be)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return O}static get shouldRevalidateEvents(){return this.prototype.get!==Le.prototype.get}static getResource(_,T,C){let y=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Mr(_);try{if(y.getRecord?.())return y;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let b=!C?.async||i.cache?.get?.(_),P=br(T),I=P.getReadTxn();if(I?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Mc(_,T,{transaction:I,ensureLoaded:C?.ensureLoaded},b,v=>{if(v?Le._updateResource(y,v):y.#e=null,T.onlyIfCached){if(!y.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=Ra(_,v,T,y);if(U)return P?.disregardReadTxn(),y.#i=!0,T.loadedFromSource=!0,xs(U,L=>(Le._updateResource(y,L),y))}return y})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(_)),b}}return y}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=Ra(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,xs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=F?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Gt){let b=i.getEntry(Symbol.for("id_allocation")),P=b?.value,I;if(P&&P.nodeName===server.hostname&&(!eoe(i)||P.pid===process.pid)){let v=P.start,U=P.end;I=v;for(let L of i.getKeys({start:U,end:v,limit:1,reverse:!0}))I=L}else P=y(b?.version??null),I=P.start;Gt=new BigInt64Array([BigInt(I)+1n]),Gt=new BigInt64Array(i.getUserSharedBuffer("id",Gt.buffer)),Gt.maxSafeId=P.end}let T=Number(Atomics.add(Gt,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Gt.maxSafeId){let b=o(P=>{Gt.maxSafeId=T+(_==="Int"?1023:4194303);let I=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,v=P?void 0:i.useReadTransaction(),U=Number(Gt[0]);for(let q of i.getKeys({start:U+1,end:I,limit:1,transaction:v}))I=q;v?.done();let{value:L,version:x}=i.getEntry(Symbol.for("id_allocation"));if(Gt.maxSafeId<I){if(L.end>Gt.maxSafeId-100)return;xe.default.info?.("New id allocation",T,Gt.maxSafeId,x),i.put(Symbol.for("id_allocation"),{start:L.start,end:Gt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),x)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Gt.maxSafeId}, but id of ${I} detected`);let q=y(x);q.alreadyUpdated||Atomics.store(Gt,0,BigInt(q.start+1)),Gt.maxSafeId=q.end}},"updateEnd");T+C===Gt.maxSafeId?setImmediate(b):T+100>=Gt.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return T;function y(b){let P=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,I=P/4,v,U,L=!1,x,q;do{x=Math.floor(Math.random()*P),q={start:x,end:x+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},v=0;for(let j of i.getKeys({start:x,limit:1,reverse:!0}))v=j;U=P;for(let j of i.getKeys({start:x+1,end:P,limit:1}))U=j;I*=.875,I<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,x,v,U,I))}while(!(I<U-x&&(I<x-v||v===0)));return i.transactionSync(()=>{let j=i.getEntry(Symbol.for("id_allocation"));return(j?.version??null)==b?(xe.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...j.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,Ge=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Ge=Ge||(h+E)/4,Uc()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){Le.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(y){throw y.message+=` in residency function for table ${s}`,y}})}static setResidencyById(_){Le.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(Le.getResidencyById)return Le.getResidencyById(_[t]);let C=qf;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let y=[server.hostname];if(T.previousResidency)y.push(...T.previousResidency.slice(0,C));else{let b=server.nodes.map(v=>v.name),P=Math.floor(b.length*Math.random());y.push(...b.slice(P,P+C));let I=P+C-b.length;I>0&&y.push(...b.slice(0,I))}return y}}static enableAuditing(_=!0){g=_,_&&Su(),Le.audit=_}static coerceId(_){return _===""?null:Gg(_,F)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Ln&&_.value&&Oa(_.value);if(c===a){for(let _ of S)d.remove(Le.tableName+"/"+_.name),r[_.name]?.drop();d.remove(Le.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),Ww.default.unlinkSync(i.env.path);wp.signalSchemaChange(new Np.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(Yf(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Le.getRecordCount().then(y=>(C.recordCount=y.recordCount,C.estimatedRecordRange=y.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),y=br(C),b=y.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let P=Ar(_);Mr(P);let I=!0;return _.checkPermission&&(I=this.allowRead(C.user,_)),xs(xs(I,v=>{if(!v)throw new lt.AccessViolation(C.user);let U=!0;return Mc(P,C,{transaction:b,ensureLoaded:U},!1,L=>{if(C.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(U){let x=Ra(P,L,C);if(x)return y?.disregardReadTxn(),C.loadedFromSource=!0,x.then(q=>q?.value)}return L?.value})}),v=>{let U=_?.select;return U&&v!=null?Gu(U,this.constructor)(v):v})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Vr(_,T);if(C?.read){if(C.isSuperUser)return!0;let y=C.attribute_permissions,b=T?.select;if(y?.length>0||Gf&&b){if(T||(T={}),b){let P=y?.length>0&&Yw(y,"read");T.select=b.map(I=>{let v=I.name||I;if(!P||P[v]){let U=er[v]?.definition?.tableClass;if(U){if(I.name||(I={name:I}),!I.checkPermission&&T.checkPermission&&(I.checkPermission=T.checkPermission),!U.prototype.allowRead.call(null,_,I))return!1;if(!I.select)return I.name}return I}}).filter(Boolean)}else T.select=y.filter(P=>P.read&&!er[P.attribute_name]).map(P=>P.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let y=Vr(_,C);if(y?.update){let b=y.attribute_permissions;if(b?.length>0){let P=Yw(b,"update");for(let I in T)if(!P[I])return!1;for(let I of b){let v=I.attribute_name;!I.update&&!(v in T)&&(T[v]=this.getProperty(v))}}return vc(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let y=Vr(_,C);if(y?.insert){let b=y.attribute_permissions;if(b?.length>0){let P=Yw(b,"insert");for(let I in T)if(!P[I])return!1;return vc(this.getContext())}else return vc(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Vr(_,T)?.delete&&vc(this.getContext())}update(_,T){let C,y=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),b=!1;y?(b=T,T=_,C=this.getId()):C=Ar(_);let P=this.getContext();if(!br(P))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(b)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(y){let v=this.#t;v&&(T=Object.assign(v,T)),this.#t=T}else{let v=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(v=this.allowUpdate(P.user,T,_)),xs(v,U=>{if(!U)throw new lt.AccessViolation(P.user);return xs(i.get(Ar(_)),L=>{let x=new Vf(L);return x._setChanges(T),this._writeUpdate(C,x.getChanges(),!1),x})})}return this._writeUpdate(C,this.#t,b),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===jH?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new op(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);this._writeInvalidate(_?Ar(_):this.getId())})}_writeInvalidate(_,T,C){let y=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.invalidate?.bind(this,y,_),beforeIntermediate:Fe.invalidate?.bind(this,y,_),commit:o((P,I)=>{if(!(Aa(P,I,C?.nodeId)<=0)){T??=null;for(let v in r)T||(T={}),T[v]===void 0&&(T[v]=this.getProperty(v));xe.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,T,I,P,Dn,g,{user:y?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Mr(_),br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:Te.relocate?.bind(this,C,_),beforeIntermediate:Fe.relocate?.bind(this,C,_),commit:o((b,P)=>{if(Aa(b,P,T?.nodeId)<=0)return;let I=Le.getResidencyRecord(T.residencyId),v=0,U=null,L=P?.value;if(I&&!I.includes(server.hostname)){for(let x in r)U||(U={}),U[x]=L[x];v=Dn}else U=L;xe.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(b).toISOString()}`),R(_,U,P,b,v,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},y=xc(this.getResidency(T.value,C)),b;if(y){if(!y.includes(server.hostname))return!1;b=yo(y)}let P=0;xe.default.debug?.("Performing a relocate of an entry",existing_entry.key,T.value,y);let I=R(_.key,T.value,_,_.version,P,!0,{residencyId:b,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let y=this.Source,b;if(!((O||g)&&(!T||(b=i.getEntry(_),!b||!T)||b.version!==C))){if(O){if(i.hasLock(_,b.version))return;let P;for(let I in r)P||(P={}),P[I]=T[I];if(P)return R(_,P,b,C,va,null,null,null,!0)}if(i.ifVersion(_,C,()=>{To(_,T,null)}),g)return R(_,null,b,C,va,null,null,null,!0);rl(i,b??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let y=this.getContext();return _.checkPermission&&(C=this.allowUpdate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);if(Array.isArray(T))for(let P of T){let I=P[t];this._writeUpdate(I,P,!0)}else{let P=Ar(_);this._writeUpdate(P,T,!0)}})}}create(_,T){let C=!0,y=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(y.user,T,_)),xs(C,b=>{if(!b)throw new lt.AccessViolation(y.user);let P=Ar(_)??T[t];if(P===void 0)P=this.constructor.getNewId();else if(i.get(P))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(P,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,y){let b=this.getContext(),P=br(b);Mr(_);let I=this.#n??i.getEntry(_);this.#s=C?jH:Qie;let v={key:_,store:i,entry:I,nodeName:b?.nodeName,validate:o(U=>{T||(T=this.#t),C||T&&Sg(this.#t===T?this:T)?b?.source||(P.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(U):k.type==="String"?new Date(U).toISOString():U),C&&(t&&T[t]!==_&&(T[t]=_),G&&(I?.value?T[G.name]=I?.value[G.name]:T[G.name]=G.type==="Date"?new Date(U):G.type==="String"?new Date(U).toISOString():U),T=Ga(T))):P.removeWrite(v)},"validate"),before:C?Te.put?()=>Te.put(b,_,T):null:Te.patch?()=>Te.patch(b,_,T):Te.put?()=>Te.put(b,_,Ga(this)):null,beforeIntermediate:C?Fe.put?()=>Fe.put(b,_,T):null:Fe.patch?()=>Fe.patch(b,_,T):Fe.put?()=>Fe.put(b,_,Ga(this)):null,commit:o((U,L,x)=>{if(x){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=U;let q=L?.value,j;this.#s=0;let X=!1,$=Aa(U,L,y?.nodeId),be;if($<=0){if(g){let me=L.localTime,Ee=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(U),"applying later update from:",new Date(Ee),"local recorded time",new Date(me));let fe=[];for(;me>U||Ee>=U&&me>0;){let De=l.get(me);if(!De)break;let ve=xt(De);if(Ee=ve.version,Ee>=U){if(Ee===U){if($=Aa(U,{version:Ee,localTime:me},y?.nodeId),$===0)return;if($>0)continue}if(ve.type==="patch")fe.push(ve),be=T;else if(ve.type==="put"||ve.type==="delete")return}me=ve.previousLocalTime}me||xe.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),fe.sort((De,ve)=>De.version-ve.version);for(let De of fe){let ve=De.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(De.version),ve,De),j=m_(j??T,ve,C),!j)return}}else{if(C)return;j=m_(j??T,q,C),xe.default.debug?.("Rebuilding update without audit:",j)}xe.default.trace?.("Rebuilt record to save:",j," is full update:",C)}let pe;if(C&&!j?pe=T:this.constructor.loadAsInstance===!1?pe=Ga(q,j??T):(this.#e=q,pe=Ga(this,j??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let de;if(y?.residencyId!=null)de=y.residencyId;else{I?.residencyId&&(b.previousResidency=Le.getResidencyRecord(I.residencyId));let me=xc(Le.getResidency(pe,b));if(me&&!me.includes(server.hostname))if(be??=pe,X=!0,Le.getResidencyById)pe=void 0;else{pe=null;for(let Ee in r)pe||(pe={}),pe[Ee]=be[Ee]}de=yo(me)}C||(be=T);let z=b?.expiresAt??(h?h+Date.now():-1);xe.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(U).toISOString()}${z?", expires at: "+new Date(z).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),To(_,q,pe);let ne=C?"put":"patch";R(_,pe,L,U,X?Dn:0,g,{omitLocalRecord:X,user:b?.user,residencyId:de,expiresAt:z,nodeId:y?.nodeId,originatingOperation:b?.originatingOperation,tableToTrack:c==="system"?null:s},ne,!1,be),b.expiresAt&&Uc()},"commit")};P.addWrite(v)}async delete(_){if(Yf(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),xs(T,y=>{if(!y)throw new lt.AccessViolation(C.user);let b=Ar(_);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=br(this.getContext());Mr(_);let y=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:y?.nodeName,before:Te.delete?.bind(this,y,_),beforeIntermediate:Fe.delete?.bind(this,y,_),commit:o((b,P,I)=>{let v=P?.value;I&&(y&&P?.version>(y.lastModified||0)&&(y.lastModified=P.version),Le._updateResource(this,P)),!(Aa(b,P,T?.nodeId)<=0)&&(To(this.getId(),v),xe.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(b).toISOString()}`),g||A?(R(_,null,P,b,0,g,{user:y?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||Uc()):rl(i,P))},"commit")}),!0}search(_){let T=this.getContext(),C=br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new lt.AccessViolation(T.user);T&&(T.lastModified=Yie);let y=_.conditions;y?y.length===void 0&&(y=y[Symbol.iterator]?Array.from(y):[y]):y=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let b=_.id??this.getId();b&&(y=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(y));let P,I={};function v(ne,me){let Ee;switch(me){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ee=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+me)}for(let fe of ne){if(fe.conditions){fe.conditions=v(fe.conditions,fe.operator);continue}let De=fe[0]??fe.attribute,ve=De==null?F:Fi(S,De);if(ve)(ve.type||Ob[fe.comparator])&&(fe[1]===void 0?fe.value=L(fe.value,ve):fe[1]=L(fe[1],ve));else if(De!=null)throw(0,lt.handleHDBError)(new Error,`${De} is not a defined attribute`,404);if(fe.chainedConditions)if(fe.chainedConditions.length===1&&(!fe.operator||fe.operator=="and")){let $e=fe.chainedConditions[0],vr,Wn;if($e.comparator==="gt"||$e.comparator==="greater_than"||$e.comparator==="ge"||$e.comparator==="greater_than_equal"?(vr=fe,Wn=$e):(vr=$e,Wn=fe),vr.comparator!=="lt"&&vr.comparator!=="less_than"&&vr.comparator!=="le"&&vr.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Mi=Wn.comparator==="ge"||Wn.comparator==="greater_than_equal",Ne=vr.comparator==="le"||vr.comparator==="less_than_equal";fe.comparator=(Mi?"ge":"gt")+(Ne?"le":"lt"),fe.value=[Wn.value,vr.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(v,"prepareConditions");function U(ne,me){if(_.enforceExecutionOrder)return ne;for(let Ee of ne)Ee.conditions&&(Ee.conditions=U(Ee.conditions,Ee.operator));return ne.length>1&&me!=="or"?$ie(ne,z_(Le)):ne}o(U,"orderConditions");function L(ne,me){return Array.isArray(ne)?ne.map(Ee=>Gg(Ee,me)):Gg(ne,me)}o(L,"coerceTypedValues");let x=_.operator;(y.length>0||x)&&(y=v(y,x));let q=typeof _.sort=="object"&&_.sort,j;if(q&&x!=="or"){let ne=q.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(P=y.find(me=>Fu(me.attribute)===Fu(ne)),!P){let me=Fi(S,ne);if(!me)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(me.indexed)P={...q,comparator:"sort"},y.push(P);else if(y.length===0&&!_.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}P&&(P.descending=!!q.descending)}y=U(y,x),q&&(P&&y[0]===P?q.next&&(j={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(P&&y.splice(y.indexOf(P),1),j=q));let X=_.select;if(y.length===0&&(y=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:y,operator:x,postOrdering:j,selectApplied:!!X};let $=C.useReadTxn(),be=Pb(y,x,Le,$,_,T,(ne,me)=>Wf(ne,X,T,$,me),I),pe=_.ensureLoaded!==!1,de=Le.transformEntryForSelect(X,T,$,I,pe,!0),z=Le.transformToOrderedSelect(be,X,j,T,$,de);return(_.offset||_.limit!==void 0)&&(z=z.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),z.onDone=()=>{z.onDone=null,C.doneReadTxn()},z.selectApplied=!0,z.getColumns=()=>{if(X){let ne=[];for(let me of X)me==="*"?ne.push(...S.map(Ee=>Ee.name)):ne.push(me.name||me);return ne}return S.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},z}static transformToOrderedSelect(_,T,C,y,b,P){let I=new kE;if(C){_=Wf(_,T,y,b,null);let v;I.iterate=function(){let L,x=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),q,j=C.dbOrderedAttribute,X,$,be=!0;function pe(z){let ne=z.next&&pe(z.next),me=z.descending;return y.sort=z,(Ee,fe)=>{let De=_u(Ee,z.attribute,y),ve=_u(fe,z.attribute,y),$e=me?(0,bl.compareKeys)(ve,De):(0,bl.compareKeys)(De,ve);return $e===0?ne?.(Ee,fe)||0:$e}}o(pe,"createComparator");let de=pe(C);return{async next(){let z;if(L)if(z=L.next(),z.done){if(q)return I.onDone&&I.onDone(),z}else return{value:await P.call(this,z.value)};v=[],X&&v.push(X);do if(z=await x.next(),z.done){if(q=!0,v.length)break;return I.onDone&&I.onDone(),z}else{let ne=z.value;if(ne?.then&&(ne=await ne),j){let me=_u(ne,j,y);if(be)be=!1,$=me;else if(me!==$){$=me,X=ne;break}}v.push(ne)}while(!0);return C.isGrouped,v.sort(de),L=v[Symbol.iterator](),z=L.next(),z.done?(I.onDone&&I.onDone(),z):{value:await P.call(this,z.value)}},return(){return I.onDone&&I.onDone(),x.return()},throw(){return I.onDone&&I.onDone(),x.throw()}}};let U=o(L=>{if(typeof T=="object"&&Array.isArray(L.attribute))for(let x=0;x<T.length;x++){let q=T[x],j;if(q.name===L.attribute[0]){for(j=q.sort||(q.sort={});j.next;)j=j.next;j.attribute=L.attribute.slice(1),j.descending=L.descending}else q===L.attribute[0]&&(T[x]=j={name:q,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&U(L.next)},"applySortingOnSelect");U(C)}else I.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),I=I.map(function(v){try{let U=P.call(this,v);return typeof U?.catch=="function"?U.catch(L=>{throw L.partialObject={[t]:v.key},L}):U}catch(U){throw U.partialObject={[t]:v.key},U}});return I}static transformEntryForSelect(_,T,C,y,b,P){let I;b&&O&&!(typeof _=="string"?[_]:_)?.every(L=>{let x;return typeof L=="object"?x=L.name:x=L,r[x]||x===t})&&(I=!0);let v,U=o(function(L){let x;if(T?.transaction?.stale&&(T.transaction.stale=!1),L!=null){if(x=L.deref?L.deref():L.value,!x&&(L.key===void 0||L.deref)||L.metadataFlags&Dn){if(L.metadataFlags&Dn&&T.replicateFrom===!1&&P&&L.residencyId)return za.SKIP;if(L=Mc(L.key??L,T,{transaction:C,lazy:_?.length<4,ensureLoaded:b},this?.isSync,q=>q),L?.then)return L.then(U.bind(this));x=L?.value}if(I&&L?.metadataFlags&(Dn|va)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let q=Ra(L.key??L,L,T);if(q?.then)return q.then(U)}}if(x==null)return P?za.SKIP:x;if(_&&!(_[0]==="*"&&_.length===1)){let q,j=o(($,be)=>{let pe;typeof $=="object"?pe=$.name:pe=$;let de=er?.[pe],z;if(de){let ne=y?.[pe];if(ne)if(ne.hasMappings){let Ee=de.from?x[de.from]:Fu(L.key);z=ne.get(Ee),z||(z=[])}else z=ne.fromRecord?.(x);else z=de(x,T,L,!0);let me=o(Ee=>{if(de.directReturn)return be(Ee,pe);if(Ee&&typeof Ee=="object"){let fe=de.definition?.tableClass||Le;v||(v={});let De=v[pe]||(v[pe]=fe.transformEntryForSelect(pe===$?null:$.select||(Array.isArray($)?$:null),T,C,ne,b));if(Array.isArray(Ee)){let ve=[],$e=fe.transformToOrderedSelect(Ee,$.select,typeof $.sort=="object"&&$.sort,T,C,De)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),vr=o(Mi=>{for(;!Mi.done;){if(Mi?.then)return Mi.then(vr);ve.push(Mi.value),Mi=$e.next()}be(ve,pe)},"nextValue"),Wn=vr($e.next());Wn&&(q||(q=[]),q.push(Wn));return}else if(Ee=De.call(this,Ee),Ee?.then){q||(q=[]),q.push(Ee.then(ve=>be(ve,pe)));return}}be(Ee,pe)},"handleResolvedValue");z?.then?(q||(q=[]),q.push(z.then(me))):me(z);return}else z=x[pe],z&&typeof z=="object"&&pe!==$&&(z=Le.transformEntryForSelect($.select||$,T,C,null)({value:z}));be(z,pe)},"selectAttribute"),X;if(typeof _=="string")j(_,$=>{X=$});else if(Array.isArray(_))if(_.asArray)X=[],_.forEach(($,be)=>{$==="*"?_[be]=x:j($,pe=>X[be]=pe)});else{X={};let $=_.forceNulls;for(let be of _)if(be==="*")for(let pe in x)X[pe]=x[pe];else j(be,(pe,de)=>{pe===void 0&&$&&(pe=null),X[de]=pe})}else throw new lt.ClientError("Invalid select"+_);return q?Promise.all(q).then(()=>X):X}return x},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],y=Bb(Le,this.getId()??null,function(I,v,U,L){try{let x=v.getValue?.(i,T),q=v.type;if(!x&&q==="patch"&&T){let X=i.getEntry(I);X?.version===v.version?x=X.value:x=v.getValue?.(i,!0,U),q="put"}let j={id:I,localTime:U,value:x,version:v.version,type:q,beginTxn:L};C?C.push(j):(Je(v.size??1,"db-message",s,null),this.send(j))}catch(x){xe.default.error?.(x)}},_.startTime||0,_),b=(async()=>{this.isCollection&&(y.includeDescendants=!0,_.onlyChildren&&(y.onlyChildren=!0)),_.supportsTransactions&&(y.supportsTransactions=!0);let I=this.getId(),v=_.previousCount;v>1e3&&(v=1e3);let U=_.startTime;if(this.isCollection){if(U){if(v)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:x}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let q=xt(x);if(q.tableId!==n)continue;let j=q.recordId;if(I==null||ZH(I,j)){let X=q.getValue(i,T,L);if(P({id:j,localTime:L,value:X,version:q.version,type:q.type,size:q.size}),y.queue?.length>JH&&await y.waitForDrain()===!1)return}y.startTime=L}}else if(v){let L=[];for(let{key:x,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let j=xt(q);if(j.tableId!==n)continue;let X=j.recordId;if(I==null||ZH(I,X)){let $=j.getValue(i,T,x);if(L.push({id:X,localTime:x,value:$,version:j.version,type:j.type}),--v<=0)break}}catch(j){xe.default.error("Error getting history entry",x,j)}for(let x=L.length;x>0;)P(L[--x]);L[0]&&(y.startTime=L[0].localTime)}else if(!_.omitCurrent){for(let{key:L,value:x,version:q,localTime:j,size:X}of i.getRange({start:I??!1,end:I==null?void 0:[I,bl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(x&&(P({id:L,localTime:j,value:x,version:q,type:"put",size:X}),y.queue?.length>JH&&await y.waitForDrain()===!1))return}}else{v&&!U&&(U=0);let L=this.#n?.localTime;if(L===wb&&(i.cache?.delete(I),this.#n=i.getEntry(I),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",U,"from",I,L),U<L){let x=[],q=L;do{let j=l.get(q);if(j){_.omitCurrent=!0;let X=xt(j),$=X.getValue(i,T,q);T&&(X.type="put"),x.push({id:I,value:$,localTime:q,...X}),q=X.previousLocalTime}else break;v&&v--}while(q>U&&v!==0);for(let j=x.length;j>0;)P(x[--j]);y.startTime=L}!_.omitCurrent&&this.doesExist()&&P({id:I,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of C)P(L);C=null})();function P(I){Je(I.size??1,"db-message",s,null),y.send(I)}return o(P,"send"),_.listener&&y.on("data",_.listener),y}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let y=!0,b=this.getContext();return _.checkPermission&&(y=this.allowCreate(b.user,_,b)),xs(y,P=>{if(!P)throw new lt.AccessViolation(b.user);let I=Ar(_);this._writePublish(I,T,C)})}}_writePublish(_,T,C){let y=br(this.getContext());_??=null,_!==null&&Mr(_);let b=this.getContext();y.addWrite({key:_,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(y.checkOverloaded(),this.validate(T))},"validate"),before:Te.publish?.bind(this,b,_,T),beforeIntermediate:Fe.publish?.bind(this,b,_,T),commit:o((P,I,v)=>{I===void 0&&A&&!g&&Uc(),xe.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(P).toISOString()}`),R(_,I?.value??null,I,I?.version||P,0,!0,{user:b?.user,residencyId:C?.residencyId,expiresAt:b?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,y=o((b,P,I)=>{if(P.type&&b!=null)if(T&&b.__op__&&(b=b.value),P.properties){typeof b!="object"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an object${P.type?" ("+P.type+")":""}`);let v=P.properties;for(let U=0,L=v.length;U<L;U++){let x=v[U];if(x.relationship||x.computed){_.hasOwnProperty(x.name)&&(C||(C=[])).push(`Computed property ${I}.${x.name} may not be directly assigned a value`);continue}let q=y(b[x.name],x,I+"."+x.name);q&&(b[x.name]=q)}if(P.sealed&&b!=null&&typeof b=="object")for(let U in b)v.find(L=>L.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${I}`)}else switch(P.type){case"Int":(typeof b!="number"||b>>0!==b)&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof ws)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(P.elements)for(let v=0,U=b.length;v<U;v++){let L=b[v],x=y(L,P.elements,I+"[*]");x&&(b[v]=x)}}else(C||(C=[])).push(`Value ${Bs(b)} in property ${I} must be an Array`);break}P.nullable===!1&&b==null&&(C||(C=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,P=S.length;b<P;b++){let I=S[b];if(I.relationship||I.computed){Object.hasOwn(_,I.name)&&(C||(C=[])).push(`Computed property ${I.name} may not be directly assigned a value`);continue}if(!T||I.name in _){let v=y(_[I.name],I,I.name);v!==void 0&&(_[I.name]=v)}}if(f)for(let b in _)S.find(P=>P.name===b)||(C||(C=[])).push(`Property ${b} is not allowed`);if(C)throw new lt.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return O?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new lt.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");Vie(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),Le.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=Ww.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,y=performance.now(),b=Math.floor(T/2),P=_?.exactCount,I=0,v=0,U;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&I++,v++,await Wa(),!P&&v<b&&performance.now()-y>C){U=v;break}if(U){let L=I;I=0;for(let{value:z}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))z!=null&&I++,await Wa();let x=U*2,q=(I+L)/x,j=Math.pow((I-L+1)/U/2,2)+q*(1-q)/x,X=Math.max(Math.sqrt(j)*T,1),$=Math.round(q*T),be=Math.max($-1.96*X,I+L),pe=Math.min($+1.96*X,T),de=Math.pow(10,Math.round(Math.log10(X)));return de>$&&(de=de/10),I=Math.round($/de)*de,{recordCount:I,estimatedRange:[Math.round(be),Math.round(pe)]}}return{recordCount:I}}static updatedAttributes(){er=this.propertyResolvers={$id:o((_,T,C)=>({value:C.key}),"$id"),$updatedtime:o((_,T,C)=>C.version,"$updatedtime"),$updatedTime:o((_,T,C)=>C.version,"$updatedTime"),$expiresAt:o((_,T,C)=>C.expiresAt,"$expiresAt"),$record:o((_,T,C)=>C?{value:_}:_,"$record"),$distance:o((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&(F=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Gf=!0,T.to)_.elements?.definition?(er[_.name]=_.resolve=(y,b,P,I)=>{let v=y[T.from?T.from:t],U=_.elements.definition.tableClass;return I?Bu({attribute:T.to,value:v},br(b).getReadTxn(),!1,U,!1).map(L=>L&&L.key!==void 0?L:U.primaryStore.getEntry(L,{transaction:br(b).getReadTxn()})).asArray:U.search([{attribute:T.to,value:v}],b).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let y=_.definition||_.elements?.definition;y?(er[_.name]=_.resolve=(b,P,I,v)=>{let U=b[T.from];if(U===void 0)return;if(_.elements){let x,q=U?.map(j=>{let X=y.tableClass.primaryStore[v?"getEntry":"get"](j,{transaction:br(P).getReadTxn()});return X?.then&&(x=!0),Le.loadAsInstance===!1&&Object.freeze(v?X?.value:X),X});return T.filterMissing?x?Promise.all(q).then(j=>j.filter(eG)):q.filter(eG):x?Promise.all(q):q}let L=y.tableClass.primaryStore[v?"getEntry":"get"](U,{transaction:br(P).getReadTxn()});return Le.loadAsInstance===!1&&Object.freeze(v?L?.value:L),L},_.set=(b,P)=>{if(Array.isArray(P)){let I=P.map(v=>v.getId?.()||v[y.tableClass.primaryKey]);b[T.from]=I}else{let I=P.getId?.()||P[y.tableClass.primaryKey];b[T.from]=I}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),er[_.name]=_.resolve=(y,b,P)=>{let I=typeof C.from=="string"?y[C.from]:y,v=this.userResolvers[_.name];if(v)return v(I,b,P);xe.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let y=r[_.name].customIndex;er[_.name]=(b,P,I)=>{let v=b[_.name];return y.propertyResolver(v,P,I)},er[_.name].directReturn=!0}}ap(this,this),ap(Vf,this,!0);for(let _ of S){let T=_.name;_.resolve&&Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Hu.getStore())},set(C){return _.set(this,C)},configurable:!0})}}static setComputedAttribute(_,T){let C=Fi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:y,value:b}of l.getRange({start:0,end:_}))await Wa(),xt(b).tableId===n&&(C=U_(l,y,b));if(T)for(let y of i.getRange({start:0,versions:!0})){let{key:b,value:P,localTime:I}=y;await Wa(),P===null&&I<_&&(C=rl(i,y))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:y}of l.getRange({start:_||1,end:T})){await Wa();let b=xt(y);b.tableId===n&&(yield{id:b.recordId,localTime:C,version:b.version,type:b.type,value:b.getValue(i,!0,C),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let y=C.localTime;if(!y)throw new Error("The entry does not have a local audit time");let b=0;do{await Wa();let P=l.get(y);if(P){let I=xt(P);T.push({id:I.recordId,localTime:y,version:I.version,type:I.type,value:I.getValue(i,!0,y),user:I.user}),y=I.previousLocalTime}else break}while(b<1e3&&y);return T.reverse()}static cleanup(){Y?.remove()}}let GE=kg(async(K,_,T)=>{for(let C of Le.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let y=await C.get(K,_);if(y)return y}},()=>{throw new lt.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});Le.updatedAttributes();let Kf=Le.prototype;return h&&Le.setTTLExpiration(h/1e3),J&&qE(),Le;function To(K,_,T){let C;for(let y in r){let b=r[y],P=b.isIndexing,I=er[y],v=T&&(I?I(T):T[y]),U=_&&(I?I(_):_[y]);if(v===U&&!P)continue;if(b.customIndex){b.customIndex.index(K,v,U);continue}C=!0;let L=b.indexNulls,x=(0,Ip.getIndexedValues)(v,L),q=(0,Ip.getIndexedValues)(U,L);if(s==="OrganizationRole"&&xe.default.error?.({tableName:s,id:K,key:y,valuesToAdd:x,valuesToRemove:q}),q?.length>0){let j=new Set(q);if(x=x?x.filter(X=>{if(j.has(X))j.delete(X);else return!0}):[],q=Array.from(j),(q.length>0||x.length>0)&&zH){let X=q.concat(x).map($=>({key:$,value:K}));b.prefetch(X,XH)}for(let X=0,$=q.length;X<$;X++)b.remove(q[X],K)}else x?.length>0&&zH&&b.prefetch(x.map(j=>({key:j,value:K})),XH);if(x)for(let j=0,X=x.length;j<X;j++)b.put(x[j],K)}return C}o(To,"updateIndices");function Mr(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>QH)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,bl.writeKey)(K,Jie,0)>QH)throw new Error("Primary key size is too large: "+K.length);return!0}o(Mr,"checkValidId");function Ar(K){return typeof K=="object"&&K?K.id:K}o(Ar,"requestTargetToId");function Yf(K){return typeof K=="object"&&K&&K.isCollection}o(Yf,"isSearchTarget");function tA(K){}o(tA,"isRequestTarget");function Mc(K,_,T,C,y){if(Le.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let P=xc(Le.getResidencyById(K));if(P&&!P.includes(server.hostname)&&N)return N({key:K,residency:P}).then(y)}let b=o(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return y(null,K);let P=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(nG.default.trace?.("Recording db-read action for",`${c}.${s}`),Je(P?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(P?.value),P?.residencyId&&P.metadataFlags&Dn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(P).then(I=>y(I,K),I=>(xe.default.error?.("Error loading remote record",K,P,T,I),y(null,K))):(P&&_&&(P?.version>(_.lastModified||0)&&(_.lastModified=P.version),P?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=P.localTime)),y(P,K))},"whenPrefetched");return C?b():re>0?(re--,b()):new Promise((P,I)=>{re===0?(re--,i.prefetch([K],()=>{v(),U()})):(le.push(K),ae.push(U),le.length>eA&&(re--,v()));function v(){if(le.length>0){let L=ae;i.prefetch(le,()=>{re===-1?v():re++;for(let x of L)x()}),le=[],ae=[],Re>2&&Re--}else re=Re,Re<HE&&Re++}o(v,"prefetch");function U(){try{P(b())}catch(L){I(L)}}o(U,"load")})}o(Mc,"loadLocalRecord");function Vr(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Xie;let C=T[c],y,b=C?.tables;if(b)return b[s];if(c==="data"&&(y=T[s])&&!y.tables)return y}o(Vr,"getTablePermissions");function Ra(K,_,T,C){if(O){let y=!1;if(T.noCache?y=!0:(_?(!_.value||_.metadataFlags&(Dn|va)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(y=!0):y=!0,zr(!y,"cache-hit",s)),y){let b=gu(K,_,T).then(P=>(P?.value&&P?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),T&&(P?.version>(T.lastModified||0)&&(T.lastModified=P.version),T.lastRefreshed=Date.now()),P));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(b.catch(P=>xe.default.warn?.(P)),T?.onlyIfCached&&!C.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return Le.evict(_.key,_.value,_.version),_.value=null,{then(y){return y(_)}}}o(Ra,"ensureLoadedFromSource");function br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new bo,_.lmdbDb=i,_;_=T}while(!0)}else return new d_}o(br,"txnForContext");function _u(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let b=er,P=C;for(let I=0,v=_.length;I<v;I++){let U=_[I],L=b?.[U];P=L&&P?L(P,T,K):P?.[U],K=null,b=L?.definition?.tableClass?.propertyResolvers}return P}let y=er[_];return y?y(C,T,K):C[_]}o(_u,"getAttributeValue");function Wf(K,_,T,C,y){let b=y?.length,P={transaction:C,lazy:b>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},I;function v(U,L){let x=U?.value;if(!x)return za.SKIP;for(let q=0;q<b;q++)if(!I?.includes(q)&&!y[q](x,U))return za.SKIP;return L!==void 0&&(U.key=L),U}if(o(v,"processEntry"),b>0||!K.hasEntries){let U=K.map(L=>{if(I=null,typeof L=="object"&&L?.key!==void 0)return b>0?v(L):L;if(L==null)return za.SKIP;for(let x=0;x<b;x++){let j=y[x].idFilter;if(j){if(!j(L))return za.SKIP;I||(I=[]),I.push(x)}}return Mc(L,T,P,!1,v)});return Array.isArray(K)&&(U=U.filter(L=>L!==za.SKIP)),U.hasEntries=!0,U}return K}o(Wf,"transformToEntries");function Aa(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),y=_.localTime,b=y&&l.get(y);if(b){let P,I,v=xt(b);for(let U in C)C[U]===T&&(P=U),C[U]===v.nodeId&&(I=U);if(P>I)return 1;if(P===I)return 0}}return-1}return 1}o(Aa,"precedesExistingVersion");async function gu(K,_,T){let C=_?.metadataFlags,y=_?.version,b,P;if(!i.attemptLock(K,y,()=>{clearTimeout(P);let L=i.getEntry(K);!L||!L.value||L.metadataFlags&(Dn|va)?b(gu(K,i.getEntry(K),T)):b(L)}))return new Promise(L=>{b=L,P=setTimeout(()=>{i.unlock(K,y)},jie)});let I=_?.value,v={requestContext:T,replacingRecord:I,replacingEntry:_,replacingVersion:y,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((L,x)=>{let q;xs(At(v,async j=>{let X=performance.now(),$,be,pe;try{$=await GE(K,v,_),pe=C&Dn;let z=v.lastModified||pe&&y;be=pe||z>y||!I,z||(z=(0,Ip.getNextMonotonicTime)());let ne=performance.now()-X;if(Je(ne,"cache-resolution",s,null,"success"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),j.timestamp=z,h&&v.expiresAt==null&&(v.expiresAt=Date.now()+h),$){if(typeof $!="object")throw new Error("Only objects can be cached and stored in tables");if($.status>0&&$.headers)if($.status>=300)if($.status===304)$=I,z=y;else throw new lt.ServerError($.body||"Error from source",$.status);else $=$.body;typeof $.toJSON=="function"&&($=$.toJSON()),t&&$[t]!==K&&($[t]=K)}q=!0,L({key:K,version:z,value:$})}catch(z){z.message+=` while resolving record ${K} for ${s}`,I&&((z.code==="ECONNRESET"||z.code==="ECONNREFUSED"||z.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(z.statusCode===500||z.statusCode===502||z.statusCode===503||z.statusCode===504))?(L({key:K,version:y,value:I}),xe.default.trace?.(z.message,"(returned stale record)")):x(z);let ne=performance.now()-X;Je(ne,"cache-resolution",s,null,"fail"),U&&Ap(U,"Server-Timing",`cache-resolve;dur=${ne.toFixed(2)}`,!0),v.transaction.abort();return}if(T?.noCacheStore||v.noCacheStore){v.transaction.abort();return}br(v).addWrite({key:K,store:i,entry:_,nodeName:"source",commit:o((z,ne)=>{if(ne?.version!==y)return;let me=To(K,I,$);if($){Fe.put?.(v,K,$),ne&&(T.previousResidency=Le.getResidencyRecord(ne.residencyId));let Ee,fe=!1,De,ve=xc(Le.getResidency($,T));if(ve){if(!ve.includes(server.hostname))if(Ee=$,fe=!0,Le.getResidencyById)$=void 0;else{$=null;for(let $e in r)$||($={}),$[$e]=Ee[$e]}De=yo(ve)}xe.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),R(K,$,ne,z,fe?Dn:0,g&&(be||fe)||null,{user:v?.user,expiresAt:v.expiresAt,residencyId:De,tableToTrack:s},"put",!!pe,Ee)}else ne&&(Fe.delete?.(v,K),xe.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(z).toISOString()}`),g||A?R(K,null,ne,z,0,g&&be||null,{user:v?.user,tableToTrack:s},"delete",!!pe):rl(i,ne,y))},"commit")})}),()=>{i.unlock(K,y)},j=>{i.unlock(K,y),q&&xe.default.error?.("Error committing cache update",j)})})}o(gu,"getFromSource");function vc(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(vc,"checkContextPermissions");function Uc(K){let _=!1;if(K&&(K-Rr>1&&(_=!0),Rr=K),!(Ge===Zt&&!_)&&(Zt=Ge,(0,Rl.getWorkerIndex)()===(0,Rl.getWorkerCount)()-1))return Ht&&clearTimeout(Ht),Ge?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let y=Ge/(1+Rr),b=_?Date.now():Math.ceil((Date.now()-C.getTime())/y)*y+C.getTime(),P=o(I=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(I)}`),Ht=setTimeout(()=>te=te.then(async()=>{if(P(Math.max(I+Ge,Date.now())),i.rootStore.status!=="open"){clearTimeout(Ht);return}let v=50,U=new Array(v),L=0,x=Math.pow(Rr,8)*(Al.get(B.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=E/Math.pow(Math.max(Rr,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${x}, adjusted eviction ${q}ms`);function j(X,$,be,pe){let de=X+q-Date.now();if(de<0)return!0;if(Rr){let z=i.lastSize;return be&Ln&&Cu(pe,ne=>{ne.size&&(z+=ne.size)}),xe.default.trace?.(`shouldEvict adjusted ${de} ${z}, ${de*(X-$)/z} < ${x}`),de*(X-$)/z<x}return!1}o(j,"shouldEvict");try{let X=0;for(let $ of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:be,value:pe,version:de,expiresAt:z,metadataFlags:ne}=$,me;pe===null&&!g&&de+zie<Date.now()?me=rl(i,$,de):z!=null&&j(z,de,ne,pe)&&(me=Le.evict(be,pe,de),X++),me&&(await U[L],U[L]=me.catch(Ee=>{xe.default.error?.("Cleanup error",Ee)}),++L>=v&&(L=0)),await Wa()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${X} entries`)}catch(X){xe.default.warn?.(`Error in cleanup scan for ${s}:`,X)}T(void 0),Rr=0}),Math.min(I-Date.now(),2147483647)).unref()},"startNextTimer");P(b)}):void 0}o(Uc,"scheduleCleanup");function Su(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}o(Su,"addDeleteRemoval");function qE(){(0,Rl.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dc){Dc=!0;try{let K=J.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${J} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let y=i.getEntry(C);y?.value?y.value[K]<Date.now()&&Le.evict(C,y.value,y.version):i.ifVersion(C,y?.version,()=>_.remove(T,C))}await Wa()}}catch(K){xe.default.error?.("Error in evicting old records",K)}finally{Dc=!1}}},Wie).unref()}o(qE,"runRecordExpirationEviction");function xc(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return xe.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(xc,"residencyFromFunction");function yo(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}o(yo,"getResidencyId")}function Yw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function XH(){}function Gg(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return Hg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Hg(+e);case"Float":return e==="null"?null:Hg(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;Zie.test(e)||(e+="Z");let n=new Date(e);return Hg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,qg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Hg(e){if(isNaN(e))throw new SyntaxError;return e}function ZH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function xs(e,t,r){return e?.then?e.then(t,r):t(e)}function eG(e){return e!=null}function Bs(e){try{return JSON.stringify(e)}catch{return e}}function eoe(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var za,Ip,tG,rG,Al,lt,wp,Np,xe,bl,Rl,qg,Ww,nG,$ie,Vie,Kie,Yie,Wie,zie,zH,jie,jH,Qie,Dn,va,Jie,QH,JH,Xie,wMe,Zie,Wa,J_=ie(()=>{H();za=require("lmdb"),Ip=w(Cn()),tG=w(require("lodash")),rG=w(mm());Ua();hm();Al=w(ue());Fb();lt=w(_e()),wp=w(ko()),Np=w(rs());Oe();Q_();xe=w(Xn());YI();Ca();bl=require("ordered-binary"),Rl=w(nt());Io();qg=w(oe());Zc();Ps();p_();bp();Ww=w(require("node:fs"));Ns();L_();nG=w(Q());Kw();({sortBy:$ie}=tG.default),{validateAttribute:Vie}=rG.default,Kie=new Uint8Array(9);Kie[8]=192;Yie=1/0,Wie=6e4,zie=864e5;Al.initSync();zH=Al.get(B.STORAGE_PREFETCHWRITES),jie=1e4,jH=1,Qie=2,Dn=1,va=8,Jie=Buffer.allocUnsafeSlow(8192),QH=1978,JH=100,Xie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},wMe=(0,qg.convertToMS)(Al.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o($g,"makeTable");o(Yw,"attributesAsObject");o(XH,"noop");Zie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Gg,"coerceType");o(Hg,"rejectNaN");o(ZH,"isDescendantId");Wa=o(()=>new Promise(setImmediate),"rest");o(xs,"when");o(eG,"exists");o(Bs,"stringify");o(eoe,"hasOtherProcesses")});function Vg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function Kg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var iG=ie(()=>{o(Vg,"euclideanDistance");o(Kg,"cosineDistance")});var oG,aG,ud,Qi,ld,toe,roe,Yg,cG=ie(()=>{iG();oG=require("msgpackr"),aG=w(Xn()),ud=w(_e()),Qi=(0,aG.loggerWithTag)("HNSW"),ld=Symbol.for("entryPoint"),toe=Symbol.for("key"),roe=10,Yg=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=oG.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Vg:Kg,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[toe,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(ld);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let A=0;A<=E;A++)g[A]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ld,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),roe),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);Qi.debug?.("setting entry point to",i),this.indexStore.put(ld,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&Qi.info?.("should not have zero connections for",l);let A=h[E];for(let S=0;S<g.length;S++){let{id:R,distance:N,node:O}=g[S];if(R===i)continue;let F=[];if(this.optimizeRouting){let k=!1,J=O[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let le=0;le<J.length;le++){let{id:ae,distance:re}=J[le],Re=1+this.optimizeRouting*(1+.5*le/this.M);for(let Te=0;Te<A.length;Te++){let{id:Fe,distance:Ge}=A[Te];if(Fe===ae){N*Y>Ge+re?k=!0:re*Re>N+Ge&&(F.push({fromId:Fe,toId:R}),F.push({fromId:R,toId:Fe}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;A.push({id:R,distance:N});for(let{fromId:k,toId:J}of F){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let le=0;le<Y[E].length;le++)if(Y[E][le].id===J){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(le,1);break}}let te=c[E],G=te?.find(({id:k})=>k===R);if(G){let k=te?.indexOf(G);te.copied||(te=[...te],te.copied=!0,c[E]=te),te.splice(k,1)}else this.addConnection(R,d(R,O),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(ld);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);Qi.debug?.("setting entry point to",l),this.indexStore.put(ld,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(Qi.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=a.get(f);return!p&&m&&(p={...m},a.set(f,p)),p}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(ld);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=a(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new ud.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new ud.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=Kg;else if(s==="euclidean")c=Vg;else{if(s)throw new ud.ClientError("Unknown distance function");c=this.distance}if(!t)throw new ud.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new ud.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){Qi.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||Qi.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){Qi.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&Qi.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?Qi.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Vg:Kg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var zw,lG=ie(()=>{cG();zw={HNSW:Yg}});var mt={};Ie(mt,{database:()=>Xu,databaseEnvs:()=>Ko,databases:()=>Me,dropDatabase:()=>JI,dropTableMeta:()=>coe,getDatabases:()=>at,getDefaultCompression:()=>Zg,getTables:()=>soe,onRemovedDB:()=>vp,onUpdatedTable:()=>Il,readMetaDb:()=>Cp,resetDatabases:()=>hd,table:()=>Xe,tables:()=>pn});function Mp(e,t){let r=Jg.OpenDBIObject??Jg.default.OpenDBIObject;return new r(e,t)}function soe(){return Qg||at(),pn||{}}function at(){if(Qg)return Me;Qg=!0,md=new Map;let e=(0,Kt.getHdbBasePath)()&&(0,Bt.join)((0,Kt.getHdbBasePath)(),Fc),t=(0,Kt.get)(B.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||e&&((0,ls.existsSync)(e)?e:(0,Bt.join)((0,Kt.getHdbBasePath)(),WE)),!e)return;if((0,ls.existsSync)(e))for(let n of(0,ls.readdirSync)(e,{withFileTypes:!0})){let s=(0,Bt.basename)(n.name,".mdb");n.isFile()&&(0,Bt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&Cp((0,Bt.join)(e,n.name),null,s)}if((0,ls.existsSync)((0,fd.getBaseSchemaPath)())){for(let n of(0,ls.readdirSync)((0,fd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Bt.join)((0,fd.getBaseSchemaPath)(),n.name),i=(0,Bt.join)((0,fd.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,ls.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,Bt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,Bt.join)(i,a.name);Cp((0,Bt.join)(s,a.name),(0,Bt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ls.existsSync)(i))for(let c of(0,ls.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Bt.extname)(c.name).toLowerCase()===".mdb"&&Cp((0,Bt.join)(i,c.name),(0,Bt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,Bt.join)(l.path,(0,Bt.basename)(c+".mdb"));(0,ls.existsSync)(u)&&Cp(u,c,n,null,!0)}}for(let n in Me){let s=md.get(n);if(s){let i=Me[n];n.includes("delete")&&Nr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(Nr.trace(`delete table class ${a}`),delete i[a])}else if(delete Me[n],n==="data"){for(let i in pn)delete pn[i];delete pn[Xg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"];if((0,Kt.get)(B.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let n of r)Me.system[n]&&(Me.system[n].replicate=!1);return md=null,Me}function hd(){Qg=!1;for(let[,e]of Ko)e.needsDeletion=!0;at();for(let[e,t]of Ko)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Ko.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Pp.forEach(i=>i(t.databaseName));break}}return Me}function Cp(e,t,r=Jw,n,s){let i=new jw.default(e,!1);try{let a=Ko.get(e);a?a.needsDeletion=!1:(a=(0,pd.open)(i),Ko.set(e,a));let c=new Mp(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Wg.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,ls.existsSync)(n)&&(i.path=n,u=(0,pd.open)(i),u.isLegacy=!0):u=v_(a));let d=pG(r),f=d[Xg],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let A=m.get(E);A||m.set(E,A={attributes:[]}),(g==null||h.is_hash_attribute)&&(A.primary=h),g!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let re of E)if(re.is_hash_attribute||re.isPrimaryKey){g=re;break}if(!g){Nr.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let A=d[p],S={},R=[],N,O,F=typeof g.audit=="boolean"?g.audit:(0,Kt.get)(B.LOGGING_AUDITLOG),te=g.trackDeletes,G=g.expiration,k=g.eviction,J=g.sealed,Y=g.splitSegments,le=g.replicate;if(A)S=A.indices,R=A.attributes,A.schemaVersion++;else{N=g.tableId,N?N>=(l.get(dd)||0)&&(l.putSync(dd,N+1),Nr.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(dd),N||(N=1),Nr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(dd,N+1),l.putSync(g.key,g));let re=new Mp(!g.is_hash_attribute,g.is_hash_attribute);if(re.compression=g.compression,re.compression){let Re=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||mG;re.compression.threshold=Re}O=Y_(a.openDB(g.key,re),a),a.databaseName=r,O.tableId=N}let ae;for(let re of E){re.attribute=re.name;try{if(!re.is_hash_attribute&&(re.indexed||re.attribute&&!re.name)){if(!S[re.name]){let Te=EG(re.key,a,re);S[re.name]=Te,S[re.name].indexNulls=re.indexNulls}let Re=R.find(Te=>Te.name===re.name);Re?R.splice(R.indexOf(Re),1,re):R.push(re),ae=!0}}catch(Re){Nr.error("Error trying to update attribute",re,R,S,Re)}}for(let re of R)if(!E.find(Te=>Te.name===re.name)){if(re.is_hash_attribute){Nr.error("Unable to remove existing primary key attribute",re);continue}re.indexed&&(R.splice(R.indexOf(re),1),ae=!0)}if(A)ae&&(A.schemaVersion++,A.updatedAttributes());else{A=hG(d,p,$g({primaryStore:O,auditStore:u,audit:F,sealed:J,splitSegments:Y,replicate:le,expirationMS:G&&G*1e3,evictionMS:k&&k*1e3,trackDeletes:te,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),A.schemaVersion=1;for(let re of Op)re(A)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function pG(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=pn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),md&&!md.has(e)){let r=new Set;t[Xg]=r,md.set(e,r)}return t}function hG(e,t,r){return e[t]=r,r}function Xu({database:e,table:t}){e||(e=Jw),at();let r=pG(e),n=(0,Bt.join)((0,Kt.getHdbBasePath)(),Fc),s=(0,Kt.get)(B.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,Kt.get)(B.STORAGE_PATH)||((0,ls.existsSync)(n)?n:(0,Bt.join)((0,Kt.getHdbBasePath)(),WE));let a=(0,Bt.join)(n,(i?t:e)+".mdb"),c=Ko.get(a);if(!c||c.status==="closed"){let l=new jw.default(a,!1);c=(0,pd.open)(l),Ko.set(a,c)}return c.auditStore||(c.auditStore=v_(c)),c}async function JI(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ko.delete(r.path),r.status==="open"&&(await r.close(),await Lp.remove(r.path));if(r||(r=Xu({database:e,table:null}),r.status==="open"&&(await r.close(),await Lp.remove(r.path))),e==="data"){for(let n in pn)delete pn[n];delete pn[Xg]}delete Me[e],Pp.forEach(n=>n(e)),await QA(r)}function EG(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&zw[r.indexed.type]?.useObjectStore,s=new Mp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=zw[r.indexed.type];a?i.customIndex=new a(i,r.indexed):Nr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=Jw);let h=Xu({database:r,table:t}),E=Me[r];Nr.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let A,S,R;m==null&&(m=!0);let N=new Mp(!1);for(let Y of a)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let O,F;if(g){if(A=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let Y=h.auditStore;S=a.find(Re=>Re.isPrimaryKey)||{},A=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=Zg(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,Kt.get)(B.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Nr.trace(`${t} table loading, opening primary store`);let le=new Mp(!1,!0);le.compression=S.compression;let ae=t+"/";if(R=h.dbisDb=h.openDB(Wg.INTERNAL_DBIS_NAME,N),J(),R.get(ae))return F&&F(),hd(),Xe(e);let re=Y_(h.openDB(ae,le),h);h.databaseName=r,re.tableId=R.get(dd),Nr.trace(`Assigning new table id ${re.tableId} for ${t}`),re.tableId||(re.tableId=1),R.put(dd,re.tableId+1),S.tableId=re.tableId,g=hG(E,t,$g({primaryStore:re,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:A,tableName:t,tableId:re.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,O=!0,R.put(ae,S)}let te=g.indices;R=R||(h.dbisDb=h.openDB(Wg.INTERNAL_DBIS_NAME,N)),g.dbisDB=R;let G=[];for(let{key:Y,value:le}of R.getRange({start:!0})){let[ae,re]=Y.toString().split("/");if(re===""&&(re=le.name),re){if(ae!==t)continue}else continue;let Re=a.find(Fe=>Fe.name===re),Te=!Re?.indexed&&le.indexed&&!le.isPrimaryKey;if((!Re||Te)&&(J(),O=!0,Re||R.remove(Y),Te)){let Fe=g.indices[ae];Fe&&G.push(Fe)}}let k=[];try{for(let Y of a||[]){if((Y.relationship||Y.computed)&&(O=!0,Y.relationship))continue;let le=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:le,configurable:!0});let ae=R.get(le);if(Y.isPrimaryKey){if(ae=ae||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+ae.expiration||void 0)||(+s||void 0)!==(+ae.eviction||void 0)||Y.type!==ae.type){let Re={...ae};typeof c=="boolean"&&(c&&g.enableAuditing(c),Re.audit=c),n&&(Re.expiration=+n),s&&(Re.eviction=+s),l!==void 0&&(Re.sealed=l),d!==void 0&&(Re.replicate=d),Y.type&&(Re.type=Y.type),O=!0,J(),R.put(le,Re)}continue}ae?.attribute&&!ae.name&&(ae.indexed=!0);let re=!ae||ae.type!==Y.type||JSON.stringify(ae.indexed)!==JSON.stringify(Y.indexed)||ae.nullable!==Y.nullable||ae.version!==Y.version||JSON.stringify(ae.properties)!==JSON.stringify(Y.properties)||JSON.stringify(ae.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let Re=EG(le,h,Y);(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,J(),ae=R.get(le),(re||ae.indexingPID&&ae.indexingPID!==process.pid||ae.restartNumber<Dp.workerData?.restartNumber)&&(O=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=ae?.lastIndexedKey??void 0,Y.indexingPID=process.pid,Re.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:Re}),k.push(Y))),R.put(le,Y)),ae?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),Re.indexNulls=Y.indexNulls,te[Y.name]=Re}else re&&(O=!0,J(),R.put(le,Y))}}finally{F&&F()}if(O&&(g.schemaVersion++,g.updatedAttributes()),Nr.trace(`${t} table loading, running index`),k.length>0||G.length>0?g.indexingOperation=aoe(g,k,G):O&&zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,O)for(let Y of Op)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Nr.trace(`${t} table loaded`),g;function J(){F||h.transactionSync(()=>({then(Y){F=Y}}))}o(J,"startTxn")}async function aoe(e,t,r){try{Nr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,pd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,A=E.dbi;try{let S=E.resolve,R=m&&(S?S(m):m[g]);if(A.customIndex){A.customIndex.index(f,R);continue}let N=(0,uG.getIndexedValues)(R);if(N)for(let O=0,F=N.length;O<F;O++)A.put(N[O],f)}catch(S){a[g]||(a[g]=!0,Nr.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Nr.error(h)}),Dp.workerData&&Dp.workerData.restartNumber!==fG.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>ioe?await s:d>ooe&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await zg.signalSchemaChange(new jg.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Nr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Nr.error("Error in indexing",n)}}function coe({table:e,database:t}){let r=Xu({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Il(e){return Op.push(e),{remove(){let t=Op.indexOf(e);t>-1&&Op.splice(t,1)}}}function vp(e){return Pp.push(e),{remove(){let t=Pp.indexOf(e);t>-1&&Pp.splice(t,1)}}}function Zg(){let e=(0,Kt.get)(B.STORAGE_COMPRESSION),t=(0,Kt.get)(B.STORAGE_COMPRESSION_DICTIONARY),r=(0,Kt.get)(B.STORAGE_COMPRESSION_THRESHOLD)||mG,n={startingOffset:32};return t&&(n.dictionary=Lp.readFileSync(t)),r&&(n.threshold=r),e&&n}var Kt,Wg,pd,Bt,ls,fd,jw,Lp,Qw,uG,zg,jg,Dp,dG,fG,Jg,noe,Nr,Jw,Xg,mG,pn,Me,dd,Op,Pp,Qg,Ko,md,ioe,ooe,Oe=ie(()=>{Kt=w(ue()),Wg=w($t()),pd=require("lmdb"),Bt=require("path"),ls=require("fs"),fd=w(Rt());J_();jw=w($m());H();Lp=w(require("fs-extra")),Qw=w(ii()),uG=w(Cn()),zg=w(ko()),jg=w(rs()),Dp=require("worker_threads"),dG=w(Q()),fG=w(nt());Io();Zc();Ns();lG();Jg=w(qm()),{forComponent:noe}=dG.default;o(Mp,"OpenDBIObject");Nr=noe("storage"),Jw="data",Xg=Symbol("defined-tables"),mG=((0,Kt.get)(B.STORAGE_PAGESIZE)||4096)-60;(0,Kt.initSync)();pn=Object.create(null),Me=Object.create(null);(0,Qw._assignPackageExport)("databases",Me);(0,Qw._assignPackageExport)("tables",pn);dd=Symbol.for("next-table-id"),Op=[],Pp=[],Ko=new Map;o(soe,"getTables");o(at,"getDatabases");o(hd,"resetDatabases");o(Cp,"readMetaDb");o(pG,"ensureDB");o(hG,"setTable");o(Xu,"database");o(JI,"dropDatabase");o(EG,"openIndex");o(Xe,"table");ioe=1e3,ooe=10;o(aoe,"runIndexing");o(coe,"dropTableMeta");o(Il,"onUpdatedTable");o(vp,"onRemovedDB");o(Zg,"getDefaultCompression")});var eN={};Ie(eN,{loadGQLSchema:()=>doe,start:()=>Zw,startOnMainThread:()=>uoe});function Zw({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,p=[],h;for(let A of f.definitions)switch(A.kind){case l.OBJECT_TYPE_DEFINITION:let F=function(G){if(G.kind==="NonNullType"){let Y=F(G.type);return Y.nullable=!1,Y}if(G.kind==="ListType")return{type:"array",elements:F(G.type)};let J={type:G.name?.value};return Object.defineProperty(J,"location",{value:G.loc.startToken}),J};o(F,"getProperty");let S=A.name.value,R=[],N={table:null,database:null,properties:R};m.set(S,N),i.allTypes.set(S,N);for(let G of A.directives){if(G.name.value==="table"){for(let J of G.arguments)N[J.name.value]=J.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let J of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[J.name.value]=J.value.value}}let O=!1,te={};for(let G of A.fields){let k=F(G.type);k.name=G.name.value,R.push(k),te[k.name]=void 0;for(let J of G.directives){let Y=J.name.value;if(Y==="primaryKey")O?console.warn("Can not define two attributes as a primary key at",J.loc):(k.isPrimaryKey=!0,O=!0);else if(Y==="indexed"){let le={};for(let ae of J.arguments||[])le[ae.name.value]=ae.value.value;k.indexed=le}else if(Y==="computed"){for(let le of J.arguments||[])if(le.name.value==="from"){let ae=le.value.value;k.computed={from:g(ae,le,te)},k.version==null&&(k.version=ae)}else le.name.value==="version"&&(k.version=le.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let le={};for(let ae of J.arguments)le[ae.name.value]=ae.value.value;k.relationship=le}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="allow"){let le=k.authorizedRoles=[];for(let ae of J.arguments)ae.name.value==="role"&&le.push(ae.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,J.loc)}}N.type=S,S==="Query"&&(h=N)}function E(A){let S=m.get(A.type);S?(Object.defineProperty(A,"properties",{value:S.properties}),Object.defineProperty(A,"definition",{value:S})):A.type==="array"?E(A.elements):loe.includes(A.type)||(0,gG.getWorkerIndex)()===0&&console.error(`The type ${A.type} is unknown at line ${A.location.line}, column ${A.location.column}, in ${s}`)}o(E,"connectPropertyType");for(let A of m.values())for(let S of A.properties)E(S);for(let A of p)A.tableClass=e(A),A.export&&(A.export.name===""?i.set((0,Xw.dirname)(n),A.tableClass):i.set((0,Xw.dirname)(n)+"/"+(A.export.name||A.type),A.tableClass,A.export));function g(A,S,R){return new _G.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${A}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var Xw,_G,gG,loe,uoe,doe,SG=ie(()=>{Xw=require("path"),_G=require("node:vm");Oe();gG=w(nt());xa();loe=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(Zw,"start");uoe=Zw,doe=o(e=>Zw({ensureTable:Xe}).handleFile(e,null,null,new qu),"loadGQLSchema")});var rN={};Ie(rN,{start:()=>Toe});function foe(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Gr(`Unexpected non-executable definition type ${e.kind}.`)}function TG(e){if(typeof e!="object"||e===null)throw new Ji("Request body must be an object.");if(!("query"in e))throw new Ji("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Ji("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Ji("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Ji("Request body `operationName` field must be a string.")}function tN(e){return parseInt(e.value,10)}function RG(e){return parseFloat(e.value)}function AG(e,t,r){let n=r.get(e.name.value);return bG(n)?IG(n,t):{attribute:t,value:n}}function bG(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function IG(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],bG(n)?IG(n,t):{attribute:t,value:n}))}function moe(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:tN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:RG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,t,r);case He.Kind.OBJECT:return wG(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Gr(`Value type, ${e.value.kind}, is not supported.`)}}function wG(e,t,r){return e.fields.flatMap(n=>moe(n,t,r))}function poe(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:tN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:RG(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return AG(e.value,e.name.value,t);case He.Kind.OBJECT:return wG(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Gr(`Argument type, ${e.value.kind}, is not supported.`)}}function hoe(e,t){return e.flatMap(r=>poe(r,t))}function eS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Gr(`Fragment \`${n}\` not found.`);return eS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return eS(r.selectionSet,t)}})}function NG(e,t){return eS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:NG(r.selectionSet,t)}:r.name.value)}async function Eoe(e,t,r,n){let s=Ds.getMatch(e.name.value,"graphql");if(s===void 0)throw new Gr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:NG(e.selectionSet,r),conditions:hoe(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function CG(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return tN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:CG(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Gr(`Value type, ${e.kind}, is not supported.`)}}function _oe(e,t){let r=new Map;for(let n of e){let s=n.variable.name.value,i=t?.[s];if(i===void 0&&n.defaultValue!==void 0&&(i=CG(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Gr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function goe(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Gr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Gr("Mutations are not supported yet.");let s=_oe(e.variableDefinitions,t),i=await Promise.all(eS(e.selectionSet,r).map(c=>Eoe(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function yG({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(foe(u),u.kind===He.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Gr("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Gr(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Gr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Gr(`Operation \`${r}\` not found.`);let l=await goe(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Soe(e){switch(e.method){case"GET":{let t=new URLSearchParams(e.url.split("?")[1]),r={};for(let[n,s]of t)r[n]=n==="variables"||n==="extensions"?JSON.parse(s):s;return TG(r),yG(r,e)}case"POST":{let r=await Oo(e.headers.get("content-type"),!0)(e._nodeRequest);return TG(r),yG(r,e)}default:throw new Ji("Method Not Allowed",405,{Allow:"GET, POST"})}}function Toe(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Soe(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Gr)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Ji)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Gr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,Gr,Ji,OG=ie(()=>{He=w(require("graphql"));Po();xa();o(foe,"assertExecutableDefinitionNode");o(TG,"assertRequestParams");o(tN,"processIntValueNode");o(RG,"processFloatValueNode");o(AG,"processVariableNode");o(bG,"isObject");o(IG,"transformObjectIntoQueryCondition");o(moe,"processObjectFieldNode");o(wG,"processObjectValueNode");o(poe,"processArgumentNode");o(hoe,"buildConditionsQuery");o(eS,"fillInFragments");o(NG,"buildSelectQuery");o(Eoe,"processFieldNode");o(CG,"processConstValueNode");o(_oe,"resolveVariables");o(goe,"executeOperation");o(yG,"resolver");Gr=class extends Error{static{o(this,"GraphQLQueryingError")}},Ji=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(Soe,"graphqlQueryingHandler");o(Toe,"start")});var UG=M((zMe,vG)=>{var Ed=require("validate.js"),LG=ft(),_d=(H(),D(W)),{handleHDBError:yoe,hdbErrors:Roe}=_e(),{HDB_ERROR_MSGS:nr,HTTP_STATUS_CODES:Aoe}=Roe,nN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),boe={STRUCTURE_USER:"structure_user"},PG=Object.values(_d.ROLE_TYPES_ENUM),Ioe="attribute_permissions",woe="attribute_name",{PERMS_CRUD_ENUM:gd}=_d,Noe=[Ioe,...Object.values(gd)],DG=[gd.READ,gd.INSERT,gd.UPDATE],Coe=[woe,...DG];function Ooe(e){let t=nN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MG(e,t)}o(Ooe,"addRoleValidation");function Poe(e){let t=nN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MG(e,t)}o(Poe,"alterRoleValidation");function Loe(e){let t=nN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,LG.validateObject(e,t)}o(Loe,"dropRoleValidation");var Doe=["operation","role","id","permission","hdb_user","access"];function MG(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Doe.includes(n[a])||s.push(n[a]);s.length>0&&fr(nr.INVALID_ROLE_JSON_KEYS(s),r);let i=LG.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{fr(a,r)}),e.permission){let a=Moe(e);a&&fr(a,r),PG.forEach(c=>{e.permission[c]&&!Ed.isBoolean(e.permission[c])&&fr(nr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(PG.indexOf(a)<0){if(a===boe.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||fr(nr.SCHEMA_NOT_FOUND(f),r)}continue}fr(nr.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){fr(nr.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){fr(nr.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Noe.includes(d)||fr(nr.INVALID_PERM_KEY(d),r,a,l)}),Object.values(gd).forEach(d=>{Ed.isDefined(u[d])?Ed.isBoolean(u[d])||fr(nr.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):fr(nr.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){fr(nr.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){fr(nr.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!Coe.includes(E)&&E!==gd.DELETE&&fr(nr.INVALID_ATTR_PERM_KEY(E),r,a,l)}),!Ed.isDefined(p.attribute_name)){fr(nr.ATTR_PERM_MISSING_NAME,r,a,l);continue}let h=p.attribute_name;if(!d.includes(h)){fr(nr.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,l);continue}DG.forEach(E=>{Ed.isDefined(p[E])?Ed.isBoolean(p[E])||fr(nr.ATTR_PERM_NOT_BOOLEAN(E,h),r,a,l):fr(nr.ATTR_PERM_MISSING(E,h),r,a,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;fr(nr.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return voe(r)}o(MG,"customValidate");vG.exports={addRoleValidation:Ooe,alterRoleValidation:Poe,dropRoleValidation:Loe};function Moe(e){let{operation:t,permission:r}=e;if(t===_d.OPERATIONS_ENUM.ADD_ROLE||t===_d.OPERATIONS_ENUM.ALTER_ROLE){let n=r.super_user===!0,s=r.cluster_user===!0;if(Object.keys(r).length>1&&(n||s)){if(s&&n)return nr.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?_d.ROLE_TYPES_ENUM.SUPER_USER:_d.ROLE_TYPES_ENUM.CLUSTER_USER;return nr.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Moe,"validateNoSUPerms");function voe(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:nr.ROLE_PERMS_ERROR,...e};return yoe(new Error,n,Aoe.BAD_REQUEST)}else return null}o(voe,"generateRolePermResponse");function fr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(fr,"addPermError")});var xp=M((JMe,kG)=>{"use strict";var xG=Bn(),BG=fn(),Uoe=_l(),iN=UG(),oN=ko(),QMe=require("uuid").v4,xoe=require("util"),tS=(H(),D(W)),Boe=oe(),aN=BG.searchByValue,Foe=BG.searchByHash,koe=xoe.promisify(Uoe.delete),Hoe=di(),Goe=Qu(),{hdbErrors:qoe,handleHDBError:wl}=_e(),{HDB_ERROR_MSGS:FG,HTTP_STATUS_CODES:Up}=qoe,{UserEventMsg:cN}=rs();kG.exports={addRole:$oe,alterRole:Voe,dropRole:Koe,listRoles:Yoe};function sN(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}o(sN,"scrubRoleDetails");async function $oe(e){let t=iN.addRoleValidation(e);if(t)throw t;e=sN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await aN(r)||[])}catch(i){throw wl(i)}if(n&&n.length>0)throw wl(new Error,FG.ROLE_ALREADY_EXISTS(e.role),Up.CONFLICT,void 0,void 0,!0);e.id||(e.id=e.role);let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await xG.insert(s),oN.signalUserChange(new cN(process.pid)),e=sN(e),e}o($oe,"addRole");async function Voe(e){let t=iN.alterRoleValidation(e);if(t)throw t;e=sN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await xG.update(r)}catch(s){throw wl(s)}if(n&&n?.message==="updated 0 of 1 records")throw wl(new Error,"Invalid role id",Up.BAD_REQUEST,void 0,void 0,!0);return await oN.signalUserChange(new cN(process.pid)),e}o(Voe,"alterRole");async function Koe(e){let t=iN.dropRoleValidation(e);if(t)throw wl(new Error,t,Up.BAD_REQUEST,void 0,void 0,!0);let r=new Goe(tS.SYSTEM_SCHEMA_NAME,tS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Foe(r));if(n.length===0)throw wl(new Error,FG.ROLE_NOT_FOUND,Up.NOT_FOUND,void 0,void 0,!0);let s=new Hoe(tS.SYSTEM_SCHEMA_NAME,tS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await aN(s)),a=!1;if(Boe.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw wl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Up.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await koe(c),oN.signalUserChange(new cN(process.pid)),`${n[0].role} successfully deleted`}o(Koe,"dropRole");async function Yoe(){return aN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}o(Yoe,"listRoles")});var lN={};Ie(lN,{start:()=>qG,startOnMainThread:()=>joe});function qG({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,HG.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(Woe.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await zoe(i)}}}async function zoe(e){let t=at().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,GG.isEqual)(i,e)?void 0:(e.id=r.id,(0,rS.alterRole)(e))}return(0,rS.addRole)(e)}var rS,HG,GG,Woe,joe,$G=ie(()=>{Oe();rS=w(xp()),HG=require("yaml"),GG=require("lodash"),Woe=["super_user","cluster_user","structure_user"];o(qG,"start");o(zoe,"ensureRole");joe=qG});async function nS(e){let t=(0,YG.pathToFileURL)(e).toString();if(Qoe)return Bp||(Bp=Joe(Zoe)),(await(await Bp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Joe(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Bp=new Compartment({console,Math,Date,fetch:Xoe,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,KG.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Fr,s.tables=pn,s.databases=Me}};let n=await(0,VG.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Bp}function Xoe(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 Zoe(){return{Resource:Fr,tables:pn}}var VG,KG,YG,Qoe,Bp,uN=ie(()=>{Ua();Oe();VG=require("fs/promises"),KG=require("path"),YG=require("url"),Qoe=!1;o(nS,"secureImport");o(Joe,"getCompartment");o(Xoe,"secureOnlyFetch");o(Zoe,"getGlobalVars")});var dN={};Ie(dN,{handleApplication:()=>eae,suppressHandleApplicationWarning:()=>tae});function WG(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function eae(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}nS(t.absolutePath).then(r=>{let n=(0,sS.dirname)(t.urlPath);WG(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),zG(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function zG(e,t,r){for(let n in t){let s=t[n],i=(0,sS.join)(r,n);WG(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&zG(e,s,i)}}var sS,tae,jG=ie(()=>{uN();sS=require("path");o(WG,"isResource");o(eae,"handleApplication");o(zG,"recurseForResources");tae=!0});var mN={};Ie(mN,{start:()=>rae});function rae({resources:e}){e.set("login",fN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var fN,QG=ie(()=>{Ua();o(rae,"start");fN=class extends Fr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function rq(e){let t={openapi:nae,info:{title:"HarperDB HTTP REST interface",version:eq.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}],n=o(s=>{if(s.type&&!t.components.schemas[s.type]){t.components.schemas[s.type]={};let i={},a=[];for(let c of s.properties)iS[c.type]?i[c.name]=new hN(iS[c.type],c.type):c.properties?(i[c.name]=new nq(c.type),n(c)):c.elements?.properties&&(i[c.name]=new lae(c.elements.type),n(c.elements)),c.nullable===!1&&a.push(c.name);t.components.schemas[s.type]=new ZG(i,!s.sealed,a)}},"includeDefinitionInSchema");for(let[,s]of e){if(!s.path||s.Resource.isError)continue;let{path:i}=s,a=i.split("/").pop(),{attributes:c,sealed:l}=s.Resource,{prototype:u,primaryKey:d="id"}=s.Resource;if(!c&&e.allTypes.has(s.path)){let te=e.allTypes.get(s.path);l=te.sealed,c=te.properties}if(!d)continue;let f={},m=[],p=[];if(c)for(let{type:te,name:G,elements:k,relationship:J,definition:Y,nullable:le}of c){let ae=Y??k?.definition;ae&&n(ae),le===!1&&p.push(G),J?te==="array"?f[G]={type:"array",items:{$ref:Fs+k.type}}:f[G]={$ref:Fs+te}:ae?te==="array"?f[G]={type:"array",items:{$ref:Fs+ae.type}}:f[G]={$ref:Fs+ae.type}:te==="array"?k.type==="Any"?f[G]={type:"array",items:{format:k.type}}:f[G]={type:"array",items:new hN(iS[k.type],k.type)}:te==="Any"?f[G]={format:te}:f[G]=new hN(iS[te],te),m.push(new EN(G,"query",f[G]))}let h=Object.keys(f),E=new EN(d,"path",{type:"string",format:"ID"});E.required=!0,E.description="primary key of record";let g=new EN("property","path",{enum:h});g.required=!0,t.components.schemas[a]=new ZG(f,!l,p);let A=u.post!==Resource.prototype.post||u.update,S=typeof u.put=="function",R=typeof u.get=="function",N=typeof u.delete=="function",O=typeof u.patch=="function",F="/"+i+"/";A&&(t.paths[F]={},t.paths[F].post=new sae(a,r,{200:new Sd({$ref:Fs+a},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),R&&(t.paths[F]||(t.paths[F]={}),t.paths[F].get=new pN(m,r,{200:new Sd({type:"array",items:{$ref:Fs+a}})},"search for records by the specified property name and value pairs")),t.paths[F]||(t.paths[F]={}),t.paths[F].options=new iae(m,r,{200:new oae},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new XG(m,r,"delete all the records that match the provided query",{204:new JG})),F="/"+i+"/{"+d+"}",R&&(t.paths[F]={},t.paths[F].get=new pN([E],r,{200:new Sd({$ref:Fs+a})},"retrieve a record by its primary key")),S&&(t.paths[F]||(t.paths[F]={}),t.paths[F].put=new aae([E],r,a,{200:new Sd({$ref:Fs+a})},"create or update the record with the URL path that maps to the record's primary key")),O&&(t.paths[F]||(t.paths[F]={}),t.paths[F].patch=new cae([E],r,a,{200:new Sd({$ref:Fs+a})},"patch the record with the URL path that maps to the record's primary key")),N&&(t.paths[F]||(t.paths[F]={}),t.paths[F].delete=new XG([E],r,"delete a record with the given primary key",{204:new JG})),R&&g.schema.enum.length>0&&(F="/"+i+"/{"+d+"}.{property}",t.paths[F]={},t.paths[F].get=new pN([E,g],r,{200:new Sd({enum:h})},"used to retrieve the specified property of the specified record"))}for(let[,s]of e.allTypes)n(s),s.sealed&&t.components.schemas[s.type].additionalProperties&&(t.components.schemas[s.type].additionalProperties=!1);return t}function sae(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Fs+e}}}},this.security=t,this.responses=r}function pN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function iae(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function oae(){this.description=tq,this.headers={},this.content={}}function Sd(e,t){this.description=tq,this.content={"application/json":{schema:e}},this.headers=t}function JG(){this.description="successfully processed request, no content returned to client"}function aae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function cae(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Fs+r}}}},this.responses=n}function XG(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function ZG(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function hN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function nq(e){this.$ref=`#/components/schemas/${e}`}function lae(e){this.type="array",this.items=new nq(e)}function EN(e,t,r){this.name=e,this.in=t,this.schema=r}var eq,nae,iS,Fs,tq,sq=ie(()=>{eq=w(Tt()),nae="3.0.3",iS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Fs="#/components/schemas/",tq="successful operation";o(rq,"generateJsonApi");o(sae,"Post");o(pN,"Get");o(iae,"Options");o(oae,"ResponseOptions200");o(Sd,"Response200");o(JG,"Response204");o(aae,"Put");o(cae,"Patch");o(XG,"Delete");o(ZG,"ResourceSchema");o(hN,"Type");o(nq,"Ref");o(lae,"ArrayRef");o(EN,"Parameter")});var oq={};Ie(oq,{Request:()=>ja,createReuseportFd:()=>oS});var iq,ja,_N,gN,oS,Fp=ie(()=>{iq=require("os"),ja=class{static{o(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new gN(t.headers)}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._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new _N(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},_N=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},gN=class{static{o(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,iq.platform)()!="win32"&&(oS=require("node-unix-socket").createReuseportFd)});var cS={};Ie(cS,{parseHeaderValue:()=>TN,start:()=>fae});async function dae(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&j_(e);let i=new Us;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==aq){let g=aS.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ci(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let A=TN(g);for(let S of A)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=TN(u).map(A=>(A.next?.name==="confirm"&&A.next.value>=0&&(e.replicatedConfirmation=+A.next.value),A.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await At(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Oo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Td.ClientError(g,400)}if(e.authorize=!0,a===aq&&s==="GET"){if(e?.user?.role?.permission?.super_user)return rq(aS);throw new Td.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Td.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Td.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,SN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=VH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=ym(f.data,e,f)),f}else if(isFinite(p)){uae[0]=p;let g=String.fromCharCode(34,(Jr[0]&63)+62,(Jr[0]>>6)+(Jr[1]<<2&63)+62,(Jr[1]>>4)+(Jr[2]<<4&63)+62,(Jr[2]>>2)+62,(Jr[3]&63)+62,(Jr[3]>>6)+(Jr[4]<<2&63)+62,(Jr[4]>>4)+(Jr[5]<<4&63)+62,(Jr[5]>>2)+62,(Jr[6]&63)+62,(Jr[6]>>6)+(Jr[7]<<2&63)+62,34),A=r["if-none-match"];A&&g==A?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),SN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=ym(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(a){a.statusCode?a.statusCode===500?hi.warn(a):hi.info(a):hi.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=ym(a.contentType?a:uq(a),e,c),c}}function fae(e){SN=e,e.includeExpensiveRecordCountEstimates&&(ja.prototype.includeExpensiveRecordCountEstimates=!0),!cq&&(cq=!0,aS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return dae(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{kp++;let s=new Jn;lq||(lq=!0,Bm(l=>{kp>0&&l.push({metric:"ws-connections",connections:kp,byThread:!0})}));let i;t.on("error",l=>{i=!0,hi.warn(l)});let a;t.on("message",o(function(u){a||(a=Oo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);Je(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{kp--,zr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=aS.getMatch(l,"ws");if(zr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Je(h=>({count:h.count,total:kp}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ci(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await At(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await Co(p.value,r);t.send(h),Je(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?hi.warn(l):hi.info(l):hi.error(l),t.close(mae[l.statusCode]||1011,uq(l))}t.close()},e))}function TN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var hi,Td,uq,Jr,uae,SN,aq,cq,aS,lq,kp,mae,dq=ie(()=>{Po();Ps();hi=w(Q()),Td=w(_e());Q_();wu();Ca();bp();sq();Fp();X_();({errorToString:uq}=hi),Jr=new Uint8Array(8),uae=new Float64Array(Jr.buffer,0,1),SN={},aq="openapi";o(dae,"http");kp=0;o(fae,"start");mae={401:3e3,403:3003};o(TN,"parseHeaderValue")});var yN=M((Ave,mq)=>{var{recordAction:lS,recordActionBinary:fq}=(Ps(),D(G_)),pae=require("fastify-plugin"),hae=200;mq.exports=pae(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),lS(a,"duration",u,f,d),fq(s.raw.statusCode<400,"success",u,f,d),fq(1,"response_"+s.raw.statusCode,u,f,d);let m=hae;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{lS(performance.now()-c,"transfer",u,f,d),lS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,lS(m,"bytes-sent",u,f,d));let p=a.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var hq=M((bve,pq)=>{var Eae=ft(),_ae={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};pq.exports=function(e){return Eae.validateObject(e,_ae)}});var uS=M((Ive,Eq)=>{"use strict";var gae=(H(),D(W)).OPERATIONS_ENUM,RN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=gae.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};Eq.exports=RN});var qp={};Ie(qp,{createTokens:()=>IN,getJWTRSAKeys:()=>hS,refreshOperationToken:()=>wN,validateOperationToken:()=>NN,validateRefreshToken:()=>ES});async function hS(){if(dS)return dS;try{let e=Hp.default.join(Gp.default.getHdbBasePath(),dA),t=await fS.default.readFile(Hp.default.join(e,em.JWT_PASSPHRASE_NAME),"utf8"),r=await fS.default.readFile(Hp.default.join(e,em.JWT_PRIVATE_KEY_NAME),"utf8");return dS={publicKey:await fS.default.readFile(Hp.default.join(e,em.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},dS}catch(e){throw pS.default.error(e),new Ei.ClientError(Rd.NO_ENCRYPTION_KEYS,yd.INTERNAL_SERVER_ERROR)}}async function IN(e){let t=(0,AN.validateBySchema)(e,Xi.default.object({username:Xi.default.string().optional(),password:Xi.default.string().optional(),role:Xi.default.string().optional(),expires_in:Xi.default.alternatives(Xi.default.string(),Xi.default.number()).optional()}));if(t)throw new Ei.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,bN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw pS.default.error(f),new Ei.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED)}if(!r)throw new Ei.ClientError(Rd.INVALID_CREDENTIALS,yd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await hS(),c=await Ad.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??yq,algorithm:mS,subject:bd.OPERATION}),l=await Ad.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Sae,algorithm:mS,subject:bd.REFRESH}),u=lw(l,kr.SHA256);if((await(0,_q.update)(new gq.default(Xf,yu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Ei.ClientError(Rd.REFRESH_TOKEN_SAVE_FAILED,yd.INTERNAL_SERVER_ERROR);return Sq.default.signalUserChange(new Tq.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function wN(e){let t=(0,AN.validateBySchema)(e,Xi.default.object({refresh_token:Xi.default.string().required()}).required());if(t)throw new Ei.ClientError(t.message);let{refresh_token:r}=e;await ES(r);let n=await hS(),s=await Ad.default.decode(r);return{operation_token:await Ad.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:yq,algorithm:mS,subject:bd.OPERATION})}}async function NN(e){return Rq(e,bd.OPERATION)}async function ES(e){return Rq(e,bd.REFRESH)}async function Rq(e,t){try{let r=await hS(),n=await Ad.default.verify(e,r.publicKey,{algorithms:mS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,bN.findAndValidateUser)(n.username,void 0,!1);if(t===bd.REFRESH&&!uw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw pS.default.warn(r),r?.name==="TokenExpiredError"?new Ei.ClientError(Rd.TOKEN_EXPIRED,yd.FORBIDDEN):new Ei.ClientError(Rd.INVALID_TOKEN,yd.UNAUTHORIZED)}}var Ad,fS,Hp,Xi,AN,Ei,pS,bN,_q,gq,Sq,Tq,Gp,yd,Rd,yq,Sae,mS,bd,dS,Id=ie(()=>{Ad=w(require("jsonwebtoken")),fS=w(require("fs-extra")),Hp=w(require("node:path")),Xi=w(require("joi")),AN=w(ft());H();Ei=w(_e()),pS=w(Q());fw();bN=w(as()),_q=w(Bn()),gq=w(uS()),Sq=w(ko()),Tq=w(rs()),Gp=w(ue()),{HTTP_STATUS_CODES:yd,AUTHENTICATION_ERROR_MSGS:Rd}=Ei.hdbErrors;Gp.default.initSync();yq=Gp.default.get(B.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Sae=Gp.default.get(B.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",mS="RS256",bd={OPERATION:"operation",REFRESH:"refresh"};o(hS,"getJWTRSAKeys");o(IN,"createTokens");o(wN,"refreshOperationToken");o(NN,"validateOperationToken");o(ES,"validateRefreshToken");o(Rq,"validateToken")});var CN=M((Pve,Iq)=>{"use strict";var Tae=hq(),wd=require("passport"),yae=require("passport-local").Strategy,Rae=require("passport-http").BasicStrategy,Aae=require("util"),bae=as(),bq=Aae.callbackify(bae.findAndValidateUser),Ove=Kr(),Iae=(H(),D(W)),Aq=(Id(),D(qp));wd.use(new yae(function(e,t,r){bq(e,t,r)}));wd.use(new Rae(function(e,t,r){bq(e,t,r)}));wd.serializeUser(function(e,t){t(null,e)});wd.deserializeUser(function(e,t){t(null,e)});function wae(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":wd.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Iae.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Aq.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):Aq.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:wd.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(wae,"authorize");function Nae(e,t){let r=Tae(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Nae,"checkPermissions");Iq.exports={authorize:wae,checkPermissions:Nae}});var _S=M((Dve,wq)=>{"use strict";var Cae=is();wq.exports={writeTransaction:Oae};function Oae(e,t,r){return Cae.writeTransaction(e,t,r)}o(Oae,"writeTransaction")});var Pq=M((Uve,Oq)=>{"use strict";var Pae=fn(),Lae=Ki(),Nq=Q(),Dae=Bn(),vve=_S(),Mae=require("clone"),PN=require("alasql"),vae=Og(),Cq=require("util"),Uae=Cq.promisify(Lae.getTableSchema),xae=Cq.promisify(Pae.search),Bae=(H(),D(W)),ON=oe();vae(PN);Oq.exports={update:kae};var Fae="There was a problem performing this update. Please check the logs and try again.";async function kae({statement:e,hdb_user:t}){let r=await Uae(e.table.databaseid,e.table.tableid),n=Hae(e.columns);ON.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Mae(s),c=ON.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=PN.parse(l).statements[0],d=await xae(u),f=Gae(n,d);return qae(a,f,t)}o(kae,"update");function Hae(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=PN.compile(`SELECT ${r.expression.toString()} AS [${Bae.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Nq.error(t),new Error(Fae)}}o(Hae,"createUpdateRecord");function Gae(e,t){return ON.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Gae,"buildUpdateRecords");async function qae(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Dae.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){Nq.error(`Error delete new_attributes from update response: ${i}`)}return s}o(qae,"updateRecords")});var Dq=M((kve,Lq)=>{var $ae=require("alasql"),Vae=fn(),Kae=Q(),Yae=is(),DN=require("util"),LN=oe(),Wae=(H(),D(W)),zae=Ki(),Bve=_S(),Fve=Bn(),jae="record",Qae="successfully deleted",Jae=DN.callbackify(tce),Xae=DN.promisify(Vae.search),Zae=DN.promisify(zae.getTableSchema);Lq.exports={convertDelete:Jae};function ece(e){return`${e.deleted_hashes.length} ${jae}${e.deleted_hashes.length===1?"":"s"} ${Qae}`}o(ece,"generateReturnMessage");async function tce({statement:e,hdb_user:t}){let r=await Zae(e.table.databaseid,e.table.tableid);LN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=LN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=$ae.parse(a).statements[0],l={operation:Wae.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await Xae(c);let u=await Yae.deleteRecords(l);return LN.isEmptyOrZeroLength(u.message)&&(u.message=ece(u)),delete u.txn_time,u}catch(u){throw Kae.error(u),u.hdb_code?u.message:u}}o(tce,"convertDelete")});var Cl=M((qve,xq)=>{"use strict";var Gve=fn(),$p=Q(),{validateBySchema:Mq}=ft(),Nl=require("joi"),rce=Wi(),gS=oe(),{handleHDBError:SS,hdbErrors:nce,ClientError:vq}=_e(),{HDB_ERROR_MSGS:TS,HTTP_STATUS_CODES:MN}=nce,Uq=ue();Uq.initSync();var{getDatabases:vN}=(Oe(),D(mt)),sce=require("fs-extra"),ice=(H(),D(W));xq.exports={describeAll:oce,describeTable:yS,describeSchema:ace};async function oce(e={}){try{let t=gS.isEmptyOrZeroLength(e),r=!!e.bypass_auth,n,s;!t&&!r&&(n=e.hdb_user?.role?.permission,s=n?.super_user||n?.cluster_user);let i=vN(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let p in m)try{let h;if(t||s||r)h=await yS({schema:f,table:p,exactCount:u});else if(n&&n[f].describe&&n[f].tables[p].describe){let E=n[f].tables[p].attribute_permissions;h=await yS({schema:f,table:p,exactCount:u},E)}h&&l.push(h)}catch(h){$p.error(h)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return $p.error("Got an error in describeAll"),$p.error(t),SS(new Error,TS.DESCRIBE_ALL_ERR)}}o(oce,"describeAll");async function yS(e,t){gS.transformReq(e);let{schema:r,table:n}=e;r=r?.toString(),n=n?.toString();let s=t;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(s=e.hdb_user?.role?.permission[r]?.tables[n]?.attribute_permissions);let i=Mq(e,Nl.object({database:Nl.string(),table:Nl.string().required(),exact_count:Nl.boolean().strict()}));if(i)throw new vq(i.message);let c=vN()[r];if(!c)throw SS(new Error,TS.SCHEMA_NOT_FOUND(e.schema),MN.NOT_FOUND);let l=c[n];if(!l)throw SS(new Error,TS.TABLE_NOT_FOUND(e.schema,e.table),MN.NOT_FOUND);function u(p){d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await sce.stat(l.primaryStore.env.path)).size}catch(p){$p.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),Uq.get(ice.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=rce.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){$p.warn(`unable to stat table dbi due to ${p}`)}return m}o(yS,"descTable");async function ace(e){gS.transformReq(e);let t=Mq(e,Nl.object({database:Nl.string(),exact_count:Nl.boolean().strict()}));if(t)throw new vq(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=vN()[n];if(!i)throw SS(new Error,TS.SCHEMA_NOT_FOUND(e.schema),MN.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),gS.isEmpty(l)||l.describe){let u=await yS({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(ace,"describeSchema")});var Gq=M((Vve,Hq)=>{"use strict";var cce=Cl(),{hdbErrors:Bq}=_e(),{getDatabases:Fq}=(Oe(),D(mt));Hq.exports={checkSchemaExists:kq,checkSchemaTableExists:lce,schemaDescribe:cce};async function kq(e){if(!Fq()[e])return Bq.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(kq,"checkSchemaExists");async function lce(e,t){let r=await kq(e);if(r)return r;if(!Fq()[e][t])return Bq.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(lce,"checkSchemaTableExists")});var kN=M((jve,Zq)=>{"use strict";var{decode:uce}=require("msgpackr"),{isMainThread:Yve,parentPort:Wve,threadId:zve}=require("worker_threads"),bS=mr(),Nd=wt(),BN=(H(),D(W)),hn=Q(),xN=ue(),dce=(H(),D(W)),{onMessageByType:fce}=nt(),Kq=Wi(),{recordAction:qq,recordActionBinary:mce}=(Ps(),D(G_)),{publishToStream:pce}=bS,{ConsumerEvents:$q}=require("nats"),hce=fn(),{promisify:Ece}=require("util"),{decodeBlobsWithWrites:_ce}=(Ns(),D(JA)),Yq=Ece(setTimeout),IS=1e4,wS,AS,gce,Sce,Wq,Vp=new Map,Cd=new Map;Zq.exports={initialize:zq,ingestConsumer:FN,setSubscription:Tce,setIgnoreOrigin:Ace,getDatabaseSubscriptions:Rce,updateConsumer:jq};async function zq(){fce(BN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await jq(n)}),Wq=!0,hn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await bS.getNATSReferences();wS=e,AS=e.info.server_name,gce=t,Sce=r}o(zq,"initialize");async function jq(e){if(e.status==="start"){let{js:t,jsm:r}=await Qq(e.node_domain_name);FN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Vp.get(e.stream_name+e.node_domain_name);t&&(hn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Vp.set(e.stream_name+e.node_domain_name,"close")),Cd.get(e.node_domain_name)==="failed"&&Cd.set(e.node_domain_name,"close")}}o(jq,"updateConsumer");var NS=new Map;function Tce(e,t,r){let n=NS.get(e);n||NS.set(e,n=new Map),n.set(t,r),Wq||zq().then(yce)}o(Tce,"setSubscription");async function yce(){let e=await hce.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Nd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await Qq(r),!n))break;let{schema:a,table:c}=i,l=Kq.createNatsTableStreamName(a,c);FN(l,n,s,r)}}}o(yce,"accessConsumers");async function Qq(e){let t,r,n=1;for(;!r;)try{t=await wS.jetstream({domain:e}),r=await wS.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Cd.get(e)==="close")break;Cd.set(e,"failed"),n%10===1&&hn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<IS?n++*100:IS;await Yq(i)}return{js:t,jsm:r}}o(Qq,"connectToRemoteJS");function Rce(){return NS}o(Rce,"getDatabaseSubscriptions");var Jq;function Ace(e){Jq=e}o(Ace,"setIgnoreOrigin");var Xq=100,Vq=new Array(Xq),RS=0;async function FN(e,t,r,n){let{connection:s}=await bS.getNATSReferences();wS=s,AS=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,AS),hn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Cd.get(n)==="close")break;a%10===1&&hn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(hn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await bS.createConsumer(r,e,AS,new Date(Date.now()).toISOString()));let d=a++*100<IS?a++*100:IS;await Yq(d)}let c=!1,l;for(;!c;){if(Vp.get(e+n)==="close"||Cd.get(n)==="close"){Vp.delete(e+n),c=!0;continue}l=await i.consume({max_messages:xN.get(BN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Vp.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===$q.ConsumerDeleted&&(await l.close(),c=!0),d.type===$q.HeartbeatsMissed){let f=d.data;hn.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(hn.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${l.consumer.stream}`),l.stop(),u=!0)}})();try{for await(let d of l)await Vq[RS],Vq[RS]=bce(d).catch(f=>{hn.error(f)}),++RS>=Xq&&(RS=0)}catch(d){d.message==="consumer deleted"?(hn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):hn.error("Error consuming clustering ingest, restarting consumer",d)}}}o(FN,"ingestConsumer");async function bce(e){let t;await _ce(()=>{t=uce(e.data)}),qq(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),hn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=xN.get(BN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!Jq),mce(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;hn.trace("processing message:",a,c,u,(d?"records: "+d.map(O=>O?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),hn.trace(`messageProcessor nats msg id: ${e.headers.get(Nd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(O=>h=O),{timestamp:g,user:A,node_name:S}=m||{},R=NS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=h,R.send(t);else if(d.length===1&&!l)R.send({type:UN(a),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:A,nodeName:S});else{let O=d.map((F,te)=>({type:UN(a),value:F,expiresAt:p,id:f?.[te],table:u}));for(;l;)O.push({type:UN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:O,table:u,timestamp:g,onCommit:h,user:A,nodeName:S})}xN.get(dce.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&pce(e.subject.split(".").slice(0,-1).join("."),Kq.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&qq(N,"replication-latency",e.subject,a,"ingest")}catch(a){hn.error(a)}e.ack()}o(bce,"messageProcessor");function UN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(UN,"convertOperation")});var mr=M((rUe,E$)=>{"use strict";var qr=ue();qr.initSync();var Ice=require("fs-extra"),wce=require("semver"),Wp=require("path"),{monotonicFactory:Nce}=require("ulidx"),t$=Nce(),Cce=require("util"),r$=require("child_process"),Oce=Cce.promisify(r$.exec),Pce=r$.spawn,Xr=wt(),et=(H(),D(W)),{packageJson:Lce,PACKAGE_ROOT:Dce}=Tt(),CS=oe(),_i=Q(),OS=Wi(),Mce=_S(),Kp=yt(),{broadcast:vce,onMessageByType:Uce,getWorkerIndex:xce}=nt(),{isMainThread:n$}=require("worker_threads"),{Encoder:Bce,decode:$N}=require("msgpackr"),s$=new Bce,{isEmpty:Dl}=CS,i$=as(),Jve=48*36e11;n$&&Uce(et.ITC_EVENT_TYPES.RESTART,()=>{En=void 0,Ll=void 0});var{connect:Fce,StorageType:kce,RetentionPolicy:Hce,AckPolicy:VN,DeliverPolicy:KN,DiscardPolicy:Gce,NatsConnection:Xve,JetStreamManager:Zve,JetStreamClient:eUe,StringCodec:tUe,JSONCodec:qce,createInbox:YN,headers:$ce,ErrorCode:e$}=require("nats"),{recordAction:Vce}=(Ps(),D(G_)),{encodeBlobsAsBuffers:Kce}=(Ns(),D(JA)),o$=qce(),Yce="clustering",Wce=Lce.engines[Xr.NATS_SERVER_NAME],zce=Wp.join(Dce,"dependencies"),qN=Wp.join(zce,`${process.platform}-${process.arch}`,Xr.NATS_BINARY_NAME),HN,GN,Yp,Ol,Pl;E$.exports={runCommand:a$,checkNATSServerInstalled:jce,createConnection:WN,getConnection:zp,getJetStreamManager:jp,getJetStream:l$,getNATSReferences:Zi,getServerList:Jce,createLocalStream:zN,listStreams:u$,deleteLocalStream:Xce,getServerConfig:Od,listRemoteStreams:Zce,viewStream:ele,viewStreamIterator:tle,publishToStream:rle,request:ile,reloadNATS:jN,reloadNATSHub:ole,reloadNATSLeaf:ale,extractServerName:sle,requestErrorHandler:cle,createLocalTableStream:p$,createTableStreams:dle,purgeTableStream:h$,purgeSchemaTableStreams:fle,getStreamInfo:mle,updateLocalStreams:hle,closeConnection:Qce,getJsmServerName:PS,addNatsMsgHeader:d$,clearClientCache:c$,updateRemoteConsumer:lle,createConsumer:f$,updateConsumerIterator:ule};async function a$(e,t=void 0){let{stdout:r,stderr:n}=await Oce(e,{cwd:t});if(n)throw new Error(n.replace(`
16
16
  `,""));return r.replace(`
17
- `,"")}o(s$,"runCommand");async function Kce(){try{await yce.access(GN)}catch{return!1}let e=await s$(`${GN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Rce.eq(t,$ce)}o(Kce,"checkNATSServerInstalled");async function WN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await r$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}_i.trace("create nats connection called");let i=await vce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Gr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_i.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&_i.error("Error with Nats client connection, connection closed",a),i===En&&i$()}),i}o(WN,"createConnection");function i$(){En=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(i$,"clearClientCache");async function Yce(){En&&(await En.drain(),En=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Yce,"closeConnection");var En,Ll;async function zp(){return Ll||(Ll=WN(Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Ll),En||Ll}o(zp,"getConnection");async function jp(){if(Ol)return Ol;Dl(En)&&await zp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await En.jetstreamManager({domain:e,timeout:6e4}),Ol}o(jp,"getJetStreamManager");async function o$(){if(Pl)return Pl;Dl(En)&&await zp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=En.jetstream({domain:e,timeout:6e4}),Pl}o(o$,"getJetStream");async function Zi(){let e=En||await zp(),t=Ol||await jp(),r=Pl||await o$();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function Wce(e){let t=Gr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await r$.getClusterUser(),s=await WN(t,r,n),i=YN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=n$.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await CS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Wce,"getServerList");async function zN(e,t){let{jsm:r}=await Zi(),n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Uce.File,retention:xce.Limits,subjects:t,discard:Bce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(zN,"createLocalStream");async function a$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(a$,"listStreams");async function zce(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(zce,"deleteLocalStream");async function jce(e){let{connection:t}=await Zi(),r=[],n=YN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(n$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(jce,"listRemoteStreams");async function Qce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=XG(),a={durable_name:i,ack_policy:VN.Explicit};t&&(a.deliver_policy=KN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=$N(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(Qce,"viewStream");async function*Jce(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=XG(),a={durable_name:i,ack_policy:VN.Explicit};t&&(a.deliver_policy=KN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=$N(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(Jce,"viewStreamIterator");async function Xce(e,t,r,n){_i.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=c$(n,r);let{js:s}=await Zi(),i=await PS(),a=`${e}.${i}`,c=await qce(()=>n instanceof Uint8Array?n:t$.encode(n));try{_i.trace(`publishToStream publishing to subject: ${a}`),Hce(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return u$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_i.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await zN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(Xce,"publishToStream");function c$(e,t){t===void 0&&(t=kce());let r=Gr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(c$,"addNatsMsgHeader");function Od(e){e=e.toLowerCase();let t=Wp.join(Gr.get(et.CONFIG_PARAMS.ROOTPATH),Gce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(qN)&&(qN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),qN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(HN)&&(HN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),HN;_i.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Od,"getServerConfig");async function l$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:VN.Explicit,durable_name:r,deliver_policy:KN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(l$,"createConsumer");async function Zce(e,t,r){await e.consumers.delete(t,r)}o(Zce,"removeConsumer");function ele(e){return e.split(".")[1]}o(ele,"extractServerName");async function tle(e,t,r=6e4,n=YN()){if(!CS.isObject(t))throw new Error("data param must be an object");let s=t$.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return $N(c.data)}o(tle,"request");function jN(e){return new Promise(async(t,r)=>{let n=wce(GN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(jN,"reloadNATS");async function rle(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await jN(e)}o(rle,"reloadNATSHub");async function nle(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await jN(e)}o(nle,"reloadNATSLeaf");function sle(e,t,r){let n;switch(e.code){case JG.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case JG.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(sle,"requestErrorHandler");async function ile(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await mle(r),{schema:i,table:a}=e,c=OS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await u$(async()=>{if(e.subscribe===!0)await l$(s,c,n.info.server_name,l);else try{await Zce(s,c,n.info.server_name)}catch(u){_i.trace(u)}})}o(ile,"updateRemoteConsumer");async function ole(e,t,r,n){let s=OS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!e$&&Dce()<Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=kN();await c(a)}await Pce(a),n==="stop"&&await CS.asyncSetTimeout(1e3)}o(ole,"updateConsumerIterator");function u$(e){return Oce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(u$,"exclusiveLock");async function d$(e,t){let r=OS.createNatsTableStreamName(e,t),n=await PS(),s=ule(e,t,n);await zN(r,[s])}o(d$,"createLocalTableStream");async function ale(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await d$(n,s)}}o(ale,"createTableStreams");async function f$(e,t,r=void 0){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=OS.createNatsTableStreamName(e,t),{domain:s}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_i.warn(n);else throw n}}o(f$,"purgeTableStream");async function cle(e,t){if(Gr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await f$(e,t[r])}o(cle,"purgeSchemaTableStreams");async function lle(e){return(await jp()).streams.info(e)}o(lle,"getStreamInfo");function ule(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ule,"createSubjectName");async function PS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(PS,"getJsmServerName");async function dle(){let e=await jp(),t=await PS(),r=await a$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=fle(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");_i.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(dle,"updateLocalStreams");function fle(e){let{config:t}=e,r=!1,n=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Gr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(fle,"updateStreamLimits");async function mle(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _i.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(mle,"connectToRemoteJS")});function QN(e){let t=e.get(LS),r=t?(0,Pd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(LS,(0,Pd.pack)(r))}return r}function Qp(e){return QN(e).remoteNameToId}function h$(e,t){let r=QN(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(LS,(0,Pd.pack)(r)),s}function DS(e,t){let r=QN(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(LS,(0,Pd.pack)(r))}return p$.trace?.("The remote node name map",e,n,s),s}var p$,Pd,LS,JN=ie(()=>{p$=w(Xn());us();Pd=require("msgpackr"),LS=Symbol.for("remote-ids");o(QN,"getIdMappingRecord");o(Qp,"exportIdMapping");o(h$,"remoteToLocalNodeId");o(DS,"getIdOfRemoteNode")});var XN={};Ie(XN,{commitsAwaitingReplication:()=>Dd,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>Md,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>vd});function Yt(){return E$||(E$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Md(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function vd(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;T$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Yt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function ple(){vd(e=>{Qa({},(t,r)=>{let n=e.name,s=_$.get(n);if(s||_$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Md(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Dd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Ld.default.get(B.REPLICATION_SECUREPORT)??(!Ld.default.get(B.REPLICATION_PORT)&&Ld.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ld.default.get(B.REPLICATION_PORT)||Ld.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){g$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var g$,S$,Ld,T$,E$,_$,Dd,Ml=ie(()=>{Oe();us();hm();g$=require("worker_threads"),S$=w(_e()),Ld=w(ue());H();T$=w(Xn());server.nodes=[];o(Yt,"getHDBNodeTable");o(Md,"getReplicationSharedStatus");o(vd,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");_$=new Map;aU((e,t,r)=>{if(r>server.nodes.length)throw new S$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Dd||(Dd=new Map,ple());let n=Dd.get(e);return n||(n=[],Dd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(ple,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var I$={};Ie(I$,{connectedToNode:()=>vl,disconnectedFromNode:()=>xd,ensureNode:()=>Yo,requestClusterStatus:()=>b$,startOnMainThread:()=>eC});async function eC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){MS.set(i,Jp(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Yt().primaryStore.get(a);if(l!==null){let u=e.url??Ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Yt().primaryStore.get(a)&&c();for(let l of Zp(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}vd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||Ja()&&i?.url===Ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Yt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Ud)if(i.url===m.url){Ud.delete(f);break}Ud.set(i.name,i)}let u=at();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=Qa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];MS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:MS.get(f),endTime:Date.now(),replicates:!0}),MS.delete(f));let g=Xp(i,f),A=to.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},hle);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Yt().primaryStore.get(it())?.replicates}),Yt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Yt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):US(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),xd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Ud.keys()),c=a.sort(),l=c.indexOf(i.name||gi(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!ZN.default.get(B.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Ud.get(h);u=eo.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),vl=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",xd),(0,to.onMessageByType)("connected-to-node",vl),(0,to.onMessageByType)("request-cluster-status",b$)}function b$(e,t){let r=[];for(let[n,s]of Ud)try{let i=eo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=R$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Yt();e=e??gi(t.url),t.name=e;try{if(t.ca){let s=new A$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!ZN.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=R$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,vS,ut,y$,ZN,A$,R$,hle,eo,xd,vl,Ud,MS,th=ie(()=>{Oe();to=w(nt());us();vS=require("worker_threads");Ml();ut=w(Q()),y$=w(require("lodash")),ZN=w(ue());H();A$=require("crypto"),{cloneDeep:R$}=y$.default,hle=200,eo=new Map,Ud=new Map,MS=new Map;o(eC,"startOnMainThread");o(b$,"requestClusterStatus");vS.parentPort&&(xd=o(e=>{vS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),vl=o(e=>{vS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{US(e)}));o(Yo,"ensureNode")});var fs=M(Wt=>{"use strict";var pr=require("path"),{watch:Ele}=require("chokidar"),kn=require("fs-extra"),Bd=require("node-forge"),L$=require("net"),{generateKeyPair:tC,X509Certificate:Wo,createPrivateKey:D$}=require("crypto"),_le=require("util");tC=_le.promisify(tC);var Nt=Bd.pki,Si=require("joi"),{v4:M$}=require("uuid"),{validateBySchema:iC}=ft(),{forComponent:gle}=Q(),ds=ue(),ks=(H(),D(W)),{CONFIG_PARAMS:xl}=ks,Ti=EA(),{ClientError:Xa}=_e(),BS=require("node:tls"),{relative:v$,join:Sle}=require("node:path"),{CERTIFICATE_VALUES:w$}=Ti,Tle=kc(),rC=Tt(),{table:yle,getDatabases:Rle,databases:xS}=(Oe(),D(mt)),{getJWTRSAKeys:N$}=(Id(),D(Gp)),je=gle("tls").conditional;Wt.generateKeys=cC;Wt.updateConfigCert=G$;Wt.createCsr=Ole;Wt.signCertificate=Ple;Wt.setCertTable=Fd;Wt.loadCertificates=k$;Wt.reviewSelfSignedCert=uC;Wt.createTLSSelector=V$;Wt.listCertificates=Y$;Wt.addCertificate=xle;Wt.removeCertificate=Fle;Wt.createNatsCerts=Mle;Wt.generateCertsKeys=Dle;Wt.getReplicationCert=nh;Wt.getReplicationCertAuth=Cle;Wt.renewSelfSigned=vle;Wt.hostnamesFromCert=fC;Wt.getKey=kle;Wt.getHostnamesFromCertificate=Hle;Wt.getPrimaryHostName=dC;var{urlToNodeName:U$,getThisNodeUrl:Ale,getThisNodeName:kS,clearThisNodeName:ble}=(us(),D(zo)),{readFileSync:Ile,statSync:x$}=require("node:fs"),pUe=ue(),{getTicketKeys:wle,onMessageFromWorkers:Nle}=nt(),{isMainThread:B$}=require("worker_threads"),{TLSSocket:F$,createSecureContext:hUe}=require("node:tls"),oC=3650,rh=["127.0.0.1","localhost","::1"],aC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Nle(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await uC())});var Zr;function ec(){return Zr||(Zr=Rle().system.hdb_certificate,Zr||(Zr=yle({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(ec,"getCertTable");async function nh(){let e=V$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(kS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function Cle(){ec();let e=(await nh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Cle,"getReplicationCertAuth");var C$,Za=new Map;function k$(){if(C$)return;C$=!0;let e=[{configKey:xl.TLS},{configKey:xl.OPERATIONSAPI_TLS}];ec();let t=pr.dirname(rC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=rC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&v$(Sle(t,"keys"),a);c&&O$(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&B$){let d;O$(u,f=>{if(w$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=$$(u),h=new Wo(p),E;try{E=dC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(w$.cert)))return;let g=Zr.primaryStore.get(E),A=x$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(k$,"loadCertificates");function O$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&B$&&je.warn?.(`Reloading ${r}:`,i),n=c,t($$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,x$(e)):je.error?.(`${r} file not found:`,e),Ele(e,{persistent:!1}).on("change",s)}o(O$,"loadAndWatch");function nC(){let e=Ale();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return U$(e)}o(nC,"getHost");function FS(){let e=kS();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(FS,"getCommonName");async function Ole(){let e=await nh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:FS()},...aC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:H$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Bd.pki.certificationRequestToPem(n)}o(Ole,"createCsr");function H$(){let e=rh.includes(FS())?rh:[...rh,FS()];return e.includes(nC())||e.push(nC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>L$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(H$,"certExtensions");async function Ple(e){let t={},r=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(pr.join(r,d.private_key_name))){n=kn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await sC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Bd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+oC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Bd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Ple,"signCertificate");async function Lle(e,t){await Fd({name:kS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Fd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Lle,"createCertificateTable");async function Fd(e){let t;try{t=new Wo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ec(),await Zr.patch(e)}o(Fd,"setCertTable");async function cC(){let e=await tC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(cC,"generateKeys");async function lC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await nh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+oC);let i=[{name:"commonName",value:FS()},...aC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(H$()),n.sign(e,Bd.md.sha256.create()),Nt.certificateToPem(n)}o(lC,"generateCertificates");async function sC(){let e=await Y$(),t;for(let r of e){if(!r.is_authority)continue;let n=await K$(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(D$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(sC,"getCertAuthority");async function q$(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+oC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(xl.REPLICATION_HOSTNAME)??U$(ds.get(xl.REPLICATION_URL))??M$().split("-")[0]}`},...aC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Bd.md.sha256.create());let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,Ti.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,Nt.privateKeyToPem(e)),n}o(q$,"generateCertAuthority");async function Dle(){let{privateKey:e,publicKey:t}=await cC(),r=await q$(e,t),n=await lC(e,t,r);await Lle(n,r),G$()}o(Dle,"generateCertsKeys");async function Mle(){let e=await lC(Nt.privateKeyFromPem(Ti.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(Ti.CERTIFICATE_VALUES.cert)),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ti.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=pr.join(t,Ti.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,Ti.CERTIFICATE_VALUES.cert)}o(Mle,"createNatsCerts");async function vle(){ec();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await uC()}o(vle,"renewSelfSigned");async function uC(){ble(),await k$(),ec();let e=await sC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ds.get(xl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=ds.get(xl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=v$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await cC(),kn.existsSync(pr.join(a,Ti.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${M$().split("-")[0]}.pem`),await kn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await q$(s,Nt.setRsaPublicKey(s.n,s.e),!1);await Fd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=kS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await sC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await lC(Nt.privateKeyFromPem(e.private_key),s,n);await Fd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(uC,"reviewSelfSignedCert");function G$(){let e=Tle(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ti.PRIVATEKEY_PEM_NAME),n=pr.join(t,Ti.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,Ti.NATS_CA_PEM_NAME),i=ks.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),rC.updateConfigValue(void 0,void 0,a,!1,!0)}o(G$,"updateConfigCert");function $$(e){return e.startsWith("-----BEGIN")?e:Ile(e,"utf8")}o($$,"readPEM");var P$=BS.createSecureContext;BS.createSecureContext=function(e){if(!e.cert||!e.key)return P$(e);let t={...e};delete t.key,delete t.cert;let r=P$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Ule=F$.prototype._init;F$.prototype._init=function(e,t){Ule.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Ul=new Map;function V$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ul.clear();let d=0;if(xS===void 0){c();return}for await(let f of xS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,Ul.set(p.subject,m))}for await(let f of xS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await K$(f.private_key_name),E=f.certificate,g=new Wo(E);if(Ul.has(g.issuer)&&(E+=`
18
- `+Ul.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:wle(),availableCAs:Ul,ca:t&&Array.from(Ul.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(A.sessionIdContext=a.sessionIdContext);let S=BS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(Ul),S.certStart=E.toString().slice(0,100);let R=f.hostnames??fC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===nC()&&(p+=2),L$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",BS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),xS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(V$,"createTLSSelector");async function K$(e){let t=Za.get(e);return!t&&e?await kn.readFile(pr.join(ds.get(xl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(K$,"getPrivateKeyByName");async function Y$(){ec();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(Y$,"listCertificates");async function xle(e){let t=iC(e,Si.object({name:Si.string().required(),certificate:Si.string().required(),is_authority:Si.boolean().required(),private_key:Si.string(),hosts:Si.array(),uses:Si.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of Za)!s&&!c&&a.checkPrivateKey(D$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=dC(a)}catch(p){je.error?.(p)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=Ble(r??d);s&&!c&&!l&&(await kn.writeFile(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Fd(m),"Successfully added certificate: "+f}o(xle,"addCertificate");function Ble(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Ble,"sanitizeName");async function Fle(e){let t=iC(e,Si.object({name:Si.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Zr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await kn.remove(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(Fle,"removeCertificate");function dC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||fC(e)[0]}o(dC,"getPrimaryHostName");function fC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(fC,"hostnamesFromCert");async function kle(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=iC(e,Si.object({name:Si.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await N$()).privateKey;if(r===".jwtPublic")return(await N$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o(kle,"getKey");function Hle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Hle,"getHostnamesFromCertificate")});var EV={};Ie(EV,{CONFIRMATION_STATUS_POSITION:()=>mV,LATENCY_POSITION:()=>YS,NodeReplicationConnection:()=>Hd,OPERATION_REQUEST:()=>_C,RECEIVED_TIME_POSITION:()=>SC,RECEIVED_VERSION_POSITION:()=>gC,RECEIVING_STATUS_POSITION:()=>TC,RECEIVING_STATUS_RECEIVING:()=>hV,RECEIVING_STATUS_WAITING:()=>pV,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>WS,databaseSubscriptions:()=>rc,replicateOverWS:()=>ih,tableUpdateListeners:()=>RC});async function WS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!hC){let l=(0,cV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),hC=u.secureContexts}if(i=hC.get(s),i&&ce.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,uV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(KS?.caCount!==jo.size&&(KS=lV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),KS.caCount=jo.size),c.secureContext=KS),new iV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=Bl.pid%1e3+"-"+oV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,O,F,ee,q,k,J=6e4,Y,le=0,ae=0,re=0,Re=sV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],qe=0,Rr;if(t.url){let y=o(()=>{ee&&ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,rV).unref(),y()}else Zt();e._socket?.setMaxListeners(200);function Zt(){clearTimeout(F),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},rV*2).unref()}o(Zt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=Md(f,u,g)),m}o(Ht,"getSharedStatus"),u&&vc(u);let er,qf,Dc=[],qt=[],Gf,$f=[],kE=[],HE=[],eA=150,Vf=25,Le=0,qE=0,Kf=!1,To,Mr,Ar,Yf;e.on("message",tA);async function tA(y){if(r=await r,!r){ce.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Mc(y),e.off("message",tA),e.on("message",Mc)}o(tA,"onWSMessageWhenAuthorized");function Mc(y){le=performance.now();try{let b=y.dataView=new jc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,G]=U;switch(L){case z$:{if(x){if(g){if(g!==x){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([kd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{vc(u=U[2]),u==="system"&&(er=Qa(t,(de,z)=>{gu(z)&&Su(z)}),e.on("close",()=>{er?.remove()}))}catch(de){ce.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([kd])),Vr(1008,de.message);return}Wf()}break}case eV:{ce.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(gu(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){ce.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=at()?.[z])}}break}case kd:Vr();break;case _C:try{let de=r?.replicates||r?.subscribers||r?.name;ce.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{ce.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([qS,z]))},z=>{ce.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([qS,{requestId:x.requestId,error:mC(z)}]))})}catch(de){e.send((0,ot.encode)([qS,{requestId:x.requestId,error:mC(de)}]))}break;case qS:let{resolve:j,reject:X}=A.get(x.requestId);ce.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):j(x),A.delete(x.requestId);break;case pC:let $=U[3];if(!E){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),Dc[G]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case j$:Yf=f?h$(x,f):new Map,Gf=U[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Gf}`);break;case Q$:let pe=G;HE[pe]=x;break;case Z$:Ht()[mV]=x,ce.trace?.(s,"received and broadcasting committed update",x),Ht().buffer.notify();break;case X$:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case GS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);ce.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new EC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Je(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){ce.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case J$:{let de=x,z;try{let ne=U[3],me=qt[G]||(qt[G]=E[U[4]]);if(!me)return ce.warn?.("Unknown table id trying to handle record request",G);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==qE){qE=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([pC,{typedStructs:ve.typed,structures:ve.named},G,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=ct||{};$e.version=(0,dV.getLastVersion)(),ct&&ct[Mu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([HS,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([HS,de])}catch(ne){z=(0,ot.encode)([HS,de,{error:ne.message}])}e.send(z);break}case HS:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;N_(()=>{let De=Dc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(b_),6e4).unref()},De=>{let ve=_u(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case W$:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){ce.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise(Gt=>{ce.debug?.("Waiting for subscription to database "+u),Ne=Gt}),h.ready=Ne,rc.set(u,h)}if(r.name)z=Yt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let Gt of de){let Dt=Gt.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([kd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ce.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([kd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ce.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,Wn=o((Ne,Gt)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),yo(9),yo(B_),_(vr=Gt),Mi()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return ce.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ri=vt.encoder;(Ne.extendedType&K_||!ri.typedStructs)&&(ri._mergeStructures(ri.getStructures()),ri.typedStructs&&(ri.lastTypedStructuresLength=ri.typedStructs.length));let Tu=De[Dt];if(!(Tu&&Tu.startTime<Gt&&(!Tu.endTime||Tu.endTime>Gt)))return VS&&ce.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),FM();VS&&ce.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let rA=Ne.version;fe.txnTime!==rA&&(fe.txnTime&&(VS&&ce.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),Mi()),fe.txnTime=rA,i=c,_(rA));let Bc=Ne.residencyId,nA=Aa(Bc,bs),$E;if(nA&&!nA.includes(g)){let ni=Aa(Ne.previousResidencyId,bs);if(ni&&!ni.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return FM();let zf=Ne.recordId;ce.trace?.(s,"sending invalidation",zf,g,"from",Dt);let jf=0;Bc&&(jf|=Qc),Ne.previousResidencyId&&(jf|=Jc);let oA,VE=null;for(let kM in bs.indices){if(!VE){if(oA=Ne.getValue(vt,!0),!oA)break;VE={}}VE[kM]=oA[kM]}$E=Xc(Ne.version,Ur,zf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ri.encode(VE),jf,Bc,Ne.previousResidencyId,Ne.expiresAt)}function FM(){return ce.trace?.(s,"skipping audit record",Ne.recordId),q||(q=setTimeout(()=>{q=null,(vr||0)+tV/2<$e&&(VS&&ce.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([X$,$e])))},tV).unref()),new Promise(setImmediate)}o(FM,"skipAuditRecord");let sA=ri.typedStructs,iA=ri.structures;if((sA?.length!=Mt.typed_length||iA?.length!=Mt.structure_length)&&(Mt.typed_length=sA?.length,Mt.structure_length=iA.length,ce.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([pC,{typedStructs:sA,structures:iA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),Bc&&!kE[Bc]&&(e.send((0,ot.encode)([Q$,nA,Bc])),kE[Bc]=!0),$E)yo($E.length),K($E);else{let ni=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),jf=>br(jf,Ne.recordId),vt.rootStore);let zf=ni[0]===66?8:0;yo(ni.length-zf),K(ni,zf),ce.trace?.("wrote record",Ne.recordId,"length:",ni.length)}return e._socket.writableNeedDrain?new Promise(ni=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ni)}):qe>Vf?new Promise(ni=>{Rr=ni}):new Promise(setImmediate)},"sendAuditRecord"),Mi=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Je(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new yC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:Gt,startTime:Dt,endTime:Ur}of Ar){let Mt=DS(Gt,f);ce.debug?.("subscription to",Gt,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Su(u),er||(er=Il(Gt=>{Gt.databaseName===u&&Su(u)}),qf=vp(Gt=>{Gt===u&&(e.send((0,ot.encode)([kd])),Vr())}),e.on("close",()=>{er?.remove(),qf?.remove()})),e.send((0,ot.encode)([j$,Qp(h.auditStore),Ar.map(({name:Gt})=>Gt)]));let Ne=!0;do{isFinite($e)||(ce.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let Gt;if(Ne&&!ne&&(Ne=!1,$e===0)){ce.info?.("Replicating all tables to",g);let Dt=$e,Ur=zS(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){ce.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),Gt=!0,Ht()[sh]=1;let ri=Xc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),Tu=>br(Tu,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await Wn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ri,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}Gt&&Wn({type:"end_txn"},$e),Ht()[sh]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=xt(Ur);ce.debug?.("sending audit record",new Date(Dt)),Ht()[sh]=Dt,$e=Dt,await Wn(Mt,Dt),Mr.startTime=Dt,Gt=!0}Gt&&Wn({type:"end_txn"},$e),Ht()[sh]=0,await Qx(f)}while(!ne)}).catch(Ne=>{ce.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{Ht();let U=b.readInt();if(U===9&&b.getUint8(b.position)==B_){b.position++,R=v=b.readFloat64(),m[gC]=R,m[SC]=Date.now(),m[TC]=pV,ce.trace?.("received remote sequence update",R,u);break}let L=b.position,x=xt(y,L,L+U),G=Dc[x.tableId];G||ce.error?.(`No table found with an id of ${x.tableId}`);let j;x.residencyId&&(j=HE[x.residencyId],ce.trace?.(s,"received residency list",j,x.type,x.recordId));try{let X=x.recordId;N_(()=>{I={table:G.name,id:x.recordId,type:x.type,nodeId:Yf.get(x.nodeId),residencyList:j,timestamp:x.version,value:x.getValue(G),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>_u($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(G.decoder.typedStructs),X}P=!1,ce.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[gC]=x.version,m[SC]=Date.now(),m[TC]=hV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Je(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>eA&&!Kf&&(Kf=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Je(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,Kf&&(Kf=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),ce.trace?.("All blobs finished"),!N&&v&&(ce.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([Z$,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},$le)),N=v,ce.debug?.("last sequence committed",new Date(v),u)}})}catch(b){ce.error?.(s,"Error handling incoming replication message",b)}}o(Mc,"onWSMessage"),e.on("ping",Zt),e.on("pong",()=>{if(t.connection){let y=performance.now()-ee;t.connection.latency=y,Ht()&&(m[YS]=y),t.isSubscriptionConnection&&vl({name:g,database:u,url:t.url,latency:y})}ee=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),To&&To.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));ce.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){ce.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Ra=new Set;async function br(y,b){let P=I_(y);if(Ra.has(P)){ce.debug?.("Blob already being sent",P);return}Ra.add(P);try{let I;qe++;for await(let v of y.stream())I&&(ce.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([GS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(ce.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),ce.debug?.("drained",P)),Je(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([GS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){ce.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([GS,{fileId:P,finished:!0,error:mC(I)},Buffer.alloc(0)]))}finally{Ra.delete(P),qe--,qe<Vf&&Rr?.()}}o(br,"sendBlobs");function _u(y,b){let P=I_(y),I=Te.get(P);ce.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new EC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{ce.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(_u,"receiveBlobs");function Wf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Wf)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let y=new Map;f||(f=h?.auditStore);try{for(let I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&DS(I.name,f),G=h?.dbisDB?.get([Symbol.for("seq"),x])??1,j=Math.max(G?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(ce.debug?.("Starting time recorded in db",I.name,x,u,G?.seqId,"start time:",j,new Date(j)),b!==I){let X=f&&DS(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(j=be.seqId,ce.debug?.("Using sequence id from proxy node",b.name,j))}if(x===void 0?ce.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>j&&(j=y.get(x),ce.debug?.("Updating start time from more recent txn recorded",b.name,j)),j===1&&$S)try{new URL($S).hostname===I.name?(ce.warn?.(`Requesting full copy of database ${u} from ${$S}`),j=0):j=Date.now()-6e4}catch(X){ce.error?.("Error parsing leader URL",$S,X)}return ce.trace?.(s,"defining subscription request",I.name,u,new Date(j)),{name:I.name,replicateByDefault:L,tables:U,startTime:j,endTime:I.endTime}});if(P)if(ce.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(Y),P.length>0)e.send((0,ot.encode)([W$,P]));else{let I=o(()=>{let v=performance.now();Y=setTimeout(()=>{le<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Wf,"sendSubscriptionRequestUpdate");function Aa(y,b){if(!y)return;let P=$f[y];return P||(P=b.getResidencyRecord(y),$f[y]=P),P}o(Aa,"getResidence");function gu(y){return!(tc&&tc!="*"&&!tc[y]&&!tc.includes?.(y)&&!tc.some?.(b=>b.name===y))}o(gu,"checkDatabaseAccess");function vc(y){if(h=h||d.get(y),!gu(y))throw new Error(`Access to database "${y}" is not permitted`);h||ce.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return Uc(b,y),!0}o(vc,"setDatabase");function Uc(y,b){let P=at()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([z$,y,b,I]))}o(Uc,"sendNodeDBName");function Su(y){let b=at()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([eV,P,y]))}o(Su,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let GE=1,xc=[];return{end(){To&&To.end(),Mr&&Mr.emit("close")},getRecord(y){let b=GE++;return new Promise((P,I)=>{let v=[J$,b,y.table.tableId,y.id];xc[y.table.tableId]||(v.push(y.table.tableName),xc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),le=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=GE++;return y.requestId=b,e.send((0,ot.encode)([_C,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function yo(y){T(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let G=y.attributes[x],j=L.find(X=>X.name===G.name);(!j||j.type!==G.type)&&(I?ce.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${G.name}: ${G.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(v=!0,U||(G.indexed=!0),j?L[L.indexOf(j)]=G:L.push(G)))}return v?(ce.debug?.("(Re)creating",y),Xe({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var sV,ot,iV,oV,aV,yC,cV,lV,Bl,uV,EC,dV,fV,qle,mC,ce,W$,z$,j$,kd,Q$,pC,J$,HS,_C,qS,X$,Z$,eV,GS,mV,gC,SC,sh,YS,TC,pV,hV,Gle,$S,RC,rc,VS,tV,$le,rV,hC,KS,nV,Hd,AC=ie(()=>{Oe();Io();JN();Fb();us();sV=w(ue());H();Zc();ot=require("msgpackr"),iV=require("ws"),oV=require("worker_threads"),aV=w(Q());th();yC=require("events"),cV=w(fs()),lV=w(require("node:tls"));Ml();Bl=w(require("node:process")),uV=require("node:net");Ps();Ns();EC=require("node:stream"),dV=require("lmdb"),fV=w(require("minimist")),{forComponent:qle,errorToString:mC}=aV.default,ce=qle("replication").conditional,W$=129,z$=140,j$=141,kd=142,Q$=130,pC=132,J$=133,HS=134,_C=136,qS=137,X$=143,Z$=144,eV=145,GS=146,mV=0,gC=1,SC=2,sh=3,YS=4,TC=5,pV=0,hV=1,Gle=(0,fV.default)(Bl.argv),$S=Gle.HDB_LEADER_URL??Bl.env.HDB_LEADER_URL,RC=new Map,rc=new Map,VS=!0,tV=300,$le=2,rV=3e4;o(WS,"createWebSocket");nV=500,Hd=class extends yC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=nV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??gi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await WS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Bl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=nV,this.nodeSubscriptions&&vl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ce.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ce.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ce.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&xd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ce.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(ih,"replicateOverWS")});function oh(e){return e===gV||e===Vle}function Kle(e){return e===SV||e===TV}function bC(e){return e===gV?SV:TV}function Yle(){if(_V)return;_V=!0;let e=Fl.CryptoEngine.prototype,t=Fl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:bC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Kle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Fl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=bC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=bC(c);try{let u=this.crypto?.subtle||this.subtle||Fl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Fl,ah,gV,Vle,SV,TV,_V,yV=ie(()=>{Fl=w(require("pkijs")),ah=require("node:crypto"),gV="1.3.101.112",Vle="1.3.101.113",SV="Ed25519",TV="Ed448",_V=!1;o(oh,"isEd25519OrEd448");o(Kle,"isEdDSAAlgorithmName");o(bC,"getEdDSAAlgorithmName");o(Yle,"applyEd25519Patch");Yle()});function Wle(){return jS||(jS=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),jS.sourcedFrom(IC)),jS}function zle(e){if(zt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return zt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return zt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function qd(e,t){zt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=zle(t);if(r===!1)return zt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=Jle(e);return zt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(zt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(zt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):jle(n[0].cert,n[0].issuer,r)}async function jle(e,t,r){zt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=RV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=RV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,bV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;zt.trace?.("OCSP cache key:",i);let c=await Wle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(zt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return zt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return zt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Qle(e,t,r){zt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,AV.getCertStatus)(e,{ca:t,timeout:r});return zt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function RV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
19
- `)}function Jle(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var AV,bV,IV,zt,IC,ch,jS,QS=ie(()=>{yV();AV=require("easy-ocsp"),bV=require("node:crypto"),IV=w(Xn());Oe();Ua();zt=(0,IV.loggerWithTag)("cert-verification"),IC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){zt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;zt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([Qle(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);zt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return zt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Wle,"getCertificateCacheTable");o(zle,"getCertificateVerificationConfig");o(qd,"verifyCertificate");o(jle,"verifyOCSP");o(Qle,"performOCSPCheck");o(RV,"bufferToPem");o(Jle,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>oue,disableReplication:()=>tue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>zS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>eT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>vV,replicateOperation:()=>cue,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>lh,servers:()=>Zle,setReplicator:()=>xV,start:()=>eue,startOnMainThread:()=>eC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>US,urlToNodeName:()=>gi});function eue(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(gi(s.url),s);rue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(At.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&At.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){At.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&At.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Yt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,DV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await qd(s.peerCertificate,e);if(!u.valid){At.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){At.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else At.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:At.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=ZS.createSecureContext(u)}catch(l){At.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}vV(()=>{for(let s of n)s()})}function vV(e){let t=0;vd(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function tue(e=!0){MV=e}function rue(e){MV||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of XS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];xV(r,s,e),RC.get(s)?.forEach(i=>i(s))}}))}function xV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class UV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(At.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=sue(h,UV.subscription,e);if(E?.isConnected){let g=Md(t.auditStore,e,h)[YS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new PV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Xle++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;At.warn("Error in load from node",kl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function nue(e,t,r,n,s){let i=XS.get(e);i||XS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Hd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function sue(e,t,r){let n=wV.get(kl);n||(n=new Map,wV.set(kl,n));let s=n.get(r);if(s)return s;let i=Yt().primaryStore.get(e);return i?.url&&(s=new Hd(i.url,t,r,kl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await WS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{At.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{At.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{LV.isMainThread&&At.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{At.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=nue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Xp(n,e.database)),e.replicateByDefault)}catch(t){At.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function US({name:e,url:t,database:r}){At.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Yt().primaryStore.getRange({})));let n=XS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function iue(){if(wC!==void 0)return wC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return wC=new CV.X509Certificate((0,OV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return kl||(kl=Hs.default.get("replication_hostname")??gi(Hs.default.get("replication_url"))??iue()??NV("operationsapi_network_secureport")??NV("operationsapi_network_port")??"127.0.0.1")}function oue(){kl=void 0}function NV(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function JS(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function zS(e){return Qp(e)?.[it()]}function Ja(){let e=Hs.default.get("replication_url");return e||eT(it())}function eT(e){let t=JS("replication_port");if(t)return`ws://${e}:${t}`;if(t=JS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=JS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=JS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function gi(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),Il((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];At.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):aue(n)&&t(s,n,!1)}o(r,"forDatabase")}function aue(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Jp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function cue(e){let t={message:""};if(e.replicated){e.replicated=!1,At.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Hs,At,CV,OV,ZS,PV,LV,DV,MV,Xle,Zle,jo,tc,XS,wV,wC,kl,us=ie(()=>{Oe();Ua();wu();AC();xr();Hs=w(ue()),At=w(Q()),CV=require("crypto");QS();OV=require("fs");th();Ml();H();JN();ZS=w(require("node:tls")),PV=w(_e()),LV=require("worker_threads"),DV=w(fs()),Xle=1,Zle=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ZS.rootCertificates):new Set;o(eue,"start");o(vV,"monitorNodeCAs");o(tue,"disableReplication");o(rue,"assignReplicationSource");o(xV,"setReplicator");XS=new Map;o(nue,"getSubscriptionConnection");wV=new Map;o(sue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(US,"unsubscribeFromNode");o(iue,"getCommonNameFromCert");o(it,"getThisNodeName");o(oue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(NV,"getHostFromListeningPort");o(JS,"getPortFromListeningPort");o(zS,"getThisNodeId");Ue.replication={getThisNodeId:zS,exportIdMapping:Qp};o(Ja,"getThisNodeUrl");o(eT,"hostnameToUrl");o(gi,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(aue,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(cue,"replicateOperation")});var iT=M((zUe,qV)=>{"use strict";var Gd=FG(),{validateBySchema:uh}=ft(),{commonValidators:$d,schemaRegex:NC}=Hi(),hr=require("joi"),lue=Q(),uue=require("uuid").v4,nT=ko(),Vd=(H(),D(W)),due=require("util"),nc=is(),{handleHDBError:Qo,hdbErrors:fue,ClientError:dh}=_e(),{HDB_ERROR_MSGS:tT,HTTP_STATUS_CODES:Jo}=fue,{SchemaEventMsg:sT}=rs(),BV=mr(),{getDatabases:mue}=(Oe(),D(mt)),{transformReq:Kd}=oe(),{replicateOperation:FV}=(us(),D(zo)),rT=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message}),pue=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message}).required(),hue=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();qV.exports={createSchema:Eue,createSchemaStructure:kV,createTable:_ue,createTableStructure:HV,createAttribute:Rue,dropSchema:gue,dropTable:Sue,dropAttribute:Tue,getBackup:Aue};async function Eue(e){let t=await kV(e);return nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema)),t}o(Eue,"createSchema");async function kV(e){let t=uh(e,hr.object({database:rT,schema:rT}));if(t)throw new dh(t.message);if(Kd(e),!await Gd.checkSchemaExists(e.schema))throw Qo(new Error,tT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,tT.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(kV,"createSchemaStructure");async function _ue(e){return Kd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await HV(e)}o(_ue,"createTable");async function HV(e){let t=uh(e,hr.object({database:rT,schema:rT,table:pue,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:hue}));if(t)throw new dh(t.message);if(!await Gd.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,tT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,tT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:uue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(HV,"createTableStructure");async function gue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);Kd(e);let r=await Gd.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);let n=await Gd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema)),await BV.purgeSchemaTableStreams(e.schema,s);let i=await FV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(gue,"dropSchema");async function Sue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new dh(t.message);Kd(e);let r=await Gd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await BV.purgeTableStream(e.schema,e.table);let n=await FV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Sue,"dropTable");async function Tue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new dh(t.message);Kd(e);let r=await Gd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(Vd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),yue(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw lue.error(`Got an error deleting attribute ${due.inspect(e)}.`),n}}o(Tue,"dropAttribute");function yue(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)}o(yue,"dropAttributeFromGlobal");async function Rue(e){Kd(e);let t=mue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Rue,"createAttribute");function Aue(e){return nc.getBackup(e)}o(Aue,"getBackup")});var $V=M((QUe,GV)=>{"use strict";var{OPERATIONS_ENUM:bue}=(H(),D(W)),CC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=bue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};GV.exports=CC});var OC=M((ZUe,zV)=>{"use strict";var Iue=is(),XUe=$V(),oT=oe(),aT=(H(),D(W)),wue=ue(),{handleHDBError:VV,hdbErrors:Nue}=_e(),{HDB_ERROR_MSGS:KV,HTTP_STATUS_CODES:YV}=Nue,Cue=Object.values(aT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),WV="To use this operation audit log must be enabled in harperdb-config.yaml";zV.exports=Oue;async function Oue(e){if(oT.isEmpty(e.schema))throw new Error(KV.SCHEMA_REQUIRED_ERR);if(oT.isEmpty(e.table))throw new Error(KV.TABLE_REQUIRED_ERR);if(!wue.get(aT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw VV(new Error,WV,YV.BAD_REQUEST,aT.LOG_LEVELS.ERROR,WV,!0);let t=oT.checkSchemaTableExist(e.schema,e.table);if(t)throw VV(new Error,t,YV.NOT_FOUND,aT.LOG_LEVELS.ERROR,t,!0);if(!oT.isEmpty(e.search_type)&&Cue.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Iue.readAuditLog(e)}o(Oue,"readAuditLog")});var QV=M((txe,jV)=>{"use strict";var{OPERATIONS_ENUM:Pue}=(H(),D(W)),PC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pue.GET_BACKUP,this.schema=t,this.table=r}};jV.exports=PC});var ZV=M((ixe,XV)=>{"use strict";var Lue=is(),nxe=QV(),LC=oe(),Due=(H(),D(W)),sxe=ue(),{handleHDBError:Mue,hdbErrors:vue}=_e(),{HDB_ERROR_MSGS:JV,HTTP_STATUS_CODES:Uue}=vue;XV.exports=xue;async function xue(e){if(LC.isEmpty(e.schema))throw new Error(JV.SCHEMA_REQUIRED_ERR);if(LC.isEmpty(e.table))throw new Error(JV.TABLE_REQUIRED_ERR);let t=LC.checkSchemaTableExist(e.schema,e.table);if(t)throw Mue(new Error,t,Uue.NOT_FOUND,Due.LOG_LEVELS.ERROR,t,!0);return await Lue.getBackup(readAuditLogObject)}o(xue,"getBackup")});var n1=M((axe,r1)=>{"use strict";var Bue=ue(),sc=require("joi"),Fue=ft(),e1=require("moment"),kue=require("fs-extra"),DC=require("path"),Hue=require("lodash"),fh=(H(),D(W)),{LOG_LEVELS:Hl}=(H(),D(W)),que="YYYY-MM-DD hh:mm:ss",Gue=DC.resolve(__dirname,"../logs");r1.exports=function(e){return Fue.validateBySchema(e,$ue)};var $ue=sc.object({from:sc.custom(t1),until:sc.custom(t1),level:sc.valid(Hl.NOTIFY,Hl.FATAL,Hl.ERROR,Hl.WARN,Hl.INFO,Hl.DEBUG,Hl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(Vue)});function t1(e,t){if(e1(e,e1.ISO_8601).format(que)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(t1,"validateDatetime");function Vue(e,t){if(Hue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Bue.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?DC.join(Gue,fh.LOG_NAMES.INSTALL):DC.join(n,s);return kue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Vue,"validateReadLogPath")});var vC=M((lxe,i1)=>{"use strict";var cT=(H(),D(W)),Kue=Q(),Yue=ue(),Wue=n1(),MC=require("path"),s1=require("fs-extra"),{once:zue}=require("events"),{handleHDBError:jue,hdbErrors:Que}=_e(),{PACKAGE_ROOT:Jue}=bt(),{replicateOperation:Xue}=(us(),D(zo)),Zue=MC.join(Jue,"logs"),ede=1e3,tde=200;i1.exports=rde;async function rde(e){let t=Wue(e);if(t)throw jue(t,t.message,Que.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Xue(e),n=Yue.get(cT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?cT.LOG_NAMES.HDB:e.log_name,i=s===cT.LOG_NAMES.INSTALL?MC.join(Zue,cT.LOG_NAMES.INSTALL):MC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?ede:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(s1.statSync(i).size-(E+5)*tde,0));let A=s1.createReadStream(i,{start:g});A.on("error",q=>{Kue.error(q)});let S=0,R=[],N="",O;A.on("data",q=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let J=0,Y;for(;(Y=k.exec(q))&&!A.destroyed;){O&&(O.message=q.slice(J,Y.index),F(O));let[le,ae,re]=Y,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ae,thread:Te,level:Fe,tags:Re,message:""},J=Y.index+le.length}N=q.slice(J)}),A.on("end",q=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(q){let k,J,Y;switch(!0){case(a&&l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),q.level===c&&k>=J&&k<=Y&&S<h?S++:q.level===c&&k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(q.timestamp),J=new Date(u),q.level===c&&k>=J&&S<h?S++:q.level===c&&k>=J&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(q.timestamp),Y=new Date(f),q.level===c&&k<=Y&&S<h?S++:q.level===c&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(q.timestamp),J=new Date(u),Y=new Date(f),k>=J&&k<=Y&&S<h?S++:k>=J&&k<=Y&&(ro(q,p,R),S++,S===E&&A.destroy());break;case a:q.level===c&&S<h?S++:q.level===c&&(ro(q,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(q.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(q.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ro(q,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(ro(q,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await zue(A,"close");let ee=await r;if(ee.replicated){for(let q of R)q.node=server.hostname;for(let q of ee.replicated){let k=q.node;if(q.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${q.reason}`},p,R);else for(let J of q.results)J.node=k,ro(J,p,R)}}return R}o(rde,"readLog");function ro(e,t,r){t==="desc"?nde(e,r):t==="asc"?sde(e,r):r.push(e)}o(ro,"pushLineToResult");function nde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(nde,"insertDescending");function sde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(sde,"insertAscending")});var lT=M((hxe,l1)=>{"use strict";var UC=require("joi"),{string:Yd,boolean:o1,date:ide}=UC.types(),ode=ft(),{validateSchemaExists:dxe,validateTableExists:fxe,validateSchemaName:mxe}=Hi(),ade=(H(),D(W)),cde=wt(),a1=ue();a1.initSync();var pxe=Yd.invalid(a1.get(ade.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(cde.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),c1={operation:Yd.valid("add_node","update_node","set_node_replication"),node_name:Yd.optional(),subscriptions:UC.array().items({table:Yd.optional(),schema:Yd.optional(),database:Yd.optional(),subscribe:o1.required(),publish:o1.required().custom(ude),start_time:ide.iso()})};function lde(e){return ode.validateBySchema(e,UC.object(c1))}o(lde,"addUpdateNodeValidator");function ude(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`)}o(ude,"checkForFalsy");l1.exports={addUpdateNodeValidator:lde,validationSchema:c1}});var Wd=M((_xe,u1)=>{"use strict";var xC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},BC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};u1.exports={Node:xC,NodeSubscription:BC}});var f1=M((Sxe,d1)=>{"use strict";var dde=(H(),D(W)).OPERATIONS_ENUM,FC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=dde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};d1.exports=FC});var mh=M((yxe,m1)=>{"use strict";var kC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},HC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};m1.exports={RemotePayloadObject:kC,RemotePayloadSubscription:HC}});var h1=M((Axe,p1)=>{"use strict";var qC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};p1.exports=qC});var _1=M((Oxe,E1)=>{"use strict";var fde=h1(),Ixe=$t(),wxe=_t(),mde=Q(),{getSchemaPath:Nxe,getTransactionAuditStorePath:Cxe}=yt(),{getDatabases:pde}=(Oe(),D(mt));E1.exports=hde;async function hde(e){let t=new fde;try{let r=pde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){mde.warn(`unable to stat table dbi due to ${r}`)}return t}o(hde,"lmdbGetTableSize")});var S1=M((Lxe,g1)=>{"use strict";var GC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};g1.exports=GC});var jd=M((Bxe,A1)=>{"use strict";var Ede=require("fs-extra"),_de=require("path"),_n=require("systeminformation"),ic=Q(),T1=mr(),Mxe=wt(),zd=(H(),D(W)),gde=_1(),Sde=Cl(),{getThreadInfo:y1}=nt(),ph=ue();ph.initSync();var Tde=S1(),{openEnvironment:vxe}=_t(),{getSchemaPath:Uxe}=yt(),{database:xxe,databases:$C}=(Oe(),D(mt)),uT;A1.exports={getHDBProcessInfo:WC,getNetworkInfo:jC,getDiskInfo:zC,getMemoryInfo:YC,getCPUInfo:KC,getTimeInfo:VC,getSystemInformation:QC,systemInformation:yde,getTableSize:JC,getMetrics:XC};function VC(){return _n.time()}o(VC,"getTimeInfo");async function KC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:ee,rawLoadSystem:q,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(KC,"getCPUInfo");async function YC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(YC,"getMemoryInfo");async function WC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await Ede.readFile(_de.join(ph.get(zd.CONFIG_PARAMS.ROOTPATH),zd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===zd.NODE_ERROR_CODES.ENOENT)ic.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(WC,"getHDBProcessInfo");async function zC(){let e={};try{if(!ph.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(zC,"getDiskInfo");async function jC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(jC,"getNetworkInfo");async function QC(){if(uT!==void 0)return uT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,uT=e,uT}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(QC,"getSystemInformation");async function JC(){let e=[],t=await Sde.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await gde(n));return e}o(JC,"getTableSize");async function XC(){let e={};for(let t in $C){let r=e[t]={},n=r.tables={};for(let s in $C[t])try{let i=$C[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(XC,"getMetrics");async function R1(){if(ph.get(zd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await T1.getNATSReferences(),t=await T1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(R1,"getNatsStreamInfo");async function yde(e){let t=new Tde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await QC(),t.time=VC(),t.cpu=await KC(),t.memory=await YC(),t.disk=await zC(),t.network=await jC(),t.harperdb_processes=await WC(),t.table_size=await JC(),t.metrics=await XC(),t.threads=await y1(),t.replication=await R1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await QC();break;case"time":t.time=VC();break;case"cpu":t.cpu=await KC();break;case"memory":t.memory=await YC();break;case"disk":t.disk=await zC();break;case"network":t.network=await jC();break;case"harperdb_processes":t.harperdb_processes=await WC();break;case"table_size":t.table_size=await JC();break;case"database_metrics":case"metrics":t.metrics=await XC();break;case"threads":t.threads=await y1();break;case"replication":t.replication=await R1();break;default:break}return t}o(yde,"systemInformation")});var Xo=M((Gxe,N1)=>{"use strict";var Rde=Bn(),ZC=oe(),Ade=require("util"),ql=(H(),D(W)),b1=ue();b1.initSync();var bde=CN(),I1=fn(),{Node:kxe,NodeSubscription:Hxe}=Wd(),Ide=Qu(),wde=f1(),{RemotePayloadObject:Nde,RemotePayloadSubscription:Cde}=mh(),{handleHDBError:Ode,hdbErrors:Pde}=_e(),{HTTP_STATUS_CODES:Lde,HDB_ERROR_MSGS:Dde}=Pde,Mde=di(),vde=jd(),{packageJson:Ude}=bt(),{getDatabases:xde}=(Oe(),D(mt)),qxe=Ade.promisify(bde.authorize),Bde=I1.searchByHash,Fde=I1.searchByValue;N1.exports={isEmpty:kde,getNodeRecord:Hde,upsertNodeRecord:qde,buildNodePayloads:Gde,checkClusteringEnabled:$de,getAllNodeRecords:Vde,getSystemInfo:Kde,reverseSubscription:w1};function kde(e){return e==null}o(kde,"isEmpty");async function Hde(e){let t=new Ide(ql.SYSTEM_SCHEMA_NAME,ql.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Bde(t)}o(Hde,"getNodeRecord");async function qde(e){let t=new wde(ql.SYSTEM_SCHEMA_NAME,ql.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Rde.upsert(t)}o(qde,"upsertNodeRecord");function w1(e){if(ZC.isEmpty(e.subscribe)||ZC.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(w1,"reverseSubscription");function Gde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=ZC.getTableHashAttribute(l,u),{subscribe:f,publish:m}=w1(c),p=xde()[l]?.[u],h=new Cde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Nde(r,t,s,n)}o(Gde,"buildNodePayloads");function $de(){if(!b1.get(ql.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ode(new Error,Dde.CLUSTERING_NOT_ENABLED,Lde.BAD_REQUEST,void 0,void 0,!0)}o($de,"checkClusteringEnabled");async function Vde(){let e=new Mde(ql.SYSTEM_SCHEMA_NAME,ql.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fde(e))}o(Vde,"getAllNodeRecords");async function Kde(){let e=await vde.getSystemInformation();return{hdb_version:Ude.version,node_version:e.node_version,platform:e.platform}}o(Kde,"getSystemInfo")});var eO=M((Vxe,U1)=>{"use strict";var dT=mr(),C1=oe(),O1=wt(),P1=(H(),D(W)),fT=Q(),L1=iT(),Yde=rp(),{RemotePayloadObject:Wde}=mh(),{handleHDBError:D1,hdbErrors:zde}=_e(),{HTTP_STATUS_CODES:M1}=zde,{NodeSubscription:v1}=Wd();U1.exports=jde;async function jde(e,t){let r;try{r=await dT.request(`${t}.${O1.REQUEST_SUFFIX}`,new Wde(P1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),fT.trace("Response from remote describe all request:",r)}catch(a){fT.error(`addNode received error from describe all request to remote node: ${a}`);let c=dT.requestErrorHandler(a,"add_node",t);throw D1(new Error,c,M1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===O1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw D1(new Error,a,M1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===P1.SYSTEM_SCHEMA_NAME){await dT.createLocalTableStream(l,c);let h=new v1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=C1.doesSchemaExist(l),d=n[l]!==void 0,f=c?C1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(fT.trace(`addNode creating schema: ${l}`),await L1.createSchema({operation:"create_schema",schema:l})),!f&&m){fT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Yde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await L1.createTable(h)}await dT.createLocalTableStream(l,c);let p=new v1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(jde,"reviewSubscriptions")});var Qd={};Ie(Qd,{addNodeBack:()=>tO,removeNodeBack:()=>rO,setNode:()=>Zde});async function Zde(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=gi(t)):t=eT(r);let n=(0,B1.validateBySchema)(e,Xde);if(n)throw(0,Zo.handleHDBError)(n,n.message,Jde.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Zo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Yt(),E=await h.get(p);if(!E)throw new Zo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ms.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Zo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Zo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,qs.getReplicationCert)();let p=await(0,qs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,qs.createCsr)(),ms.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ms.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(x1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=x1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ms.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ms.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,qs.setCertTable)({name:Qde.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,qs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??gi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function tO(e){ms.trace("addNodeBack received request:",e);let t=await(0,qs.signCertificate)(e),r;e.csr?(r=t.signingCA,ms.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,ms.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,qs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ms.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function rO(e){ms.trace("removeNodeBack received request:",e),await Yt().delete(e.name)}function x1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var qs,B1,oc,ac,ms,Zo,Qde,Jde,Xde,Jd=ie(()=>{qs=w(fs()),B1=w(ft()),oc=w(require("joi")),ac=w(ue());H();th();Ml();us();ms=w(Q()),Zo=w(_e()),{pki:Qde}=require("node-forge"),{HTTP_STATUS_CODES:Jde}=Zo.hdbErrors,Xde=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(Zde,"setNode");o(tO,"addNodeBack");o(rO,"removeNodeBack");o(x1,"reverseSubscription")});var _T=M((Zxe,k1)=>{"use strict";var{handleHDBError:mT,hdbErrors:efe}=_e(),{HTTP_STATUS_CODES:pT}=efe,{addUpdateNodeValidator:tfe}=lT(),hT=Q(),ET=(H(),D(W)),F1=wt(),rfe=oe(),hh=mr(),Eh=Xo(),nO=ue(),nfe=eO(),{Node:sfe,NodeSubscription:ife}=Wd(),{broadcast:ofe}=nt(),{setNode:afe}=(Jd(),D(Qd)),Jxe=ue(),Xxe=(H(),D(W)),cfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",lfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ufe=nO.get(ET.CONFIG_PARAMS.CLUSTERING_NODENAME);k1.exports=dfe;async function dfe(e,t=!1){if(hT.trace("addNode called with:",e),nO.get(ET.CONFIG_PARAMS.REPLICATION_URL)||nO.get(ET.CONFIG_PARAMS.REPLICATION_HOSTNAME))return afe(e);Eh.checkClusteringEnabled();let r=tfe(e);if(r)throw mT(r,r.message,pT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Eh.getNodeRecord(n);if(!rfe.isEmptyOrZeroLength(f))throw mT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,pT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await nfe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=cfe,a;let c=Eh.buildNodePayloads(s,ufe,ET.OPERATIONS_ENUM.ADD_NODE,await Eh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new ife(p.schema,p.table,p.publish,p.subscribe))}hT.trace("addNode sending remote payload:",c);let u;try{u=await hh.request(`${n}.${F1.REQUEST_SUFFIX}`,c)}catch(f){hT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await hh.updateRemoteConsumer(E,n)}let m=hh.requestErrorHandler(f,"add_node",n);throw mT(new Error,m,pT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===F1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw mT(new Error,f,pT.INTERNAL_SERVER_ERROR,"error",f)}hT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await hh.updateRemoteConsumer(p,n),p.subscribe===!0&&await hh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new sfe(n,l,u.system_info);return await Eh.upsertNodeRecord(d),ofe({type:"nats_update"}),i.length>0?a.message=lfe:a.message=`Successfully added '${n}' to manifest`,a}o(dfe,"addNode")});var aO=M((r0e,q1)=>{"use strict";var{handleHDBError:sO,hdbErrors:ffe}=_e(),{HTTP_STATUS_CODES:iO}=ffe,{addUpdateNodeValidator:mfe}=lT(),_h=Q(),gT=(H(),D(W)),H1=wt(),t0e=oe(),gh=mr(),Sh=Xo(),oO=ue(),{cloneDeep:pfe}=require("lodash"),hfe=eO(),{Node:Efe,NodeSubscription:_fe}=Wd(),{broadcast:gfe}=nt(),{setNode:Sfe}=(Jd(),D(Qd)),Tfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",yfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Rfe=oO.get(gT.CONFIG_PARAMS.CLUSTERING_NODENAME);q1.exports=Afe;async function Afe(e){if(_h.trace("updateNode called with:",e),oO.get(gT.CONFIG_PARAMS.REPLICATION_URL)??oO.get(gT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Sfe(e);Sh.checkClusteringEnabled();let t=mfe(e);if(t)throw sO(t,t.message,iO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Sh.getNodeRecord(r);s.length>0&&(n=pfe(s));let{added:i,skipped:a}=await hfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Tfe,c;let l=Sh.buildNodePayloads(i,Rfe,gT.OPERATIONS_ENUM.UPDATE_NODE,await Sh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];_h.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}_h.trace("updateNode sending remote payload:",l);let u;try{u=await gh.request(`${r}.${H1.REQUEST_SUFFIX}`,l)}catch(d){_h.error(`updateNode received error from request: ${d}`);let f=gh.requestErrorHandler(d,"update_node",r);throw sO(new Error,f,iO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===H1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw sO(new Error,d,iO.INTERNAL_SERVER_ERROR,"error",d)}_h.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await gh.updateRemoteConsumer(m,r),m.subscribe===!0?await gh.updateConsumerIterator(m.schema,m.table,r,"start"):await gh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Efe(r,[],u.system_info)]),await bfe(n[0],i,u.system_info),a.length>0?c.message=yfe:c.message=`Successfully updated '${r}'`,c}o(Afe,"updateNode");async function bfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new _fe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Sh.upsertNodeRecord(n),gfe({type:"nats_update"})}o(bfe,"updateNodeTable")});var Y1=M((s0e,K1)=>{"use strict";var V1=require("joi"),{string:G1}=V1.types(),Ife=ft(),$1=(H(),D(W)),wfe=ue(),Nfe=wt();K1.exports=Cfe;function Cfe(e){let t=G1.invalid(wfe.get($1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Nfe.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=V1.object({operation:G1.valid($1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ife.validateBySchema(e,r)}o(Cfe,"removeNodeValidator")});var ST=M((o0e,J1)=>{"use strict";var{handleHDBError:W1,hdbErrors:Ofe}=_e(),{HTTP_STATUS_CODES:z1}=Ofe,Pfe=Y1(),Th=Q(),j1=Xo(),Lfe=oe(),Xd=(H(),D(W)),Q1=wt(),cO=mr(),lO=ue(),{RemotePayloadObject:Dfe}=mh(),{NodeSubscription:Mfe}=Wd(),vfe=tp(),Ufe=_l(),{broadcast:xfe}=nt(),{setNode:Bfe}=(Jd(),D(Qd)),Ffe=lO.get(Xd.CONFIG_PARAMS.CLUSTERING_NODENAME);J1.exports=kfe;async function kfe(e){if(Th.trace("removeNode called with:",e),lO.get(Xd.CONFIG_PARAMS.REPLICATION_URL)??lO.get(Xd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bfe(e);j1.checkClusteringEnabled();let t=Pfe(e);if(t)throw W1(t,t.message,z1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await j1.getNodeRecord(r);if(Lfe.isEmptyOrZeroLength(n))throw W1(new Error,`Node '${r}' was not found.`,z1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Dfe(Xd.OPERATIONS_ENUM.REMOVE_NODE,Ffe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await cO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await cO.updateRemoteConsumer(new Mfe(d.schema,d.table,!1,!1),r)}catch(f){Th.error(f)}}try{i=await cO.request(`${r}.${Q1.REQUEST_SUFFIX}`,s),Th.trace("Remove node reply from remote node:",r,i)}catch(l){Th.error("removeNode received error from request:",l),a=!0}let c=new vfe(Xd.SYSTEM_SCHEMA_NAME,Xd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Ufe.deleteRecord(c),xfe({type:"nats_update"}),i?.status===Q1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Th.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`}o(kfe,"removeNode")});var eK=M((c0e,Z1)=>{"use strict";var X1=require("joi"),{string:Hfe,array:qfe}=X1.types(),Gfe=ft(),$fe=lT();Z1.exports=Vfe;function Vfe(e){let t=X1.object({operation:Hfe.valid("configure_cluster").required(),connections:qfe.items($fe.validationSchema).required()});return Gfe.validateBySchema(e,t)}o(Vfe,"configureClusterValidator")});var uO=M((u0e,iK)=>{"use strict";var tK=(H(),D(W)),TT=Q(),Kfe=oe(),Yfe=ue(),Wfe=ST(),zfe=_T(),jfe=Xo(),Qfe=eK(),{handleHDBError:rK,hdbErrors:Jfe}=_e(),{HTTP_STATUS_CODES:nK}=Jfe,Xfe="Configure cluster complete.",Zfe="Failed to configure the cluster. Check the logs for more details.",eme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";iK.exports=tme;async function tme(e){TT.trace("configure cluster called with:",e);let t=Qfe(e);if(t)throw rK(t,t.message,nK.BAD_REQUEST,void 0,void 0,!0);let r=await jfe.getAllNodeRecords(),n=[];if(Yfe.get(tK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await sK(Wfe,{operation:tK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}TT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await sK(zfe,f,f.node_name);s.push(m)}TT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(TT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Kfe.isEmptyOrZeroLength(a))return{message:Xfe,connections:c};if(l)return{message:eme,failed_nodes:a,connections:c};throw rK(new Error,Zfe,nK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(tme,"configureCluster");async function sK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(sK,"functionWrapper")});var lK=M((f0e,cK)=>{"use strict";var yh=require("joi"),rme=ft(),{validateSchemaExists:oK,validateTableExists:nme,validateSchemaName:aK}=Hi(),sme=yh.object({operation:yh.string().valid("purge_stream"),schema:yh.string().custom(oK).custom(aK).optional(),database:yh.string().custom(oK).custom(aK).optional(),table:yh.string().custom(nme).required()});function ime(e){return rme.validateBySchema(e,sme)}o(ime,"purgeStreamValidator");cK.exports=ime});var dO=M((p0e,uK)=>{"use strict";var{handleHDBError:ome,hdbErrors:ame}=_e(),{HTTP_STATUS_CODES:cme}=ame,lme=lK(),ume=mr(),dme=Xo();uK.exports=fme;async function fme(e){e.schema=e.schema??e.database;let t=lme(e);if(t)throw ome(t,t.message,cme.BAD_REQUEST,void 0,void 0,!0);dme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ume.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(fme,"purgeStream")});var pO=M((E0e,_K)=>{"use strict";var mO=Xo(),mme=mr(),RT=ue(),Zd=(H(),D(W)),Gl=wt(),pme=oe(),fO=Q(),{RemotePayloadObject:hme}=mh(),{ErrorCode:dK}=require("nats"),{parentPort:fK}=require("worker_threads"),{onMessageByType:Eme}=nt(),{getThisNodeName:_me}=(us(),D(zo)),{requestClusterStatus:gme}=(th(),D(I$)),{getReplicationSharedStatus:Sme,getHDBNodeTable:Tme}=(Ml(),D(XN)),{CONFIRMATION_STATUS_POSITION:yme,RECEIVED_VERSION_POSITION:Rme,RECEIVED_TIME_POSITION:Ame,SENDING_TIME_POSITION:bme,RECEIVING_STATUS_POSITION:Ime,RECEIVING_STATUS_RECEIVING:wme}=(AC(),D(EV)),mK=RT.get(Zd.CONFIG_PARAMS.CLUSTERING_ENABLED),pK=RT.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);_K.exports={clusterStatus:Nme,buildNodeStatus:EK};var hK;Eme("cluster-status",async e=>{hK(e)});async function Nme(){if(RT.get(Zd.CONFIG_PARAMS.REPLICATION_URL)||RT.get(Zd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(fK){fK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{hK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Sme(u,l,a);c.lastCommitConfirmed=yT(d[yme]),c.lastReceivedRemoteTime=yT(d[Rme]),c.lastReceivedLocalTime=yT(d[Ame]),c.sendingMessage=yT(d[bme]),c.lastReceivedStatus=d[Ime]===wme?"Receiving":"Waiting"}}}else n=gme();n.node_name=_me();let s=Tme().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:pK,is_enabled:mK,connections:[]};if(!mK)return e;let t=await mO.getAllNodeRecords();if(pme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(EK(t[n],e.connections));return await Promise.allSettled(r),e}o(Nme,"clusterStatus");function yT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(yT,"asDate");async function EK(e,t){let r=e.name,n=new hme(Zd.OPERATIONS_ENUM.CLUSTER_STATUS,pK,void 0,await mO.getSystemInfo()),s,i,a=Gl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await mme.request(Gl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Gl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Gl.CLUSTER_STATUS_STATUSES.CLOSED,fO.error(`Error getting node status from ${r} `,s))}catch(l){fO.warn(`Error getting node status from ${r}`,l),l.code===dK.NoResponders?a=Gl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===dK.Timeout?a=Gl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Gl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Cme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Zd.PRE_4_0_0_VERSION&&await mO.upsertNodeRecord(l)}catch(l){fO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(EK,"buildNodeStatus");function Cme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Cme,"NodeStatusObject")});var EO=M((g0e,gK)=>{"use strict";var{handleHDBError:Ome,hdbErrors:Pme}=_e(),{HTTP_STATUS_CODES:Lme}=Pme,Dme=mr(),Mme=Xo(),hO=oe(),AT=require("joi"),vme=ft(),Ume=2e3,xme=AT.object({timeout:AT.number().min(1),connected_nodes:AT.boolean(),routes:AT.boolean()});gK.exports=Bme;async function Bme(e){Mme.checkClusteringEnabled();let t=vme.validateBySchema(e,xme);if(t)throw Ome(t,t.message,Lme.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||hO.autoCastBoolean(n),a=s===void 0||hO.autoCastBoolean(s),c={nodes:[]},l=await Dme.getServerList(r??Ume),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:hO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Bme,"clusterNetwork")});var RK=M((T0e,yK)=>{"use strict";var _O=require("joi"),SK=ft(),{routeConstraints:TK}=gA();yK.exports={setRoutesValidator:Fme,deleteRoutesValidator:kme};function Fme(e){let t=_O.object({server:_O.valid("hub","leaf"),routes:TK.required()});return SK.validateBySchema(e,t)}o(Fme,"setRoutesValidator");function kme(e){let t=_O.object({routes:TK.required()});return SK.validateBySchema(e,t)}o(kme,"deleteRoutesValidator")});var bT=M((R0e,OK)=>{"use strict";var ea=Tt(),gO=oe(),Gs=(H(),D(W)),ef=ue(),AK=RK(),{handleHDBError:bK,hdbErrors:Hme}=_e(),{HTTP_STATUS_CODES:IK}=Hme,wK="cluster routes successfully set",NK="cluster routes successfully deleted";OK.exports={setRoutes:Gme,getRoutes:$me,deleteRoutes:Vme};function qme(e){let t=ea.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=gO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:wK,set:i,skipped:s}}o(qme,"setRoutesNats");function Gme(e){let t=AK.setRoutesValidator(e);if(t)throw bK(t,t.message,IK.BAD_REQUEST,void 0,void 0,!0);if(ef.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return qme(e);let r=[],n=[],s=ef.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{CK(s,i)?n.push(i):(s.push(i),r.push(i))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:wK,set:r,skipped:n}}o(Gme,"setRoutes");function CK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(CK,"existsInArray");function $me(){if(ef.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ea.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return ef.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o($me,"getRoutes");function Vme(e){let t=AK.deleteRoutesValidator(e);if(t)throw bK(t,t.message,IK.BAD_REQUEST,void 0,void 0,!0);if(ef.get(Gs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Kme(e);let r=[],n=[],s=ef.get(Gs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{CK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ea.updateConfigValue(Gs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:NK,deleted:r,skipped:n}}o(Vme,"deleteRoutes");function Kme(e){let t=ea.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=gO.isEmptyOrZeroLength(r)?null:r,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=gO.isEmptyOrZeroLength(n)?null:n,ea.updateConfigValue(Gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:NK,deleted:s,skipped:i}}o(Kme,"deleteRoutesNats")});var LK=M((b0e,PK)=>{"use strict";var Rh=require("alasql"),$l=require("recursive-iterator"),yi=Q(),Yme=oe(),Ah=(H(),D(W)),SO=class{static{o(this,"sqlStatementBucket")}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,zme(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(s=>Ah.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Ah.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Wme(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Rh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Wme(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(Wme,"filterReadRestrictedAttrs");function zme(e,t,r,n,s){jme(e,t,r,n,s)}o(zme,"interpretAST");function bh(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(bh,"addSchemaTableToMap");function jme(e,t,r,n,s){if(!e){yi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Rh.yy.Insert?Zme(e,t,r):e instanceof Rh.yy.Select?Qme(e,t,r,n,s):e instanceof Rh.yy.Update?Jme(e,t,r):e instanceof Rh.yy.Delete?Xme(e,t,r):yi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(jme,"getRecordAttributesAST");function Qme(e,t,r,n,s){if(!e){yi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Yme.isEmptyOrZeroLength(i)){yi.error("No schema specified");return}e.from.forEach(c=>{bh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bh(c.table,t,r,n,s)});let a=new $l(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{yi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new $l(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{yi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new $l(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{yi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new $l(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{yi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Qme,"getSelectAttributes");function Jme(e,t,r){if(!e){yi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new $l(e.columns),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}o(Jme,"getUpdateAttributes");function Xme(e,t,r){if(!e){yi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new $l(e.where),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}o(Xme,"getDeleteAttributes");function Zme(e,t,r){if(!e){yi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new $l(e.columns),s=e.into.databaseid;bh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.into.tableid,s,i.columnid,t,r)}o(Zme,"getInsertAttributes");function TO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(TO,"pushAttribute");PK.exports=SO});var MK=M((w0e,DK)=>{"use strict";var epe=wt(),yO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+epe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};DK.exports=yO});var xK=M((C0e,UK)=>{"use strict";var vK=wt(),RO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+vK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+vK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};UK.exports=RO});var FK=M((P0e,BK)=>{"use strict";var AO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BK.exports=AO});var HK=M((D0e,kK)=>{"use strict";var tpe=wt(),bO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+tpe.SERVER_SUFFIX.ADMIN,this.password=r}};kK.exports=bO});var CT=M((v0e,$K)=>{"use strict";var Vl=require("path"),Kl=require("fs-extra"),rpe=MK(),npe=xK(),spe=FK(),ipe=HK(),IO=as(),rf=oe(),Hn=Tt(),wT=(H(),D(W)),Ih=wt(),{CONFIG_PARAMS:sr}=wT,nf=Q(),wh=ue(),qK=Wi(),wO=mr(),ope=fs(),tf="clustering",ape=1e4,GK=50;$K.exports={generateNatsConfig:lpe,removeNatsConfig:upe,getHubConfigPath:cpe};function cpe(){let e=wh.get(sr.ROOTPATH);return Vl.join(e,tf,Ih.NATS_CONFIG_FILES.HUB_SERVER)}o(cpe,"getHubConfigPath");async function lpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=wh.get(sr.ROOTPATH);Kl.ensureDirSync(Vl.join(r,"clustering","leaf")),wh.initSync();let n=Hn.getConfigFromFile(sr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(sr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(sr.CLUSTERING_TLS_CERTIFICATE);!await Kl.exists(i)&&!await Kl.exists(!n)&&await ope.createNatsCerts();let a=Vl.join(r,tf,Ih.PID_FILES.HUB),c=Vl.join(r,tf,Ih.PID_FILES.LEAF),l=Hn.getConfigFromFile(sr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Vl.join(r,tf,Ih.NATS_CONFIG_FILES.HUB_SERVER),d=Vl.join(r,tf,Ih.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(sr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(sr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(sr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wO.checkNATSServerInstalled()||NT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await IO.listUsers(),g=Hn.getConfigFromFile(sr.CLUSTERING_USER),A=await IO.getClusterUser();(rf.isEmpty(A)||A.active!==!0)&&NT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await IT(sr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await IT(sr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await IT(sr.CLUSTERING_HUBSERVER_NETWORK_PORT),await IT(sr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,Y]of E.entries())Y.role?.role===wT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new ipe(Y.username,qK.decrypt(Y.hash))),R.push(new spe(Y.username,qK.decrypt(Y.hash))));let N=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!rf.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new rpe(Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=rf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===wT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Kl.writeJson(u,F),nf.trace(`Hub server config written to ${u}`));let ee=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,q=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new npe(Hn.getConfigFromFile(sr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[q],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===wT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Kl.writeJson(d,k),nf.trace(`Leaf server config written to ${d}`))}o(lpe,"generateNatsConfig");async function IT(e){let t=wh.get(e);return rf.isEmpty(t)&&NT(`port undefined for '${e}'`),await rf.isPortTaken(t)&&NT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(IT,"isPortAvailable");function NT(e){let t=`Error generating clustering config: ${e}`;nf.error(t),console.error(t),process.exit(1)}o(NT,"generateNatsConfigError");async function upe(e){let{port:t,config_file:r}=wO.getServerConfig(e),{username:n,decrypt_hash:s}=await IO.getClusterUser(),i=0,a=2e3;for(;i<GK;){try{let d=await wO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){nf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=GK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&nf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await rf.asyncSetTimeout(u)}let c="0".repeat(ape),l=Vl.join(wh.get(sr.ROOTPATH),tf,r);await Kl.writeFile(l,c),await Kl.remove(l),nf.notify(e,"started.")}o(upe,"removeNatsConfig")});var OO={};Ie(OO,{compactOnStart:()=>dpe,copyDb:()=>jK});async function dpe(){cc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,NO.get)(B.ROOTPATH),t=new Map,r=at();(0,CO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,OT.join)(e,"backup",n+".mdb"),a=(0,OT.join)(e,Fc,n+"-copy.mdb"),c=0;try{c=await VK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){cc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await jK(n,a),console.log("Backing up",n,"to",i);try{await(0,Yl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{hd()}catch(n){cc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Yl.move)(i,s,{overwrite:!0}),await(0,Yl.remove)((0,OT.join)(e,Fc,`${n}-copy.mdb-lock`));try{hd()}catch(n){cc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){cc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,CO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Yl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await VK(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
17
+ `,"")}o(a$,"runCommand");async function jce(){try{await Ice.access(qN)}catch{return!1}let e=await a$(`${qN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return wce.eq(t,Wce)}o(jce,"checkNATSServerInstalled");async function WN(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await i$.getClusterUser();if(Dl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}_i.trace("create nats connection called");let i=await Fce({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qr.get(et.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_i.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&_i.error("Error with Nats client connection, connection closed",a),i===En&&c$()}),i}o(WN,"createConnection");function c$(){En=void 0,Ol=void 0,Pl=void 0,Ll=void 0}o(c$,"clearClientCache");async function Qce(){En&&(await En.drain(),En=void 0,Ol=void 0,Pl=void 0,Ll=void 0)}o(Qce,"closeConnection");var En,Ll;async function zp(){return Ll||(Ll=WN(qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),En=await Ll),En||Ll}o(zp,"getConnection");async function jp(){if(Ol)return Ol;Dl(En)&&await zp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ol=await En.jetstreamManager({domain:e,timeout:6e4}),Ol}o(jp,"getJetStreamManager");async function l$(){if(Pl)return Pl;Dl(En)&&await zp();let{domain:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Dl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Pl=En.jetstream({domain:e,timeout:6e4}),Pl}o(l$,"getJetStream");async function Zi(){let e=En||await zp(),t=Ol||await jp(),r=Pl||await l$();return{connection:e,jsm:t,js:r}}o(Zi,"getNATSReferences");async function Jce(e){let t=qr.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await i$.getClusterUser(),s=await WN(t,r,n),i=YN(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=o$.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await CS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(Jce,"getServerList");async function zN(e,t){let{jsm:r}=await Zi(),n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:kce.File,retention:Hce.Limits,subjects:t,discard:Gce.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(zN,"createLocalStream");async function u$(){let{jsm:e}=await Zi(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(u$,"listStreams");async function Xce(e){let{jsm:t}=await Zi();await t.streams.delete(e)}o(Xce,"deleteLocalStream");async function Zce(e){let{connection:t}=await Zi(),r=[],n=YN(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(o$.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(Zce,"listRemoteStreams");async function ele(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=t$(),a={durable_name:i,ack_policy:VN.Explicit};t&&(a.deliver_policy=KN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=$N(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Xr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(ele,"viewStream");async function*tle(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Zi(),i=t$(),a={durable_name:i,ack_policy:VN.Explicit};t&&(a.deliver_policy=KN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=$N(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(Xr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(tle,"viewStreamIterator");async function rle(e,t,r,n){_i.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=d$(n,r);let{js:s}=await Zi(),i=await PS(),a=`${e}.${i}`,c=await Kce(()=>n instanceof Uint8Array?n:s$.encode(n));try{_i.trace(`publishToStream publishing to subject: ${a}`),Vce(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return m$(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){_i.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await zN(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(rle,"publishToStream");function d$(e,t){t===void 0&&(t=$ce());let r=qr.get(et.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Xr.MSG_HEADERS.ORIGIN)&&r&&t.append(Xr.MSG_HEADERS.ORIGIN,r),t}o(d$,"addNatsMsgHeader");function Od(e){e=e.toLowerCase();let t=Wp.join(qr.get(et.CONFIG_PARAMS.ROOTPATH),Yce);if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Dl(GN)&&(GN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.HUB,config_file:Xr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wp.join(t,Xr.PID_FILES.HUB),hdbNatsPath:t}),GN;if(e===et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Dl(HN)&&(HN={port:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,config_file:Xr.NATS_CONFIG_FILES.LEAF_SERVER,domain:Kp.getConfigFromFile(et.CONFIG_PARAMS.CLUSTERING_NODENAME)+Xr.SERVER_SUFFIX.LEAF,pid_file_path:Wp.join(t,Xr.PID_FILES.LEAF),hdbNatsPath:t}),HN;_i.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Od,"getServerConfig");async function f$(e,t,r,n){try{await e.consumers.add(t,{ack_policy:VN.Explicit,durable_name:r,deliver_policy:KN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(f$,"createConsumer");async function nle(e,t,r){await e.consumers.delete(t,r)}o(nle,"removeConsumer");function sle(e){return e.split(".")[1]}o(sle,"extractServerName");async function ile(e,t,r=6e4,n=YN()){if(!CS.isObject(t))throw new Error("data param must be an object");let s=s$.encode(t),{connection:i}=await Zi(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return $N(c.data)}o(ile,"request");function jN(e){return new Promise(async(t,r)=>{let n=Pce(qN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(jN,"reloadNATS");async function ole(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await jN(e)}o(ole,"reloadNATSHub");async function ale(){let{pid_file_path:e}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await jN(e)}o(ale,"reloadNATSLeaf");function cle(e,t,r){let n;switch(e.code){case e$.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case e$.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(cle,"requestErrorHandler");async function lle(e,t){let r=t+Xr.SERVER_SUFFIX.LEAF,{connection:n}=await Zi(),{jsm:s}=await _le(r),{schema:i,table:a}=e,c=OS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await m$(async()=>{if(e.subscribe===!0)await f$(s,c,n.info.server_name,l);else try{await nle(s,c,n.info.server_name)}catch(u){_i.trace(u)}})}o(lle,"updateRemoteConsumer");async function ule(e,t,r,n){let s=OS.createNatsTableStreamName(e,t),i=r+Xr.SERVER_SUFFIX.LEAF,a={type:et.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!n$&&xce()<qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=kN();await c(a)}await vce(a),n==="stop"&&await CS.asyncSetTimeout(1e3)}o(ule,"updateConsumerIterator");function m$(e){return Mce.writeTransaction(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(m$,"exclusiveLock");async function p$(e,t){let r=OS.createNatsTableStreamName(e,t),n=await PS(),s=ple(e,t,n);await zN(r,[s])}o(p$,"createLocalTableStream");async function dle(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await p$(n,s)}}o(dle,"createTableStreams");async function h$(e,t,r=void 0){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=OS.createNatsTableStreamName(e,t),{domain:s}=Od(et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await zp()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")_i.warn(n);else throw n}}o(h$,"purgeTableStream");async function fle(e,t){if(qr.get(et.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await h$(e,t[r])}o(fle,"purgeSchemaTableStreams");async function mle(e){return(await jp()).streams.info(e)}o(mle,"getStreamInfo");function ple(e,t,r){return`${Xr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(ple,"createSubjectName");async function PS(){if(Yp)return Yp;if(Yp=(await jp())?.nc?.info?.server_name,Yp===void 0)throw new Error("Unable to get jetstream manager server name");return Yp}o(PS,"getJsmServerName");async function hle(){let e=await jp(),t=await PS(),r=await u$();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=Ele(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");_i.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(hle,"updateLocalStreams");function Ele(e){let{config:t}=e,r=!1,n=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=qr.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Ele,"updateStreamLimits");async function _le(e){let t,r;try{t=await En.jetstream({domain:e}),r=await En.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw _i.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(_le,"connectToRemoteJS")});function QN(e){let t=e.get(LS),r=t?(0,Pd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Jp(e)??1,nodes:[]})})}i[n]=0,e.putSync(LS,(0,Pd.pack)(r))}return r}function Qp(e){return QN(e).remoteNameToId}function g$(e,t){let r=QN(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(LS,(0,Pd.pack)(r)),s}function DS(e,t){let r=QN(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(LS,(0,Pd.pack)(r))}return _$.trace?.("The remote node name map",e,n,s),s}var _$,Pd,LS,JN=ie(()=>{_$=w(Xn());us();Pd=require("msgpackr"),LS=Symbol.for("remote-ids");o(QN,"getIdMappingRecord");o(Qp,"exportIdMapping");o(g$,"remoteToLocalNodeId");o(DS,"getIdOfRemoteNode")});var XN={};Ie(XN,{commitsAwaitingReplication:()=>Dd,getHDBNodeTable:()=>Yt,getReplicationSharedStatus:()=>Md,iterateRoutes:()=>Zp,shouldReplicateToNode:()=>Xp,subscribeToNodeUpdates:()=>vd});function Yt(){return S$||(S$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Md(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function vd(e){Yt().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;A$.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Yt().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Xp(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Yt().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function gle(){vd(e=>{Qa({},(t,r)=>{let n=e.name,s=T$.get(n);if(s||T$.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Md(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of Dd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Zp(e){for(let t of e.routes||[]){let r=t.url,n;if(typeof t=="string"?t.includes("://")?r=t:n=t:n=t.hostname??t.host,n&&!r){let s=Ld.default.get(B.REPLICATION_SECUREPORT)??(!Ld.default.get(B.REPLICATION_PORT)&&Ld.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||Ld.default.get(B.REPLICATION_PORT)||Ld.default.get(B.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){y$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var y$,R$,Ld,A$,S$,T$,Dd,Ml=ie(()=>{Oe();us();hm();y$=require("worker_threads"),R$=w(_e()),Ld=w(ue());H();A$=w(Xn());server.nodes=[];o(Yt,"getHDBNodeTable");o(Md,"getReplicationSharedStatus");o(vd,"subscribeToNodeUpdates");o(Xp,"shouldReplicateToNode");T$=new Map;uU((e,t,r)=>{if(r>server.nodes.length)throw new R$.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Dd||(Dd=new Map,gle());let n=Dd.get(e);return n||(n=[],Dd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(gle,"startSubscriptionToReplications");o(Zp,"iterateRoutes")});var C$={};Ie(C$,{connectedToNode:()=>vl,disconnectedFromNode:()=>xd,ensureNode:()=>Yo,requestClusterStatus:()=>N$,startOnMainThread:()=>eC});async function eC(e){let t=0,r=at();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){MS.set(i,Jp(l.auditStore));break}}}to.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=it();function c(){let l=Yt().primaryStore.get(a);if(l!==null){let u=e.url??Ja();if(l===void 0||l.url!==u||l.shard!==e.shard)return Yo(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),Yt().primaryStore.get(a)&&c();for(let l of Zp(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}vd(s)});let n;function s(i,a=i?.name){let c=it()&&a===it()||Ja()&&i?.url===Ja();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of Yt().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of eo){let p;for(let[h,{worker:E,nodes:g}]of m){let A=g[0];if(A&&A.name==a){p=!0;for(let[S,{worker:R}]of m)m.delete(S),ut.warn("Node was deleted, unsubscribing from node",a,S,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:S,url:f});break}}if(p){eo.get(f).iterator.remove(),eo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=eo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${it()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of Ud)if(i.url===m.url){Ud.delete(f);break}Ud.set(i.name,i)}let u=at();if(l||(l=new Map,eo.set(i.url,l)),l.iterator=Qa(e,(f,m,p)=>{p?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let p=l.get(f),h,E=[{replicateByDefault:m,...i}];MS.has(f)&&(E.push({replicateByDefault:m,name:it(),startTime:MS.get(f),endTime:Date.now(),replicates:!0}),MS.delete(f));let g=Xp(i,f),A=to.workers.filter(S=>S.name==="http");if(p?(h=p.worker,p.nodes=E):g&&(t=t%A.length,h=A[t++],l.set(f,{worker:h,nodes:E,url:i.url}),h?.on("exit",()=>{l.get(f)?.worker===h&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let S={type:"subscribe-to-node",database:f,nodes:E};h?h.postMessage(S):eh(S)},Sle);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:Yt().primaryStore.get(it())?.replicates}),Yt().primaryStore.get(it())?.replicates||(n=!1,ut.info("Disabling replication, this node name",it(),Yt().primaryStore.get(it()),f));let S={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};h?h.postMessage(S):US(S)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),xd=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(Ud.keys()),c=a.sort(),l=c.indexOf(i.name||gi(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=eo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished||!ZN.default.get(B.REPLICATION_FAILOVER))return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=f.shard,p=(l+1)%c.length;for(;l!==p;){let h=c[p],E=Ud.get(h);u=eo.get(E.url);let g=u?.get(i.database);if(!g||g.connected===!1||g.nodes[0].shard!==m){p=(p+1)%c.length;continue}let{worker:A,nodes:S}=g,R=!1;for(let N of d.nodes){if(S.some(O=>O.name===N.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}N.endTime<Date.now()||(S.push(N),R=!0)}if(d.nodes=[d.nodes[0]],!R){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),A?A.postMessage({type:"subscribe-to-node",database:i.database,nodes:S}):eh({database:i.database,nodes:S});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),vl=o(function(i){let a=eo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}c.connected=!0,c.latency=i.latency;let l=c.nodes[0];if(!l){ut.warn("Newly connected node has no node subscriptions",i.database,c);return}if(!l.name){ut.debug("Connected node is not named yet",i.database,c);return}c.nodes=[l];let u=!1;for(let d of eo.values()){let f=d.get(i.database);if(!f||f==c)continue;let{worker:m,nodes:p,connected:h}=f;if(p)if(h===!1&&p[0].shard===l.shard)u=!0,c.nodes.push(p[0]);else{let E=p.filter(g=>g&&g.name!==l.name);E.length<p.length&&(f.nodes=E,m.postMessage({type:"subscribe-to-node",database:i.database,nodes:p}))}}u&&c.worker&&c.worker.postMessage({type:"subscribe-to-node",database:i.database,nodes:c.nodes})},"connectedToNode"),(0,to.onMessageByType)("disconnected-from-node",xd),(0,to.onMessageByType)("connected-to-node",vl),(0,to.onMessageByType)("request-cluster-status",N$)}function N$(e,t){let r=[];for(let[n,s]of Ud)try{let i=eo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=I$(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Yo(e,t){let r=Yt();e=e??gi(t.url),t.name=e;try{if(t.ca){let s=new w$.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!ZN.default.get(B.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=I$(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var to,vS,ut,b$,ZN,w$,I$,Sle,eo,xd,vl,Ud,MS,th=ie(()=>{Oe();to=w(nt());us();vS=require("worker_threads");Ml();ut=w(Q()),b$=w(require("lodash")),ZN=w(ue());H();w$=require("crypto"),{cloneDeep:I$}=b$.default,Sle=200,eo=new Map,Ud=new Map,MS=new Map;o(eC,"startOnMainThread");o(N$,"requestClusterStatus");vS.parentPort&&(xd=o(e=>{vS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),vl=o(e=>{vS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,to.onMessageByType)("subscribe-to-node",e=>{eh(e)}),(0,to.onMessageByType)("unsubscribe-from-node",e=>{US(e)}));o(Yo,"ensureNode")});var fs=M(Wt=>{"use strict";var pr=require("path"),{watch:Tle}=require("chokidar"),kn=require("fs-extra"),Bd=require("node-forge"),v$=require("net"),{generateKeyPair:tC,X509Certificate:Wo,createPrivateKey:U$}=require("crypto"),yle=require("util");tC=yle.promisify(tC);var Nt=Bd.pki,Si=require("joi"),{v4:x$}=require("uuid"),{validateBySchema:iC}=ft(),{forComponent:Rle}=Q(),ds=ue(),ks=(H(),D(W)),{CONFIG_PARAMS:xl}=ks,Ti=EA(),{ClientError:Xa}=_e(),BS=require("node:tls"),{relative:B$,join:Ale}=require("node:path"),{CERTIFICATE_VALUES:O$}=Ti,ble=kc(),rC=yt(),{table:Ile,getDatabases:wle,databases:xS}=(Oe(),D(mt)),{getJWTRSAKeys:P$}=(Id(),D(qp)),je=Rle("tls").conditional;Wt.generateKeys=cC;Wt.updateConfigCert=K$;Wt.createCsr=Mle;Wt.signCertificate=vle;Wt.setCertTable=Fd;Wt.loadCertificates=q$;Wt.reviewSelfSignedCert=uC;Wt.createTLSSelector=W$;Wt.listCertificates=j$;Wt.addCertificate=Hle;Wt.removeCertificate=qle;Wt.createNatsCerts=Ble;Wt.generateCertsKeys=xle;Wt.getReplicationCert=nh;Wt.getReplicationCertAuth=Dle;Wt.renewSelfSigned=Fle;Wt.hostnamesFromCert=fC;Wt.getKey=$le;Wt.getHostnamesFromCertificate=Vle;Wt.getPrimaryHostName=dC;var{urlToNodeName:F$,getThisNodeUrl:Nle,getThisNodeName:kS,clearThisNodeName:Cle}=(us(),D(zo)),{readFileSync:Ole,statSync:k$}=require("node:fs"),SUe=ue(),{getTicketKeys:Ple,onMessageFromWorkers:Lle}=nt(),{isMainThread:H$}=require("worker_threads"),{TLSSocket:G$,createSecureContext:TUe}=require("node:tls"),oC=3650,rh=["127.0.0.1","localhost","::1"],aC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Lle(async e=>{e.type===ks.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await uC())});var Zr;function ec(){return Zr||(Zr=wle().system.hdb_certificate,Zr||(Zr=Ile({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),Zr}o(ec,"getCertTable");async function nh(){let e=W$("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(kS());if(!r)return;let n=new Wo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(nh,"getReplicationCert");async function Dle(){ec();let e=(await nh()).options.cert,r=new Wo(e).issuer.match(/CN=(.*)/)?.[1];return Zr.get(r)}o(Dle,"getReplicationCertAuth");var L$,Za=new Map;function q$(){if(L$)return;L$=!0;let e=[{configKey:xl.TLS},{configKey:xl.OPERATIONSAPI_TLS}];ec();let t=pr.dirname(rC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=rC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&B$(Ale(t,"keys"),a);c&&D$(a,l=>{Za.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&H$){let d;D$(u,f=>{if(O$.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=Y$(u),h=new Wo(p),E;try{E=dC(h)}catch(R){je.error?.("error extracting host name from certificate",R);return}if(E==null){je.error?.("No host name found on certificate");return}if(h.checkIssued(new Wo(O$.cert)))return;let g=Zr.primaryStore.get(E),A=k$(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&A<=S){A<S&&je.info?.(`Certificate ${E} at ${u} is older (${new Date(A)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Zr.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:A,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(q$,"loadCertificates");function D$(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&H$&&je.warn?.(`Reloading ${r}:`,i),n=c,t(Y$(i)))}catch(c){je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");kn.existsSync(e)?s(e,k$(e)):je.error?.(`${r} file not found:`,e),Tle(e,{persistent:!1}).on("change",s)}o(D$,"loadAndWatch");function nC(){let e=Nle();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return F$(e)}o(nC,"getHost");function FS(){let e=kS();if(e==null){let t=rh[0];return je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(FS,"getCommonName");async function Mle(){let e=await nh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);je.info?.("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:FS()},...aC];je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:$$()}];return je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Bd.pki.certificationRequestToPem(n)}o(Mle,"createCsr");function $$(){let e=rh.includes(FS())?rh:[...rh,FS()];return e.includes(nC())||e.push(nC()),[{name:"basicConstraints",cA:!1,critical:!0},{name:"keyUsage",digitalSignature:!0,keyEncipherment:!0,critical:!0},{name:"extKeyUsage",serverAuth:!0,clientAuth:!0},{name:"nsCertType",client:!0,server:!0},{name:"subjectAltName",altNames:e.map(t=>v$.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o($$,"certExtensions");async function vle(e){let t={},r=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ec();for await(let d of Zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Za.has(d.private_key_name)){n=Za.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await kn.exists(pr.join(r,d.private_key_name))){n=kn.readFile(pr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await sC();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);je.info?.("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Bd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+oC),je.info?.("sign cert setting validity:",c.validity),je.info?.("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Bd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(vle,"signCertificate");async function Ule(e,t){await Fd({name:kS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Fd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Ule,"createCertificateTable");async function Fd(e){let t;try{t=new Wo(e.certificate)}catch(r){je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},ec(),await Zr.patch(e)}o(Fd,"setCertTable");async function cC(){let e=await tC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(cC,"generateKeys");async function lC(e,t,r){let n=Nt.createCertificate();if(!t){let a=await nh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+oC);let i=[{name:"commonName",value:FS()},...aC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions($$()),n.sign(e,Bd.md.sha256.create()),Nt.certificateToPem(n)}o(lC,"generateCertificates");async function sC(){let e=await j$(),t;for(let r of e){if(!r.is_authority)continue;let n=await z$(r.private_key_name);if(r.private_key_name&&n&&new Wo(r.certificate).checkPrivateKey(U$(n))){je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;je.trace?.("No CA found with matching private key")}o(sC,"getCertAuthority");async function V$(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+oC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(xl.REPLICATION_HOSTNAME)??F$(ds.get(xl.REPLICATION_URL))??x$().split("-")[0]}`},...aC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Bd.md.sha256.create());let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=pr.join(a,Ti.PRIVATEKEY_PEM_NAME);return r&&await kn.writeFile(c,Nt.privateKeyToPem(e)),n}o(V$,"generateCertAuthority");async function xle(){let{privateKey:e,publicKey:t}=await cC(),r=await V$(e,t),n=await lC(e,t,r);await Ule(n,r),K$()}o(xle,"generateCertsKeys");async function Ble(){let e=await lC(Nt.privateKeyFromPem(Ti.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(Ti.CERTIFICATE_VALUES.cert)),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ti.NATS_CERTIFICATE_PEM_NAME);await kn.exists(r)||await kn.writeFile(r,e);let n=pr.join(t,Ti.NATS_CA_PEM_NAME);await kn.exists(n)||await kn.writeFile(n,Ti.CERTIFICATE_VALUES.cert)}o(Ble,"createNatsCerts");async function Fle(){ec();for await(let e of Zr.search([{attribute:"is_self_signed",value:!0}]))await Zr.delete(e.name);await uC()}o(Fle,"renewSelfSigned");async function uC(){Cle(),await q$(),ec();let e=await sC();if(!e){je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(kn.readFileSync(u)),keyPath:u}}catch(d){return je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ds.get(xl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=ds.get(xl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),c=B$(a,i);s||(je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await cC(),kn.existsSync(pr.join(a,Ti.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${x$().split("-")[0]}.pem`),await kn.writeFile(pr.join(a,c),Nt.privateKeyToPem(s)));let l=await V$(s,Nt.setRsaPublicKey(s.n,s.e),!1);await Fd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await nh()){let r=kS();je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await sC();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await lC(Nt.privateKeyFromPem(e.private_key),s,n);await Fd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(uC,"reviewSelfSignedCert");function K$(){let e=ble(Object.keys(ks.CONFIG_PARAM_MAP),!0),t=pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME),r=pr.join(t,Ti.PRIVATEKEY_PEM_NAME),n=pr.join(t,Ti.NATS_CERTIFICATE_PEM_NAME),s=pr.join(t,Ti.NATS_CA_PEM_NAME),i=ks.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),rC.updateConfigValue(void 0,void 0,a,!1,!0)}o(K$,"updateConfigCert");function Y$(e){return e.startsWith("-----BEGIN")?e:Ole(e,"utf8")}o(Y$,"readPEM");var M$=BS.createSecureContext;BS.createSecureContext=function(e){if(!e.cert||!e.key)return M$(e);let t={...e};delete t.key,delete t.cert;let r=M$(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var kle=G$.prototype._init;G$.prototype._init=function(e,t){kle.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Ul=new Map;function W$(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Ul.clear();let d=0;if(xS===void 0){c();return}for await(let f of xS.system.hdb_certificate.search([])){let m=f.certificate,p=new Wo(m);f.is_authority&&(p.asString=m,Ul.set(p.subject,m))}for await(let f of xS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await z$(f.private_key_name),E=f.certificate,g=new Wo(E);if(Ul.has(g.issuer)&&(E+=`
18
+ `+Ul.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let A={ciphers:f.ciphers,ticketKeys:Ple(),availableCAs:Ul,ca:t&&Array.from(Ul.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(A.sessionIdContext=a.sessionIdContext);let S=BS.createSecureContext(A);S.name=f.name,S.options=A,S.quality=p,S.certificateAuthorities=Array.from(Ul),S.certStart=E.toString().slice(0,100);let R=f.hostnames??fC(g);Array.isArray(R)||(R=[R]);let N;for(let O of R)if(O){O[0]==="*"&&(s=!0,O=O.slice(1)),O===nC()&&(p+=2),v$.isIP(O)&&(N=!0);let F=r.get(O)?.quality??0;p>F&&r.set(O,S)}else je.error?.("No hostname found for certificate at",BS.certificate);je.trace?.("Adding TLS",S.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=S,d=p,a&&(a.defaultContext=S))}catch(m){je.error?.("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),xS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){je.info?.("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return je.debug?.("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?je.debug?.("No certificate found to match",a,"using the default certificate"):je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):je.info?.("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(W$,"createTLSSelector");async function z$(e){let t=Za.get(e);return!t&&e?await kn.readFile(pr.join(ds.get(xl.ROOTPATH),ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(z$,"getPrivateKeyByName");async function j$(){ec();let e=[];for await(let t of Zr.search([]))e.push(t);return e}o(j$,"listCertificates");async function Hle(e){let t=iC(e,Si.object({name:Si.string().required(),certificate:Si.string().required(),is_authority:Si.boolean().required(),private_key:Si.string(),hosts:Si.array(),uses:Si.array()}));if(t)throw new Xa(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Wo(n),c=!1,l=!1,u;for(let[p,h]of Za)!s&&!c&&a.checkPrivateKey(U$(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new Xa("A suitable private key was not found for this certificate");let d;if(!r){try{d=dC(a)}catch(p){je.error?.(p)}if(d==null)throw new Xa("Error extracting certificate host name, please provide a name parameter")}let f=Gle(r??d);s&&!c&&!l&&(await kn.writeFile(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),Za.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Fd(m),"Successfully added certificate: "+f}o(Hle,"addCertificate");function Gle(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Gle,"sanitizeName");async function qle(e){let t=iC(e,Si.object({name:Si.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;ec();let n=await Zr.get(r);if(!n)throw new Xa(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(je.info?.("Removing private key named",s),await kn.remove(pr.join(ds.getHdbBasePath(),ks.LICENSE_KEY_DIR_NAME,s)))}return await Zr.delete(r),"Successfully removed "+r}o(qle,"removeCertificate");function dC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||fC(e)[0]}o(dC,"getPrimaryHostName");function fC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(fC,"hostnamesFromCert");async function $le(e){if(e.bypass_auth!==!0)throw new Xa("Unauthorized","401");let t=iC(e,Si.object({name:Si.string().required()}));if(t)throw new Xa(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await P$()).privateKey;if(r===".jwtPublic")return(await P$()).publicKey;if(Za.get(r))return Za.get(e.name);throw new Xa("Key not found")}o($le,"getKey");function Vle(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Vle,"getHostnamesFromCertificate")});var SV={};Ie(SV,{CONFIRMATION_STATUS_POSITION:()=>EV,LATENCY_POSITION:()=>YS,NodeReplicationConnection:()=>Hd,OPERATION_REQUEST:()=>_C,RECEIVED_TIME_POSITION:()=>SC,RECEIVED_VERSION_POSITION:()=>gC,RECEIVING_STATUS_POSITION:()=>TC,RECEIVING_STATUS_RECEIVING:()=>gV,RECEIVING_STATUS_WAITING:()=>_V,SENDING_TIME_POSITION:()=>sh,createWebSocket:()=>WS,databaseSubscriptions:()=>rc,replicateOverWS:()=>ih,tableUpdateListeners:()=>RC});async function WS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!hC){let l=(0,dV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),hC=u.secureContexts}if(i=hC.get(s),i&&ce.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,mV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(KS?.caCount!==jo.size&&(KS=fV.createSecureContext({...i.options,ca:[...jo,...i.options.availableCAs.values()]}),KS.caCount=jo.size),c.secureContext=KS),new cV.WebSocket(e,"harperdb-replication-v1",c)}function ih(e,t,r){let n=t.port||t.securePort,s=Bl.pid%1e3+"-"+lV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ce.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||rc,f,m,p=!1,h=t.subscription;h?.then&&h.then(y=>{h=y,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&at()[u],g,A=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,N,O,F,te,G,k,J=6e4,Y,le=0,ae=0,re=0,Re=aV.default.get(B.REPLICATION_BLOBTIMEOUT)??12e4,Te=new Map,Fe=[],Ge=0,Rr;if(t.url){let y=o(()=>{te&&ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten)},"sendPing");O=setInterval(y,iV).unref(),y()}else Zt();e._socket?.setMaxListeners(200);function Zt(){clearTimeout(F),ae=e._socket?.bytesRead,re=e._socket?.bytesWritten,F=setTimeout(()=>{ae===e._socket?.bytesRead&&re===e._socket?.bytesWritten&&(ce.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},iV*2).unref()}o(Zt,"resetPingTimer");function Ht(){if(!(!g||!u))return m||(m=Md(f,u,g)),m}o(Ht,"getSharedStatus"),u&&vc(u);let er,Gf,Dc=[],Gt=[],qf,$f=[],kE=[],HE=[],eA=150,Vf=25,Le=0,GE=0,Kf=!1,To,Mr,Ar,Yf;e.on("message",tA);async function tA(y){if(r=await r,!r){ce.error?.(s,"No authorization provided"),Vr(1008,"Unauthorized");return}Mc(y),e.off("message",tA),e.on("message",Mc)}o(tA,"onWSMessageWhenAuthorized");function Mc(y){le=performance.now();try{let b=y.dataView=new jc(y.buffer,y.byteOffset,y.byteLength);if(y[0]>127){let U=(0,ot.decode)(y),[L,x,q]=U;switch(L){case J$:{if(x){if(g){if(g!==x){ce.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${x}, disconnecting`),e.send((0,ot.encode)([kd])),Vr(1008,"Node name mismatch");return}}else if(g=x,t.connection?.tentativeNode){let de=t.connection.tentativeNode;de.name=g,t.connection.tentativeNode=null,Yo(g,de)}if(t.connection&&(t.connection.nodeName=g),ce.debug?.(s,"received node name:",g,"db:",u??U[2]),!u)try{vc(u=U[2]),u==="system"&&(er=Qa(t,(de,z)=>{gu(z)&&Su(z)}),e.on("close",()=>{er?.remove()}))}catch(de){ce.warn?.(s,"Error setting database",de),e.send((0,ot.encode)([kd])),Vr(1008,de.message);return}Wf()}break}case nV:{ce.debug?.(s,"Received table definitions for",x.map(de=>de.table));for(let de of x){let z=U[2];de.database=z;let ne;if(gu(z)){if(u==="system")Me[z]?.[de.table]||(ne=C(de,Me[z]?.[de.table]));else{if(z!=="data"&&!Me[z]){ce.warn?.("Database not found",z);return}ne=C(de,Me[z]?.[de.table])}f||(f=ne?.auditStore),E||(E=at()?.[z])}}break}case kd:Vr();break;case _C:try{let de=r?.replicates||r?.subscribers||r?.name;ce.debug?.("Received operation request",x,"from",g),server.operation(x,{user:r},!de).then(z=>{ce.debug?.("Requested request from finished",g,z),Array.isArray(z)&&(z={results:z}),z.requestId=x.requestId,e.send((0,ot.encode)([GS,z]))},z=>{ce.debug?.("Failed requested operation from",g,z),e.send((0,ot.encode)([GS,{requestId:x.requestId,error:mC(z)}]))})}catch(de){e.send((0,ot.encode)([GS,{requestId:x.requestId,error:mC(de)}]))}break;case GS:let{resolve:j,reject:X}=A.get(x.requestId);ce.debug?.("Received completed operation request",g,x),x.error?X(new Error(x.error)):j(x),A.delete(x.requestId);break;case pC:let $=U[3];if(!E){u?ce.error?.(s,"No database found for",u):ce.error?.(s,"Database name never received"),Vr();return}let be=E[$];be=C({table:$,database:u,attributes:x.attributes,schemaDefined:x.schemaDefined},be),Dc[q]={name:$,decoder:new ot.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:x.typedStructs,structures:x.structures}),getEntry(de){return be.primaryStore.getEntry(de)},rootStore:be.primaryStore.rootStore};break;case X$:Yf=f?g$(x,f):new Map,qf=U[2],ce.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${qf}`);break;case Z$:let pe=q;HE[pe]=x;break;case rV:Ht()[EV]=x,ce.trace?.(s,"received and broadcasting committed update",x),Ht().buffer.notify();break;case tV:R=x,h.send({type:"end_txn",localTime:R,remoteNodeIds:S});break;case qS:{let de=U[1],{fileId:z,size:ne,finished:me,error:Ee}=de,fe=Te.get(z);ce.debug?.("Received blob",z,"has stream",!!fe,"connectedToBlob",!!fe?.connectedToBlob,"length",U[2].length,"finished",me),fe||(fe=new EC.PassThrough,fe.expectedSize=ne,Te.set(z,fe)),fe.lastChunk=Date.now();let De=U[2];Je(De.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{me?(Ee?(fe.on("error",()=>{}),fe.destroy(new Error("Blob error: "+Ee+" for record "+(fe.recordId??"unknown")+" from "+remote_node_name))):fe.end(De),fe.connectedToBlob&&Te.delete(z)):fe.write(De)}catch(ve){ce.error?.(`Error receiving blob for ${fe.recordId} from ${g} and streaming to storage`,ve),Te.delete(z)}break}case eV:{let de=x,z;try{let ne=U[3],me=Gt[q]||(Gt[q]=E[U[4]]);if(!me)return ce.warn?.("Unknown table id trying to handle record request",q);let Ee=me.primaryStore.getBinaryFast(Symbol.for("structures")),fe=Ee?.length??0;if(fe>0&&fe!==GE){GE=fe;let ve=(0,ot.decode)(Ee);e.send((0,ot.encode)([pC,{typedStructs:ve.typed,structures:ve.named},q,me.tableName]))}let De=me.primaryStore.getBinaryFast(ne);if(De){let ve=me.primaryStore.decoder.decode(De,{valueAsBuffer:!0}),$e=ct||{};$e.version=(0,pV.getLastVersion)(),ct&&ct[Mu]&Ln&&(ve=Buffer.from(ve),wm(()=>me.primaryStore.decoder.decode(De),vr=>br(vr,ne),me.primaryStore.rootStore)),z=(0,ot.encode)([HS,de,{value:ve,expiresAt:$e.expiresAt,version:$e.version,residencyId:$e.residencyId,nodeId:$e.nodeId,user:$e.user}])}else z=(0,ot.encode)([HS,de])}catch(ne){z=(0,ot.encode)([HS,de,{error:ne.message}])}e.send(z);break}case HS:{let{resolve:de,reject:z,tableId:ne,key:me}=A.get(U[1]),Ee=U[2];if(Ee?.error)z(new Error(Ee.error));else if(Ee){let fe;N_(()=>{let De=Dc[ne].decoder.decode(Ee.value);Ee.value=De,Ee.key=me,de(Ee)||fe&&setTimeout(()=>fe.forEach(b_),6e4).unref()},De=>{let ve=_u(De,me);return fe||(fe=[]),fe.push(ve),ve})}else de();A.delete(U[1]);break}case Q$:{Ar=x;let de,z,ne=!1;if(h){if(u!==h.databaseName&&!h.then){ce.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ce.debug?.(s,"received subscription request for",u,"at",Ar),!h){let Ne;h=new Promise(qt=>{ce.debug?.("Waiting for subscription to database "+u),Ne=qt}),h.ready=Ne,rc.set(u,h)}if(r.name)z=Yt().subscribe(r.name),z.then(async Ne=>{de=Ne;for await(let qt of de){let Dt=qt.value;if(!(Dt?.replicates===!0||Dt?.replicates?.receives||Dt?.subscriptions?.some(Ur=>(Ur.database||Ur.schema)===u&&Ur.publish!==!1))){ne=!0,e.send((0,ot.encode)([kd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}}},Ne=>{ce.error?.(s,"Error subscribing to HDB nodes",Ne)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ot.encode)([kd])),Vr(1008,`Unauthorized database subscription to ${u}`);return}if(Mr&&(ce.debug?.(s,"stopping previous subscription",u),Mr.emit("close")),Ar.length===0)return;let me=Ar[0],Ee=o(Ne=>{if(Ne&&(me.replicateByDefault?!me.tables.includes(Ne.tableName):me.tables.includes(Ne.tableName)))return{table:Ne}},"tableToTableEntry"),fe={txnTime:0},De,ve,$e=1/0,vr,Wn=o((Ne,qt)=>{if(Ne.type==="end_txn"){fe.txnTime&&(a[i]!==66&&ce.error?.("Invalid encoding of message"),yo(9),yo(B_),_(vr=qt),Mi()),i=c,fe.txnTime=0;return}let Dt=Ne.nodeId,Ur=Ne.tableId,Mt=ve[Ur];if(!Mt&&(Mt=ve[Ur]=Ee(h.tableById[Ur]),!Mt))return ce.debug?.("Not subscribed to table",Ur);let bs=Mt.table,vt=bs.primaryStore,ri=vt.encoder;(Ne.extendedType&K_||!ri.typedStructs)&&(ri._mergeStructures(ri.getStructures()),ri.typedStructs&&(ri.lastTypedStructuresLength=ri.typedStructs.length));let Tu=De[Dt];if(!(Tu&&Tu.startTime<qt&&(!Tu.endTime||Tu.endTime>qt)))return VS&&ce.trace?.(s,"skipping replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De),GM();VS&&ce.trace?.(s,"sending replication update",Ne.recordId,"to:",g,"from:",Dt,"subscribed:",De);let rA=Ne.version;fe.txnTime!==rA&&(fe.txnTime&&(VS&&ce.trace?.(s,"new txn time, sending queued txn",fe.txnTime),a[i]!==66&&ce.error?.("Invalid encoding of message"),Mi()),fe.txnTime=rA,i=c,_(rA));let Bc=Ne.residencyId,nA=Aa(Bc,bs),$E;if(nA&&!nA.includes(g)){let ni=Aa(Ne.previousResidencyId,bs);if(ni&&!ni.includes(g)&&(Ne.type==="put"||Ne.type==="patch")||bs.getResidencyById)return GM();let zf=Ne.recordId;ce.trace?.(s,"sending invalidation",zf,g,"from",Dt);let jf=0;Bc&&(jf|=Qc),Ne.previousResidencyId&&(jf|=Jc);let oA,VE=null;for(let qM in bs.indices){if(!VE){if(oA=Ne.getValue(vt,!0),!oA)break;VE={}}VE[qM]=oA[qM]}$E=Xc(Ne.version,Ur,zf,null,Dt,Ne.user,Ne.type==="put"||Ne.type==="patch"?"invalidate":Ne.type,ri.encode(VE),jf,Bc,Ne.previousResidencyId,Ne.expiresAt)}function GM(){return ce.trace?.(s,"skipping audit record",Ne.recordId),G||(G=setTimeout(()=>{G=null,(vr||0)+sV/2<$e&&(VS&&ce.trace?.(s,"sending skipped sequence update",$e),e.send((0,ot.encode)([tV,$e])))},sV).unref()),new Promise(setImmediate)}o(GM,"skipAuditRecord");let sA=ri.typedStructs,iA=ri.structures;if((sA?.length!=Mt.typed_length||iA?.length!=Mt.structure_length)&&(Mt.typed_length=sA?.length,Mt.structure_length=iA.length,ce.debug?.(s,"send table struct",Mt.typed_length,Mt.structure_length),Mt.sentName||(Mt.sentName=!0),e.send((0,ot.encode)([pC,{typedStructs:sA,structures:iA,attributes:bs.attributes,schemaDefined:bs.schemaDefined},Ur,Mt.table.tableName]))),Bc&&!kE[Bc]&&(e.send((0,ot.encode)([Z$,nA,Bc])),kE[Bc]=!0),$E)yo($E.length),K($E);else{let ni=Ne.encoded;Ne.extendedType&Ln&&wm(()=>Ne.getValue(vt),jf=>br(jf,Ne.recordId),vt.rootStore);let zf=ni[0]===66?8:0;yo(ni.length-zf),K(ni,zf),ce.trace?.("wrote record",Ne.recordId,"length:",ni.length)}return e._socket.writableNeedDrain?new Promise(ni=>{ce.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",ni)}):Ge>Vf?new Promise(ni=>{Rr=ni}):new Promise(setImmediate)},"sendAuditRecord"),Mi=o(()=>{c-i>8?(e.send(a.subarray(i,c)),ce.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Je(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ce.debug?.(s,"skipping empty transaction")},"sendQueuedData");Mr=new yC.EventEmitter,Mr.once("close",()=>{ne=!0,de?.end()});for(let{startTime:Ne}of Ar)Ne<$e&&($e=Ne);(z||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,ve=h.tableById.map(Ee),De=[];for(let{name:qt,startTime:Dt,endTime:Ur}of Ar){let Mt=DS(qt,f);ce.debug?.("subscription to",qt,"using local id",Mt,"starting",Dt),De[Mt]={startTime:Dt,endTime:Ur}}Su(u),er||(er=Il(qt=>{qt.databaseName===u&&Su(u)}),Gf=vp(qt=>{qt===u&&(e.send((0,ot.encode)([kd])),Vr())}),e.on("close",()=>{er?.remove(),Gf?.remove()})),e.send((0,ot.encode)([X$,Qp(h.auditStore),Ar.map(({name:qt})=>qt)]));let Ne=!0;do{isFinite($e)||(ce.warn?.("Invalid sequence id "+$e),Vr(1008,"Invalid sequence id"+$e));let qt;if(Ne&&!ne&&(Ne=!1,$e===0)){ce.info?.("Replicating all tables to",g);let Dt=$e,Ur=zS(f);for(let Mt in E){if(!Ee(Mt))continue;let bs=E[Mt];for(let vt of bs.primaryStore.getRange({snapshot:!1,versions:!0})){if(ne)return;if(vt.localTime>=$e){ce.trace?.(s,"Copying record from",u,Mt,vt.key,vt.localTime),Dt=Math.max(vt.localTime,Dt),qt=!0,Ht()[sh]=1;let ri=Xc(vt.version,bs.tableId,vt.key,null,Ur,null,"put",wm(()=>bs.primaryStore.encoder.encode(vt.value),Tu=>br(Tu,vt.key)),vt.metadataFlags&-256,vt.residencyId,null,vt.expiresAt);await Wn({recordId:vt.key,tableId:bs.tableId,type:"put",getValue(){return vt.value},encoded:ri,version:vt.version,residencyId:vt.residencyId,nodeId:Ur,extendedType:vt.metadataFlags},vt.localTime)}}}qt&&Wn({type:"end_txn"},$e),Ht()[sh]=0,$e=Dt}for(let{key:Dt,value:Ur}of f.getRange({start:$e||1,exclusiveStart:!0,snapshot:!1})){if(ne)return;let Mt=xt(Ur);ce.debug?.("sending audit record",new Date(Dt)),Ht()[sh]=Dt,$e=Dt,await Wn(Mt,Dt),Mr.startTime=Dt,qt=!0}qt&&Wn({type:"end_txn"},$e),Ht()[sh]=0,await Zx(f)}while(!ne)}).catch(Ne=>{ce.error?.(s,"Error handling subscription to node",Ne),Vr(1008,"Error handling subscription to node")});break}}return}b.position=8;let P=!0,I,v;do{Ht();let U=b.readInt();if(U===9&&b.getUint8(b.position)==B_){b.position++,R=v=b.readFloat64(),m[gC]=R,m[SC]=Date.now(),m[TC]=_V,ce.trace?.("received remote sequence update",R,u);break}let L=b.position,x=xt(y,L,L+U),q=Dc[x.tableId];q||ce.error?.(`No table found with an id of ${x.tableId}`);let j;x.residencyId&&(j=HE[x.residencyId],ce.trace?.(s,"received residency list",j,x.type,x.recordId));try{let X=x.recordId;N_(()=>{I={table:q.name,id:x.recordId,type:x.type,nodeId:Yf.get(x.nodeId),residencyList:j,timestamp:x.version,value:x.getValue(q),user:x.user,beginTxn:P,expiresAt:x.expiresAt}},$=>_u($,X))}catch(X){throw X.message+="typed structures for current decoder"+JSON.stringify(q.decoder.typedStructs),X}P=!1,ce.trace?.(s,"received replication message",x.type,"id",I.id,"version",new Date(x.version),"nodeId",I.nodeId),m[gC]=x.version,m[SC]=Date.now(),m[TC]=gV,h.send(I),b.position=L+U}while(b.position<y.byteLength);Le++,u!=="system"&&Je(y.byteLength,"bytes-received",`${g}.${u}.${I?.table||"unknown_table"}`,"replication","ingest"),Le>eA&&!Kf&&(Kf=!0,e.pause(),ce.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:R,remoteNodeIds:S,async onCommit(){if(I){let U=Date.now()-I.timestamp;u!=="system"&&Je(U,"replication-latency",g+"."+u+"."+I.table,I.type,"ingest")}Le--,Kf&&(Kf=!1,e.resume(),ce.debug?.(`Replication resuming ${g}`)),Fe.length>0&&await Promise.all(Fe),ce.trace?.("All blobs finished"),!N&&v&&(ce.trace?.(s,"queuing confirmation of a commit at",v),setTimeout(()=>{e.send((0,ot.encode)([rV,N])),ce.trace?.(s,"sent confirmation of a commit at",N),N=null},Wle)),N=v,ce.debug?.("last sequence committed",new Date(v),u)}})}catch(b){ce.error?.(s,"Error handling incoming replication message",b)}}o(Mc,"onWSMessage"),e.on("ping",Zt),e.on("pong",()=>{if(t.connection){let y=performance.now()-te;t.connection.latency=y,Ht()&&(m[YS]=y),t.isSubscriptionConnection&&vl({name:g,database:u,url:t.url,latency:y})}te=null}),e.on("close",(y,b)=>{clearInterval(O),clearTimeout(F),clearInterval(k),Mr&&Mr.emit("close"),To&&To.end();for(let[P,{reject:I}]of A)I(new Error(`Connection closed ${b?.toString()} ${y}`));ce.debug?.(s,"closed",y,b?.toString())});function Vr(y,b){try{e.isFinished=!0,ce.debug?.(s,"closing",g,u,y,b),e.close(y,b),t.connection?.emit("finished")}catch(P){ce.error?.(s,"Error closing connection",P)}}o(Vr,"close");let Ra=new Set;async function br(y,b){let P=I_(y);if(Ra.has(P)){ce.debug?.("Blob already being sent",P);return}Ra.add(P);try{let I;Ge++;for await(let v of y.stream())I&&(ce.debug?.("Sending blob chunk",P,"length",I.length),e.send((0,ot.encode)([qS,{fileId:P,size:y.size},I]))),I=v,e._socket.writableNeedDrain&&(ce.debug?.("draining",P),await new Promise(U=>e._socket.once("drain",U)),ce.debug?.("drained",P)),Je(v.length,"bytes-sent",`${g}.${u}`,"replication","blob");ce.debug?.("Sending final blob chunk",P,"length",I.length),e.send((0,ot.encode)([qS,{fileId:P,size:y.size,finished:!0},I]))}catch(I){ce.warn?.("Error sending blob",I,"blob id",P,"for record",b),e.send((0,ot.encode)([qS,{fileId:P,finished:!0,error:mC(I)},Buffer.alloc(0)]))}finally{Ra.delete(P),Ge--,Ge<Vf&&Rr?.()}}o(br,"sendBlobs");function _u(y,b){let P=I_(y),I=Te.get(P);ce.debug?.("Received transaction with blob",P,"has stream",!!I,"ended",!!I?.writableEnded),I?I.writableEnded&&Te.delete(P):(I=new EC.PassThrough,Te.set(P,I)),I.connectedToBlob=!0,I.lastChunk=Date.now(),I.recordId=b,y.size===void 0&&I.expectedSize&&(y.size=I.expectedSize);let v=I.blob??createBlob(I,y);I.blob=v;let U=v.save({primaryStore:h.auditStore});return U&&(U.blobId=P,Fe.push(U),U.finally(()=>{ce.debug?.(`Finished receiving blob stream ${P}`),Fe.splice(Fe.indexOf(U),1)})),v}o(_u,"receiveBlobs");function Wf(){if(p||(p=!0,t.connection?.on("subscriptions-updated",Wf)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let y=new Map;f||(f=h?.auditStore);try{for(let I of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let v of I.value.nodes||[])v.lastTxnTime>(y.get(v.id)??0)&&y.set(v.id,v.lastTxnTime)}catch(I){if(!I.message.includes("Can not re"))throw I}let b=t.connection?.nodeSubscriptions?.[0];S=[];let P=t.connection?.nodeSubscriptions.map((I,v)=>{let U=[],{replicateByDefault:L}=I;if(I.subscriptions){for(let X of I.subscriptions)if(X.subscribe&&(X.schema||X.database)===u){let $=X.table;E?.[$]?.replicate!==!1&&U.push($)}L=!1}else for(let X in E)(L?E[X].replicate===!1:E[X].replicate)&&U.push(X);let x=f&&DS(I.name,f),q=h?.dbisDB?.get([Symbol.for("seq"),x])??1,j=Math.max(q?.seqId??1,(typeof I.startTime=="string"?new Date(I.startTime).getTime():I.startTime)??1);if(ce.debug?.("Starting time recorded in db",I.name,x,u,q?.seqId,"start time:",j,new Date(j)),b!==I){let X=f&&DS(b.name,f),$=h?.dbisDB?.get([Symbol.for("seq"),X])??1;for(let be of $?.nodes||[])be.name===I.name&&(j=be.seqId,ce.debug?.("Using sequence id from proxy node",b.name,j))}if(x===void 0?ce.warn("Starting subscription request from node",I,"but no node id found"):S.push(x),y.get(x)>j&&(j=y.get(x),ce.debug?.("Updating start time from more recent txn recorded",b.name,j)),j===1&&$S)try{new URL($S).hostname===I.name?(ce.warn?.(`Requesting full copy of database ${u} from ${$S}`),j=0):j=Date.now()-6e4}catch(X){ce.error?.("Error parsing leader URL",$S,X)}return ce.trace?.(s,"defining subscription request",I.name,u,new Date(j)),{name:I.name,replicateByDefault:L,tables:U,startTime:j,endTime:I.endTime}});if(P)if(ce.debug?.(s,"sending subscription request",P,h?.dbisDB?.path),clearTimeout(Y),P.length>0)e.send((0,ot.encode)([Q$,P]));else{let I=o(()=>{let v=performance.now();Y=setTimeout(()=>{le<=v?Vr(1008,"Connection has no subscriptions and is no longer used"):I()},J).unref()},"scheduleClose");I()}}o(Wf,"sendSubscriptionRequestUpdate");function Aa(y,b){if(!y)return;let P=$f[y];return P||(P=b.getResidencyRecord(y),$f[y]=P),P}o(Aa,"getResidence");function gu(y){return!(tc&&tc!="*"&&!tc[y]&&!tc.includes?.(y)&&!tc.some?.(b=>b.name===y))}o(gu,"checkDatabaseAccess");function vc(y){if(h=h||d.get(y),!gu(y))throw new Error(`Access to database "${y}" is not permitted`);h||ce.warn?.(`No database named "${y}" was declared and registered`),f=h?.auditStore,E||(E=at()?.[y]);let b=it();if(b===g)throw b?new Error("Should not connect to self",b):new Error("Node name not defined");return Uc(b,y),!0}o(vc,"setDatabase");function Uc(y,b){let P=at()?.[b],I=[];for(let v in P){let U=P[v];I.push({table:v,schemaDefined:U.schemaDefined,attributes:U.attributes.map(L=>({name:L.name,type:L.type,isPrimaryKey:L.isPrimaryKey}))})}ce.trace?.("Sending database info for node",y,"database name",b),e.send((0,ot.encode)([J$,y,b,I]))}o(Uc,"sendNodeDBName");function Su(y){let b=at()?.[y],P=[];for(let I in b){if(Ar&&!Ar.some(U=>U.replicateByDefault?!U.tables.includes(I):U.tables.includes(I)))continue;let v=b[I];P.push({table:I,schemaDefined:v.schemaDefined,attributes:v.attributes.map(U=>({name:U.name,type:U.type,isPrimaryKey:U.isPrimaryKey}))})}e.send((0,ot.encode)([nV,P,y]))}o(Su,"sendDBSchema"),k=setInterval(()=>{for(let[y,b]of Te)b.lastChunk+Re<Date.now()&&(ce.warn?.(`Timeout waiting for blob stream to finish ${y} for record ${b.recordId??"unknown"} from ${g}`),Te.delete(y),b.end())},Re).unref();let qE=1,xc=[];return{end(){To&&To.end(),Mr&&Mr.emit("close")},getRecord(y){let b=qE++;return new Promise((P,I)=>{let v=[eV,b,y.table.tableId,y.id];xc[y.table.tableId]||(v.push(y.table.tableName),xc[y.table.tableId]=!0),e.send((0,ot.encode)(v)),le=performance.now(),A.set(b,{tableId:y.table.tableId,key:y.id,resolve(U){let{table:L,entry:x}=y;if(P(U),U)return L._recordRelocate(x,U)},reject:I})})},sendOperation(y){let b=qE++;return y.requestId=b,e.send((0,ot.encode)([_C,y])),new Promise((P,I)=>{A.set(b,{resolve:P,reject:I})})}};function yo(y){T(5),y<128?a[c++]=y:y<16384?(l.setUint16(c,y|32768),c+=2):y<1056964608?(l.setUint32(c,y|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,y),c+=5)}function K(y,b=0,P=y.length){let I=P-b;T(I),y.copy(a,c,b,P),c+=I}function _(y){T(8),l.setFloat64(c,y),c+=8}function T(y){if(y+16>a.length-c){let b=Buffer.allocUnsafeSlow(c+y-i+65536>>10<<11);a.copy(b,0,i,c),c=c-i,i=0,a=b,l=new DataView(a.buffer,0,a.length)}}function C(y,b){let P=y.database??"data";b||(b={});let I=b.schemaDefined,v=!1,U=y.schemaDefined,L=b.attributes||[];for(let x=0;x<y.attributes?.length;x++){let q=y.attributes[x],j=L.find(X=>X.name===q.name);(!j||j.type!==q.type)&&(I?ce.error?.(`Schema for '${u}.${y.table}' is defined locally, but attribute '${q.name}: ${q.type}' from '${g}' does not match local attribute ${j?"'"+j.name+": "+j.type+"'":"which does not exist"}`):(v=!0,U||(q.indexed=!0),j?L[L.indexOf(j)]=q:L.push(q)))}return v?(ce.debug?.("(Re)creating",y),Xe({table:y.table,database:y.database,schemaDefined:y.schemaDefined,attributes:L,...b})):b}}var aV,ot,cV,lV,uV,yC,dV,fV,Bl,mV,EC,pV,hV,Kle,mC,ce,Q$,J$,X$,kd,Z$,pC,eV,HS,_C,GS,tV,rV,nV,qS,EV,gC,SC,sh,YS,TC,_V,gV,Yle,$S,RC,rc,VS,sV,Wle,iV,hC,KS,oV,Hd,AC=ie(()=>{Oe();Io();JN();Fb();us();aV=w(ue());H();Zc();ot=require("msgpackr"),cV=require("ws"),lV=require("worker_threads"),uV=w(Q());th();yC=require("events"),dV=w(fs()),fV=w(require("node:tls"));Ml();Bl=w(require("node:process")),mV=require("node:net");Ps();Ns();EC=require("node:stream"),pV=require("lmdb"),hV=w(require("minimist")),{forComponent:Kle,errorToString:mC}=uV.default,ce=Kle("replication").conditional,Q$=129,J$=140,X$=141,kd=142,Z$=130,pC=132,eV=133,HS=134,_C=136,GS=137,tV=143,rV=144,nV=145,qS=146,EV=0,gC=1,SC=2,sh=3,YS=4,TC=5,_V=0,gV=1,Yle=(0,hV.default)(Bl.argv),$S=Yle.HDB_LEADER_URL??Bl.env.HDB_LEADER_URL,RC=new Map,rc=new Map,VS=!0,sV=300,Wle=2,iV=3e4;o(WS,"createWebSocket");oV=500,Hd=class extends yC.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=oV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??gi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await WS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ce.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Bl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ce[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=oV,this.nodeSubscriptions&&vl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=ih(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ce.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ce.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ce.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&xd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ce.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(ih,"replicateOverWS")});function oh(e){return e===yV||e===zle}function jle(e){return e===RV||e===AV}function bC(e){return e===yV?RV:AV}function Qle(){if(TV)return;TV=!0;let e=Fl.CryptoEngine.prototype,t=Fl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return oh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return oh(s)?{name:bC(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return jle(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Fl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(oh(i)){let a=bC(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),a,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(oh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),a=s.toSchema().toBER(!1),c=new ah.X509Certificate(Buffer.from(i)),l=new ah.X509Certificate(Buffer.from(a));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,a]=n,c=a.algorithm.algorithmId;if(oh(c)){let l=bC(c);try{let u=this.crypto?.subtle||this.subtle||Fl.getCrypto(!0)?.subtle||ah.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",a.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Fl,ah,yV,zle,RV,AV,TV,bV=ie(()=>{Fl=w(require("pkijs")),ah=require("node:crypto"),yV="1.3.101.112",zle="1.3.101.113",RV="Ed25519",AV="Ed448",TV=!1;o(oh,"isEd25519OrEd448");o(jle,"isEdDSAAlgorithmName");o(bC,"getEdDSAAlgorithmName");o(Qle,"applyEd25519Patch");Qle()});function Jle(){return jS||(jS=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]}),jS.sourcedFrom(IC)),jS}function Xle(e){if(zt.trace?.("getCertificateVerificationConfig called with:",{mtlsConfig:e}),!e)return!1;if(e===!0)return zt.debug?.("mTLS enabled with default certificate verification"),{};let t=e.certificateVerification;return zt.trace?.("Certificate verification config:",{verificationConfig:t}),t==null?{}:t===!1?!1:t===!0?{}:t}async function Gd(e,t){zt.debug?.("verifyCertificate called for:",e.subject?.CN||"unknown");let r=Xle(t);if(r===!1)return zt.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=tue(e);return zt.trace?.("Certificate chain length:",n.length),n.length===1&&!n[0].issuer?(zt.debug?.("Certificate without issuer - cannot perform OCSP check"),{valid:!0,status:"no-issuer-cert",method:"disabled"}):n.length<2||!n[0].issuer?(zt.debug?.("Certificate chain too short for revocation checking"),{valid:!0,status:"insufficient-chain",method:"disabled"}):Zle(n[0].cert,n[0].issuer,r)}async function Zle(e,t,r){zt.debug?.("verifyOCSP called");try{Buffer.isBuffer(e)&&(e=IV(e,"CERTIFICATE")),Buffer.isBuffer(t)&&(t=IV(t,"CERTIFICATE"));let n={certPem:e,issuerPem:t,method:"ocsp"},i=`ocsp:${(0,NV.createHash)("sha256").update(JSON.stringify(n)).digest("hex")}`;zt.trace?.("OCSP cache key:",i);let c=await Jle().get(i,{certPem:e,issuerPem:t,config:r||{}});if(!c)return(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(zt.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return zt.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(n){return zt.error?.("OCSP verification error:",n),(r?.failureMode??ch.failureMode)==="fail-closed"?{valid:!1,status:"error",error:n.message,method:"ocsp"}:(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function eue(e,t,r){zt.trace?.("Calling getCertStatus with timeout:",r);let n=await(0,wV.getCertStatus)(e,{ca:t,timeout:r});return zt.debug?.("OCSP response from easy-ocsp:",{status:n.status,revocationReason:n.revocationReason,responseData:n}),n.status==="good"?{status:"good"}:n.status==="revoked"?{status:"revoked",reason:n.revocationReason?.toString()||"unspecified"}:{status:"unknown",reason:"unknown-status"}}function IV(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
19
+ `)}function tue(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}var wV,NV,CV,zt,IC,ch,jS,QS=ie(()=>{bV();wV=require("easy-ocsp"),NV=require("node:crypto"),CV=w(Xn());Oe();Ua();zt=(0,CV.loggerWithTag)("cert-verification"),IC=class extends Fr{static{o(this,"CertificateVerificationSource")}async get(t){zt.debug?.("CertificateVerificationSource.get called for:",t);let r=this.getContext(),n=r?.requestContext;if(!n||!n.certPem||!n.issuerPem)throw new Error(`No certificate data provided for cache key: ${t}`);let{certPem:s,issuerPem:i,config:a}=n;zt.trace?.("Performing OCSP check with config:",a);try{let c=a?.timeout??ch.timeout,l=await Promise.race([eue(s,i,c),new Promise((d,f)=>setTimeout(()=>f(new Error("OCSP timeout")),c))]);zt.debug?.("OCSP check result:",l);let u=a?.cacheTtl??ch.cacheTtl;return r&&(r.expiresAt=Date.now()+u),{certificate_id:t,status:l.status,reason:l.reason,checked_at:Date.now(),expiresAt:Date.now()+u,method:"ocsp"}}catch(c){return zt.error?.("OCSP verification error:",c),(a?.failureMode??ch.failureMode)==="fail-closed"?(r&&(r.expiresAt=Date.now()+3e5),{certificate_id:t,status:"unknown",reason:c.message,checked_at:Date.now(),expiresAt:Date.now()+3e5,method:"ocsp"}):(zt.warn?.("OCSP check failed, allowing connection (fail-open mode)"),null)}}},ch={timeout:5e3,cacheTtl:36e5,failureMode:"fail-open"};o(Jle,"getCertificateCacheTable");o(Xle,"getCertificateVerificationConfig");o(Gd,"verifyCertificate");o(Zle,"verifyOCSP");o(eue,"performOCSPCheck");o(IV,"bufferToPem");o(tue,"extractCertificateChain")});var zo={};Ie(zo,{clearThisNodeName:()=>uue,disableReplication:()=>iue,enabledDatabases:()=>tc,forEachReplicatedDatabase:()=>Qa,getThisNodeId:()=>zS,getThisNodeName:()=>it,getThisNodeUrl:()=>Ja,hostnameToUrl:()=>eT,lastTimeInAuditStore:()=>Jp,monitorNodeCAs:()=>BV,replicateOperation:()=>fue,replicationCertificateAuthorities:()=>jo,sendOperationToNode:()=>lh,servers:()=>nue,setReplicator:()=>kV,start:()=>sue,startOnMainThread:()=>eC,subscribeToNode:()=>eh,unsubscribeFromNode:()=>US,urlToNodeName:()=>gi});function sue(e){if(!e.port&&!e.securePort&&(e.port=Hs.default.get(B.OPERATIONSAPI_NETWORK_PORT),e.securePort=Hs.default.get(B.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Zp(e))t.set(gi(s.url),s);oue(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=Ue.ws(async(s,i,a,c)=>{if(bt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);s._socket.unref(),ih(s,e,a.then(()=>i?.user)),s.on("error",l=>{l.code!=="ECONNREFUSED"&&bt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,Ue.http(async(s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){bt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&bt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=Yt().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,UV.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l){let u=await Gd(s.peerCertificate,e);if(!u.valid){bt.warn("Certificate verification failed:",u.status,"for node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){bt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l}else bt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:bt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(jo);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=ZS.createSecureContext(u)}catch(l){bt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1&&i()}BV(()=>{for(let s of n)s()})}function BV(e){let t=0;vd(r=>{r?.ca&&(jo.add(r.ca),jo.size!==t&&(t=jo.size,e?.()))})}function iue(e=!0){xV=e}function oue(e){xV||(at(),tc=e.databases,Qa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||rc;for(let[s,i]of XS){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];kV(r,s,e),RC.get(s)?.forEach(i=>i(s))}}))}function kV(e,t,r){if(!t)return console.error(`Attempt to replicate non-existent table ${t.name} from database ${e}`);if(t.replicate===!1||t.sources?.some(s=>s.isReplicator))return;let n;t.sourcedFrom(class FV extends Fr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||rc,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(bt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new Jn,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Ue.hostname)continue;let E=cue(h,FV.subscription,e);if(E?.isConnected){let g=Md(t.auditStore,e,h)[YS];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new MV.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:rue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;bt.warn("Error in load from node",kl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function aue(e,t,r,n,s){let i=XS.get(e);i||XS.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new Hd(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function cue(e,t,r){let n=OV.get(kl);n||(n=new Map,OV.set(kl,n));let s=n.get(r);if(s)return s;let i=Yt().primaryStore.get(e);return i?.url&&(s=new Hd(i.url,t,r,kl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function lh(e,t,r){r||(r={}),r.serverName=e.name;let n=await WS(e.url,r),s=ih(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{bt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{bt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function eh(e){try{vV.isMainThread&&bt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=rc.get(e.database);if(!t){let n;t=new Promise(s=>{bt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,rc.set(e.database,t)}let r=aue(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Xp(n,e.database)),e.replicateByDefault)}catch(t){bt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function US({name:e,url:t,database:r}){bt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(Yt().primaryStore.getRange({})));let n=XS.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function lue(){if(wC!==void 0)return wC;let e=Hs.default.get(B.OPERATIONSAPI_TLS_CERTIFICATE)||Hs.default.get(B.TLS_CERTIFICATE);if(e)return wC=new LV.X509Certificate((0,DV.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return kl||(kl=Hs.default.get("replication_hostname")??gi(Hs.default.get("replication_url"))??lue()??PV("operationsapi_network_secureport")??PV("operationsapi_network_port")??"127.0.0.1")}function uue(){kl=void 0}function PV(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function JS(e){let t=Hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function zS(e){return Qp(e)?.[it()]}function Ja(){let e=Hs.default.get("replication_url");return e||eT(it())}function eT(e){let t=JS("replication_port");if(t)return`ws://${e}:${t}`;if(t=JS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=JS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=JS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function gi(e){if(e)return new URL(e).hostname}function Qa(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return vp(n=>{r(n)}),Il((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];bt.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):due(n)&&t(s,n,!1)}o(r,"forDatabase")}function due(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Jp(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function fue(e){let t={message:""};if(e.replicated){e.replicated=!1,bt.trace?.("Replicating operation",e.operation,"to nodes",Ue.nodes.map(n=>n.name));let r=await Promise.allSettled(Ue.nodes.map(n=>lh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Ue.nodes[s]?.name,i})}return t}var Hs,bt,LV,DV,ZS,MV,vV,UV,xV,rue,nue,jo,tc,XS,OV,wC,kl,us=ie(()=>{Oe();Ua();wu();AC();xr();Hs=w(ue()),bt=w(Q()),LV=require("crypto");QS();DV=require("fs");th();Ml();H();JN();ZS=w(require("node:tls")),MV=w(_e()),vV=require("worker_threads"),UV=w(fs()),rue=1,nue=[],jo=Hs.default.get(B.REPLICATION_ENABLEROOTCAS)!==!1?new Set(ZS.rootCertificates):new Set;o(sue,"start");o(BV,"monitorNodeCAs");o(iue,"disableReplication");o(oue,"assignReplicationSource");o(kV,"setReplicator");XS=new Map;o(aue,"getSubscriptionConnection");OV=new Map;o(cue,"getRetrievalConnectionByName");o(lh,"sendOperationToNode");o(eh,"subscribeToNode");o(US,"unsubscribeFromNode");o(lue,"getCommonNameFromCert");o(it,"getThisNodeName");o(uue,"clearThisNodeName");Object.defineProperty(Ue,"hostname",{get(){return it()}});o(PV,"getHostFromListeningPort");o(JS,"getPortFromListeningPort");o(zS,"getThisNodeId");Ue.replication={getThisNodeId:zS,exportIdMapping:Qp};o(Ja,"getThisNodeUrl");o(eT,"hostnameToUrl");o(gi,"urlToNodeName");o(Qa,"forEachReplicatedDatabase");o(due,"hasExplicitlyReplicatedTable");o(Jp,"lastTimeInAuditStore");o(fue,"replicateOperation")});var iT=M((ZUe,VV)=>{"use strict";var qd=Gq(),{validateBySchema:uh}=ft(),{commonValidators:$d,schemaRegex:NC}=Hi(),hr=require("joi"),mue=Q(),pue=require("uuid").v4,nT=ko(),Vd=(H(),D(W)),hue=require("util"),nc=is(),{handleHDBError:Qo,hdbErrors:Eue,ClientError:dh}=_e(),{HDB_ERROR_MSGS:tT,HTTP_STATUS_CODES:Jo}=Eue,{SchemaEventMsg:sT}=rs(),HV=mr(),{getDatabases:_ue}=(Oe(),D(mt)),{transformReq:Kd}=oe(),{replicateOperation:GV}=(us(),D(zo)),rT=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message}),gue=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message}).required(),Sue=hr.string().min(1).max($d.schema_length.maximum).pattern(NC).messages({"string.pattern.base":"{:#label} "+$d.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();VV.exports={createSchema:Tue,createSchemaStructure:qV,createTable:yue,createTableStructure:$V,createAttribute:wue,dropSchema:Rue,dropTable:Aue,dropAttribute:bue,getBackup:Nue};async function Tue(e){let t=await qV(e);return nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema)),t}o(Tue,"createSchema");async function qV(e){let t=uh(e,hr.object({database:rT,schema:rT}));if(t)throw new dh(t.message);if(Kd(e),!await qd.checkSchemaExists(e.schema))throw Qo(new Error,tT.SCHEMA_EXISTS_ERR(e.schema),Jo.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,tT.SCHEMA_EXISTS_ERR(e.schema),!0);return await nc.createSchema(e),`database '${e.schema}' successfully created`}o(qV,"createSchemaStructure");async function yue(e){return Kd(e),e.hash_attribute=e.primary_key??e.hash_attribute,await $V(e)}o(yue,"createTable");async function $V(e){let t=uh(e,hr.object({database:rT,schema:rT,table:gue,residence:hr.array().items(hr.string().min(1)).optional(),hash_attribute:Sue}));if(t)throw new dh(t.message);if(!await qd.checkSchemaTableExists(e.schema,e.table))throw Qo(new Error,tT.TABLE_EXISTS_ERR(e.schema,e.table),Jo.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,tT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await nc.createTable(n,e);else throw Qo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Jo.BAD_REQUEST);else await nc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o($V,"createTableStructure");async function Rue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new dh(t.message);Kd(e);let r=await qd.checkSchemaExists(e.schema);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);let n=await qd.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await nc.dropSchema(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema)),await HV.purgeSchemaTableStreams(e.schema,s);let i=await GV(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Rue,"dropSchema");async function Aue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required()}));if(t)throw new dh(t.message);Kd(e);let r=await qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);await nc.dropTable(e),await HV.purgeTableStream(e.schema,e.table);let n=await GV(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Aue,"dropTable");async function bue(e){let t=uh(e,hr.object({database:hr.string(),schema:hr.string(),table:hr.string().required(),attribute:hr.string().required()}));if(t)throw new dh(t.message);Kd(e);let r=await qd.checkSchemaTableExists(e.schema,e.table);if(r)throw Qo(new Error,r,Jo.NOT_FOUND,Vd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Qo(new Error,"You cannot drop a hash attribute",Jo.BAD_REQUEST,void 0,void 0,!0);if(Vd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Qo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Jo.BAD_REQUEST,void 0,void 0,!0);try{return await nc.dropAttribute(e),Iue(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw mue.error(`Got an error deleting attribute ${hue.inspect(e)}.`),n}}o(bue,"dropAttribute");function Iue(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)}o(Iue,"dropAttributeFromGlobal");async function wue(e){Kd(e);let t=_ue()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Qo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Jo.BAD_REQUEST,void 0,void 0,!0);return await nc.createAttribute(e),nT.signalSchemaChange(new sT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wue,"createAttribute");function Nue(e){return nc.getBackup(e)}o(Nue,"getBackup")});var YV=M((txe,KV)=>{"use strict";var{OPERATIONS_ENUM:Cue}=(H(),D(W)),CC=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Cue.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};KV.exports=CC});var OC=M((sxe,JV)=>{"use strict";var Oue=is(),nxe=YV(),oT=oe(),aT=(H(),D(W)),Pue=ue(),{handleHDBError:WV,hdbErrors:Lue}=_e(),{HDB_ERROR_MSGS:zV,HTTP_STATUS_CODES:jV}=Lue,Due=Object.values(aT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),QV="To use this operation audit log must be enabled in harperdb-config.yaml";JV.exports=Mue;async function Mue(e){if(oT.isEmpty(e.schema))throw new Error(zV.SCHEMA_REQUIRED_ERR);if(oT.isEmpty(e.table))throw new Error(zV.TABLE_REQUIRED_ERR);if(!Pue.get(aT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw WV(new Error,QV,jV.BAD_REQUEST,aT.LOG_LEVELS.ERROR,QV,!0);let t=oT.checkSchemaTableExist(e.schema,e.table);if(t)throw WV(new Error,t,jV.NOT_FOUND,aT.LOG_LEVELS.ERROR,t,!0);if(!oT.isEmpty(e.search_type)&&Due.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Oue.readAuditLog(e)}o(Mue,"readAuditLog")});var ZV=M((oxe,XV)=>{"use strict";var{OPERATIONS_ENUM:vue}=(H(),D(W)),PC=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=vue.GET_BACKUP,this.schema=t,this.table=r}};XV.exports=PC});var r1=M((uxe,t1)=>{"use strict";var Uue=is(),cxe=ZV(),LC=oe(),xue=(H(),D(W)),lxe=ue(),{handleHDBError:Bue,hdbErrors:Fue}=_e(),{HDB_ERROR_MSGS:e1,HTTP_STATUS_CODES:kue}=Fue;t1.exports=Hue;async function Hue(e){if(LC.isEmpty(e.schema))throw new Error(e1.SCHEMA_REQUIRED_ERR);if(LC.isEmpty(e.table))throw new Error(e1.TABLE_REQUIRED_ERR);let t=LC.checkSchemaTableExist(e.schema,e.table);if(t)throw Bue(new Error,t,kue.NOT_FOUND,xue.LOG_LEVELS.ERROR,t,!0);return await Uue.getBackup(readAuditLogObject)}o(Hue,"getBackup")});var o1=M((fxe,i1)=>{"use strict";var Gue=ue(),sc=require("joi"),que=ft(),n1=require("moment"),$ue=require("fs-extra"),DC=require("path"),Vue=require("lodash"),fh=(H(),D(W)),{LOG_LEVELS:Hl}=(H(),D(W)),Kue="YYYY-MM-DD hh:mm:ss",Yue=DC.resolve(__dirname,"../logs");i1.exports=function(e){return que.validateBySchema(e,Wue)};var Wue=sc.object({from:sc.custom(s1),until:sc.custom(s1),level:sc.valid(Hl.NOTIFY,Hl.FATAL,Hl.ERROR,Hl.WARN,Hl.INFO,Hl.DEBUG,Hl.TRACE),order:sc.valid("asc","desc"),limit:sc.number().min(1),start:sc.number().min(0),log_name:sc.custom(zue)});function s1(e,t){if(n1(e,n1.ISO_8601).format(Kue)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(s1,"validateDatetime");function zue(e,t){if(Vue.invert(fh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Gue.get(fh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?fh.LOG_NAMES.HDB:e,i=s===fh.LOG_NAMES.INSTALL?DC.join(Yue,fh.LOG_NAMES.INSTALL):DC.join(n,s);return $ue.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(zue,"validateReadLogPath")});var vC=M((pxe,c1)=>{"use strict";var cT=(H(),D(W)),jue=Q(),Que=ue(),Jue=o1(),MC=require("path"),a1=require("fs-extra"),{once:Xue}=require("events"),{handleHDBError:Zue,hdbErrors:ede}=_e(),{PACKAGE_ROOT:tde}=Tt(),{replicateOperation:rde}=(us(),D(zo)),nde=MC.join(tde,"logs"),sde=1e3,ide=200;c1.exports=ode;async function ode(e){let t=Jue(e);if(t)throw Zue(t,t.message,ede.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=rde(e),n=Que.get(cT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?cT.LOG_NAMES.HDB:e.log_name,i=s===cT.LOG_NAMES.INSTALL?MC.join(nde,cT.LOG_NAMES.INSTALL):MC.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?sde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(a1.statSync(i).size-(E+5)*ide,0));let A=a1.createReadStream(i,{start:g});A.on("error",G=>{jue.error(G)});let S=0,R=[],N="",O;A.on("data",G=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let J=0,Y;for(;(Y=k.exec(G))&&!A.destroyed;){O&&(O.message=G.slice(J,Y.index),F(O));let[le,ae,re]=Y,Re=re.split("] ["),Te=Re[0],Fe=Re[1];Re.splice(0,2),O={timestamp:ae,thread:Te,level:Fe,tags:Re,message:""},J=Y.index+le.length}N=G.slice(J)}),A.on("end",G=>{A.destroyed||O&&(O.message=N.trim(),F(O))}),A.resume();function F(G){let k,J,Y;switch(!0){case(a&&l&&d):k=new Date(G.timestamp),J=new Date(u),Y=new Date(f),G.level===c&&k>=J&&k<=Y&&S<h?S++:G.level===c&&k>=J&&k<=Y&&(ro(G,p,R),S++,S===E&&A.destroy());break;case(a&&l):k=new Date(G.timestamp),J=new Date(u),G.level===c&&k>=J&&S<h?S++:G.level===c&&k>=J&&(ro(G,p,R),S++,S===E&&A.destroy());break;case(a&&d):k=new Date(G.timestamp),Y=new Date(f),G.level===c&&k<=Y&&S<h?S++:G.level===c&&k<=Y&&(ro(G,p,R),S++,S===E&&A.destroy());break;case(l&&d):k=new Date(G.timestamp),J=new Date(u),Y=new Date(f),k>=J&&k<=Y&&S<h?S++:k>=J&&k<=Y&&(ro(G,p,R),S++,S===E&&A.destroy());break;case a:G.level===c&&S<h?S++:G.level===c&&(ro(G,p,R),S++,S===E&&A.destroy());break;case l:k=new Date(G.timestamp),J=new Date(u),k>=J&&S<h?S++:k>=J&&S>=h&&(ro(G,p,R),S++,S===E&&A.destroy());break;case d:k=new Date(G.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ro(G,p,R),S++,S===E&&A.destroy());break;default:S<h?S++:(ro(G,p,R),S++,S===E&&A.destroy())}}o(F,"onLogMessage"),await Xue(A,"close");let te=await r;if(te.replicated){for(let G of R)G.node=server.hostname;for(let G of te.replicated){let k=G.node;if(G.status==="failed")ro({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${G.reason}`},p,R);else for(let J of G.results)J.node=k,ro(J,p,R)}}return R}o(ode,"readLog");function ro(e,t,r){t==="desc"?ade(e,r):t==="asc"?cde(e,r):r.push(e)}o(ro,"pushLineToResult");function ade(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(ade,"insertDescending");function cde(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(cde,"insertAscending")});var lT=M((Txe,f1)=>{"use strict";var UC=require("joi"),{string:Yd,boolean:l1,date:lde}=UC.types(),ude=ft(),{validateSchemaExists:Exe,validateTableExists:_xe,validateSchemaName:gxe}=Hi(),dde=(H(),D(W)),fde=wt(),u1=ue();u1.initSync();var Sxe=Yd.invalid(u1.get(dde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(fde.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),d1={operation:Yd.valid("add_node","update_node","set_node_replication"),node_name:Yd.optional(),subscriptions:UC.array().items({table:Yd.optional(),schema:Yd.optional(),database:Yd.optional(),subscribe:l1.required(),publish:l1.required().custom(pde),start_time:lde.iso()})};function mde(e){return ude.validateBySchema(e,UC.object(d1))}o(mde,"addUpdateNodeValidator");function pde(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`)}o(pde,"checkForFalsy");f1.exports={addUpdateNodeValidator:mde,validationSchema:d1}});var Wd=M((Rxe,m1)=>{"use strict";var xC=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},BC=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};m1.exports={Node:xC,NodeSubscription:BC}});var h1=M((bxe,p1)=>{"use strict";var hde=(H(),D(W)).OPERATIONS_ENUM,FC=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=hde.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};p1.exports=FC});var mh=M((wxe,E1)=>{"use strict";var kC=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},HC=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};E1.exports={RemotePayloadObject:kC,RemotePayloadSubscription:HC}});var g1=M((Cxe,_1)=>{"use strict";var GC=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};_1.exports=GC});var T1=M((vxe,S1)=>{"use strict";var Ede=g1(),Pxe=$t(),Lxe=_t(),_de=Q(),{getSchemaPath:Dxe,getTransactionAuditStorePath:Mxe}=Rt(),{getDatabases:gde}=(Oe(),D(mt));S1.exports=Sde;async function Sde(e){let t=new Ede;try{let r=gde()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats();t.schema=e.schema,t.table=e.name,t.record_count=n.entryCount,t.transaction_log_record_count=s.entryCount}catch(r){_de.warn(`unable to stat table dbi due to ${r}`)}return t}o(Sde,"lmdbGetTableSize")});var R1=M((xxe,y1)=>{"use strict";var qC=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};y1.exports=qC});var jd=M((qxe,w1)=>{"use strict";var Tde=require("fs-extra"),yde=require("path"),_n=require("systeminformation"),ic=Q(),A1=mr(),Fxe=wt(),zd=(H(),D(W)),Rde=T1(),Ade=Cl(),{getThreadInfo:b1}=nt(),ph=ue();ph.initSync();var bde=R1(),{openEnvironment:kxe}=_t(),{getSchemaPath:Hxe}=Rt(),{database:Gxe,databases:$C}=(Oe(),D(mt)),uT;w1.exports={getHDBProcessInfo:WC,getNetworkInfo:jC,getDiskInfo:zC,getMemoryInfo:YC,getCPUInfo:KC,getTimeInfo:VC,getSystemInformation:QC,systemInformation:Ide,getTableSize:JC,getMetrics:XC};function VC(){return _n.time()}o(VC,"getTimeInfo");async function KC(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await _n.cpu();d.cpu_speed=await _n.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:A,...S}=await _n.currentLoad();return S.cpus=[],A.forEach(R=>{let{rawLoad:N,rawLoadIdle:O,rawLoadIrq:F,rawLoadNice:te,rawLoadSystem:G,rawLoadUser:k,...J}=R;S.cpus.push(J)}),d.current_load=S,d}catch(e){return ic.error(`error in getCPUInfo: ${e}`),{}}}o(KC,"getCPUInfo");async function YC(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await _n.mem();return Object.assign(s,process.memoryUsage())}catch(e){return ic.error(`error in getMemoryInfo: ${e}`),{}}}o(YC,"getMemoryInfo");async function WC(){let e={core:[],clustering:[]};try{let t=await _n.processes(),r;try{r=Number.parseInt(await Tde.readFile(yde.join(ph.get(zd.CONFIG_PARAMS.ROOTPATH),zd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===zd.NODE_ERROR_CODES.ENOENT)ic.warn("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB. This could be because HarperDB is not running.");else throw n}t.list.forEach(n=>{n.pid===r?e.core.push(n):n.name==="nats-server"&&e.clustering.push(n)});for(let n of e.core)for(let s of t.list)s.pid===n.parentPid&&(s.name==="PM2"||s.command==="PM2")&&(n.parent="PM2");return e}catch(t){return ic.error(`error in getHDBProcessInfo: ${t}`),e}}o(WC,"getHDBProcessInfo");async function zC(){let e={};try{if(!ph.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await _n.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await _n.fsStats();return e.read_write=u,e.size=await _n.fsSize(),e}catch(t){return ic.error(`error in getDiskInfo: ${t}`),e}}o(zC,"getDiskInfo");async function jC(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ph.get(zd.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await _n.networkInterfaceDefault(),e.latency=await _n.inetChecksite("google.com"),(await _n.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await _n.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return ic.error(`error in getNetworkInfo: ${t}`),e}}o(jC,"getNetworkInfo");async function QC(){if(uT!==void 0)return uT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await _n.osInfo();e=c;let l=await _n.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,uT=e,uT}catch(t){return ic.error(`error in getSystemInformation: ${t}`),e}}o(QC,"getSystemInformation");async function JC(){let e=[],t=await Ade.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Rde(n));return e}o(JC,"getTableSize");async function XC(){let e={};for(let t in $C){let r=e[t]={},n=r.tables={};for(let s in $C[t])try{let i=$C[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){ic.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(XC,"getMetrics");async function I1(){if(ph.get(zd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await A1.getNATSReferences(),t=await A1.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(I1,"getNatsStreamInfo");async function Ide(e){let t=new bde;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await QC(),t.time=VC(),t.cpu=await KC(),t.memory=await YC(),t.disk=await zC(),t.network=await jC(),t.harperdb_processes=await WC(),t.table_size=await JC(),t.metrics=await XC(),t.threads=await b1(),t.replication=await I1(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await QC();break;case"time":t.time=VC();break;case"cpu":t.cpu=await KC();break;case"memory":t.memory=await YC();break;case"disk":t.disk=await zC();break;case"network":t.network=await jC();break;case"harperdb_processes":t.harperdb_processes=await WC();break;case"table_size":t.table_size=await JC();break;case"database_metrics":case"metrics":t.metrics=await XC();break;case"threads":t.threads=await b1();break;case"replication":t.replication=await I1();break;default:break}return t}o(Ide,"systemInformation")});var Xo=M((Wxe,P1)=>{"use strict";var wde=Bn(),ZC=oe(),Nde=require("util"),Gl=(H(),D(W)),N1=ue();N1.initSync();var Cde=CN(),C1=fn(),{Node:Vxe,NodeSubscription:Kxe}=Wd(),Ode=Qu(),Pde=h1(),{RemotePayloadObject:Lde,RemotePayloadSubscription:Dde}=mh(),{handleHDBError:Mde,hdbErrors:vde}=_e(),{HTTP_STATUS_CODES:Ude,HDB_ERROR_MSGS:xde}=vde,Bde=di(),Fde=jd(),{packageJson:kde}=Tt(),{getDatabases:Hde}=(Oe(),D(mt)),Yxe=Nde.promisify(Cde.authorize),Gde=C1.searchByHash,qde=C1.searchByValue;P1.exports={isEmpty:$de,getNodeRecord:Vde,upsertNodeRecord:Kde,buildNodePayloads:Yde,checkClusteringEnabled:Wde,getAllNodeRecords:zde,getSystemInfo:jde,reverseSubscription:O1};function $de(e){return e==null}o($de,"isEmpty");async function Vde(e){let t=new Ode(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Gde(t)}o(Vde,"getNodeRecord");async function Kde(e){let t=new Pde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wde.upsert(t)}o(Kde,"upsertNodeRecord");function O1(e){if(ZC.isEmpty(e.subscribe)||ZC.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(O1,"reverseSubscription");function Yde(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=ZC.getTableHashAttribute(l,u),{subscribe:f,publish:m}=O1(c),p=Hde()[l]?.[u],h=new Dde(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new Lde(r,t,s,n)}o(Yde,"buildNodePayloads");function Wde(){if(!N1.get(Gl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Mde(new Error,xde.CLUSTERING_NOT_ENABLED,Ude.BAD_REQUEST,void 0,void 0,!0)}o(Wde,"checkClusteringEnabled");async function zde(){let e=new Bde(Gl.SYSTEM_SCHEMA_NAME,Gl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await qde(e))}o(zde,"getAllNodeRecords");async function jde(){let e=await Fde.getSystemInformation();return{hdb_version:kde.version,node_version:e.node_version,platform:e.platform}}o(jde,"getSystemInfo")});var eO=M((jxe,F1)=>{"use strict";var dT=mr(),L1=oe(),D1=wt(),M1=(H(),D(W)),fT=Q(),v1=iT(),Qde=rp(),{RemotePayloadObject:Jde}=mh(),{handleHDBError:U1,hdbErrors:Xde}=_e(),{HTTP_STATUS_CODES:x1}=Xde,{NodeSubscription:B1}=Wd();F1.exports=Zde;async function Zde(e,t){let r;try{r=await dT.request(`${t}.${D1.REQUEST_SUFFIX}`,new Jde(M1.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),fT.trace("Response from remote describe all request:",r)}catch(a){fT.error(`addNode received error from describe all request to remote node: ${a}`);let c=dT.requestErrorHandler(a,"add_node",t);throw U1(new Error,c,x1.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===D1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw U1(new Error,a,x1.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===M1.SYSTEM_SCHEMA_NAME){await dT.createLocalTableStream(l,c);let h=new B1(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let u=L1.doesSchemaExist(l),d=n[l]!==void 0,f=c?L1.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(fT.trace(`addNode creating schema: ${l}`),await v1.createSchema({operation:"create_schema",schema:l})),!f&&m){fT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Qde(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await v1.createTable(h)}await dT.createLocalTableStream(l,c);let p=new B1(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p)}return{added:i,skipped:s}}o(Zde,"reviewSubscriptions")});var Qd={};Ie(Qd,{addNodeBack:()=>tO,removeNodeBack:()=>rO,setNode:()=>nfe});async function nfe(e){e.node_name&&!e.hostname&&(e.hostname=e.node_name),e.verify_tls!==void 0&&(e.rejectUnauthorized=e.verify_tls);let{url:t,hostname:r}=e;t?r||(r=e.hostname=gi(t)):t=eT(r);let n=(0,H1.validateBySchema)(e,rfe);if(n)throw(0,Zo.handleHDBError)(n,n.message,tfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Zo.ClientError("url or hostname is required for remove_node operation");let p=r,h=Yt(),E=await h.get(p);if(!E)throw new Zo.ClientError(p+" does not exist");try{await lh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){ms.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new Zo.ClientError("url required for this operation");let s=Ja();if(s==null)throw new Zo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Gs.getReplicationCert)();let p=await(0,Gs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Gs.createCsr)(),ms.info("Sending CSR to target node:",t)):p&&(c=p.certificate,ms.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,ac.get)(B.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(k1):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=k1(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await lh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,ms.warn("Error adding node:",t,"to cluster:",p),d=p}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ms.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Gs.setCertTable)({name:efe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Gs.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(p.shard=(0,ac.get)(B.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await Yo(it(),p)}await Yo(u?u.nodeName:f.name??gi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function tO(e){ms.trace("addNodeBack received request:",e);let t=await(0,Gs.signCertificate)(e),r;e.csr?(r=t.signingCA,ms.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,ms.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Gs.getReplicationCertAuth)();if(n.replicates){let i={url:Ja(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ac.get)(B.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ac.get)(B.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Yo(it(),i)}return await Yo(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,ms.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function rO(e){ms.trace("removeNodeBack received request:",e),await Yt().delete(e.name)}function k1(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Gs,H1,oc,ac,ms,Zo,efe,tfe,rfe,Jd=ie(()=>{Gs=w(fs()),H1=w(ft()),oc=w(require("joi")),ac=w(ue());H();th();Ml();us();ms=w(Q()),Zo=w(_e()),{pki:efe}=require("node-forge"),{HTTP_STATUS_CODES:tfe}=Zo.hdbErrors,rfe=oc.default.object({hostname:oc.default.string(),verify_tls:oc.default.boolean(),replicates:oc.default.boolean(),subscriptions:oc.default.array(),revoked_certificates:oc.default.array(),shard:oc.default.number()});o(nfe,"setNode");o(tO,"addNodeBack");o(rO,"removeNodeBack");o(k1,"reverseSubscription")});var _T=M((s0e,q1)=>{"use strict";var{handleHDBError:mT,hdbErrors:sfe}=_e(),{HTTP_STATUS_CODES:pT}=sfe,{addUpdateNodeValidator:ife}=lT(),hT=Q(),ET=(H(),D(W)),G1=wt(),ofe=oe(),hh=mr(),Eh=Xo(),nO=ue(),afe=eO(),{Node:cfe,NodeSubscription:lfe}=Wd(),{broadcast:ufe}=nt(),{setNode:dfe}=(Jd(),D(Qd)),r0e=ue(),n0e=(H(),D(W)),ffe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",mfe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pfe=nO.get(ET.CONFIG_PARAMS.CLUSTERING_NODENAME);q1.exports=hfe;async function hfe(e,t=!1){if(hT.trace("addNode called with:",e),nO.get(ET.CONFIG_PARAMS.REPLICATION_URL)||nO.get(ET.CONFIG_PARAMS.REPLICATION_HOSTNAME))return dfe(e);Eh.checkClusteringEnabled();let r=ife(e);if(r)throw mT(r,r.message,pT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Eh.getNodeRecord(n);if(!ofe.isEmptyOrZeroLength(f))throw mT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,pT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await afe(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=ffe,a;let c=Eh.buildNodePayloads(s,pfe,ET.OPERATIONS_ENUM.ADD_NODE,await Eh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new lfe(p.schema,p.table,p.publish,p.subscribe))}hT.trace("addNode sending remote payload:",c);let u;try{u=await hh.request(`${n}.${G1.REQUEST_SUFFIX}`,c)}catch(f){hT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await hh.updateRemoteConsumer(E,n)}let m=hh.requestErrorHandler(f,"add_node",n);throw mT(new Error,m,pT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===G1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw mT(new Error,f,pT.INTERNAL_SERVER_ERROR,"error",f)}hT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await hh.updateRemoteConsumer(p,n),p.subscribe===!0&&await hh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new cfe(n,l,u.system_info);return await Eh.upsertNodeRecord(d),ufe({type:"nats_update"}),i.length>0?a.message=mfe:a.message=`Successfully added '${n}' to manifest`,a}o(hfe,"addNode")});var aO=M((a0e,V1)=>{"use strict";var{handleHDBError:sO,hdbErrors:Efe}=_e(),{HTTP_STATUS_CODES:iO}=Efe,{addUpdateNodeValidator:_fe}=lT(),_h=Q(),gT=(H(),D(W)),$1=wt(),o0e=oe(),gh=mr(),Sh=Xo(),oO=ue(),{cloneDeep:gfe}=require("lodash"),Sfe=eO(),{Node:Tfe,NodeSubscription:yfe}=Wd(),{broadcast:Rfe}=nt(),{setNode:Afe}=(Jd(),D(Qd)),bfe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Ife="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",wfe=oO.get(gT.CONFIG_PARAMS.CLUSTERING_NODENAME);V1.exports=Nfe;async function Nfe(e){if(_h.trace("updateNode called with:",e),oO.get(gT.CONFIG_PARAMS.REPLICATION_URL)??oO.get(gT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Afe(e);Sh.checkClusteringEnabled();let t=_fe(e);if(t)throw sO(t,t.message,iO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Sh.getNodeRecord(r);s.length>0&&(n=gfe(s));let{added:i,skipped:a}=await Sfe(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=bfe,c;let l=Sh.buildNodePayloads(i,wfe,gT.OPERATIONS_ENUM.UPDATE_NODE,await Sh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];_h.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}_h.trace("updateNode sending remote payload:",l);let u;try{u=await gh.request(`${r}.${$1.REQUEST_SUFFIX}`,l)}catch(d){_h.error(`updateNode received error from request: ${d}`);let f=gh.requestErrorHandler(d,"update_node",r);throw sO(new Error,f,iO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===$1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw sO(new Error,d,iO.INTERNAL_SERVER_ERROR,"error",d)}_h.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await gh.updateRemoteConsumer(m,r),m.subscribe===!0?await gh.updateConsumerIterator(m.schema,m.table,r,"start"):await gh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Tfe(r,[],u.system_info)]),await Cfe(n[0],i,u.system_info),a.length>0?c.message=Ife:c.message=`Successfully updated '${r}'`,c}o(Nfe,"updateNode");async function Cfe(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new yfe(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Sh.upsertNodeRecord(n),Rfe({type:"nats_update"})}o(Cfe,"updateNodeTable")});var j1=M((l0e,z1)=>{"use strict";var W1=require("joi"),{string:K1}=W1.types(),Ofe=ft(),Y1=(H(),D(W)),Pfe=ue(),Lfe=wt();z1.exports=Dfe;function Dfe(e){let t=K1.invalid(Pfe.get(Y1.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Lfe.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=W1.object({operation:K1.valid(Y1.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Ofe.validateBySchema(e,r)}o(Dfe,"removeNodeValidator")});var ST=M((d0e,eK)=>{"use strict";var{handleHDBError:Q1,hdbErrors:Mfe}=_e(),{HTTP_STATUS_CODES:J1}=Mfe,vfe=j1(),Th=Q(),X1=Xo(),Ufe=oe(),Xd=(H(),D(W)),Z1=wt(),cO=mr(),lO=ue(),{RemotePayloadObject:xfe}=mh(),{NodeSubscription:Bfe}=Wd(),Ffe=tp(),kfe=_l(),{broadcast:Hfe}=nt(),{setNode:Gfe}=(Jd(),D(Qd)),qfe=lO.get(Xd.CONFIG_PARAMS.CLUSTERING_NODENAME);eK.exports=$fe;async function $fe(e){if(Th.trace("removeNode called with:",e),lO.get(Xd.CONFIG_PARAMS.REPLICATION_URL)??lO.get(Xd.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Gfe(e);X1.checkClusteringEnabled();let t=vfe(e);if(t)throw Q1(t,t.message,J1.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await X1.getNodeRecord(r);if(Ufe.isEmptyOrZeroLength(n))throw Q1(new Error,`Node '${r}' was not found.`,J1.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new xfe(Xd.OPERATIONS_ENUM.REMOVE_NODE,qfe,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await cO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await cO.updateRemoteConsumer(new Bfe(d.schema,d.table,!1,!1),r)}catch(f){Th.error(f)}}try{i=await cO.request(`${r}.${Z1.REQUEST_SUFFIX}`,s),Th.trace("Remove node reply from remote node:",r,i)}catch(l){Th.error("removeNode received error from request:",l),a=!0}let c=new Ffe(Xd.SYSTEM_SCHEMA_NAME,Xd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kfe.deleteRecord(c),Hfe({type:"nats_update"}),i?.status===Z1.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(Th.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`}o($fe,"removeNode")});var nK=M((m0e,rK)=>{"use strict";var tK=require("joi"),{string:Vfe,array:Kfe}=tK.types(),Yfe=ft(),Wfe=lT();rK.exports=zfe;function zfe(e){let t=tK.object({operation:Vfe.valid("configure_cluster").required(),connections:Kfe.items(Wfe.validationSchema).required()});return Yfe.validateBySchema(e,t)}o(zfe,"configureClusterValidator")});var uO=M((h0e,cK)=>{"use strict";var sK=(H(),D(W)),TT=Q(),jfe=oe(),Qfe=ue(),Jfe=ST(),Xfe=_T(),Zfe=Xo(),eme=nK(),{handleHDBError:iK,hdbErrors:tme}=_e(),{HTTP_STATUS_CODES:oK}=tme,rme="Configure cluster complete.",nme="Failed to configure the cluster. Check the logs for more details.",sme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";cK.exports=ime;async function ime(e){TT.trace("configure cluster called with:",e);let t=eme(e);if(t)throw iK(t,t.message,oK.BAD_REQUEST,void 0,void 0,!0);let r=await Zfe.getAllNodeRecords(),n=[];if(Qfe.get(sK.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await aK(Jfe,{operation:sK.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}TT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await aK(Xfe,f,f.node_name);s.push(m)}TT.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(TT.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(jfe.isEmptyOrZeroLength(a))return{message:rme,connections:c};if(l)return{message:sme,failed_nodes:a,connections:c};throw iK(new Error,nme,oK.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ime,"configureCluster");async function aK(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(aK,"functionWrapper")});var fK=M((_0e,dK)=>{"use strict";var yh=require("joi"),ome=ft(),{validateSchemaExists:lK,validateTableExists:ame,validateSchemaName:uK}=Hi(),cme=yh.object({operation:yh.string().valid("purge_stream"),schema:yh.string().custom(lK).custom(uK).optional(),database:yh.string().custom(lK).custom(uK).optional(),table:yh.string().custom(ame).required()});function lme(e){return ome.validateBySchema(e,cme)}o(lme,"purgeStreamValidator");dK.exports=lme});var dO=M((S0e,mK)=>{"use strict";var{handleHDBError:ume,hdbErrors:dme}=_e(),{HTTP_STATUS_CODES:fme}=dme,mme=fK(),pme=mr(),hme=Xo();mK.exports=Eme;async function Eme(e){e.schema=e.schema??e.database;let t=mme(e);if(t)throw ume(t,t.message,fme.BAD_REQUEST,void 0,void 0,!0);hme.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await pme.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(Eme,"purgeStream")});var pO=M((y0e,TK)=>{"use strict";var mO=Xo(),_me=mr(),RT=ue(),Zd=(H(),D(W)),ql=wt(),gme=oe(),fO=Q(),{RemotePayloadObject:Sme}=mh(),{ErrorCode:pK}=require("nats"),{parentPort:hK}=require("worker_threads"),{onMessageByType:Tme}=nt(),{getThisNodeName:yme}=(us(),D(zo)),{requestClusterStatus:Rme}=(th(),D(C$)),{getReplicationSharedStatus:Ame,getHDBNodeTable:bme}=(Ml(),D(XN)),{CONFIRMATION_STATUS_POSITION:Ime,RECEIVED_VERSION_POSITION:wme,RECEIVED_TIME_POSITION:Nme,SENDING_TIME_POSITION:Cme,RECEIVING_STATUS_POSITION:Ome,RECEIVING_STATUS_RECEIVING:Pme}=(AC(),D(SV)),EK=RT.get(Zd.CONFIG_PARAMS.CLUSTERING_ENABLED),_K=RT.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);TK.exports={clusterStatus:Lme,buildNodeStatus:SK};var gK;Tme("cluster-status",async e=>{gK(e)});async function Lme(){if(RT.get(Zd.CONFIG_PARAMS.REPLICATION_URL)||RT.get(Zd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(hK){hK.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{gK=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Ame(u,l,a);c.lastCommitConfirmed=yT(d[Ime]),c.lastReceivedRemoteTime=yT(d[wme]),c.lastReceivedLocalTime=yT(d[Nme]),c.sendingMessage=yT(d[Cme]),c.lastReceivedStatus=d[Ome]===Pme?"Receiving":"Waiting"}}}else n=Rme();n.node_name=yme();let s=bme().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:_K,is_enabled:EK,connections:[]};if(!EK)return e;let t=await mO.getAllNodeRecords();if(gme.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(SK(t[n],e.connections));return await Promise.allSettled(r),e}o(Lme,"clusterStatus");function yT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(yT,"asDate");async function SK(e,t){let r=e.name,n=new Sme(Zd.OPERATIONS_ENUM.CLUSTER_STATUS,_K,void 0,await mO.getSystemInfo()),s,i,a=ql.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await _me.request(ql.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===ql.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ql.CLUSTER_STATUS_STATUSES.CLOSED,fO.error(`Error getting node status from ${r} `,s))}catch(l){fO.warn(`Error getting node status from ${r}`,l),l.code===pK.NoResponders?a=ql.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===pK.Timeout?a=ql.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ql.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Dme(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==Zd.PRE_4_0_0_VERSION&&await mO.upsertNodeRecord(l)}catch(l){fO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(SK,"buildNodeStatus");function Dme(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Dme,"NodeStatusObject")});var EO=M((A0e,yK)=>{"use strict";var{handleHDBError:Mme,hdbErrors:vme}=_e(),{HTTP_STATUS_CODES:Ume}=vme,xme=mr(),Bme=Xo(),hO=oe(),AT=require("joi"),Fme=ft(),kme=2e3,Hme=AT.object({timeout:AT.number().min(1),connected_nodes:AT.boolean(),routes:AT.boolean()});yK.exports=Gme;async function Gme(e){Bme.checkClusteringEnabled();let t=Fme.validateBySchema(e,Hme);if(t)throw Mme(t,t.message,Ume.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||hO.autoCastBoolean(n),a=s===void 0||hO.autoCastBoolean(s),c={nodes:[]},l=await xme.getServerList(r??kme),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),a&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:hO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(Gme,"clusterNetwork")});var IK=M((I0e,bK)=>{"use strict";var _O=require("joi"),RK=ft(),{routeConstraints:AK}=gA();bK.exports={setRoutesValidator:qme,deleteRoutesValidator:$me};function qme(e){let t=_O.object({server:_O.valid("hub","leaf"),routes:AK.required()});return RK.validateBySchema(e,t)}o(qme,"setRoutesValidator");function $me(e){let t=_O.object({routes:AK.required()});return RK.validateBySchema(e,t)}o($me,"deleteRoutesValidator")});var bT=M((N0e,DK)=>{"use strict";var ea=yt(),gO=oe(),qs=(H(),D(W)),ef=ue(),wK=IK(),{handleHDBError:NK,hdbErrors:Vme}=_e(),{HTTP_STATUS_CODES:CK}=Vme,OK="cluster routes successfully set",PK="cluster routes successfully deleted";DK.exports={setRoutes:Yme,getRoutes:Wme,deleteRoutes:zme};function Kme(e){let t=ea.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=gO.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ea.updateConfigValue(qs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ea.updateConfigValue(qs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:OK,set:i,skipped:s}}o(Kme,"setRoutesNats");function Yme(e){let t=wK.setRoutesValidator(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);if(ef.get(qs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Kme(e);let r=[],n=[],s=ef.get(qs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{LK(s,i)?n.push(i):(s.push(i),r.push(i))}),ea.updateConfigValue(qs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:OK,set:r,skipped:n}}o(Yme,"setRoutes");function LK(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(LK,"existsInArray");function Wme(){if(ef.get(qs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ea.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return ef.get(qs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Wme,"getRoutes");function zme(e){let t=wK.deleteRoutesValidator(e);if(t)throw NK(t,t.message,CK.BAD_REQUEST,void 0,void 0,!0);if(ef.get(qs.CONFIG_PARAMS.CLUSTERING_ENABLED))return jme(e);let r=[],n=[],s=ef.get(qs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{LK(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),ea.updateConfigValue(qs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:PK,deleted:r,skipped:n}}o(zme,"deleteRoutes");function jme(e){let t=ea.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=gO.isEmptyOrZeroLength(r)?null:r,ea.updateConfigValue(qs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=gO.isEmptyOrZeroLength(n)?null:n,ea.updateConfigValue(qs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:PK,deleted:s,skipped:i}}o(jme,"deleteRoutesNats")});var vK=M((O0e,MK)=>{"use strict";var Rh=require("alasql"),$l=require("recursive-iterator"),yi=Q(),Qme=oe(),Ah=(H(),D(W)),SO=class{static{o(this,"sqlStatementBucket")}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,Xme(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(s=>Ah.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!Ah.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Ah.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Jme(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Ah.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Rh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Jme(e){return e.filter(t=>t[Ah.PERMS_CRUD_ENUM.READ])}o(Jme,"filterReadRestrictedAttrs");function Xme(e,t,r,n,s){Zme(e,t,r,n,s)}o(Xme,"interpretAST");function bh(e,t,r,n,s){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),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(bh,"addSchemaTableToMap");function Zme(e,t,r,n,s){if(!e){yi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Rh.yy.Insert?npe(e,t,r):e instanceof Rh.yy.Select?epe(e,t,r,n,s):e instanceof Rh.yy.Update?tpe(e,t,r):e instanceof Rh.yy.Delete?rpe(e,t,r):yi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Zme,"getRecordAttributesAST");function epe(e,t,r,n,s){if(!e){yi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Qme.isEmptyOrZeroLength(i)){yi.error("No schema specified");return}e.from.forEach(c=>{bh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),bh(c.table,t,r,n,s)});let a=new $l(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{yi.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new $l(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{yi.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new $l(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{yi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new $l(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{yi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(epe,"getSelectAttributes");function tpe(e,t,r){if(!e){yi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new $l(e.columns),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}o(tpe,"getUpdateAttributes");function rpe(e,t,r){if(!e){yi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new $l(e.where),s=e.table.databaseid;bh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.table.tableid,s,i.columnid,t,r)}o(rpe,"getDeleteAttributes");function npe(e,t,r){if(!e){yi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new $l(e.columns),s=e.into.databaseid;bh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&TO(e.into.tableid,s,i.columnid,t,r)}o(npe,"getInsertAttributes");function TO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(TO,"pushAttribute");MK.exports=SO});var xK=M((L0e,UK)=>{"use strict";var spe=wt(),yO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,p,h){this.port=t,a===null&&(a=void 0),this.server_name=r+spe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};UK.exports=yO});var kK=M((M0e,FK)=>{"use strict";var BK=wt(),RO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+BK.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+BK.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};FK.exports=RO});var GK=M((U0e,HK)=>{"use strict";var AO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};HK.exports=AO});var $K=M((B0e,qK)=>{"use strict";var ipe=wt(),bO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+ipe.SERVER_SUFFIX.ADMIN,this.password=r}};qK.exports=bO});var CT=M((k0e,YK)=>{"use strict";var Vl=require("path"),Kl=require("fs-extra"),ope=xK(),ape=kK(),cpe=GK(),lpe=$K(),IO=as(),rf=oe(),Hn=yt(),wT=(H(),D(W)),Ih=wt(),{CONFIG_PARAMS:sr}=wT,nf=Q(),wh=ue(),VK=Wi(),wO=mr(),upe=fs(),tf="clustering",dpe=1e4,KK=50;YK.exports={generateNatsConfig:mpe,removeNatsConfig:ppe,getHubConfigPath:fpe};function fpe(){let e=wh.get(sr.ROOTPATH);return Vl.join(e,tf,Ih.NATS_CONFIG_FILES.HUB_SERVER)}o(fpe,"getHubConfigPath");async function mpe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=wh.get(sr.ROOTPATH);Kl.ensureDirSync(Vl.join(r,"clustering","leaf")),wh.initSync();let n=Hn.getConfigFromFile(sr.CLUSTERING_TLS_CERT_AUTH),s=Hn.getConfigFromFile(sr.CLUSTERING_TLS_PRIVATEKEY),i=Hn.getConfigFromFile(sr.CLUSTERING_TLS_CERTIFICATE);!await Kl.exists(i)&&!await Kl.exists(!n)&&await upe.createNatsCerts();let a=Vl.join(r,tf,Ih.PID_FILES.HUB),c=Vl.join(r,tf,Ih.PID_FILES.LEAF),l=Hn.getConfigFromFile(sr.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Vl.join(r,tf,Ih.NATS_CONFIG_FILES.HUB_SERVER),d=Vl.join(r,tf,Ih.NATS_CONFIG_FILES.LEAF_SERVER),f=Hn.getConfigFromFile(sr.CLUSTERING_TLS_INSECURE),m=Hn.getConfigFromFile(sr.CLUSTERING_TLS_VERIFY),p=Hn.getConfigFromFile(sr.CLUSTERING_NODENAME),h=Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wO.checkNATSServerInstalled()||NT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await IO.listUsers(),g=Hn.getConfigFromFile(sr.CLUSTERING_USER),A=await IO.getClusterUser();(rf.isEmpty(A)||A.active!==!0)&&NT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await IT(sr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await IT(sr.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await IT(sr.CLUSTERING_HUBSERVER_NETWORK_PORT),await IT(sr.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],R=[];for(let[J,Y]of E.entries())Y.role?.role===wT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new lpe(Y.username,VK.decrypt(Y.hash))),R.push(new cpe(Y.username,VK.decrypt(Y.hash))));let N=[],{hub_routes:O}=Hn.getClusteringRoutes();if(!rf.isEmptyOrZeroLength(O))for(let J of O)N.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${J.host}:${J.port}`);let F=new ope(Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_NETWORK_PORT),p,a,i,s,n,f,m,h,Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_CLUSTER_NAME),Hn.getConfigFromFile(sr.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,R);n==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=rf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===wT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Kl.writeJson(u,F),nf.trace(`Hub server config written to ${u}`));let te=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new ape(Hn.getConfigFromFile(sr.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[te],[G],S,R,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===wT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Kl.writeJson(d,k),nf.trace(`Leaf server config written to ${d}`))}o(mpe,"generateNatsConfig");async function IT(e){let t=wh.get(e);return rf.isEmpty(t)&&NT(`port undefined for '${e}'`),await rf.isPortTaken(t)&&NT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(IT,"isPortAvailable");function NT(e){let t=`Error generating clustering config: ${e}`;nf.error(t),console.error(t),process.exit(1)}o(NT,"generateNatsConfigError");async function ppe(e){let{port:t,config_file:r}=wO.getServerConfig(e),{username:n,decrypt_hash:s}=await IO.getClusterUser(),i=0,a=2e3;for(;i<KK;){try{let d=await wO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){nf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=KK)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&nf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await rf.asyncSetTimeout(u)}let c="0".repeat(dpe),l=Vl.join(wh.get(sr.ROOTPATH),tf,r);await Kl.writeFile(l,c),await Kl.remove(l),nf.notify(e,"started.")}o(ppe,"removeNatsConfig")});var OO={};Ie(OO,{compactOnStart:()=>hpe,copyDb:()=>XK});async function hpe(){cc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,NO.get)(B.ROOTPATH),t=new Map,r=at();(0,CO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,OT.join)(e,"backup",n+".mdb"),a=(0,OT.join)(e,Fc,n+"-copy.mdb"),c=0;try{c=await WK(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){cc.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await XK(n,a),console.log("Backing up",n,"to",i);try{await(0,Yl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{hd()}catch(n){cc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Yl.move)(i,s,{overwrite:!0}),await(0,Yl.remove)((0,OT.join)(e,Fc,`${n}-copy.mdb-lock`));try{hd()}catch(n){cc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){cc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,CO.updateConfigValue)(B.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Yl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw hd(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await WK(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
20
20
  Total record count before compaction: ${i}, total after: ${c}.
21
- Database backup has not been removed and can be found here: ${s}`;cc.error(l),console.error(l)}(0,NO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Yl.remove)(s))}}async function VK(e){let t=await(0,zK.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function jK(e,t){console.log("copyDb start");let r=at()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,KK.open)(new YK.default(t)),c=a.openDB(PT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=Zg(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let A=new WK.OpenDBIObject(!h,h);A.encoding="binary",A.compression=E;let S=n.openDB(m,A);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",A.compression=g;let R=a.openDB(m,A);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(PT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,A=0,S=1e7,R=null;for(;S-- >0;)try{for(let N of m.getKeys({start:R,transaction:E}))try{R=N;let{value:O,version:F}=m.getEntry(N,{transaction:E});l=p.put(N,O,h?F:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(N?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",A,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var KK,OT,Yl,NO,YK,WK,PT,zK,CO,cc,PO=ie(()=>{Oe();KK=require("lmdb"),OT=require("path"),Yl=require("fs-extra"),NO=w(ue()),YK=w($m()),WK=w(Gm()),PT=w($t());H();Io();zK=w(Cl()),CO=w(Tt()),cc=w(Q());o(dpe,"compactOnStart");o(VK,"getTotalDBRecordCount");o(jK,"copyDb")});var of=M(($0e,rY)=>{"use strict";var fpe=require("minimist"),{isMainThread:DO,parentPort:Ch,threadId:H0e}=require("worker_threads"),pt=(H(),D(W)),no=Q(),MO=oe(),DT=CT(),LT=mr(),q0e=wt(),ZK=Tt(),Ri=af(),QK=jd(),{compactOnStart:mpe}=(PO(),D(OO)),ppe=kc(),{restartWorkers:MT,onMessageByType:hpe}=nt(),{handleHDBError:Epe,hdbErrors:_pe}=_e(),{HTTP_STATUS_CODES:gpe}=_pe,Oh=ue(),{sendOperationToNode:JK,getThisNodeName:Spe,monitorNodeCAs:Tpe}=(us(),D(zo)),{getHDBNodeTable:G0e}=(Ml(),D(XN));Oh.initSync();var Nh=`Restarting HarperDB. This may take up to ${pt.RESTART_TIMEOUT_MS/1e3} seconds.`,ype="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",XK="Clustering is not enabled so cannot be restarted",Rpe="Invalid service",sf,$s;rY.exports={restart:eY,restartService:vO};DO&&hpe(pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await vO({service:e.workerType}):eY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function eY(e){$s=Object.keys(e).length===0,sf=await Ri.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB);let t=fpe(process.argv);if(t.service){await vO(t);return}if($s&&!sf){console.error(ype);return}if($s&&console.log(Nh),sf){Ri.enterPM2Mode(),no.notify(Nh);let r=ppe(Object.keys(pt.CONFIG_PARAM_MAP),!0);return MO.isEmptyOrZeroLength(Object.keys(r))||ZK.updateConfigValue(void 0,void 0,r,!0,!0),Ape(),Nh}return DO?(no.notify(Nh),Oh.get(pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await mpe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{MT()},50)):Ch.postMessage({type:pt.ITC_EVENT_TYPES.RESTART}),Nh}o(eY,"restart");async function vO(e){let{service:t}=e;if(pt.HDB_PROCESS_SERVICES[t]===void 0)throw Epe(new Error,Rpe,gpe.BAD_REQUEST,void 0,void 0,!0);if(Ri.expectedRestartOfChildren(),sf=await Ri.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB),!DO){e.replicated&&Tpe(),Ch.postMessage({type:pt.ITC_EVENT_TYPES.RESTART,workerType:t}),Ch.ref(),await new Promise(s=>{Ch.on("message",i=>{i.type==="restart-complete"&&(s(),Ch.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Spe())continue;let i;try{({job_id:i}=await JK(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await JK(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case pt.HDB_PROCESS_SERVICES.clustering:if(!Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XK;break}$s&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await tY();break;case pt.HDB_PROCESS_SERVICES.clustering_config:case pt.HDB_PROCESS_SERVICES["clustering config"]:if(!Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=XK;break}$s&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Ri.reloadClustering();break;case"custom_functions":case"custom functions":case pt.HDB_PROCESS_SERVICES.harperdb:case pt.HDB_PROCESS_SERVICES.http_workers:case pt.HDB_PROCESS_SERVICES.http:if($s&&!sf){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}$s&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),$s?await Ri.restart(pt.PROCESS_DESCRIPTORS.HDB):await MT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),$s&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(vO,"restartService");async function Ape(){await tY(),await Ri.restart(pt.PROCESS_DESCRIPTORS.HDB),await MO.asyncSetTimeout(2e3),Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await LO(),$s&&(await LT.closeConnection(),process.exit(0))}o(Ape,"restartPM2Mode");async function tY(){if(!ZK.getConfigFromFile(pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await QK.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await DT.generateNatsConfig(!0),await Ri.startClusteringProcesses(),await Ri.startClusteringThreads(),await LO(),$s&&await LT.closeConnection();else{await DT.generateNatsConfig(!0),sf?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ri.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ri.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await QK.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await MO.asyncSetTimeout(3e3),await LO(),await LT.updateLocalStreams(),$s&&await LT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=MT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=MT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(tY,"restartClustering");async function LO(){await DT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await DT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(LO,"removeNatsConfig")});var mY=M((Y0e,fY)=>{"use strict";var K0e=require("lodash"),qn=(H(),D(W)),{handleHDBError:nY,hdbErrors:bpe}=_e(),{HDB_ERROR_MSGS:Ipe,HTTP_STATUS_CODES:wpe}=bpe,UO=Q();fY.exports={getRolePermissions:Cpe};var Wl=Object.create(null),Npe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),aY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),cY=o((e=!1,t=!1,r=!1,n=!1)=>({[qn.PERMS_CRUD_ENUM.READ]:e,[qn.PERMS_CRUD_ENUM.INSERT]:t,[qn.PERMS_CRUD_ENUM.UPDATE]:r,[qn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),xO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...cY(t,r,n,s)}),"tablePermsTemplate"),sY=o((e,t=cY())=>({attribute_name:e,describe:dY(t),[Ph]:t[Ph],[BO]:t[BO],[FO]:t[FO]}),"attrPermsTemplate"),iY=o((e,t=!1)=>({attribute_name:e,describe:t,[Ph]:t}),"timestampAttrPermsTemplate"),{READ:Ph,INSERT:BO,UPDATE:FO}=qn.PERMS_CRUD_ENUM,lY=Object.values(qn.PERMS_CRUD_ENUM),uY=[Ph,BO,FO];function Cpe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[qn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Wl[t]&&Wl[t].key===n)return Wl[t].perms;let s=Ope(e,r);return Wl[t]?Wl[t].key=n:Wl[t]=Npe(n),Wl[t].perms=s,s}catch(r){if(!e[qn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[qn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<qn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw UO.error(n),UO.debug(r),nY(new Error,Ipe.OUTDATED_PERMS_TRANSLATION_ERROR,wpe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
22
- ${r.stack}`;throw UO.error(n),nY(new Error)}}}o(Cpe,"getRolePermissions");function Ope(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[qn.SYSTEM_SCHEMA_NAME]=n[qn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Ppe(t[i]);return}r[i]=aY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=Lpe(c,l);r[i].describe||lY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=xO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=xO()})}),r}o(Ope,"translateRolePermissions");function Ppe(e){let t=aY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=xO(!0,!0,!0,!0,!0)}),t}o(Ppe,"createStructureUserPermissions");function Lpe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return qn.TIME_STAMP_NAMES.includes(f)&&(m=iY(f,d[Ph])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=sY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=dY(d),s.attribute_permissions.push(d),c||Dpe(d,l)}else if(u!==a){let d;qn.TIME_STAMP_NAMES.includes(u)?d=iY(u):d=sY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=oY(s),s}else return e.describe=oY(e),e}o(Lpe,"getTableAttrPerms");function oY(e){return lY.filter(t=>e[t]).length>0}o(oY,"getSchemaTableDescribePerm");function dY(e){return uY.filter(t=>e[t]).length>0}o(dY,"getAttributeDescribePerm");function Dpe(e,t){uY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(Dpe,"checkForHashPerms")});var Lh={};Ie(Lh,{authentication:()=>RY,bypassAuth:()=>Vpe,login:()=>HO,logout:()=>qO,start:()=>Kpe});function Vpe(){yY=!0}async function RY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?Hpe?kpe:[]:Fpe?Bpe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=gn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return UT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),UT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(UT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await pY.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new vpe(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===si.SUCCESS?vT.info?.(g):vT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&vT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await qd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return vT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,si.SUCCESS,"mTLS")):xpe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=zl.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await NN(E)}catch(N){if(N.message==="invalid token")try{return await ES(E),c({status:-1})}catch{throw N}}break}}catch(S){return Gpe&&(zl.get(E)||(zl.set(E,E),d(g,si.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}zl.set(n,f),qpe&&d(f.username,si.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(yY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,EY.getSuperUser)());UT&&(e.session.update=function(p){let h=gn.get(B.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,_Y.v4)();let g=gn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,kO.convertToMS)(h)).toUTCString():$pe,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,pY.put(p,{expiresAt:h?Date.now()+(0,kO.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ds.loginPath?(m.status=302,m.headers.set("Location",Ds.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function Kpe({server:e,port:t,securePort:r}){e.http(RY,t||r?{port:t,securePort:r}:{port:"all"}),hY||(hY=!0,setInterval(()=>{zl=new Map},gn.get(B.AUTHENTICATION_CACHETTL)).unref(),Upe.addListener(()=>{zl=new Map}))}async function HO(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 qO(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var EY,_Y,gn,gY,SY,kO,Mpe,vpe,Upe,TY,xpe,vT,Bpe,Fpe,kpe,Hpe,pY,UT,yY,qpe,Gpe,$pe,zl,hY,xT=ie(()=>{EY=w(as());xr();xa();Id();Oe();_Y=require("uuid"),gn=w(ue());H();gY=w(Q()),SY=w(yp());bp();kO=w(oe());QS();Po();({forComponent:Mpe,AuthAuditLog:vpe}=gY.default),{user:Upe}=SY.default,TY=Mpe("authentication"),{debug:xpe}=TY,vT=TY.withTag("auth-event");gn.initSync();Bpe=gn.get(B.HTTP_CORSACCESSLIST),Fpe=gn.get(B.HTTP_CORS),kpe=gn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Hpe=gn.get(B.OPERATIONSAPI_NETWORK_CORS),pY=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),UT=gn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,yY=process.env.AUTHENTICATION_AUTHORIZELOCAL??gn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,qpe=gn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Gpe=gn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,$pe="Tue, 01 Oct 8307 19:33:20 GMT",zl=new Map;Ue.onInvalidatedUser(()=>{zl=new Map});o(Vpe,"bypassAuth");o(RY,"authentication");o(Kpe,"start");o(HO,"login");o(qO,"logout")});var OY=M((nBe,CY)=>{"use strict";var Ce=require("joi"),AY=require("fs-extra"),bY=require("path"),ps=ft(),IY=ue(),wY=(H(),D(W)),NY=Q(),{hdbErrors:Ype}=_e(),{HDB_ERROR_MSGS:Sn}=Ype,ta=/^[a-zA-Z0-9-_]+$/,Wpe=/^[a-zA-Z0-9-_]+$/;CY.exports={getDropCustomFunctionValidator:jpe,setCustomFunctionValidator:Qpe,addComponentValidator:ehe,dropCustomFunctionProjectValidator:the,packageComponentValidator:rhe,deployComponentValidator:nhe,setComponentFileValidator:Jpe,getComponentFileValidator:Zpe,dropComponentFileValidator:Xpe,addSSHKeyValidator:she,updateSSHKeyValidator:ihe,deleteSSHKeyValidator:ohe,setSSHKnownHostsValidator:ahe};function BT(e,t,r){try{let n=IY.get(wY.CONFIG_PARAMS.COMPONENTSROOT),s=bY.join(n,t);return AY.existsSync(s)?e?t:r.message(Sn.PROJECT_EXISTS):e?r.message(Sn.NO_PROJECT):t}catch(n){return NY.error(n),r.message(Sn.VALIDATION_ERR)}}o(BT,"checkProjectExists");function Dh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Dh,"checkFilePath");function zpe(e,t,r,n){try{let s=IY.get(wY.CONFIG_PARAMS.COMPONENTSROOT),i=bY.join(s,e,t,r+".js");return AY.existsSync(i)?r:n.message(Sn.NO_FILE)}catch(s){return NY.error(s),n.message(Sn.VALIDATION_ERR)}}o(zpe,"checkFileExists");function jpe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ta).custom(zpe.bind(null,e.project,e.type)).custom(Dh).required().messages({"string.pattern.base":Sn.BAD_FILE_NAME})});return ps.validateBySchema(e,t)}o(jpe,"getDropCustomFunctionValidator");function Qpe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Dh).required(),function_content:Ce.string().required()});return ps.validateBySchema(e,t)}o(Qpe,"setCustomFunctionValidator");function Jpe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),file:Ce.string().custom(Dh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(Jpe,"setComponentFileValidator");function Xpe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),file:Ce.string().custom(Dh).optional()});return ps.validateBySchema(e,t)}o(Xpe,"dropComponentFileValidator");function Zpe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Dh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(Zpe,"getComponentFileValidator");function ehe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!1)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(ehe,"addComponentValidator");function the(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(the,"dropCustomFunctionProjectValidator");function rhe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return ps.validateBySchema(e,t)}o(rhe,"packageComponentValidator");function nhe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return ps.validateBySchema(e,t)}o(nhe,"deployComponentValidator");function she(e){let t=Ce.object({name:Ce.string().pattern(Wpe).required().messages({"string.pattern.base":Sn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return ps.validateBySchema(e,t)}o(she,"addSSHKeyValidator");function ihe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return ps.validateBySchema(e,t)}o(ihe,"updateSSHKeyValidator");function ohe(e){let t=Ce.object({name:Ce.string().required()});return ps.validateBySchema(e,t)}o(ohe,"deleteSSHKeyValidator");function ahe(e){let t=Ce.object({known_hosts:Ce.string().required()});return ps.validateBySchema(e,t)}o(ahe,"setSSHKnownHostsValidator")});var Uh=M((iBe,vY)=>{"use strict";var FT=require("joi"),lc=require("path"),cf=require("fs-extra"),{exec:che,spawn:lhe}=require("child_process"),uhe=require("util"),dhe=uhe.promisify(che),lf=(H(),D(W)),{PACKAGE_ROOT:fhe}=bt(),{handleHDBError:Mh,hdbErrors:mhe}=_e(),{HTTP_STATUS_CODES:vh}=mhe,jl=ue(),phe=ft(),uc=Q(),{once:hhe}=require("events");jl.initSync();var GO=jl.get(lf.CONFIG_PARAMS.COMPONENTSROOT),PY="npm install --force --omit=dev --json",Ehe=`${PY} --dry-run`,_he=jl.get(lf.CONFIG_PARAMS.ROOTPATH),kT=lc.join(_he,"ssh");vY.exports={installModules:yhe,auditModules:Rhe,installAllRootModules:ghe,uninstallRootModule:She,linkHarperdb:The,runCommand:uf};async function ghe(e=!1,t=jl.get(lf.CONFIG_PARAMS.ROOTPATH)){await HT();let r=!1,n=process.env;cf.pathExistsSync(kT)&&cf.readdirSync(kT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+lc.join(kT,"config")+" -o UserKnownHostsFile="+lc.join(kT,"known_hosts"),...process.env},r=!0)});try{let s=jl.get(lf.CONFIG_PARAMS.ROOTPATH),i=lc.join(s,"node_modules","harperdb");cf.lstatSync(i).isSymbolicLink()&&cf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&uc.error("Error removing symlink:",s)}await uf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(ghe,"installAllRootModules");async function She(e){await uf(`npm uninstall ${e}`,jl.get(lf.CONFIG_PARAMS.ROOTPATH))}o(She,"uninstallRootModule");async function The(){await HT(),await uf(`npm link ${fhe}`,jl.get(lf.CONFIG_PARAMS.ROOTPATH))}o(The,"linkHarperdb");async function uf(e,t=void 0,r=process.env){uc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=lhe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();uc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();uc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await hhe(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(uf,"runCommand");async function yhe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";uc.warn(t,e.projects);let r=MY(e);if(r)throw Mh(r,r.message,vh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?Ehe:PY;await HT(),await DY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=lc.join(GO,u),f,m=null;try{let{stdout:p,stderr:h}=await dhe(i,{cwd:d});f=p?p.replace(`
21
+ Database backup has not been removed and can be found here: ${s}`;cc.error(l),console.error(l)}(0,NO.get)(B.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Yl.remove)(s))}}async function WK(e){let t=await(0,JK.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function XK(e,t){console.log("copyDb start");let r=at()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,zK.open)(new jK.default(t)),c=a.openDB(PT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=Zg(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let A=new QK.OpenDBIObject(!h,h);A.encoding="binary",A.compression=E;let S=n.openDB(m,A);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",A.compression=g;let R=a.openDB(m,A);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,R,h,d)}if(i){let m=n.openDB(PT.AUDIT_STORE_NAME,Pm);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,A=0,S=1e7,R=null;for(;S-- >0;)try{for(let N of m.getKeys({start:R,transaction:E}))try{R=N;let{value:O,version:F}=m.getEntry(N,{transaction:E});l=p.put(N,O,h?F:void 0),g++,E.openTimer&&(E.openTimer=0),A+=(N?.length||10)+O.length,u++>5e3&&(await l,console.log("copied",g,"entries",A,"bytes"),u=0)}catch(O){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,O)}console.log("finish copying, copied",g,"entries",A,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var zK,OT,Yl,NO,jK,QK,PT,JK,CO,cc,PO=ie(()=>{Oe();zK=require("lmdb"),OT=require("path"),Yl=require("fs-extra"),NO=w(ue()),jK=w($m()),QK=w(qm()),PT=w($t());H();Io();JK=w(Cl()),CO=w(yt()),cc=w(Q());o(hpe,"compactOnStart");o(WK,"getTotalDBRecordCount");o(XK,"copyDb")});var of=M((z0e,iY)=>{"use strict";var Epe=require("minimist"),{isMainThread:DO,parentPort:Ch,threadId:K0e}=require("worker_threads"),pt=(H(),D(W)),no=Q(),MO=oe(),DT=CT(),LT=mr(),Y0e=wt(),rY=yt(),Ri=af(),ZK=jd(),{compactOnStart:_pe}=(PO(),D(OO)),gpe=kc(),{restartWorkers:MT,onMessageByType:Spe}=nt(),{handleHDBError:Tpe,hdbErrors:ype}=_e(),{HTTP_STATUS_CODES:Rpe}=ype,Oh=ue(),{sendOperationToNode:eY,getThisNodeName:Ape,monitorNodeCAs:bpe}=(us(),D(zo)),{getHDBNodeTable:W0e}=(Ml(),D(XN));Oh.initSync();var Nh=`Restarting HarperDB. This may take up to ${pt.RESTART_TIMEOUT_MS/1e3} seconds.`,Ipe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",tY="Clustering is not enabled so cannot be restarted",wpe="Invalid service",sf,$s;iY.exports={restart:nY,restartService:vO};DO&&Spe(pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await vO({service:e.workerType}):nY({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function nY(e){$s=Object.keys(e).length===0,sf=await Ri.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB);let t=Epe(process.argv);if(t.service){await vO(t);return}if($s&&!sf){console.error(Ipe);return}if($s&&console.log(Nh),sf){Ri.enterPM2Mode(),no.notify(Nh);let r=gpe(Object.keys(pt.CONFIG_PARAM_MAP),!0);return MO.isEmptyOrZeroLength(Object.keys(r))||rY.updateConfigValue(void 0,void 0,r,!0,!0),Npe(),Nh}return DO?(no.notify(Nh),Oh.get(pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await _pe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{MT()},50)):Ch.postMessage({type:pt.ITC_EVENT_TYPES.RESTART}),Nh}o(nY,"restart");async function vO(e){let{service:t}=e;if(pt.HDB_PROCESS_SERVICES[t]===void 0)throw Tpe(new Error,wpe,Rpe.BAD_REQUEST,void 0,void 0,!0);if(Ri.expectedRestartOfChildren(),sf=await Ri.isServiceRegistered(pt.PROCESS_DESCRIPTORS.HDB),!DO){e.replicated&&bpe(),Ch.postMessage({type:pt.ITC_EVENT_TYPES.RESTART,workerType:t}),Ch.ref(),await new Promise(s=>{Ch.on("message",i=>{i.type==="restart-complete"&&(s(),Ch.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Ape())continue;let i;try{({job_id:i}=await eY(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await eY(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case pt.HDB_PROCESS_SERVICES.clustering:if(!Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tY;break}$s&&console.log("Restarting clustering"),no.notify("Restarting clustering"),await sY();break;case pt.HDB_PROCESS_SERVICES.clustering_config:case pt.HDB_PROCESS_SERVICES["clustering config"]:if(!Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=tY;break}$s&&console.log("Restarting clusteringConfig"),no.notify("Restarting clustering_config"),await Ri.reloadClustering();break;case"custom_functions":case"custom functions":case pt.HDB_PROCESS_SERVICES.harperdb:case pt.HDB_PROCESS_SERVICES.http_workers:case pt.HDB_PROCESS_SERVICES.http:if($s&&!sf){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}$s&&console.log("Restarting httpWorkers"),no.notify("Restarting http_workers"),$s?await Ri.restart(pt.PROCESS_DESCRIPTORS.HDB):await MT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(no.error(r),$s&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(vO,"restartService");async function Npe(){await sY(),await Ri.restart(pt.PROCESS_DESCRIPTORS.HDB),await MO.asyncSetTimeout(2e3),Oh.get(pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await LO(),$s&&(await LT.closeConnection(),process.exit(0))}o(Npe,"restartPM2Mode");async function sY(){if(!rY.getConfigFromFile(pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await ZK.getHDBProcessInfo()).clustering.length===0)no.trace("Clustering not running, restart will start clustering services"),await DT.generateNatsConfig(!0),await Ri.startClusteringProcesses(),await Ri.startClusteringThreads(),await LO(),$s&&await LT.closeConnection();else{await DT.generateNatsConfig(!0),sf?(no.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ri.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ri.restart(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await ZK.getHDBProcessInfo()).clustering.forEach(s=>{no.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await MO.asyncSetTimeout(3e3),await LO(),await LT.updateLocalStreams(),$s&&await LT.closeConnection(),no.trace("Restart clustering restarting ingest and reply service threads");let t=MT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=MT(pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(sY,"restartClustering");async function LO(){await DT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await DT.removeNatsConfig(pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(LO,"removeNatsConfig")});var EY=M((J0e,hY)=>{"use strict";var Q0e=require("lodash"),Gn=(H(),D(W)),{handleHDBError:oY,hdbErrors:Cpe}=_e(),{HDB_ERROR_MSGS:Ope,HTTP_STATUS_CODES:Ppe}=Cpe,UO=Q();hY.exports={getRolePermissions:Dpe};var Wl=Object.create(null),Lpe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),uY=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),dY=o((e=!1,t=!1,r=!1,n=!1)=>({[Gn.PERMS_CRUD_ENUM.READ]:e,[Gn.PERMS_CRUD_ENUM.INSERT]:t,[Gn.PERMS_CRUD_ENUM.UPDATE]:r,[Gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),xO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...dY(t,r,n,s)}),"tablePermsTemplate"),aY=o((e,t=dY())=>({attribute_name:e,describe:pY(t),[Ph]:t[Ph],[BO]:t[BO],[FO]:t[FO]}),"attrPermsTemplate"),cY=o((e,t=!1)=>({attribute_name:e,describe:t,[Ph]:t}),"timestampAttrPermsTemplate"),{READ:Ph,INSERT:BO,UPDATE:FO}=Gn.PERMS_CRUD_ENUM,fY=Object.values(Gn.PERMS_CRUD_ENUM),mY=[Ph,BO,FO];function Dpe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[Gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Wl[t]&&Wl[t].key===n)return Wl[t].perms;let s=Mpe(e,r);return Wl[t]?Wl[t].key=n:Wl[t]=Lpe(n),Wl[t].perms=s,s}catch(r){if(!e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw UO.error(n),UO.debug(r),oY(new Error,Ope.OUTDATED_PERMS_TRANSLATION_ERROR,Ppe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
22
+ ${r.stack}`;throw UO.error(n),oY(new Error)}}}o(Dpe,"getRolePermissions");function Mpe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Gn.SYSTEM_SCHEMA_NAME]=n[Gn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=vpe(t[i]);return}r[i]=uY(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=Upe(c,l);r[i].describe||fY.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=xO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=xO()})}),r}o(Mpe,"translateRolePermissions");function vpe(e){let t=uY(!0);return Object.keys(e).forEach(r=>{t.tables[r]=xO(!0,!0,!0,!0,!0)}),t}o(vpe,"createStructureUserPermissions");function Upe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return Gn.TIME_STAMP_NAMES.includes(f)&&(m=cY(f,d[Ph])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=aY(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=pY(d),s.attribute_permissions.push(d),c||xpe(d,l)}else if(u!==a){let d;Gn.TIME_STAMP_NAMES.includes(u)?d=cY(u):d=aY(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=lY(s),s}else return e.describe=lY(e),e}o(Upe,"getTableAttrPerms");function lY(e){return fY.filter(t=>e[t]).length>0}o(lY,"getSchemaTableDescribePerm");function pY(e){return mY.filter(t=>e[t]).length>0}o(pY,"getAttributeDescribePerm");function xpe(e,t){mY.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(xpe,"checkForHashPerms")});var Lh={};Ie(Lh,{authentication:()=>IY,bypassAuth:()=>zpe,login:()=>HO,logout:()=>GO,start:()=>jpe});function zpe(){bY=!0}async function IY(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let p=e.isOperationsServer?Vpe?$pe:[]:qpe?Gpe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=gn.get(B.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Us([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return UT&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}a.push("Access-Control-Allow-Origin",i),UT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(UT){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await _Y.get(l);break}e.session=u||(u={})}let d=o((p,h,E)=>{let g=new Fpe(p,h,ba.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===si.SUCCESS?vT.info?.(g):vT.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&vT.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await Gd(e.peerCertificate,e.mtlsConfig);if(!p.valid)return vT.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:Co({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Ue.getUser(h,null,e),d(h,si.SUCCESS,"mTLS")):Hpe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=zl.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,A;try{switch(h){case"Basic":let S=atob(E),R=S.indexOf(":");g=S.slice(0,R),A=S.slice(R+1),f=g||A?await Ue.getUser(g,A,e):null;break;case"Bearer":try{f=await NN(E)}catch(N){if(N.message==="invalid token")try{return await ES(E),c({status:-1})}catch{throw N}}break}}catch(S){return Ype&&(zl.get(E)||(zl.set(E,E),d(g,si.FAILURE,h))),c({status:401,body:Co({error:S.message},e)})}zl.set(n,f),Kpe&&d(f.username,si.SUCCESS,h)}e.user=f}else u?.user?e.user=await Ue.getUser(u.user,null,e):(bY&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,SY.getSuperUser)());UT&&(e.session.update=function(p){let h=gn.get(B.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,TY.v4)();let g=gn.get(B.AUTHENTICATION_COOKIE_DOMAINS),A=h?new Date(Date.now()+(0,kO.convertToMS)(h)).toUTCString():Wpe,S=r.host&&g?.find(O=>{O.startsWith(".")&&(O=O.slice(1));let F=r.host.indexOf(":");return(F!==-1?r.host.slice(0,F):r.host).endsWith(O)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${A}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),a?a.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,_Y.put(p,{expiresAt:h?Date.now()+(0,kO.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Ue.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ds.loginPath?(m.status=302,m.headers.set("Location",Ds.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Us);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function jpe({server:e,port:t,securePort:r}){e.http(IY,t||r?{port:t,securePort:r}:{port:"all"}),gY||(gY=!0,setInterval(()=>{zl=new Map},gn.get(B.AUTHENTICATION_CACHETTL)).unref(),kpe.addListener(()=>{zl=new Map}))}async function HO(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 GO(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var SY,TY,gn,yY,RY,kO,Bpe,Fpe,kpe,AY,Hpe,vT,Gpe,qpe,$pe,Vpe,_Y,UT,bY,Kpe,Ype,Wpe,zl,gY,xT=ie(()=>{SY=w(as());xr();xa();Id();Oe();TY=require("uuid"),gn=w(ue());H();yY=w(Q()),RY=w(yp());bp();kO=w(oe());QS();Po();({forComponent:Bpe,AuthAuditLog:Fpe}=yY.default),{user:kpe}=RY.default,AY=Bpe("authentication"),{debug:Hpe}=AY,vT=AY.withTag("auth-event");gn.initSync();Gpe=gn.get(B.HTTP_CORSACCESSLIST),qpe=gn.get(B.HTTP_CORS),$pe=gn.get(B.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Vpe=gn.get(B.OPERATIONSAPI_NETWORK_CORS),_Y=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),UT=gn.get(B.AUTHENTICATION_ENABLESESSIONS)??!0,bY=process.env.AUTHENTICATION_AUTHORIZELOCAL??gn.get(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Kpe=gn.get(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ype=gn.get(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Wpe="Tue, 01 Oct 8307 19:33:20 GMT",zl=new Map;Ue.onInvalidatedUser(()=>{zl=new Map});o(zpe,"bypassAuth");o(IY,"authentication");o(jpe,"start");o(HO,"login");o(GO,"logout")});var DY=M((cBe,LY)=>{"use strict";var Ce=require("joi"),wY=require("fs-extra"),NY=require("path"),ps=ft(),CY=ue(),OY=(H(),D(W)),PY=Q(),{hdbErrors:Qpe}=_e(),{HDB_ERROR_MSGS:Sn}=Qpe,ta=/^[a-zA-Z0-9-_]+$/,Jpe=/^[a-zA-Z0-9-_]+$/;LY.exports={getDropCustomFunctionValidator:Zpe,setCustomFunctionValidator:ehe,addComponentValidator:she,dropCustomFunctionProjectValidator:ihe,packageComponentValidator:ohe,deployComponentValidator:ahe,setComponentFileValidator:the,getComponentFileValidator:nhe,dropComponentFileValidator:rhe,addSSHKeyValidator:che,updateSSHKeyValidator:lhe,deleteSSHKeyValidator:uhe,setSSHKnownHostsValidator:dhe};function BT(e,t,r){try{let n=CY.get(OY.CONFIG_PARAMS.COMPONENTSROOT),s=NY.join(n,t);return wY.existsSync(s)?e?t:r.message(Sn.PROJECT_EXISTS):e?r.message(Sn.NO_PROJECT):t}catch(n){return PY.error(n),r.message(Sn.VALIDATION_ERR)}}o(BT,"checkProjectExists");function Dh(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(Dh,"checkFilePath");function Xpe(e,t,r,n){try{let s=CY.get(OY.CONFIG_PARAMS.COMPONENTSROOT),i=NY.join(s,e,t,r+".js");return wY.existsSync(i)?r:n.message(Sn.NO_FILE)}catch(s){return PY.error(s),n.message(Sn.VALIDATION_ERR)}}o(Xpe,"checkFileExists");function Zpe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(ta).custom(Xpe.bind(null,e.project,e.type)).custom(Dh).required().messages({"string.pattern.base":Sn.BAD_FILE_NAME})});return ps.validateBySchema(e,t)}o(Zpe,"getDropCustomFunctionValidator");function ehe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(Dh).required(),function_content:Ce.string().required()});return ps.validateBySchema(e,t)}o(ehe,"setCustomFunctionValidator");function the(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),file:Ce.string().custom(Dh).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(the,"setComponentFileValidator");function rhe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),file:Ce.string().custom(Dh).optional()});return ps.validateBySchema(e,t)}o(rhe,"dropComponentFileValidator");function nhe(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(Dh).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ps.validateBySchema(e,t)}o(nhe,"getComponentFileValidator");function she(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!1)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(she,"addComponentValidator");function ihe(e){let t=Ce.object({project:Ce.string().pattern(ta).custom(BT.bind(null,!0)).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME})});return ps.validateBySchema(e,t)}o(ihe,"dropCustomFunctionProjectValidator");function ohe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean(),skip_symlinks:Ce.boolean()});return ps.validateBySchema(e,t)}o(ohe,"packageComponentValidator");function ahe(e){let t=Ce.object({project:Ce.string().pattern(ta).required().messages({"string.pattern.base":Sn.BAD_PROJECT_NAME}),package:Ce.string().optional(),restart:Ce.alternatives().try(Ce.boolean(),Ce.string().valid("rolling")).optional()});return ps.validateBySchema(e,t)}o(ahe,"deployComponentValidator");function che(e){let t=Ce.object({name:Ce.string().pattern(Jpe).required().messages({"string.pattern.base":Sn.BAD_SSH_KEY_NAME}),key:Ce.string().required(),host:Ce.string().required(),hostname:Ce.string().required(),known_hosts:Ce.string().optional()});return ps.validateBySchema(e,t)}o(che,"addSSHKeyValidator");function lhe(e){let t=Ce.object({name:Ce.string().required(),key:Ce.string().required()});return ps.validateBySchema(e,t)}o(lhe,"updateSSHKeyValidator");function uhe(e){let t=Ce.object({name:Ce.string().required()});return ps.validateBySchema(e,t)}o(uhe,"deleteSSHKeyValidator");function dhe(e){let t=Ce.object({known_hosts:Ce.string().required()});return ps.validateBySchema(e,t)}o(dhe,"setSSHKnownHostsValidator")});var Uh=M((uBe,BY)=>{"use strict";var FT=require("joi"),lc=require("path"),cf=require("fs-extra"),{exec:fhe,spawn:mhe}=require("child_process"),phe=require("util"),hhe=phe.promisify(fhe),lf=(H(),D(W)),{PACKAGE_ROOT:Ehe}=Tt(),{handleHDBError:Mh,hdbErrors:_he}=_e(),{HTTP_STATUS_CODES:vh}=_he,jl=ue(),ghe=ft(),uc=Q(),{once:She}=require("events");jl.initSync();var qO=jl.get(lf.CONFIG_PARAMS.COMPONENTSROOT),MY="npm install --force --omit=dev --json",The=`${MY} --dry-run`,yhe=jl.get(lf.CONFIG_PARAMS.ROOTPATH),kT=lc.join(yhe,"ssh");BY.exports={installModules:Ihe,auditModules:whe,installAllRootModules:Rhe,uninstallRootModule:Ahe,linkHarperdb:bhe,runCommand:uf};async function Rhe(e=!1,t=jl.get(lf.CONFIG_PARAMS.ROOTPATH)){await HT();let r=!1,n=process.env;cf.pathExistsSync(kT)&&cf.readdirSync(kT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+lc.join(kT,"config")+" -o UserKnownHostsFile="+lc.join(kT,"known_hosts"),...process.env},r=!0)});try{let s=jl.get(lf.CONFIG_PARAMS.ROOTPATH),i=lc.join(s,"node_modules","harperdb");cf.lstatSync(i).isSymbolicLink()&&cf.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&uc.error("Error removing symlink:",s)}await uf(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(Rhe,"installAllRootModules");async function Ahe(e){await uf(`npm uninstall ${e}`,jl.get(lf.CONFIG_PARAMS.ROOTPATH))}o(Ahe,"uninstallRootModule");async function bhe(){await HT(),await uf(`npm link ${Ehe}`,jl.get(lf.CONFIG_PARAMS.ROOTPATH))}o(bhe,"linkHarperdb");async function uf(e,t=void 0,r=process.env){uc.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=mhe(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();uc.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();uc.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await She(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(uf,"runCommand");async function Ihe(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";uc.warn(t,e.projects);let r=xY(e);if(r)throw Mh(r,r.message,vh.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?The:MY;await HT(),await UY(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=lc.join(qO,u),f,m=null;try{let{stdout:p,stderr:h}=await hhe(i,{cwd:d});f=p?p.replace(`
23
23
  `,""):null,m=h?h.replace(`
24
- `,""):null}catch(p){p.stderr?a[u].npm_error=LY(p.stderr):a[u].npm_error=p.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return uc.info(`finished installModules with response ${a}`),a.warning=t,a}o(yhe,"installModules");function LY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
25
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(LY,"parseNPMStdErr");async function Rhe(e){uc.info(`starting auditModules for request: ${e}`);let t=MY(e);if(t)throw Mh(t,t.message,vh.BAD_REQUEST);let{projects:r}=e;await HT(),await DY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=lc.join(GO,a);n[a]={npm_output:null,npm_error:null};try{let l=await uf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=LY(l.stderr)}}return uc.info(`finished auditModules with response ${n}`),n}o(Rhe,"auditModules");async function HT(){return await uf("npm -v"),!0}o(HT,"checkNPMInstalled");async function DY(e){if(!Array.isArray(e)||e.length===0)throw Mh(new Error,"projects argument must be an array with at least 1 element",vh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=lc.join(GO,i.toString());if(!await cf.pathExists(a)){t.push(i);continue}let l=lc.join(a,"package.json");await cf.pathExists(l)||r.push(i)}if(t.length>0)throw Mh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,vh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Mh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,vh.BAD_REQUEST,void 0,void 0,!0)}o(DY,"checkProjectPaths");function MY(e){let t=FT.object({projects:FT.array().min(1).items(FT.string()).required(),dry_run:FT.boolean().default(!1)});return phe.validateBySchema(e,t)}o(MY,"modulesValidator")});var VO=M((aBe,HY)=>{"use strict";var Vs=require("fs-extra"),Bh=require("path"),xh=Q(),UY=oe(),{PACKAGE_ROOT:Ahe}=bt(),$O=(H(),D(W)),kY=ue(),bhe=Tt();HY.exports=Ihe;async function Ihe(){let e=whe(),t=kY.get($O.CONFIG_PARAMS.ROOTPATH),r=Bh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Ahe}},s=Bh.join(t,"node_modules");Vs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Vs.readJsonSync(r)}catch(l){if(UY.isEmptyOrZeroLength(e))return;if(l.code!==$O.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!UY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=BY(u);n.dependencies[l]=d+u}if(!a){xh.notify("Installing components"),await FY(r,n,null),await xY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=BY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Vs.statSync(new URL(u+"/package.json")).mtimeMs>Vs.statSync(r).mtimeMs){c=!0;break}}catch(m){xh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(xh.notify("Removing component",l),c=!0);c&&(xh.notify("Updating components."),await FY(r,n,i),await xY(t,e))}o(Ihe,"installComponents");function xY(e,t){return Promise.all(t.map(({name:r})=>{let n=Bh.join(e,"node_modules",r),s=Bh.join(e,"components",r);if(Vs.existsSync(n)&&Vs.lstatSync(n).isDirectory())return Vs.move(n,s,{overwrite:!0}).then(()=>{Vs.symlink(s,n)})}))}o(xY,"moveModuleToComponents");function whe(){let e=bhe.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(whe,"getComponentsConfig");function BY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Bh.extname(e)||Vs.existsSync(e)?"file:":"github:"}o(BY,"getPkgPrefix");async function FY(e,t,r){xh.trace("npm installing components package.json",t),Vs.writeFileSync(e,JSON.stringify(t,null," "));try{await Uh().installAllRootModules(kY.get($O.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Vs.writeFileSync(e,JSON.stringify(r,null," ")):Vs.unlinkSync(e),n}}o(FY,"installPackages")});var VY={};Ie(VY,{packageDirectory:()=>Nhe});function Nhe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];GY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,qY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,$Y.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var qY,GY,$Y,KY=ie(()=>{qY=require("path"),GY=w(require("tar-fs")),$Y=require("node:zlib");o(Nhe,"packageDirectory")});var WO=M(or=>{"use strict";var we=require("fs-extra"),KO=require("fast-glob"),Pe=require("path"),Che=require("tar-fs"),Ohe=require("gunzip-maybe"),YO=require("normalize-path"),Gn=OY(),Ft=Q(),ht=(H(),D(W)),ir=ue(),qT=Tt(),Phe=oe(),{PACKAGE_ROOT:Lhe}=bt(),{handleHDBError:jt,hdbErrors:Dhe}=_e(),{basename:uBe}=require("path"),Mhe=VO(),WY=ue(),{Readable:vhe}=require("stream"),{isMainThread:Uhe}=require("worker_threads"),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Qt}=Dhe,zY=nt(),{replicateOperation:Ai}=(us(),D(zo)),{packageDirectory:xhe}=(KY(),D(VY)),YY=Uh(),Bhe=Pe.join(Lhe,"application-template"),Fhe=ir.get(ht.CONFIG_PARAMS.ROOTPATH),dc=Pe.join(Fhe,"ssh"),ra=Pe.join(dc,"known_hosts"),{Resources:khe}=(xa(),D(vb));function Hhe(){Ft.trace("getting custom api status");let e={};try{e={port:ir.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Ql.FUNCTION_STATUS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,t)}return e}o(Hhe,"customFunctionsStatus");function qhe(){Ft.trace("getting custom api endpoints");let e={},t=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{KO.sync(YO(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:KO.sync(YO(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:KO.sync(YO(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Ql.GET_FUNCTIONS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,r)}return e}o(qhe,"getCustomFunctions");function Ghe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("getting custom api endpoint file content");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw jt(new Error,Ql.GET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(Ghe,"getCustomFunction");async function $he(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Gn.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("setting custom function file content");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await Ai(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw jt(new Error,Ql.SET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o($he,"setCustomFunction");async function Vhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Gn.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function file");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await Ai(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw jt(new Error,Ql.DROP_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,a)}}o(Vhe,"dropCustomFunction");async function Khe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Gn.addComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("adding component");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(Bhe,s);let i=await Ai(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw jt(new Error,Ql.ADD_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,s)}}o(Khe,"addComponent");async function Yhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Gn.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function project");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=ir.get(ht.CONFIG_PARAMS.APPS);if(!Phe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return qT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await Ai(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw jt(new Error,Ql.DROP_FUNCTION_PROJECT,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,i)}}o(Yhe,"dropCustomFunctionProject");async function Whe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Gn.packageComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ft.trace("packaging component",n);let s;try{s=await we.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await xhe(s,e)).toString("base64");return{project:n,payload:i}}o(Whe,"packageComponent");async function zhe(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=jhe(e.package));let t=Gn.deployComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Ft.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=vhe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(Ohe()).pipe(Che.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await YY.runCommand(a,c):we.existsSync(E)||await YY.installAllRootModules(!1,c)}else{await qT.addConfig(n,{package:i}),await Mhe();let p=WY.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(Uhe)return;let l=new khe;l.isWorker=!0;let u=(Fh(),D(GT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;Ft.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await Ai(e);if(e.restart===!0)zY.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(jO(),D(zO)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(zhe,"deployComponent");function jhe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(jhe,"getProjectNameFromPackage");async function Qhe(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Ft.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),D(Hw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){Ft.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(Qhe,"getComponents");async function Jhe(e){let t=Gn.getComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let n=qT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(WY.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(Jhe,"getComponentFile");async function Xhe(e){let t=Gn.setComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await Ai(e);return s.message="Successfully set component: "+e.file,s}o(Xhe,"setComponentFile");async function Zhe(e){let t=Gn.dropComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}qT.deleteConfigFromFile([r]);let l=await Ai(e);return e.restart===!0?(zY.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(Zhe,"dropComponent");async function eEe(e){let t=Gn.addSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Ft.trace("adding ssh key",r);let c=Pe.join(dc,r+".key"),l=Pe.join(dc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.chmod(c,"0600");let u=`#${r}
24
+ `,""):null}catch(p){p.stderr?a[u].npm_error=vY(p.stderr):a[u].npm_error=p.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return uc.info(`finished installModules with response ${a}`),a.warning=t,a}o(Ihe,"installModules");function vY(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
25
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(vY,"parseNPMStdErr");async function whe(e){uc.info(`starting auditModules for request: ${e}`);let t=xY(e);if(t)throw Mh(t,t.message,vh.BAD_REQUEST);let{projects:r}=e;await HT(),await UY(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=lc.join(qO,a);n[a]={npm_output:null,npm_error:null};try{let l=await uf("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=vY(l.stderr)}}return uc.info(`finished auditModules with response ${n}`),n}o(whe,"auditModules");async function HT(){return await uf("npm -v"),!0}o(HT,"checkNPMInstalled");async function UY(e){if(!Array.isArray(e)||e.length===0)throw Mh(new Error,"projects argument must be an array with at least 1 element",vh.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=lc.join(qO,i.toString());if(!await cf.pathExists(a)){t.push(i);continue}let l=lc.join(a,"package.json");await cf.pathExists(l)||r.push(i)}if(t.length>0)throw Mh(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,vh.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Mh(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,vh.BAD_REQUEST,void 0,void 0,!0)}o(UY,"checkProjectPaths");function xY(e){let t=FT.object({projects:FT.array().min(1).items(FT.string()).required(),dry_run:FT.boolean().default(!1)});return ghe.validateBySchema(e,t)}o(xY,"modulesValidator")});var VO=M((fBe,$Y)=>{"use strict";var Vs=require("fs-extra"),Bh=require("path"),xh=Q(),FY=oe(),{PACKAGE_ROOT:Nhe}=Tt(),$O=(H(),D(W)),qY=ue(),Che=yt();$Y.exports=Ohe;async function Ohe(){let e=Phe(),t=qY.get($O.CONFIG_PARAMS.ROOTPATH),r=Bh.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Nhe}},s=Bh.join(t,"node_modules");Vs.ensureDirSync(s);let i,a=!0,c=!1;try{i=Vs.readJsonSync(r)}catch(l){if(FY.isEmptyOrZeroLength(e))return;if(l.code!==$O.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!FY.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=HY(u);n.dependencies[l]=d+u}if(!a){xh.notify("Installing components"),await GY(r,n,null),await kY(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=HY(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Vs.statSync(new URL(u+"/package.json")).mtimeMs>Vs.statSync(r).mtimeMs){c=!0;break}}catch(m){xh.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(xh.notify("Removing component",l),c=!0);c&&(xh.notify("Updating components."),await GY(r,n,i),await kY(t,e))}o(Ohe,"installComponents");function kY(e,t){return Promise.all(t.map(({name:r})=>{let n=Bh.join(e,"node_modules",r),s=Bh.join(e,"components",r);if(Vs.existsSync(n)&&Vs.lstatSync(n).isDirectory())return Vs.move(n,s,{overwrite:!0}).then(()=>{Vs.symlink(s,n)})}))}o(kY,"moveModuleToComponents");function Phe(){let e=Che.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(Phe,"getComponentsConfig");function HY(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Bh.extname(e)||Vs.existsSync(e)?"file:":"github:"}o(HY,"getPkgPrefix");async function GY(e,t,r){xh.trace("npm installing components package.json",t),Vs.writeFileSync(e,JSON.stringify(t,null," "));try{await Uh().installAllRootModules(qY.get($O.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Vs.writeFileSync(e,JSON.stringify(r,null," ")):Vs.unlinkSync(e),n}}o(GY,"installPackages")});var WY={};Ie(WY,{packageDirectory:()=>Lhe});function Lhe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];KY.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,VY.join)("cache","webpack")):void 0,map:o(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,YY.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var VY,KY,YY,zY=ie(()=>{VY=require("path"),KY=w(require("tar-fs")),YY=require("node:zlib");o(Lhe,"packageDirectory")});var WO=M(or=>{"use strict";var we=require("fs-extra"),KO=require("fast-glob"),Pe=require("path"),Dhe=require("tar-fs"),Mhe=require("gunzip-maybe"),YO=require("normalize-path"),qn=DY(),Ft=Q(),ht=(H(),D(W)),ir=ue(),GT=yt(),vhe=oe(),{PACKAGE_ROOT:Uhe}=Tt(),{handleHDBError:jt,hdbErrors:xhe}=_e(),{basename:hBe}=require("path"),Bhe=VO(),QY=ue(),{Readable:Fhe}=require("stream"),{isMainThread:khe}=require("worker_threads"),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Qt}=xhe,JY=nt(),{replicateOperation:Ai}=(us(),D(zo)),{packageDirectory:Hhe}=(zY(),D(WY)),jY=Uh(),Ghe=Pe.join(Uhe,"application-template"),qhe=ir.get(ht.CONFIG_PARAMS.ROOTPATH),dc=Pe.join(qhe,"ssh"),ra=Pe.join(dc,"known_hosts"),{Resources:$he}=(xa(),D(vb));function Vhe(){Ft.trace("getting custom api status");let e={};try{e={port:ir.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw jt(new Error,Ql.FUNCTION_STATUS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,t)}return e}o(Vhe,"customFunctionsStatus");function Khe(){Ft.trace("getting custom api endpoints");let e={},t=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{KO.sync(YO(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:KO.sync(YO(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:KO.sync(YO(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw jt(new Error,Ql.GET_FUNCTIONS,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,r)}return e}o(Khe,"getCustomFunctions");function Yhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("getting custom api endpoint file content");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return we.readFileSync(a,{encoding:"utf8"})}catch(c){throw jt(new Error,Ql.GET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(Yhe,"getCustomFunction");async function Whe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=qn.setCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("setting custom function file content");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{we.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await Ai(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw jt(new Error,Ql.SET_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,c)}}o(Whe,"setCustomFunction");async function zhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=qn.getDropCustomFunctionValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function file");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{we.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await Ai(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw jt(new Error,Ql.DROP_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,a)}}o(zhe,"dropCustomFunction");async function jhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=qn.addComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("adding component");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);we.mkdirSync(s,{recursive:!0}),we.copySync(Ghe,s);let i=await Ai(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw jt(new Error,Ql.ADD_FUNCTION,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,s)}}o(jhe,"addComponent");async function Qhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=qn.dropCustomFunctionProjectValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);Ft.trace("dropping custom function project");let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=ir.get(ht.CONFIG_PARAMS.APPS);if(!vhe.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return GT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);we.rmSync(i,{recursive:!0});let a=await Ai(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw jt(new Error,Ql.DROP_FUNCTION_PROJECT,Qt.INTERNAL_SERVER_ERROR,Ft.ERR,i)}}o(Qhe,"dropCustomFunctionProject");async function Jhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=qn.packageComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Ft.trace("packaging component",n);let s;try{s=await we.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await we.realpath(Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Hhe(s,e)).toString("base64");return{project:n,payload:i}}o(Jhe,"packageComponent");async function Xhe(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=Zhe(e.package));let t=qn.deployComponentValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Ft.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await we.emptyDir(c);let p=Fhe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((g,A)=>{p.pipe(Mhe()).pipe(Dhe.extract(c,{finish:g})).on("error",A)});let h=await we.readdir(c);h.length===1&&h[0]==="package"&&(await we.copy(Pe.join(c,"package"),c),await we.remove(Pe.join(c,"package")));let E=Pe.join(c,"node_modules");a?await jY.runCommand(a,c):we.existsSync(E)||await jY.installAllRootModules(!1,c)}else{await GT.addConfig(n,{package:i}),await Bhe();let p=QY.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(p,"node_modules",n)}if(khe)return;let l=new $he;l.isWorker=!0;let u=(Fh(),D(qT)),d;if(u.setErrorReporter(p=>d=p),await u.loadComponent(c,l),d)throw d;Ft.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let m=await Ai(e);if(e.restart===!0)JY.restartWorkers("http"),m.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let h=await(jO(),D(zO)).executeJob({operation:"restart_service",service:"http",replicated:!0});m.restartJobId=h.job_id,m.message=`Successfully deployed: ${n}, restarting HarperDB`}else m.message=`Successfully deployed: ${n}`;return m}o(Xhe,"deployComponent");function Zhe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(we.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(Zhe,"getProjectNameFromPackage");async function eEe(){let e=o(async(s,i)=>{try{let a=await we.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await we.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Ft.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),{internal:r}=(Sp(),D(Hw)),n;try{n=await r.ComponentStatusRegistry.getAggregatedFromAllThreads(r.componentStatusRegistry)}catch(s){Ft.debug(`Failed to get component status from threads: ${s.message}`)}for(let s of t.entries){let i=n?.get(s.name);i?s.status=structuredClone(i):s.status={status:"unknown",message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}}}return t}o(eEe,"getComponents");async function tEe(e){let t=qn.getComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let n=GT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(QY.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await we.stat(Pe.join(n,e.project,e.file));return{message:await we.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(tEe,"getComponentFile");async function rEe(e){let t=qn.setComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await we.ensureFile(n),await we.outputFile(n,e.payload,r)):await we.ensureDir(n);let s=await Ai(e);return s.message="Successfully set component: "+e.file,s}o(rEe,"setComponentFile");async function nEe(e){let t=qn.dropComponentFileValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(ir.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await we.pathExists(a)&&await we.unlink(a),await we.pathExists(i)&&await we.remove(i);let c=Pe.join(ir.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await we.pathExists(c)){let u=JSON.parse(await we.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await we.writeFile(c,JSON.stringify(u,null,2),"utf8")}GT.deleteConfigFromFile([r]);let l=await Ai(e);return e.restart===!0?(JY.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(nEe,"dropComponent");async function sEe(e){let t=qn.addSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Ft.trace("adding ssh key",r);let c=Pe.join(dc,r+".key"),l=Pe.join(dc,"config");if(await we.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await we.outputFile(c,n),await we.chmod(c,"0600");let u=`#${r}
26
26
  Host ${s}
27
27
  HostName ${i}
28
28
  User git
29
29
  IdentityFile ${c}
30
30
  IdentitiesOnly yes`;await we.pathExists(l)?await we.appendFile(l,`
31
31
  `+u):await we.outputFile(l,u);let d="";if(await we.pathExists(ra)||(await we.writeFile(ra,""),await we.chmod(ra,"0600")),i=="github.com"&&!(await we.readFile(ra,"utf8")).includes("github.com"))try{let E=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of E)we.appendFile(ra,"github.com "+g+`
32
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await we.appendFile(ra,a);let f=await Ai(e);return f.message=`Added ssh key: ${r}${d}`,f}o(eEe,"addSSHKey");async function tEe(e){let t=Gn.updateSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n}=e;Ft.trace("updating ssh key",r);let s=Pe.join(dc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await Ai(e);return i.message=`Updated ssh key: ${r}`,i}o(tEe,"updateSSHKey");async function rEe(e){let t=Gn.deleteSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r}=e;Ft.trace("deleting ssh key",r);let n=Pe.join(dc,r+".key"),s=Pe.join(dc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await Ai(e);return c.message=`Deleted ssh key: ${r}`,c}o(rEe,"deleteSSHKey");async function nEe(e){let t=[];return await we.pathExists(dc)&&(await we.readdir(dc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(nEe,"listSSHKeys");async function sEe(e){let t=Gn.setSSHKnownHostsValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(ra,r);let n=await Ai(e);return n.message="Known hosts successfully set",n}o(sEe,"setSSHKnownHosts");async function iEe(e){return await we.pathExists(ra)?{known_hosts:await we.readFile(ra,"utf8")}:{known_hosts:null}}o(iEe,"getSSHKnownHosts");or.customFunctionsStatus=Hhe;or.getCustomFunctions=qhe;or.getCustomFunction=Ghe;or.setCustomFunction=$he;or.dropCustomFunction=Vhe;or.addComponent=Khe;or.dropCustomFunctionProject=Yhe;or.packageComponent=Whe;or.deployComponent=zhe;or.getComponents=Qhe;or.getComponentFile=Jhe;or.setComponentFile=Xhe;or.dropComponent=Zhe;or.addSSHKey=eEe;or.updateSSHKey=tEe;or.deleteSSHKey=rEe;or.listSSHKeys=nEe;or.setSSHKnownHosts=sEe;or.getSSHKnownHosts=iEe});var QO=M((mBe,QY)=>{"use strict";var Ks=require("joi"),jY=ft();QY.exports={readTransactionLogValidator:oEe,deleteTransactionLogsBeforeValidator:aEe};function oEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return jY.validateBySchema(e,t)}o(oEe,"readTransactionLogValidator");function aEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return jY.validateBySchema(e,t)}o(aEe,"deleteTransactionLogsBeforeValidator")});var KT=M((hBe,rW)=>{"use strict";var JO=(H(),D(W)),kh=mr(),JY=oe(),XY=ue(),ZY=Wi(),eW=Q(),{handleHDBError:$T,hdbErrors:cEe}=_e(),{HTTP_STATUS_CODES:VT}=cEe,{readTransactionLogValidator:lEe,deleteTransactionLogsBeforeValidator:uEe}=QO(),tW=is(),dEe="Logs successfully deleted from transaction log.",fEe="All logs successfully deleted from transaction log.";rW.exports={readTransactionLog:mEe,deleteTransactionLogsBefore:hEe};async function mEe(e){let t=lEe(e);if(t)throw $T(t,t.message,VT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=JY.checkSchemaTableExist(e.database,e.table);if(r)throw $T(new Error,r,VT.NOT_FOUND,void 0,void 0,!0);return XY.get(JO.CONFIG_PARAMS.CLUSTERING_ENABLED)?await pEe(e):(eW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),tW.readAuditLog(e))}o(mEe,"readTransactionLog");async function*pEe(e){let t=ZY.createNatsTableStreamName(e.database,e.table),r=await kh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===JO.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(pEe,"readTransactionLogNats");async function hEe(e){let t=uEe(e);if(t)throw $T(t,t.message,VT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!XY.get(JO.CONFIG_PARAMS.CLUSTERING_ENABLED))return eW.info("Delete transaction logs called for Plexus"),tW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=JY.checkSchemaTableExist(r,n);if(i)throw $T(new Error,i,VT.NOT_FOUND,void 0,void 0,!0);let a=ZY.createNatsTableStreamName(r,n),{jsm:c}=await kh.getNATSReferences(),l=await kh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=dEe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=fEe):f=(await kh.viewStream(a,parseInt(s),1))[0].nats_sequence,await kh.purgeTableStream(r,n,{seq:f}),d}o(hEe,"deleteTransactionLogsBefore")});var tP={};Ie(tP,{describeMetric:()=>cW,describeMetricOp:()=>eP,get:()=>oW,getOp:()=>XO,listMetrics:()=>aW,listMetricsOp:()=>ZO});async function _Ee(e){return(await F_().get(e)).hostname}function nW(e,t){return e.length===0||e.includes(t)}function XO(e){return Hh.trace?.("get_analytics request:",e),oW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function iW(e){return"conditions"in e?{...e,conditions:e.conditions.map(iW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function oW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(iW));let a=t??[];nW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),Hh.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],nW(a,"node")&&(Hh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await _Ee(d)),Hh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function ZO(e){return aW(e.metric_types)}async function aW(e=["builtin"]){let t=[],r=Object.values(vo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function eP(e){return cW(e.metric)}async function cW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Hh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var sW,EEe,Hh,rP=ie(()=>{sW=w(Q());db();fb();({forComponent:EEe}=sW.default),Hh=EEe("analytics").conditional;o(_Ee,"lookupHostname");o(nW,"isSelected");o(XO,"getOp");o(iW,"conformCondition");o(oW,"get");o(ZO,"listMetricsOp");o(aW,"listMetrics");o(eP,"describeMetricOp");o(cW,"describeMetric")});var YT,WT,qh,zT=ie(()=>{YT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},WT=Object.keys(YT),qh="primary"});function uW(e){return lW.validateBySchema(e,yEe)}var Gh,lW,gEe,SEe,TEe,yEe,dW=ie(()=>{Gh=w(require("joi")),lW=w(ft());zT();gEe=WT,SEe=Object.entries(YT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),TEe=o(()=>{let e=Gh.default.string().min(1).max(512);return Object.entries(YT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Gh.default.string().valid(...r.allowedValues).messages({"any.only":SEe[t]})}))}),e.required()},"createStatusValidationSchema"),yEe=Gh.default.object({id:Gh.default.string().valid(...gEe).required(),status:TEe()});o(uW,"validateStatus")});function fW(){nP||(nP=na.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),sP=new Uint8Array(nP))}function mW(){fW(),sP[0]=1}function pW(){return fW(),sP[0]===1}var nP,sP,iP=ie(()=>{$h();o(fW,"ensureInitialized");o(mW,"requestRestart");o(pW,"restartNeeded")});var uP={};Ie(uP,{DEFAULT_STATUS_ID:()=>qh,STATUS_IDS:()=>WT,Status:()=>na,clear:()=>aP,get:()=>cP,set:()=>lP});function Kh(){return oP||(oP=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),oP}function aP({id:e}){return Vh.debug?.("clearStatus",e),Kh().delete(e)}async function AEe(){Vh.debug?.("getAllStatus");let e=Kh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=pW();return{systemStatus:e,componentStatus:r,restartRequired:n}}function cP({id:e}){return e?(Vh.debug?.("getStatus",e),Kh().get(e)):(Vh.debug?.("getStatus","all"),AEe())}function lP({status:e,id:t=qh}){let r=uW({status:e,id:t});if(r)throw(0,jT.handleHDBError)(r,r.message,REe.BAD_REQUEST);return Vh.debug?.("setStatus",t,e),Kh().put(t,{status:e})}var jT,hW,REe,oP,na,Vh,$h=ie(()=>{Oe();jT=w(_e()),hW=w(Xn());dW();zT();Sp();iP();zT();({HTTP_STATUS_CODES:REe}=jT.hdbErrors);o(Kh,"getStatusTable");na={get primaryStore(){return Kh().primaryStore}},Vh=(0,hW.loggerWithTag)("status");o(aP,"clearStatus");o(AEe,"getAllStatus");o(cP,"getStatus");o(lP,"setStatus")});function IEe(e){if(typeof e!="string")throw new QT(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new QT(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new df(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=bEe.getKey();if(!(0,XT.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new fP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function wEe(e){if(e?.typ!=="Harper-License")throw new Yh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Yh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function NEe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function CEe(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!NEe(t[r],e[r]))throw new JT(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function _W(e){let{header:t,payload:r}=IEe(e),n;try{n=JSON.parse(t)}catch(i){let a=new Yh;throw a.cause=i,a}wEe(n);let s;try{s=JSON.parse(r)}catch(i){let a=new JT;throw a.cause=i,a}return CEe(s),s}var XT,EW,dP,QT,df,fP,Yh,JT,bEe,gW=ie(()=>{XT=require("node:crypto"),EW=w(ue());H();dP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
32
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await we.appendFile(ra,a);let f=await Ai(e);return f.message=`Added ssh key: ${r}${d}`,f}o(sEe,"addSSHKey");async function iEe(e){let t=qn.updateSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r,key:n}=e;Ft.trace("updating ssh key",r);let s=Pe.join(dc,r+".key");if(!await we.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await we.outputFile(s,n);let i=await Ai(e);return i.message=`Updated ssh key: ${r}`,i}o(iEe,"updateSSHKey");async function oEe(e){let t=qn.deleteSSHKeyValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{name:r}=e;Ft.trace("deleting ssh key",r);let n=Pe.join(dc,r+".key"),s=Pe.join(dc,"config");if(!await we.pathExists(n))throw new Error("Key does not exist");let i=await we.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await we.outputFile(s,i),we.removeSync(n);let c=await Ai(e);return c.message=`Deleted ssh key: ${r}`,c}o(oEe,"deleteSSHKey");async function aEe(e){let t=[];return await we.pathExists(dc)&&(await we.readdir(dc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(aEe,"listSSHKeys");async function cEe(e){let t=qn.setSSHKnownHostsValidator(e);if(t)throw jt(t,t.message,Qt.BAD_REQUEST);let{known_hosts:r}=e;await we.outputFile(ra,r);let n=await Ai(e);return n.message="Known hosts successfully set",n}o(cEe,"setSSHKnownHosts");async function lEe(e){return await we.pathExists(ra)?{known_hosts:await we.readFile(ra,"utf8")}:{known_hosts:null}}o(lEe,"getSSHKnownHosts");or.customFunctionsStatus=Vhe;or.getCustomFunctions=Khe;or.getCustomFunction=Yhe;or.setCustomFunction=Whe;or.dropCustomFunction=zhe;or.addComponent=jhe;or.dropCustomFunctionProject=Qhe;or.packageComponent=Jhe;or.deployComponent=Xhe;or.getComponents=eEe;or.getComponentFile=tEe;or.setComponentFile=rEe;or.dropComponent=nEe;or.addSSHKey=sEe;or.updateSSHKey=iEe;or.deleteSSHKey=oEe;or.listSSHKeys=aEe;or.setSSHKnownHosts=cEe;or.getSSHKnownHosts=lEe});var QO=M((gBe,ZY)=>{"use strict";var Ks=require("joi"),XY=ft();ZY.exports={readTransactionLogValidator:uEe,deleteTransactionLogsBeforeValidator:dEe};function uEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return XY.validateBySchema(e,t)}o(uEe,"readTransactionLogValidator");function dEe(e){let t=Ks.object({schema:Ks.string(),database:Ks.string(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return XY.validateBySchema(e,t)}o(dEe,"deleteTransactionLogsBeforeValidator")});var KT=M((TBe,iW)=>{"use strict";var JO=(H(),D(W)),kh=mr(),eW=oe(),tW=ue(),rW=Wi(),nW=Q(),{handleHDBError:$T,hdbErrors:fEe}=_e(),{HTTP_STATUS_CODES:VT}=fEe,{readTransactionLogValidator:mEe,deleteTransactionLogsBeforeValidator:pEe}=QO(),sW=is(),hEe="Logs successfully deleted from transaction log.",EEe="All logs successfully deleted from transaction log.";iW.exports={readTransactionLog:_Ee,deleteTransactionLogsBefore:SEe};async function _Ee(e){let t=mEe(e);if(t)throw $T(t,t.message,VT.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=eW.checkSchemaTableExist(e.database,e.table);if(r)throw $T(new Error,r,VT.NOT_FOUND,void 0,void 0,!0);return tW.get(JO.CONFIG_PARAMS.CLUSTERING_ENABLED)?await gEe(e):(nW.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),sW.readAuditLog(e))}o(_Ee,"readTransactionLog");async function*gEe(e){let t=rW.createNatsTableStreamName(e.database,e.table),r=await kh.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===JO.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(gEe,"readTransactionLogNats");async function SEe(e){let t=pEe(e);if(t)throw $T(t,t.message,VT.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!tW.get(JO.CONFIG_PARAMS.CLUSTERING_ENABLED))return nW.info("Delete transaction logs called for Plexus"),sW.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=eW.checkSchemaTableExist(r,n);if(i)throw $T(new Error,i,VT.NOT_FOUND,void 0,void 0,!0);let a=rW.createNatsTableStreamName(r,n),{jsm:c}=await kh.getNATSReferences(),l=await kh.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=hEe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=EEe):f=(await kh.viewStream(a,parseInt(s),1))[0].nats_sequence,await kh.purgeTableStream(r,n,{seq:f}),d}o(SEe,"deleteTransactionLogsBefore")});var tP={};Ie(tP,{describeMetric:()=>dW,describeMetricOp:()=>eP,get:()=>lW,getOp:()=>XO,listMetrics:()=>uW,listMetricsOp:()=>ZO});async function yEe(e){return(await F_().get(e)).hostname}function oW(e,t){return e.length===0||e.includes(t)}function XO(e){return Hh.trace?.("get_analytics request:",e),lW(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function cW(e){return"conditions"in e?{...e,conditions:e.conditions.map(cW)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function lW(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(cW));let a=t??[];oW(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),Hh.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],oW(a,"node")&&(Hh.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await yEe(d)),Hh.trace?.("get_analytics result:",JSON.stringify(u)),u})}function ZO(e){return uW(e.metric_types)}async function uW(e=["builtin"]){let t=[],r=Object.values(vo);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function eP(e){return dW(e.metric)}async function dW(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return Hh.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var aW,TEe,Hh,rP=ie(()=>{aW=w(Q());db();fb();({forComponent:TEe}=aW.default),Hh=TEe("analytics").conditional;o(yEe,"lookupHostname");o(oW,"isSelected");o(XO,"getOp");o(cW,"conformCondition");o(lW,"get");o(ZO,"listMetricsOp");o(uW,"listMetrics");o(eP,"describeMetricOp");o(dW,"describeMetric")});var YT,WT,Gh,zT=ie(()=>{YT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},WT=Object.keys(YT),Gh="primary"});function mW(e){return fW.validateBySchema(e,IEe)}var qh,fW,REe,AEe,bEe,IEe,pW=ie(()=>{qh=w(require("joi")),fW=w(ft());zT();REe=WT,AEe=Object.entries(YT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),bEe=o(()=>{let e=qh.default.string().min(1).max(512);return Object.entries(YT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:qh.default.string().valid(...r.allowedValues).messages({"any.only":AEe[t]})}))}),e.required()},"createStatusValidationSchema"),IEe=qh.default.object({id:qh.default.string().valid(...REe).required(),status:bEe()});o(mW,"validateStatus")});function hW(){nP||(nP=na.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),sP=new Uint8Array(nP))}function EW(){hW(),sP[0]=1}function _W(){return hW(),sP[0]===1}var nP,sP,iP=ie(()=>{$h();o(hW,"ensureInitialized");o(EW,"requestRestart");o(_W,"restartNeeded")});var uP={};Ie(uP,{DEFAULT_STATUS_ID:()=>Gh,STATUS_IDS:()=>WT,Status:()=>na,clear:()=>aP,get:()=>cP,set:()=>lP});function Kh(){return oP||(oP=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),oP}function aP({id:e}){return Vh.debug?.("clearStatus",e),Kh().delete(e)}async function NEe(){Vh.debug?.("getAllStatus");let e=Kh().get({}),t=await gp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=_W();return{systemStatus:e,componentStatus:r,restartRequired:n}}function cP({id:e}){return e?(Vh.debug?.("getStatus",e),Kh().get(e)):(Vh.debug?.("getStatus","all"),NEe())}function lP({status:e,id:t=Gh}){let r=mW({status:e,id:t});if(r)throw(0,jT.handleHDBError)(r,r.message,wEe.BAD_REQUEST);return Vh.debug?.("setStatus",t,e),Kh().put(t,{status:e})}var jT,gW,wEe,oP,na,Vh,$h=ie(()=>{Oe();jT=w(_e()),gW=w(Xn());pW();zT();Sp();iP();zT();({HTTP_STATUS_CODES:wEe}=jT.hdbErrors);o(Kh,"getStatusTable");na={get primaryStore(){return Kh().primaryStore}},Vh=(0,gW.loggerWithTag)("status");o(aP,"clearStatus");o(NEe,"getAllStatus");o(cP,"getStatus");o(lP,"setStatus")});function OEe(e){if(typeof e!="string")throw new QT(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new QT(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new df(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=CEe.getKey();if(!(0,XT.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new fP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function PEe(e){if(e?.typ!=="Harper-License")throw new Yh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Yh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function LEe(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function DEe(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!LEe(t[r],e[r]))throw new JT(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function TW(e){let{header:t,payload:r}=OEe(e),n;try{n=JSON.parse(t)}catch(i){let a=new Yh;throw a.cause=i,a}PEe(n);let s;try{s=JSON.parse(r)}catch(i){let a=new JT;throw a.cause=i,a}return DEe(s),s}var XT,SW,dP,QT,df,fP,Yh,JT,CEe,yW=ie(()=>{XT=require("node:crypto"),SW=w(ue());H();dP=class{static{o(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
33
33
  MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
34
34
  -----END PUBLIC KEY-----
35
35
  `:this.pem=`-----BEGIN PUBLIC KEY-----
36
36
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
37
37
  -----END PUBLIC KEY-----
38
- `}getKey(){return(0,XT.createPublicKey)(this.pem)}toString(){return this.pem}},QT=class extends TypeError{static{o(this,"LicenseEncodingError")}},df=class extends TypeError{static{o(this,"InvalidLicenseError")}},fP=class extends df{static{o(this,"InvalidLicenseSignatureError")}},Yh=class extends df{static{o(this,"InvalidHeaderError")}},JT=class extends df{static{o(this,"InvalidPayloadError")}},bEe=new dP(EW.get(B.LICENSE_MODE));o(IEe,"validateLicenseSignature");o(wEe,"validateLicenseHeader");o(NEe,"valid");o(CEe,"validateLicensePayload");o(_W,"validateLicense")});var ZT={};Ie(ZT,{getActiveLicense:()=>_P,getUsageLicenses:()=>CW,getUsageLicensesOp:()=>SP,installUsageLicense:()=>EP,installUsageLicenseOp:()=>hP,isActiveLicense:()=>wW,isLicensed:()=>gP,loadAndWatchLicensesDir:()=>LEe,recordUsage:()=>NW});async function hP(e){let t=e.license;try{await EP(t)}catch(r){let n=new yW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function EP(e){let t=_W(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new pP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function wW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function _P(){let e=RW.get(B.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(wW(n))return n}async function gP(){return await _P()!==void 0}async function NW(e){en.trace?.("Recording usage into license from analytics");let t,r=(await _P())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};Rt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";SW||(console.error(n),SW=!0),TW===void 0&&(TW=setInterval(()=>{en.notify(n)},OEe).unref())}}function SP(e){let t={};return e.region&&(t.region=e.region),CW(t)}function CW(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function PEe(e){en.trace?.("Loading usage license from file:",e);let t=await bW.readFile(e,{encoding:"utf-8"});try{await EP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function LEe(){let e=mP.default.join(mP.default.dirname(AW.getConfigFilePath()),"licenses");(0,IW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",PEe)}var yW,en,RW,mP,AW,bW,IW,pP,SW,TW,OEe,Wh=ie(()=>{gW();yW=w(_e()),en=w(Q());Ps();Ca();RW=w(ue());H();Oe();mP=w(require("node:path")),AW=w(Tt()),bW=w(require("node:fs/promises")),IW=require("chokidar"),pP=class extends Error{static{o(this,"ExistingLicenseError")}};o(hP,"installUsageLicenseOp");o(EP,"installUsageLicense");SW=!1,OEe=6e5;o(wW,"isActiveLicense");o(_P,"getActiveLicense");o(gP,"isLicensed");o(NW,"recordUsage");Sb(NW);o(SP,"getUsageLicensesOp");o(CW,"getUsageLicenses");o(PEe,"loadLicenseFile");o(LEe,"loadAndWatchLicensesDir")});var PW=M((qBe,OW)=>{"use strict";var TP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};OW.exports=TP});var DW=M(($Be,LW)=>{"use strict";var yP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};LW.exports=yP});var AP=M((KBe,vW)=>{"use strict";var MW=PW(),DEe=DW(),{HDB_ERROR_MSGS:MEe}=Kr(),RP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=MEe.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new MW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new DEe(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new MW(r,n,[],i);this.unauthorized_access[a]=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}};vW.exports=RP});var ny=M((WBe,XW)=>{"use strict";var bP=Bn(),ey=fn(),Ys=iT(),Qh=Cl(),IP=_l(),vEe=OC(),UEe=ZV(),Jh=as(),ty=xp(),Cr=Q(),xEe=vC(),BEe=_T(),FEe=aO(),kEe=ST(),HEe=uO(),qEe=dO(),GEe=pO(),$Ee=EO(),wP=bT(),sa=oe(),VEe=LK(),BW=of(),Tn=(H(),D(W)),FW=mY(),KEe=jd(),kW=(Id(),D(Gp)),HW=(xT(),D(Lh)),qW=Tt(),Er=WO(),YEe=require("alasql"),GW=KT(),$W=Uh(),ff=fs(),VW=(Jd(),D(Qd)),NP=(rP(),D(tP)),CP=($h(),D(uP)),KW=(Wh(),D(ZT)),YW=AP(),{handleHDBError:$n,hdbErrors:WW}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:zh}=WW,te=new Map,zW="delete",fc="insert",Ws="read",Jl="update",jh="describe",UW=Qh.describeSchema.name,xW=Qh.describeTable.name,jW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},WEe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},zEe="catchup",jEe="handleGetJob",QEe="handleGetJobsByStartDate",ry={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},JEe=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],QW={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};te.set(bP.insert.name,new se(!1,[fc]));te.set(bP.update.name,new se(!1,[Jl]));te.set(bP.upsert.name,new se(!1,[fc,Jl]));te.set(ey.searchByConditions.name,new se(!1,[Ws]));te.set(ey.searchByHash.name,new se(!1,[Ws]));te.set(ey.searchByValue.name,new se(!1,[Ws]));te.set(ey.search.name,new se(!1,[Ws]));te.set(Ys.createSchema.name,new se(!0,[]));te.set(Ys.createTable.name,new se(!0,[]));te.set(Ys.createAttribute.name,new se(!1,[fc]));te.set(Ys.dropSchema.name,new se(!0,[]));te.set(Ys.dropTable.name,new se(!0,[]));te.set(Ys.dropAttribute.name,new se(!0,[]));te.set(Qh.describeSchema.name,new se(!1,[Ws]));te.set(Qh.describeTable.name,new se(!1,[Ws]));te.set(IP.deleteRecord.name,new se(!1,[zW]));te.set(Jh.addUser.name,new se(!0,[]));te.set(Jh.alterUser.name,new se(!0,[]));te.set(Jh.dropUser.name,new se(!0,[]));te.set(Jh.listUsersExternal.name,new se(!0,[]));te.set(ty.listRoles.name,new se(!0,[]));te.set(ty.addRole.name,new se(!0,[]));te.set(ty.alterRole.name,new se(!0,[]));te.set(ty.dropRole.name,new se(!0,[]));te.set(xEe.name,new se(!0,[]));te.set(BEe.name,new se(!0,[]));te.set(FEe.name,new se(!0,[]));te.set(kEe.name,new se(!0,[]));te.set(HEe.name,new se(!0,[]));te.set(qEe.name,new se(!0,[]));te.set(wP.setRoutes.name,new se(!0,[]));te.set(wP.getRoutes.name,new se(!0,[]));te.set(wP.deleteRoutes.name,new se(!0,[]));te.set(qW.setConfiguration.name,new se(!0,[]));te.set(GEe.clusterStatus.name,new se(!0,[]));te.set($Ee.name,new se(!0,[]));te.set(IP.deleteFilesBefore.name,new se(!0,[]));te.set(IP.deleteAuditLogsBefore.name,new se(!0,[]));te.set(BW.restart.name,new se(!0,[]));te.set(BW.restartService.name,new se(!0,[]));te.set(vEe.name,new se(!0,[]));te.set(UEe.name,new se(!0,[Ws]));te.set(KEe.systemInformation.name,new se(!0,[]));te.set(qW.getConfiguration.name,new se(!0,[]));te.set(GW.readTransactionLog.name,new se(!0,[]));te.set(GW.deleteTransactionLogsBefore.name,new se(!0,[]));te.set($W.installModules.name,new se(!0,[]));te.set($W.auditModules.name,new se(!0,[]));te.set(ff.createCsr.name,new se(!0,[]));te.set(ff.signCertificate.name,new se(!0,[]));te.set(ff.listCertificates.name,new se(!0,[]));te.set(ff.addCertificate.name,new se(!0,[]));te.set(ff.removeCertificate.name,new se(!0,[]));te.set(ff.getKey.name,new se(!0,[]));te.set(VW.addNodeBack.name,new se(!0,[]));te.set(VW.removeNodeBack.name,new se(!0,[]));te.set(NP.getOp.name,new se(!1,[Ws]));te.set(NP.listMetricsOp.name,new se(!1,[Ws]));te.set(NP.describeMetricOp.name,new se(!1,[Ws]));te.set(CP.clear.name,new se(!0,[]));te.set(CP.get.name,new se(!0,[]));te.set(CP.set.name,new se(!0,[]));te.set(KW.installUsageLicenseOp.name,new se(!0,[]));te.set(KW.getUsageLicensesOp.name,new se(!0,[]));te.set(kW.createTokens.name,new se(!1,[]));te.set(kW.refreshOperationToken.name,new se(!1,[]));te.set(HW.login.name,new se(!1,[]));te.set(HW.logout.name,new se(!1,[]));te.set(Er.customFunctionsStatus.name,new se(!0,[]));te.set(Er.getCustomFunctions.name,new se(!0,[]));te.set(Er.getComponents.name,new se(!0,[]));te.set(Er.getComponentFile.name,new se(!0,[]));te.set(Er.setComponentFile.name,new se(!0,[]));te.set(Er.dropComponent.name,new se(!0,[]));te.set(Er.getCustomFunction.name,new se(!0,[]));te.set(Er.setCustomFunction.name,new se(!0,[]));te.set(Er.dropCustomFunction.name,new se(!0,[]));te.set(Er.addComponent.name,new se(!0,[]));te.set(Er.dropCustomFunctionProject.name,new se(!0,[]));te.set(Er.packageComponent.name,new se(!0,[]));te.set(Er.deployComponent.name,new se(!0,[]));te.set(Er.addSSHKey.name,new se(!0,[]));te.set(Er.updateSSHKey.name,new se(!0,[]));te.set(Er.deleteSSHKey.name,new se(!0,[]));te.set(Er.listSSHKeys.name,new se(!0,[]));te.set(Er.setSSHKnownHosts.name,new se(!0,[]));te.set(Er.getSSHKnownHosts.name,new se(!0,[]));te.set(Jh.userInfo.name,new se(!1,[]));te.set(Qh.describeAll.name,new se(!1,[]));te.set(jEe,new se(!1,[]));te.set(QEe,new se(!0,[]));te.set(zEe,new se(!0,[]));te.set(ry.CSV_DATA_LOAD,new se(!1,[fc,Jl]));te.set(ry.CSV_URL_LOAD,new se(!1,[fc,Jl]));te.set(ry.CSV_FILE_LOAD,new se(!1,[fc,Jl]));te.set(ry.IMPORT_FROM_S3,new se(!1,[fc,Jl]));te.set(QW.EXPORT_TO_S3,new se(!0,[]));te.set(QW.EXPORT_LOCAL,new se(!0,[]));te.set(Tn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[zW]));te.set(Tn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));te.set(Tn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[fc]));te.set(Tn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Jl]));XW.exports={verifyPerms:ZEe,verifyPermsAst:XEe,verifyBulkLoadAttributePerms:t_e};function XEe(e,t,r){if(sa.isEmptyOrZeroLength(e))throw Cr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(sa.isEmptyOrZeroLength(t))throw Cr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(sa.isEmptyOrZeroLength(r))throw Cr.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new YW,s=new VEe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Cr.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&jW[r])throw $n(new Error,tn.DROP_SYSTEM,zh.FORBIDDEN);if(c&&!l)return null;let u=FW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof YEe.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=JW(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=PP(t.role.permission,m,f[p]);OP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(XEe,"verifyPermsAst");function ZEe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Cr.info("null required parameter in verifyPerms"),$n(new Error,tn.DEFAULT_INVALID_REQUEST,zh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new YW;if(sa.isEmptyOrZeroLength(e.hdb_user?.role)||sa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Cr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Tn.SYSTEM_SCHEMA_NAME)||s===Tn.SYSTEM_SCHEMA_NAME;if(l&&d&&WEe[e.operation]&&(i===Tn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&jW[r])throw $n(new Error,tn.DROP_SYSTEM,zh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(JEe.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=FW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===UW||r===xW)&&!f.super_user){if(s===Tn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===UW&&(!f[s]||!f[s][jh]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===xW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][jh]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=JW(e.hdb_user,r,a,c,n);if(m)return m;if(te.get(r)&&te.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Tn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Tn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Tn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=e_e(e),h=PP(e.hdb_user?.role?.permission,s,i);return OP(p,h,r,i,s,c,n),c.getPermsResponse()}o(ZEe,"verifyPerms");function JW(e,t,r,n,s){if(sa.arrayHasEmptyValues([e,t,r]))throw Cr.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||te.get(t).requires_su))return null;if(!te.get(t))throw Cr.info(`operation ${t} not found.`),$n(new Error,tn.OP_NOT_FOUND(t),zh.BAD_REQUEST);if(te.get(t)&&te.get(t).requires_su)return Cr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][jh]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[jh]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=te.get(t).perms;!sa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Cr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Cr.error(p),Cr.error(m),$n(WW.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(JW,"hasPermissions");function OP(e,t,r,n,s,i,a){if(!e||!t)throw Cr.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=te.get(r).perms;if(!c||c==="")throw Cr.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(sa.isEmptyOrZeroLength(t))return Cr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[jh]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Tn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw $n(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,zh.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(OP,"checkAttributePerms");function e_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===Tn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Cr.info(r)}return t}o(e_e,"getRecordAttributes");function PP(e,t,r){let n=new Map;if(sa.isEmpty(e))return Cr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Cr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(PP,"getAttributePermissions");function t_e(e,t,r,n,s,i,a){let c=new Set(i),l=PP(e,n,s);OP(c,l,t,s,n,a,r)}o(t_e,"verifyBulkLoadAttributePerms")});var iy=M((jBe,nz)=>{"use strict";nz.exports={evaluateSQL:p_e,processAST:rz,convertSQLToAST:tz,checkASTPermissions:ez};var r_e=Bn(),ZW=require("util"),n_e=ZW.callbackify(r_e.insert),s_e=fn().search,i_e=NG().update,o_e=ZW.callbackify(i_e),a_e=OG().convertDelete,mc=require("alasql"),c_e=ny(),sy=Q(),l_e=Og(),u_e=oe(),Xh=(H(),D(W)),{hdbErrors:d_e,handleHDBError:LP}=_e(),{HTTP_STATUS_CODES:DP}=d_e;l_e(mc);var f_e=403,m_e="There was a problem performing this insert. Please check the logs and try again.",MP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function p_e(e,t){let r=e.parsed_sql_object;if(!r){r=tz(e.sql);let n,s=r.ast.statements[0];if(s instanceof mc.yy.Insert?n=s.into.databaseid:s instanceof mc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mc.yy.Update||s instanceof mc.yy.Delete?n=s.table.databaseid:sy.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mc.yy.Select)&&u_e.isEmptyOrZeroLength(n))return t("No schema specified",null)}rz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(p_e,"evaluateSQL");function ez(e,t){let r;try{r=c_e.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(ez,"checkASTPermissions");function tz(e){let t=new MP;if(!e)throw LP(new Error,"The 'sql' parameter is missing from the request body",DP.BAD_REQUEST);try{let r=e.trim(),n=mc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
39
- `);throw n[1]?LP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,DP.BAD_REQUEST):LP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",DP.BAD_REQUEST)}return t}o(tz,"convertSQLToAST");function rz(e,t,r){try{let n=h_e;if(!e.bypass_auth&&!t.permissions_checked){let i=ez(e,t);if(i&&i.length>0)return r(f_e,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Xh.VALID_SQL_OPS_ENUM.SELECT:n=s_e,s=t.ast.statements[0];break;case Xh.VALID_SQL_OPS_ENUM.INSERT:n=E_e;break;case Xh.VALID_SQL_OPS_ENUM.UPDATE:n=o_e;break;case Xh.VALID_SQL_OPS_ENUM.DELETE:n=a_e;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(rz,"processAST");function h_e(e,t){sy.info(e),t("unknown sql statement")}o(h_e,"nullFunction");function E_e({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=__e(i,e.values)}catch(a){return r(a)}n_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){sy.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(E_e,"convertInsert");function __e(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=mc.compile(`SELECT ${s.toString()} AS [${Xh.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw sy.error(r),new Error(m_e)}}o(__e,"createDataObjects")});var kP=M((ZBe,az)=>{var ly=require("clone"),uy=ft(),g_e=oe(),ay=(H(),D(W)),JBe=Q(),vP=require("fs"),xP=require("joi"),{string:cy}=xP.types(),{hdbErrors:S_e,handleHDBError:oy}=_e(),{HDB_ERROR_MSGS:XBe,HTTP_STATUS_CODES:UP}=S_e,{commonValidators:mf}=Hi(),sz=" is required",T_e=["insert","update","upsert"],BP={database:{presence:!1,format:mf.schema_format,length:mf.schema_length},schema:{presence:!1,format:mf.schema_format,length:mf.schema_length},table:{presence:!0,format:mf.schema_format,length:mf.schema_length},action:{inclusion:{within:T_e,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},y_e={schema:cy.required(),table:cy.required(),action:cy.valid("insert","update","upsert")},{AWS_ACCESS_KEY:R_e,AWS_SECRET:A_e,AWS_BUCKET:b_e,AWS_FILE_KEY:I_e,REGION:w_e}=ay.S3_BUCKET_AUTH_KEYS,N_e={s3:{presence:!0},[`s3.${R_e}`]:{presence:!0,type:"String"},[`s3.${A_e}`]:{presence:!0,type:"String"},[`s3.${b_e}`]:{presence:!0,type:"String"},[`s3.${I_e}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${w_e}`]:{presence:!0,type:"String"}},iz=ly(BP);iz.data.presence={message:sz};var oz=ly(BP);oz.file_path.presence={message:sz};var C_e=Object.assign(ly(BP),N_e),FP=ly(y_e);FP.csv_url=cy.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();FP.passthrough_headers=xP.object();function O_e(e){let t=uy.validateObject(e,iz);return dy(e,t)}o(O_e,"dataObject");function P_e(e){let t=uy.validateBySchema(e,xP.object(FP));return dy(e,t)}o(P_e,"urlObject");function L_e(e){let t=uy.validateObject(e,oz);return dy(e,t)}o(L_e,"fileObject");function D_e(e){let t=uy.validateObject(e,C_e);return dy(e,t)}o(D_e,"s3FileObject");function dy(e,t){if(!t){let r=g_e.checkGlobalSchemaTable(e.schema,e.table);if(r)return oy(new Error,r,UP.BAD_REQUEST);if(e.operation===ay.OPERATIONS_ENUM.CSV_FILE_LOAD)try{vP.accessSync(e.file_path,vP.constants.R_OK|vP.constants.F_OK)}catch(n){return n.code===ay.NODE_ERROR_CODES.ENOENT?oy(n,`No such file or directory ${n.path}`,UP.BAD_REQUEST):n.code===ay.NODE_ERROR_CODES.EACCES?oy(n,`Permission denied ${n.path}`,UP.BAD_REQUEST):oy(n)}}return t}o(dy,"postValidateChecks");az.exports={dataObject:O_e,urlObject:P_e,fileObject:L_e,s3FileObject:D_e}});var HP=M((tFe,cz)=>{"use strict";var Zh=Q(),fy=(H(),D(W));async function M_e(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===fy.OPERATIONS_ENUM.INSERT||t.operation===fy.OPERATIONS_ENUM.UPDATE||t.operation===fy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Zh.info(i.message),i):i.http_resp_msg?(Zh.error(`Error calling operation: ${e.name}`),Zh.error(i.http_resp_msg),i):(Zh.error(`Error calling operation: ${e.name}`),Zh.error(i),i)}}o(M_e,"callOperationFunctionAsAwait");cz.exports={callOperationFunctionAsAwait:M_e}});var qP=M((nFe,uz)=>{"use strict";var{S3:v_e,GetObjectCommand:U_e}=require("@aws-sdk/client-s3");uz.exports={getFileStreamFromS3:x_e,getS3AuthObj:lz};async function x_e(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await lz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new U_e(r))).Body}o(x_e,"getFileStreamFromS3");function lz(e,t,r){return new v_e({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(lz,"getS3AuthObj")});var fz=M((iFe,dz)=>{"use strict";var GP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},$P=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};dz.exports={BulkLoadFileObject:GP,BulkLoadDataObject:$P}});var KP=M((aFe,mz)=>{"use strict";var VP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};mz.exports=VP});var JP=M((mFe,Pz)=>{"use strict";var my=Bn(),hy=kP(),B_e=require("needle"),bi=(H(),D(W)),lFe=wt(),pf=oe(),{handleHDBError:Jt,hdbErrors:Rz}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:Zl}=Rz,hf=Q(),YP=require("papaparse");pf.promisifyPapaParse();var Ii=require("fs-extra"),F_e=require("path"),{chain:pz}=require("stream-chain"),hz=require("stream-json/streamers/StreamArray"),Ez=require("stream-json/utils/Batch"),_z=require("stream-chain/utils/comp"),{finished:gz}=require("stream"),k_e=ue(),Az=HP(),H_e=qP(),{BulkLoadFileObject:zP,BulkLoadDataObject:q_e}=fz(),jP=AP(),{verifyBulkLoadAttributePerms:bz}=ny(),uFe=KP(),dFe=mr(),fFe=Wi(),{databases:G_e}=(Oe(),D(mt)),{coerceType:$_e}=(J_(),D(tq)),Sz="No records parsed from csv file.",Xl=`${k_e.get("HDB_ROOT")}/tmp`,{schemaRegex:V_e}=Hi(),Tz=1024*1024*2,yz=5e3,K_e={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};Pz.exports={csvDataLoad:Y_e,csvURLLoad:W_e,csvFileLoad:z_e,importFromS3:j_e};async function Y_e(e,t){let r=hy.dataObject(e);if(r)throw Jt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Nz(e.schema,e.table),i=YP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:WP.bind(null,s),dynamicTyping:!1}),a=new jP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&bz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Jt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new q_e(e.action,e.schema,e.table,i.data);return n=await Az.callOperationFunctionAsAwait(Cz,l,null),n.message===Sz?Sz:Oz(n.records,n.number_written)}catch(s){throw eu(s)}}o(Y_e,"csvDataLoad");async function W_e(e){let t=hy.urlObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Xl}/${r}`;try{await Q_e(e,r)}catch(s){throw hf.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Jt(s,Zl(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new zP(this.job_operation_function.name,e.action,e.schema,e.table,n,bi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await QP(s);return await py(n),i}catch(s){throw await py(n),eu(s)}}o(W_e,"csvURLLoad");async function z_e(e){let t=hy.fileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new zP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,bi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await QP(r)}catch(n){throw eu(n)}}o(z_e,"csvFileLoad");async function j_e(e){let t=hy.s3FileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=F_e.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Xl}/${s}`;let i=new zP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await J_e(s,e);let a=await QP(i);return await py(r),a}catch(n){throw await py(r),eu(n)}}o(j_e,"importFromS3");async function Q_e(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await B_e("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Jt(n,s,n.statusCode,bi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Z_e(r,e.csv_url),await X_e(t,r.raw)}o(Q_e,"downloadCSVFile");async function J_e(e,t){try{let r=`${Xl}/${e}`;await Ii.mkdirp(Xl),await Ii.writeFile(`${Xl}/${e}`,"",{flag:"a+"});let n=await Ii.createWriteStream(r),s=await H_e.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){hf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw hf.error(Or.S3_DOWNLOAD_ERR+" - "+r),Jt(r,Zl(Or.S3_DOWNLOAD_ERR))}}o(J_e,"downloadFileFromS3");async function X_e(e,t){try{await Ii.mkdirp(Xl),await Ii.writeFile(`${Xl}/${e}`,t)}catch(r){throw hf.error(Or.WRITE_TEMP_FILE_ERR),Jt(r,Zl(Or.DEFAULT_BULK_LOAD_ERR))}}o(X_e,"writeFileToTempFolder");async function py(e){if(e)try{await Ii.access(e),await Ii.unlink(e)}catch{hf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(py,"deleteTempFile");function Z_e(e,t){if(e.statusCode!==Rz.HTTP_STATUS_CODES.OK)throw Jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!K_e[e.headers["content-type"]])throw Jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(Z_e,"validateURLResponse");async function QP(e){try{let t;switch(e.file_type){case bi.VALID_S3_FILE_TYPES.CSV:t=await ege(e);break;case bi.VALID_S3_FILE_TYPES.JSON:t=await tge(e);break;default:throw Jt(new Error,Or.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,bi.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return Oz(t.records,t.number_written)}catch(t){throw eu(t)}}o(QP,"fileLoad");async function Iz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await my.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&bz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Jt(c);r(l)}}o(Iz,"validateChunk");async function wz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;pf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!pf.isEmpty(c)&&!pf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Az.callOperationFunctionAsAwait(Cz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Jt(c,Zl(Or.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(wz,"insertChunk");async function ege(e){let t={records:0,number_written:0},r=Nz(e.schema,e.table);try{let n=new jP,s=Ii.createReadStream(e.file_path,{highWaterMark:Tz});s.setEncoding("utf8"),await YP.parsePromise(s,Iz.bind(null,e,n),WP.bind(null,r));let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);return s=Ii.createReadStream(e.file_path,{highWaterMark:Tz}),s.setEncoding("utf8"),await YP.parsePromise(s,wz.bind(null,e,t),WP.bind(null,r)),s.destroy(),t}catch(n){throw Jt(n,Zl(Or.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(ege,"callPapaParse");function Nz(e,t){let r=G_e[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>$_e(i,s));return n}o(Nz,"createTransformMap");function WP(e,t,r){let n=e.get(r);return n?n(t):pf.autoCast(t)}o(WP,"typeFunction");async function tge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new jP,s=pz([Ii.createReadStream(e.file_path,{encoding:"utf-8"}),hz.withParser(),c=>c.value,new Ez({batchSize:yz}),_z(async c=>{await Iz(e,n,r,c)})]);await new Promise((c,l)=>{gz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);let a=pz([Ii.createReadStream(e.file_path,{encoding:"utf-8"}),hz.withParser(),c=>c.value,new Ez({batchSize:yz}),_z(async c=>{await wz(e,t,r,c)})]);return await new Promise((c,l)=>{gz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Jt(n,Zl(Or.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(tge,"insertJson");async function Cz(e){let t={};try{e.data&&e.data.length>0&&rge(e.data[0])?t=await nge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",hf.info(t.message))}catch(r){throw eu(r)}return t}o(Cz,"callBulkFileLoad");function rge(e){let t=Object.keys(e);for(let r of t)if(!V_e.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(rge,"validateColumnNames");async function nge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=my.insert;break;case"update":i=my.update;break;case"upsert":i=my.upsert;break;default:throw Jt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,bi.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=pf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw eu(a)}}o(nge,"bulkFileLoad");function Oz(e,t){return`successfully loaded ${t} of ${e} records`}o(Oz,"buildResponseMsg");function eu(e){return Jt(e,Zl(Or.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(eu,"buildTopLevelErrMsg")});var eL=M((hFe,Fz)=>{"use strict";var ZP=fn(),sge=qP(),{AsyncParser:ige}=require("json2csv"),Ey=require("stream"),hs=oe(),XP=require("fs-extra"),oge=require("path"),zs=Q(),{promisify:Mz}=require("util"),eE=oe(),{handleHDBError:_r,hdbErrors:age}=_e(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:gr}=age,{streamAsJSON:cge}=(kA(),D(gU)),{Upload:lge}=require("@aws-sdk/lib-storage"),{toCsvStream:uge}=(Po(),D(CU)),Lz=["search_by_value","search_by_hash","sql","search_by_conditions"],Dz=["json","csv"],vz="json",Uz="csv",dge="Successfully exported JSON locally.",fge="Successfully exported CSV locally.",mge=1e3,pge=ZP.searchByHash,hge=ZP.searchByValue,Ege=Mz(Ey.finished);Fz.exports={export_to_s3:Tge,export_local:_ge};async function _ge(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=xz(e);if(!hs.isEmpty(t))throw zs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(hs.isEmpty(e.path))throw zs.error(Vn.MISSING_VALUE("path")),_r(new Error,Vn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(hs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(oge.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hs.buildFolderPath(e.path,r);await gge(e.path);let s=await Bz(e);return await Sge(n,e.format,s)}o(_ge,"export_local");async function gge(e){if(zs.trace("in confirmPath"),hs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await XP.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,zs.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw zs.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(gge,"confirmPath");async function Sge(e,t,r){if(zs.trace("in saveToLocal"),eE.isEmptyOrZeroLength(e))throw _r(new Error,Vn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(eE.isEmptyOrZeroLength(t))throw _r(new Error,Vn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(eE.isEmpty(r))throw _r(new Error,Vn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===vz){let n=XP.createWriteStream(e);return cge(r).pipe(n),await Ege(n),{message:dge,path:e}}else if(t===Uz){let n=XP.createWriteStream(e),s=Ey.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new ige(i,c).fromInput(s).toOutput(n).promise(!1),{message:fge,path:e}}throw _r(new Error,Vn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(Sge,"saveToLocal");async function Tge(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Vn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Vn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Vn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Vn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Vn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=xz(e);if(!hs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Bz(e)}catch(l){throw zs.error(l),l}let n,s=await sge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Ey.PassThrough;if(e.format===Uz){i=e.s3.key+".csv";let l=uge(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===vz){i=e.s3.key+".json";let l=new Ey.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%mge===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Vn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new lge({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Tge,"export_to_s3");function xz(e){if(zs.trace("in exportCoreValidation"),hs.isEmpty(e.format))return"format missing";if(Dz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Dz.join(", ")}`;let t=e.search_operation.operation;if(hs.isEmpty(t))return"search_operation.operation missing";if(Lz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Lz.join(", ")}`}o(xz,"exportCoreValidation");async function Bz(e){zs.trace("in getRecords");let t,r;if(eE.isEmpty(e.search_operation)||eE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Vn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=hge;break;case"search_by_hash":t=pge;break;case"search_by_conditions":t=ZP.searchByConditions;break;case"sql":{let n=iy();t=Mz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Bz,"getRecords")});var Hz=M((_Fe,kz)=>{"use strict";var tL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};kz.exports=tL});var $z=M((SFe,Gz)=>{"use strict";var yge=(H(),D(W)),qz=require("moment"),Rge=require("uuid").v4,rL=class{static{o(this,"JobObject")}constructor(){this.id=Rge(),this.type=void 0,this.start_datetime=qz().valueOf(),this.created_datetime=qz().valueOf(),this.end_datetime=void 0,this.status=yge.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Gz.exports=rL});var nL=M((yFe,Jz)=>{"use strict";var Age=require("uuid").v4,zz=Bn(),jz=fn(),bge=di(),Ige=Qu(),wge=Hz(),Ct=(H(),D(W)),Nge=$z(),Cge=uS(),wi=Q(),Oge=fm(),Ef=oe(),{promisify:Pge}=require("util"),tu=require("moment"),Lge=iy(),_y=kP(),Vz=ZI(),{deleteTransactionLogsBeforeValidator:Dge}=QO(),{handleHDBError:Kz,hdbErrors:Mge,ClientError:vge}=_e(),{HTTP_STATUS_CODES:Yz}=Mge,Wz=jz.searchByValue,Uge=jz.searchByHash,xge=zz.insert,Bge=Pge(Lge.evaluateSQL),Fge=zz.update;Jz.exports={addJob:qge,updateJob:$ge,handleGetJob:kge,handleGetJobsByStartDate:Hge,getJobById:Qz};async function kge(e){if(e.id===void 0)throw new vge("'id' is required");let t=await Qz(e.id);return Ef.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(kge,"handleGetJob");async function Hge(e){try{let t=await Gge(e);if(wi.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=tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=tu(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 wi.error(r),new Error(r)}}o(Hge,"handleGetJobsByStartDate");async function qge(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ef.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return wi.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return wi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=_y.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=_y.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=_y.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=_y.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=Vz(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=Vz(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Dge(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw Kz(new Error,"Invalid service",Yz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw Kz(n,n.message,Yz.BAD_REQUEST,void 0,void 0,!0);let s=new Nge;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new bge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Wz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return wi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=Age();try{a=await Wz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return wi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return wi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Oge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await xge(l)}catch(d){return wi.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,wi.trace(d)}return t}o(qge,"addJob");async function Gge(e){let t=tu(e.from_date,tu.ISO_8601),r=tu(e.to_date,tu.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new wge(n,e.hdb_user);try{return await Bge(s)}catch(i){throw wi.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.")}}o(Gge,"getJobsInDateRange");async function Qz(e){if(Ef.isEmptyOrZeroLength(e))return Ef.errorizeMessage("Invalid job ID specified.");let t=new Ige(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Uge(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return wi.error(n),Ef.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(Qz,"getJobById");async function $ge(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ef.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=tu().valueOf());let t=new Cge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Fge(t),r}o($ge,"updateJob")});var ij=M((AFe,sj)=>{"use strict";var Xz=oe(),Pr=(H(),D(W)),Vge=require("moment"),gy=JP(),tE=Q(),Zz=nL(),ej=eL(),tj=_l(),rj=nt(),Kge=KT(),Yge=of(),{parentPort:Wge,isMainThread:nj}=require("worker_threads"),{onMessageByType:zge}=nt(),sL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function jge(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(Xz.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(Xz.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Pr.JOB_TYPE_ENUM.csv_file_load:await so(e,gy.csvFileLoad);break;case Pr.JOB_TYPE_ENUM.csv_url_load:await so(e,gy.csvURLLoad);break;case Pr.JOB_TYPE_ENUM.csv_data_load:await so(e,gy.csvDataLoad);break;case Pr.JOB_TYPE_ENUM.import_from_s3:await so(e,gy.importFromS3);break;case Pr.JOB_TYPE_ENUM.empty_trash:break;case Pr.JOB_TYPE_ENUM.export_local:await so(e,ej.export_local);break;case Pr.JOB_TYPE_ENUM.export_to_s3:await so(e,ej.export_to_s3);break;case Pr.JOB_TYPE_ENUM.delete_files_before:case Pr.JOB_TYPE_ENUM.delete_records_before:await so(e,tj.deleteFilesBefore);break;case Pr.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,tj.deleteAuditLogsBefore);break;case Pr.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,Kge.deleteTransactionLogsBefore);break;case Pr.JOB_TYPE_ENUM.restart_service:return await so(e,Yge.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(jge,"parseMessage");async function so(e,t){try{e.job.status=Pr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Vge().valueOf(),await Zz.updateJob(e.job),await Qge(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):tE.error(`There was an error running ${t.name} job with id ${e.job.id}`),tE.error(n),e.job.message=n,e.job.status=Pr.JOB_STATUS_ENUM.ERROR;try{await Zz.updateJob(e.job)}catch(s){throw tE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function Qge(e){tE.trace("launching job thread:",e),nj?rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Wge.postMessage({type:Pr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(Qge,"launchJobThread");nj&&zge(Pr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{rj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){tE.error(r)}});sj.exports={parseMessage:jge,RunnerMessage:sL}});var aj=M((IFe,oj)=>{"use strict";var Jge=oe(),iL=ue(),pc=(H(),D(W)),Xge=wt(),Zge=mr(),io=Q(),eSe=KP(),tSe=Wi();iL.initSync();oj.exports={postOperationHandler:nSe,sendOperationTransaction:rE};async function rE(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=rSe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await Zge.publishToStream(`${Xge.SUBJECT_PREFIXES.TXN}.${e.schema}`,tSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(rE,"sendOperationTransaction");function rSe(e,t,r){if(Jge.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(rSe,"convertCRUDOperationToTransaction");async function nSe(e,t,r){if(!iL.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=iL.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new eSe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await rE(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await rE(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await rE(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await rE(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(nSe,"postOperationHandler")});var Z,cj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var zO={};Ie(zO,{chooseOperation:()=>Nj,executeJob:()=>js,getOperationFunction:()=>Cj,operation:()=>pL,processLocalTransaction:()=>wj});async function wj(e,t){try{if(e.body.operation!=="read_log"&&(oE.default.log_level===Jf.INFO||oE.default.log_level===Jf.DEBUG||oE.default.log_level===Jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;yn.info(c)}}catch(n){yn.error(n)}let r=await bj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return aSe[e.body.operation]&&Tj.default.setSchemaDataToGlobal(n=>{n&&yn.error(n)}),r}function Nj(e){let t;try{t=Cj(e)}catch(s){throw yn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Ty.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Ty.default.checkASTPermissions(e,i);if(a)throw yn.error(`${lj.FORBIDDEN} from operation ${e.operation}`),yn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=Sj.default.verifyPerms(i,s);if(a)throw yn.error(`${lj.FORBIDDEN} from operation ${e.operation}`),yn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function Cj(e){if(yn.trace(`getOperationFunction with operation: ${e.operation}`),uj.has(e.operation))return uj.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function pL(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Nj(e);return wj({body:e},n)}async function cSe(e){yn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[mA]=!0;let a;switch(i.operation){case V.INSERT:a=await nu.default.insert(i);break;case V.UPDATE:a=await nu.default.update(i);break;case V.UPSERT:a=await nu.default.upsert(i);break;case V.DELETE:a=await Sf.default.deleteRecord(i);break;default:yn.warn("invalid operation in catchup");break}await sSe.postOperationHandler(i,a,e)}catch(a){yn.info("Invalid operation in transaction"),yn.error(a)}}async function js(e){(0,Aj.transformReq)(e);let t,r;try{if(r=await yy.default.addJob(e),r){t=r.createdJob,yn.info("addJob result",r);let n=new lL.default.RunnerMessage(t,e);return{message:await lL.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw yn.error(i),(0,Qs.handleHDBError)(n,i)}}function lSe(){let e=new Map;return e.set(V.INSERT,new Z(nu.default.insert)),e.set(V.UPDATE,new Z(nu.default.update)),e.set(V.UPSERT,new Z(nu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(gf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(gf.default.searchByValue)),e.set(V.SEARCH,new Z(iSe)),e.set(V.SQL,new Z(oSe)),e.set(V.CSV_DATA_LOAD,new Z(js,nE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(js,nE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(js,nE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(js,nE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(oo.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(oo.default.createSchema)),e.set(V.CREATE_TABLE,new Z(oo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(oo.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(oo.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(oo.default.dropSchema)),e.set(V.DROP_TABLE,new Z(oo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(oo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(sE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(sE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(sE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(sE.default.describeAll)),e.set(V.DELETE,new Z(Sf.default.deleteRecord)),e.set(V.ADD_USER,new Z(_f.default.addUser)),e.set(V.ALTER_USER,new Z(_f.default.alterUser)),e.set(V.DROP_USER,new Z(_f.default.dropUser)),e.set(V.LIST_USERS,new Z(_f.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(iE.default.listRoles)),e.set(V.ADD_ROLE,new Z(iE.default.addRole)),e.set(V.ALTER_ROLE,new Z(iE.default.alterRole)),e.set(V.DROP_ROLE,new Z(iE.default.dropRole)),e.set(V.USER_INFO,new Z(_f.default.userInfo)),e.set(V.READ_LOG,new Z(fj.default)),e.set(V.ADD_NODE,new Z(mj.default)),e.set(V.UPDATE_NODE,new Z(oL.default)),e.set(V.SET_NODE_REPLICATION,new Z(oL.default)),e.set(V.REMOVE_NODE,new Z(pj.default)),e.set(V.CONFIGURE_CLUSTER,new Z(hj.default)),e.set(V.PURGE_STREAM,new Z(Ej.default)),e.set(V.SET_CONFIGURATION,new Z(uL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(_j.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(gj.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Sy.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Sy.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Sy.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(js,aL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(ru.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(ru.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(ru.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(ru.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(ru.default.removeCertificate)),e.set(V.GET_KEY,new Z(ru.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(tO)),e.set(V.REMOVE_NODE_BACK,new Z(rO)),e.set(V.DELETE_FILES_BEFORE,new Z(js,Sf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(js,Sf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(js,aL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(yy.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(yy.default.handleGetJob)),e.set(V.RESTART,new Z(cL.default.restart)),e.set(V.RESTART_SERVICE,new Z(js,cL.default.restartService)),e.set(V.CATCHUP,new Z(cSe)),e.set(V.SYSTEM_INFORMATION,new Z(yj.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(js,Sf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(dj.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(IN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(wN)),e.set(V.LOGIN,new Z(HO)),e.set(V.LOGOUT,new Z(qO)),e.set(V.GET_CONFIGURATION,new Z(uL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(dL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(js,dL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(fL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(fL.default.auditModules)),e.set(V.GET_BACKUP,new Z(oo.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(XO)),e.set(V.LIST_METRICS,new Z(ZO)),e.set(V.DESCRIBE_METRIC,new Z(eP)),e.set(V.GET_STATUS,new Z(cP)),e.set(V.SET_STATUS,new Z(lP)),e.set(V.CLEAR_STATUS,new Z(aP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(hP)),e.set(V.GET_USAGE_LICENSES,new Z(SP)),e}var gf,Ty,nE,oo,sE,Sf,dj,_f,iE,Ot,oE,fj,mj,oL,pj,hj,Ej,_j,gj,Sy,aL,Sj,yy,Qs,cL,mL,nu,Tj,yj,lL,uL,dL,fL,Rj,Aj,ru,bj,Ij,lj,yn,sSe,iSe,oSe,aSe,uj,jO=ie(()=>{gf=w(fn()),Ty=w(iy()),nE=w(JP()),oo=w(iT()),sE=w(Cl()),Sf=w(_l()),dj=w(OC()),_f=w(as()),iE=w(xp()),Ot=w(WO()),oE=w(Q()),fj=w(vC()),mj=w(_T()),oL=w(aO()),pj=w(ST()),hj=w(uO()),Ej=w(dO()),_j=w(pO()),gj=w(EO()),Sy=w(bT()),aL=w(eL()),Sj=w(ny()),yy=w(nL());H();Qs=w(_e()),cL=w(of()),mL=w(require("util")),nu=w(Bn()),Tj=w(Ki()),yj=w(jd()),lL=w(ij());Id();xT();uL=w(Tt()),dL=w(KT()),fL=w(Uh()),Rj=w(ii()),Aj=w(oe());xr();ru=w(fs());Jd();rP();bj=w(HP()),Ij=w(aj());$h();Wh();cj();({HTTP_STATUS_CODES:lj}=Qs.hdbErrors),yn=oE.default.loggerWithTag("operation"),{transactToClusteringUtils:sSe}=Ij.default,iSe=mL.promisify(gf.default.search),oSe=mL.promisify(Ty.default.evaluateSQL),aSe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(wj,"processLocalTransaction");uj=lSe();Ue.operation=pL;o(Nj,"chooseOperation");o(Cj,"getOperationFunction");(0,Rj._assignPackageExport)("operation",pL);o(pL,"operation");o(cSe,"catchup");o(js,"executeJob");o(lSe,"initializeOperationFunctionMap")});var by=M((DFe,Lj)=>{"use strict";var Ry=(H(),D(W)),uSe=oe(),aE=Q(),{handleHDBError:hL,hdbErrors:Ay}=_e(),{isMainThread:dSe}=require("worker_threads"),{Readable:fSe}=require("stream"),Oj=require("os"),mSe=require("util"),pSe=CN(),hSe=mSe.promisify(pSe.authorize),Pj=(jO(),D(zO)),{createGzip:ESe,constants:_Se}=require("zlib"),gSe=[Ry.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Ry.OPERATIONS_ENUM.LOGIN,Ry.OPERATIONS_ENUM.LOGOUT];function SSe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Oj.EOL}Stack: ${e.stack} ${Oj.EOL}Terminating ${dSe?"HDB":"thread"}.`;console.error(t),aE.fatal(t),process.exit(1)}o(SSe,"handleServerUncaughtException");function TSe(e,t,r){if(aE[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 n=e.statusCode?e.statusCode:Ay.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(TSe,"serverErrorHandler");function ySe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=hL(new Error,"Invalid JSON.",Ay.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(uSe.isEmpty(e.body.operation)){let n=hL(new Error,"Request body must include an 'operation' property.",Ay.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(ySe,"reqBodyValidationHandler");function RSe(e,t,r){let n;!gSe.includes(e.body.operation)||e.body.operation===Ry.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?hSe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{aE.warn(i),aE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(hL(i,a,Ay.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(RSe,"authHandler");async function ASe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=Pj.chooseOperation(e.body);let s=await Pj.processLocalTransaction(e,n);if(s instanceof fSe&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(ESe({level:_Se.Z_BEST_SPEED})))}return s}catch(s){throw aE.error(s),s}}o(ASe,"handlePostRequest");Lj.exports={authHandler:RSe,handlePostRequest:ASe,handleServerUncaughtException:SSe,serverErrorHandler:TSe,reqBodyValidationHandler:ySe}});var Uj=M((vFe,vj)=>{"use strict";var bSe=require("fastify-plugin"),{handlePostRequest:Dj,authHandler:ISe,reqBodyValidationHandler:wSe}=by();async function NSe(e){e.decorate("hdbCore",{preValidation:[wSe,ISe],request:o(t=>Mj(Dj(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>Mj(Dj(t,r,!0)),"requestWithoutAuthentication")})}o(NSe,"hdbCore");async function Mj(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}o(Mj,"convertAsyncIterators");vj.exports=bSe(NSe)});var Bj=M((BFe,xj)=>{"use strict";var xFe=require("fs"),Iy=ue();Iy.initSync();var{CONFIG_PARAMS:EL}=(H(),D(W)),CSe=1024*1024*1024;function OSe(e){let t=Iy.get(EL.HTTP_TIMEOUT),r=Iy.get(EL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:CSe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Iy.get(EL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(OSe,"getServerOptions");xj.exports=OSe});var Hj=M((kFe,kj)=>{"use strict";var _L=ue();_L.initSync();var{CONFIG_PARAMS:Fj}=(H(),D(W));function PSe(){let e=_L.get(Fj.HTTP_CORSACCESSLIST),t=_L.get(Fj.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(PSe,"getCORSOptions");kj.exports=PSe});var $j=M((qFe,Gj)=>{"use strict";var qj=ue();qj.initSync();var LSe=(H(),D(W));function DSe(){return qj.get(LSe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(DSe,"getHeaderTimeoutConfig");Gj.exports=DSe});var SL={};Ie(SL,{customFunctionsServer:()=>USe,ready:()=>n2,start:()=>vSe});function vSe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ia||(ia=r2(t),Ue.http((await ia).server));let a=await ia,c=(0,gL.dirname)(s),l=(0,gL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!Vj.has(c)){Vj.add(c);try{a.register(BSe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:n2}}async function USe(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await xSe();let e=Qj.get(B.HTTP_SECUREPORT)>0,t;try{t=ia=await r2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function xSe(){try{gt.info("Custom Functions starting configuration."),await Jj.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function BSe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,Kj.existsSync)(e)&&r.register(jj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&&gt.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function r2(e){gt.info("Custom Functions starting buildServer.");let t=(0,Xj.default)(e),r=(0,Yj.default)(t);r.server.headersTimeout=(0,e2.default)(),r.setErrorHandler(t2.serverErrorHandler);let n=(0,Zj.default)();return n&&r.register(Wj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(zj.default),await r.register(MSe),await r.after(),Tm(r),gt.info("Custom Functions completed buildServer."),r}function n2(){if(ia)return ia.then?ia.then(e=>e.ready()):ia.ready()}var gL,Kj,Yj,Wj,zj,jj,Qj,gt,MSe,Jj,Xj,Zj,e2,t2,ia,Vj,s2=ie(()=>{gL=require("path"),Kj=require("fs"),Yj=w(require("fastify")),Wj=w(require("@fastify/cors")),zj=w(yN()),jj=w(require("@fastify/autoload")),Qj=w(ue());H();gt=w(Q()),MSe=w(Uj()),Jj=w(as()),Xj=w(Bj()),Zj=w(Hj()),e2=w($j()),t2=w(by());Po();xr();Vj=new Set;o(vSe,"start");o(USe,"customFunctionsServer");o(xSe,"setUp");o(BSe,"buildRouteFolder");o(r2,"buildServer");o(n2,"ready")});var yL={};Ie(yL,{handleApplication:()=>FSe,suppressHandleApplicationWarning:()=>kSe});function FSe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,yf.join)(n.absolutePath,"index.html");(0,Tf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,yf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,yf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,TL.default)(n,(0,Tf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(HSe(c),!c)return{status:404,body:"File not found"};let l=(0,yf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Tf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,TL.default)(n,(0,Tf.realpathSync)(l))}},{runFirst:!0})}function HSe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Tf,yf,TL,kSe,i2=ie(()=>{Tf=require("node:fs"),yf=require("node:path"),TL=w(require("send"));o(FSe,"handleApplication");kSe=!0;o(HSe,"validateNotFoundOption")});var RL={};Ie(RL,{start:()=>qSe});function qSe({override:e}){return{handleFile:o((t,r,n)=>{wy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,o2.parse)(t))){if(process.env[s]!==void 0)if(wy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)wy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var o2,wy,a2=ie(()=>{o2=require("dotenv"),wy=w(Q());o(qSe,"start")});var AL={};Ie(AL,{DataLoaderError:()=>Es,DataLoaderResult:()=>Rf,EmptyFileError:()=>Oy,FileParseError:()=>Cy,InvalidPropertyTypeError:()=>Py,MissingRequiredPropertyError:()=>cE,RecordProcessingError:()=>lE,SystemDatabaseError:()=>Ly,UnsupportedFileExtensionError:()=>Ny,handleApplication:()=>$Se,loadDataFile:()=>f2,suppressHandleApplicationWarning:()=>GSe});function $Se(e){if((0,l2.getWorkerIndex)()!==0){ao.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||f2(t,pn,Me).then(r=>{ao.debug?.("Data loader processed file: %s: %s",(0,oa.basename)(t.absolutePath),r.message)})})}async function f2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,oa.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,c2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new Ny(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Es?f:new Cy(t,f)}if(!a)throw new Oy(t);let{database:c,table:l,records:u}=a;if(!l)throw new cE(t,"table");if(!u)throw new cE(t,"records");if(!Array.isArray(u))throw new Py(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new Ly(c,l);try{let f;if(c&&s[c]&&s[c][l])ao.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])ao.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{ao.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Xe({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let ee=O.getUpdatedTime();return a.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Es)ao.error?.(`Record processing error: ${O.message}`);else{let F=new lE(d,O);ao.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),ao.info?.(A),new Rf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return ao.info?.(A),new Rf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return ao.info?.(A),new Rf(t,c,l,"success",0,A)}}catch(f){throw f instanceof Es?f:new lE(d,f)}}var oa,c2,l2,aa,u2,d2,ao,GSe,Es,Ny,Cy,Oy,cE,Py,Ly,lE,Rf,m2=ie(()=>{oa=require("node:path"),c2=require("yaml");Oe();l2=w(nt()),aa=w(Kr()),u2=w(_e()),d2=w(Q()),ao=d2.default.forComponent("dataLoader"),GSe=!0;o($Se,"handleApplication");o(f2,"loadDataFile");Es=class extends u2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=aa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},Ny=class extends Es{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,oa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Cy=class extends Es{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,oa.basename)(t)}: ${r.message}`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},Oy=class extends Es{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,oa.basename)(t)} is empty or invalid`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},cE=class extends Es{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,oa.basename)(t)} is missing required "${r}" property`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Py=class extends Es{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,oa.basename)(t)} has invalid "${r}" property, expected ${n}`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},Ly=class extends Es{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,aa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},lE=class extends Es{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,aa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Rf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var IL=M((ZFe,p2)=>{"use strict";var uE=ue();uE.initSync();var Af=require("fs-extra"),bL=require("path"),bf=(H(),D(W)),VSe=require("crypto"),KSe=require("uuid").v4;p2.exports=YSe;function YSe(){if(uE.getHdbBasePath()!==void 0){let e=bL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=bL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=bL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Af.accessSync(r),Af.accessSync(e),Af.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=KSe(),i=VSe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Af.writeFileSync(r,s),Af.writeFileSync(e,i.privateKey),Af.writeFileSync(t,i.publicKey)}else throw n}}}o(YSe,"checkJWTTokenExist")});var E2=M((tke,h2)=>{"use strict";var wL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};h2.exports={HdbInfoInsertObject:wL}});var S2=M((nke,g2)=>{"use strict";var _2=(H(),D(W)),NL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[_2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[_2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};g2.exports={UpgradeObject:NL}});var Dy=M((ike,y2)=>{"use strict";var Js=require("prompt"),If=require("chalk"),T2=Q(),Ni=require("os"),CL=kc(),OL=["yes","y"];async function WSe(e){let t=`${Ni.EOL}`+If.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ni.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}${Ni.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ni.EOL}`;Js.override=CL(["CONFIRM_UPGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:If.magenta(`${Ni.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Js.get([r])}catch(s){return T2.error("There was an error when prompting user about an upgrade."),T2.error(s),!1}return OL.includes(n.CONFIRM_UPGRADE)}o(WSe,"forceUpdatePrompt");async function zSe(e){let t=`${Ni.EOL}`+If.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}`);Js.override=CL(["CONFIRM_DOWNGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:If.magenta(`${Ni.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Js.get([r]);return OL.includes(n.CONFIRM_DOWNGRADE)}o(zSe,"forceDowngradePrompt");async function jSe(){let e=`${Ni.EOL}`+If.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Js.override=CL(["GENERATE_CERTS"]),Js.start(),Js.message=e;let t={properties:{GENERATE_CERTS:{description:If.magenta(`${Ni.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Js.get([t]);return OL.includes(r.GENERATE_CERTS)}o(jSe,"upgradeCertsPrompt");y2.exports={forceUpdatePrompt:WSe,forceDowngradePrompt:zSe,upgradeCertsPrompt:jSe}});var My=M((ake,R2)=>{"use strict";var PL=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};R2.exports=PL});var b2=M((mke,A2)=>{"use strict";var QSe=oe(),JSe=Tt(),lke=Q(),uke=require("path"),dke=require("fs"),fke=(H(),D(W));A2.exports={getOldPropsValue:XSe};function XSe(e,t,r=!1){let n=t.getRaw(e);return QSe.isNotEmptyAndHasValue(n)?n:r?JSe.getDefaultConfig(e):""}o(XSe,"getOldPropsValue")});var C2=M((hke,N2)=>{"use strict";var hc=require("path"),Ec=require("fs-extra"),ZSe=require("properties-reader"),eTe=My(),Sr=Q(),{getOldPropsValue:St}=b2(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:su}=(H(),D(W)),iu=Tt(),vy=ue(),I2=oe(),co=(H(),D(W)),LL=new eTe("3.1.0"),w2=[];function tTe(){let e=ZSe(vy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
38
+ `}getKey(){return(0,XT.createPublicKey)(this.pem)}toString(){return this.pem}},QT=class extends TypeError{static{o(this,"LicenseEncodingError")}},df=class extends TypeError{static{o(this,"InvalidLicenseError")}},fP=class extends df{static{o(this,"InvalidLicenseSignatureError")}},Yh=class extends df{static{o(this,"InvalidHeaderError")}},JT=class extends df{static{o(this,"InvalidPayloadError")}},CEe=new dP(SW.get(B.LICENSE_MODE));o(OEe,"validateLicenseSignature");o(PEe,"validateLicenseHeader");o(LEe,"valid");o(DEe,"validateLicensePayload");o(TW,"validateLicense")});var ZT={};Ie(ZT,{getActiveLicense:()=>_P,getUsageLicenses:()=>LW,getUsageLicensesOp:()=>SP,installUsageLicense:()=>EP,installUsageLicenseOp:()=>hP,isActiveLicense:()=>OW,isLicensed:()=>gP,loadAndWatchLicensesDir:()=>UEe,recordUsage:()=>PW});async function hP(e){let t=e.license;try{await EP(t)}catch(r){let n=new bW.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function EP(e){let t=TW(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new pP(`A usage license with ${r} already exists`);return en.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function OW(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function _P(){let e=IW.get(B.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(OW(n))return n}async function gP(){return await _P()!==void 0}async function PW(e){en.trace?.("Recording usage into license from analytics");let t,r=(await _P())?.id;if(r){en.trace?.("Found license to record usage into:",r);let n={};At(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(en.trace?.("Processing analytics record:",s),s.metric){case"db-read":en.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":en.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":en.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(en.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count));break;default:en.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";RW||(console.error(n),RW=!0),AW===void 0&&(AW=setInterval(()=>{en.notify(n)},MEe).unref())}}function SP(e){let t={};return e.region&&(t.region=e.region),LW(t)}function LW(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function vEe(e){en.trace?.("Loading usage license from file:",e);let t=await NW.readFile(e,{encoding:"utf-8"});try{await EP(t)}catch(r){en.error?.("Failed to install usage license from file:",e,r)}}function UEe(){let e=mP.default.join(mP.default.dirname(wW.getConfigFilePath()),"licenses");(0,CW.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:o((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",vEe)}var bW,en,IW,mP,wW,NW,CW,pP,RW,AW,MEe,Wh=ie(()=>{yW();bW=w(_e()),en=w(Q());Ps();Ca();IW=w(ue());H();Oe();mP=w(require("node:path")),wW=w(yt()),NW=w(require("node:fs/promises")),CW=require("chokidar"),pP=class extends Error{static{o(this,"ExistingLicenseError")}};o(hP,"installUsageLicenseOp");o(EP,"installUsageLicense");RW=!1,MEe=6e5;o(OW,"isActiveLicense");o(_P,"getActiveLicense");o(gP,"isLicensed");o(PW,"recordUsage");Sb(PW);o(SP,"getUsageLicensesOp");o(LW,"getUsageLicenses");o(vEe,"loadLicenseFile");o(UEe,"loadAndWatchLicensesDir")});var yP={};Ie(yP,{getRegistrationInfo:()=>TP});function TP(){return{version:DW.packageJson.version,deprecated:!0}}var DW,RP=ie(()=>{DW=w(Tt());o(TP,"getRegistrationInfo")});var vW=M((WBe,MW)=>{"use strict";var AP=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};MW.exports=AP});var xW=M((jBe,UW)=>{"use strict";var bP=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};UW.exports=bP});var wP=M((JBe,FW)=>{"use strict";var BW=vW(),xEe=xW(),{HDB_ERROR_MSGS:BEe}=Kr(),IP=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=BEe.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,n){if(r&&n){let s=`${r}_${n}`;if(this.unauthorized_access[s])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,n){let s=new BW(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new xEe(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new BW(r,n,[],i);this.unauthorized_access[a]=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}};FW.exports=IP});var ny=M((ZBe,rz)=>{"use strict";var NP=Bn(),ey=fn(),Ys=iT(),Qh=Cl(),CP=_l(),FEe=OC(),kEe=r1(),Jh=as(),ty=xp(),Cr=Q(),HEe=vC(),GEe=_T(),qEe=aO(),$Ee=ST(),VEe=uO(),KEe=dO(),YEe=pO(),WEe=EO(),OP=bT(),sa=oe(),zEe=vK(),GW=of(),Tn=(H(),D(W)),qW=EY(),jEe=jd(),$W=(Id(),D(qp)),VW=(xT(),D(Lh)),KW=yt(),Er=WO(),QEe=require("alasql"),YW=KT(),WW=Uh(),ff=fs(),zW=(Jd(),D(Qd)),PP=(rP(),D(tP)),LP=($h(),D(uP)),jW=(Wh(),D(ZT)),JEe=(RP(),D(yP)),QW=wP(),{handleHDBError:$n,hdbErrors:JW}=_e(),{HDB_ERROR_MSGS:tn,HTTP_STATUS_CODES:zh}=JW,ee=new Map,XW="delete",fc="insert",Ws="read",Jl="update",jh="describe",kW=Qh.describeSchema.name,HW=Qh.describeTable.name,ZW={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},XEe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},ZEe="catchup",e_e="handleGetJob",t_e="handleGetJobsByStartDate",ry={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},r_e=[Ys.createTable.name,Ys.createAttribute.name,Ys.dropTable.name,Ys.dropAttribute.name],ez={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},se=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};ee.set(NP.insert.name,new se(!1,[fc]));ee.set(NP.update.name,new se(!1,[Jl]));ee.set(NP.upsert.name,new se(!1,[fc,Jl]));ee.set(ey.searchByConditions.name,new se(!1,[Ws]));ee.set(ey.searchByHash.name,new se(!1,[Ws]));ee.set(ey.searchByValue.name,new se(!1,[Ws]));ee.set(ey.search.name,new se(!1,[Ws]));ee.set(Ys.createSchema.name,new se(!0,[]));ee.set(Ys.createTable.name,new se(!0,[]));ee.set(Ys.createAttribute.name,new se(!1,[fc]));ee.set(Ys.dropSchema.name,new se(!0,[]));ee.set(Ys.dropTable.name,new se(!0,[]));ee.set(Ys.dropAttribute.name,new se(!0,[]));ee.set(Qh.describeSchema.name,new se(!1,[Ws]));ee.set(Qh.describeTable.name,new se(!1,[Ws]));ee.set(CP.deleteRecord.name,new se(!1,[XW]));ee.set(Jh.addUser.name,new se(!0,[]));ee.set(Jh.alterUser.name,new se(!0,[]));ee.set(Jh.dropUser.name,new se(!0,[]));ee.set(Jh.listUsersExternal.name,new se(!0,[]));ee.set(ty.listRoles.name,new se(!0,[]));ee.set(ty.addRole.name,new se(!0,[]));ee.set(ty.alterRole.name,new se(!0,[]));ee.set(ty.dropRole.name,new se(!0,[]));ee.set(HEe.name,new se(!0,[]));ee.set(GEe.name,new se(!0,[]));ee.set(qEe.name,new se(!0,[]));ee.set($Ee.name,new se(!0,[]));ee.set(VEe.name,new se(!0,[]));ee.set(KEe.name,new se(!0,[]));ee.set(OP.setRoutes.name,new se(!0,[]));ee.set(OP.getRoutes.name,new se(!0,[]));ee.set(OP.deleteRoutes.name,new se(!0,[]));ee.set(KW.setConfiguration.name,new se(!0,[]));ee.set(YEe.clusterStatus.name,new se(!0,[]));ee.set(WEe.name,new se(!0,[]));ee.set(CP.deleteFilesBefore.name,new se(!0,[]));ee.set(CP.deleteAuditLogsBefore.name,new se(!0,[]));ee.set(GW.restart.name,new se(!0,[]));ee.set(GW.restartService.name,new se(!0,[]));ee.set(FEe.name,new se(!0,[]));ee.set(kEe.name,new se(!0,[Ws]));ee.set(jEe.systemInformation.name,new se(!0,[]));ee.set(KW.getConfiguration.name,new se(!0,[]));ee.set(YW.readTransactionLog.name,new se(!0,[]));ee.set(YW.deleteTransactionLogsBefore.name,new se(!0,[]));ee.set(WW.installModules.name,new se(!0,[]));ee.set(WW.auditModules.name,new se(!0,[]));ee.set(ff.createCsr.name,new se(!0,[]));ee.set(ff.signCertificate.name,new se(!0,[]));ee.set(ff.listCertificates.name,new se(!0,[]));ee.set(ff.addCertificate.name,new se(!0,[]));ee.set(ff.removeCertificate.name,new se(!0,[]));ee.set(ff.getKey.name,new se(!0,[]));ee.set(zW.addNodeBack.name,new se(!0,[]));ee.set(zW.removeNodeBack.name,new se(!0,[]));ee.set(PP.getOp.name,new se(!1,[Ws]));ee.set(PP.listMetricsOp.name,new se(!1,[Ws]));ee.set(PP.describeMetricOp.name,new se(!1,[Ws]));ee.set(LP.clear.name,new se(!0,[]));ee.set(LP.get.name,new se(!0,[]));ee.set(LP.set.name,new se(!0,[]));ee.set(jW.installUsageLicenseOp.name,new se(!0,[]));ee.set(jW.getUsageLicensesOp.name,new se(!0,[]));ee.set($W.createTokens.name,new se(!1,[]));ee.set($W.refreshOperationToken.name,new se(!1,[]));ee.set(VW.login.name,new se(!1,[]));ee.set(VW.logout.name,new se(!1,[]));ee.set(Er.customFunctionsStatus.name,new se(!0,[]));ee.set(Er.getCustomFunctions.name,new se(!0,[]));ee.set(Er.getComponents.name,new se(!0,[]));ee.set(Er.getComponentFile.name,new se(!0,[]));ee.set(Er.setComponentFile.name,new se(!0,[]));ee.set(Er.dropComponent.name,new se(!0,[]));ee.set(Er.getCustomFunction.name,new se(!0,[]));ee.set(Er.setCustomFunction.name,new se(!0,[]));ee.set(Er.dropCustomFunction.name,new se(!0,[]));ee.set(Er.addComponent.name,new se(!0,[]));ee.set(Er.dropCustomFunctionProject.name,new se(!0,[]));ee.set(Er.packageComponent.name,new se(!0,[]));ee.set(Er.deployComponent.name,new se(!0,[]));ee.set(Er.addSSHKey.name,new se(!0,[]));ee.set(Er.updateSSHKey.name,new se(!0,[]));ee.set(Er.deleteSSHKey.name,new se(!0,[]));ee.set(Er.listSSHKeys.name,new se(!0,[]));ee.set(Er.setSSHKnownHosts.name,new se(!0,[]));ee.set(Er.getSSHKnownHosts.name,new se(!0,[]));ee.set(JEe.getRegistrationInfo.name,new se(!1,[]));ee.set(Jh.userInfo.name,new se(!1,[]));ee.set(Qh.describeAll.name,new se(!1,[]));ee.set(e_e,new se(!1,[]));ee.set(t_e,new se(!0,[]));ee.set(ZEe,new se(!0,[]));ee.set(ry.CSV_DATA_LOAD,new se(!1,[fc,Jl]));ee.set(ry.CSV_URL_LOAD,new se(!1,[fc,Jl]));ee.set(ry.CSV_FILE_LOAD,new se(!1,[fc,Jl]));ee.set(ry.IMPORT_FROM_S3,new se(!1,[fc,Jl]));ee.set(ez.EXPORT_TO_S3,new se(!0,[]));ee.set(ez.EXPORT_LOCAL,new se(!0,[]));ee.set(Tn.VALID_SQL_OPS_ENUM.DELETE,new se(!1,[XW]));ee.set(Tn.VALID_SQL_OPS_ENUM.SELECT,new se(!1,[Ws]));ee.set(Tn.VALID_SQL_OPS_ENUM.INSERT,new se(!1,[fc]));ee.set(Tn.VALID_SQL_OPS_ENUM.UPDATE,new se(!1,[Jl]));rz.exports={verifyPerms:s_e,verifyPermsAst:n_e,verifyBulkLoadAttributePerms:o_e};function n_e(e,t,r){if(sa.isEmptyOrZeroLength(e))throw Cr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(sa.isEmptyOrZeroLength(t))throw Cr.info("verify_perms_ast has an empty user parameter"),$n(new Error);if(sa.isEmptyOrZeroLength(r))throw Cr.info("verify_perms_ast has a null operation parameter"),$n(new Error);try{let n=new QW,s=new zEe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Cr.info("No schemas defined in verifyPermsAst(), will not continue."),$n(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&ZW[r])throw $n(new Error,tn.DROP_SYSTEM,zh.FORBIDDEN);if(c&&!l)return null;let u=qW.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof QEe.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=tz(t,r,a,n);return d||(a.forEach((f,m)=>{for(let p=0;p<f.length;p++){let h=s.getAttributesBySchemaTableName(m,f[p]),E=MP(t.role.permission,m,f[p]);DP(h,E,r,f[p],m,n)}}),n.getPermsResponse())}catch(n){throw $n(n)}}o(n_e,"verifyPermsAst");function s_e(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Cr.info("null required parameter in verifyPerms"),$n(new Error,tn.DEFAULT_INVALID_REQUEST,zh.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new QW;if(sa.isEmptyOrZeroLength(e.hdb_user?.role)||sa.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Cr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(tn.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(Tn.SYSTEM_SCHEMA_NAME)||s===Tn.SYSTEM_SCHEMA_NAME;if(l&&d&&XEe[e.operation]&&(i===Tn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Tn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Tn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&ZW[r])throw $n(new Error,tn.DROP_SYSTEM,zh.FORBIDDEN);if(l&&!d||u===!0&&(r===Ys.createSchema.name||r===Ys.dropSchema.name))return null;if(r_e.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=qW.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===kW||r===HW)&&!f.super_user){if(s===Tn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(tn.SCHEMA_PERM_ERROR(s));if(r===kW&&(!f[s]||!f[s][jh]))return c.handleInvalidItem(tn.SCHEMA_NOT_FOUND(s));if(r===HW&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][jh]))return c.handleInvalidItem(tn.TABLE_NOT_FOUND(s,i))}let m=tz(e.hdb_user,r,a,c,n);if(m)return m;if(ee.get(r)&&ee.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Tn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Tn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Tn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(A=>A.attribute),e.get_attributes=E)}let p=i_e(e),h=MP(e.hdb_user?.role?.permission,s,i);return DP(p,h,r,i,s,c,n),c.getPermsResponse()}o(s_e,"verifyPerms");function tz(e,t,r,n,s){if(sa.arrayHasEmptyValues([e,t,r]))throw Cr.info("hasPermissions has an invalid parameter"),$n(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||ee.get(t).requires_su))return null;if(!ee.get(t))throw Cr.info(`operation ${t} not found.`),$n(new Error,tn.OP_NOT_FOUND(t),zh.BAD_REQUEST);if(ee.get(t)&&ee.get(t).requires_su)return Cr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(tn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][jh]===!1){n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(tn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[jh]===!1)n.addInvalidItem(tn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=ee.get(t).perms;!sa.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(Cr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=tn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Cr.error(p),Cr.error(m),$n(JW.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}o(tz,"hasPermissions");function DP(e,t,r,n,s,i,a){if(!e||!t)throw Cr.info("no attributes specified in checkAttributePerms."),$n(new Error);let c=ee.get(r).perms;if(!c||c==="")throw Cr.info(`no permissions found for ${r} in checkAttributePerms().`),$n(new Error);if(sa.isEmptyOrZeroLength(t))return Cr.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[jh]===!1){i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Tn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==Ws)throw $n(new Error,tn.SYSTEM_TIMESTAMP_PERMS_ERR,zh.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(tn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(DP,"checkAttributePerms");function i_e(e){let t=new Set;try{if(e.action)return t;if(e.operation===Tn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){Cr.info(r)}return t}o(i_e,"getRecordAttributes");function MP(e,t,r){let n=new Map;if(sa.isEmpty(e))return Cr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Cr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(MP,"getAttributePermissions");function o_e(e,t,r,n,s,i,a){let c=new Set(i),l=MP(e,n,s);DP(c,l,t,s,n,a,r)}o(o_e,"verifyBulkLoadAttributePerms")});var iy=M((tFe,az)=>{"use strict";az.exports={evaluateSQL:S_e,processAST:oz,convertSQLToAST:iz,checkASTPermissions:sz};var a_e=Bn(),nz=require("util"),c_e=nz.callbackify(a_e.insert),l_e=fn().search,u_e=Pq().update,d_e=nz.callbackify(u_e),f_e=Dq().convertDelete,mc=require("alasql"),m_e=ny(),sy=Q(),p_e=Og(),h_e=oe(),Xh=(H(),D(W)),{hdbErrors:E_e,handleHDBError:vP}=_e(),{HTTP_STATUS_CODES:UP}=E_e;p_e(mc);var __e=403,g_e="There was a problem performing this insert. Please check the logs and try again.",xP=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function S_e(e,t){let r=e.parsed_sql_object;if(!r){r=iz(e.sql);let n,s=r.ast.statements[0];if(s instanceof mc.yy.Insert?n=s.into.databaseid:s instanceof mc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof mc.yy.Update||s instanceof mc.yy.Delete?n=s.table.databaseid:sy.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof mc.yy.Select)&&h_e.isEmptyOrZeroLength(n))return t("No schema specified",null)}oz(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(S_e,"evaluateSQL");function sz(e,t){let r;try{r=m_e.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(sz,"checkASTPermissions");function iz(e){let t=new xP;if(!e)throw vP(new Error,"The 'sql' parameter is missing from the request body",UP.BAD_REQUEST);try{let r=e.trim(),n=mc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
39
+ `);throw n[1]?vP(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,UP.BAD_REQUEST):vP(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",UP.BAD_REQUEST)}return t}o(iz,"convertSQLToAST");function oz(e,t,r){try{let n=T_e;if(!e.bypass_auth&&!t.permissions_checked){let i=sz(e,t);if(i&&i.length>0)return r(__e,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Xh.VALID_SQL_OPS_ENUM.SELECT:n=l_e,s=t.ast.statements[0];break;case Xh.VALID_SQL_OPS_ENUM.INSERT:n=y_e;break;case Xh.VALID_SQL_OPS_ENUM.UPDATE:n=d_e;break;case Xh.VALID_SQL_OPS_ENUM.DELETE:n=f_e;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(oz,"processAST");function T_e(e,t){sy.info(e),t("unknown sql statement")}o(T_e,"nullFunction");function y_e({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=R_e(i,e.values)}catch(a){return r(a)}c_e(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){sy.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(y_e,"convertInsert");function R_e(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 n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=mc.compile(`SELECT ${s.toString()} AS [${Xh.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw sy.error(r),new Error(g_e)}}o(R_e,"createDataObjects")});var qP=M((iFe,dz)=>{var ly=require("clone"),uy=ft(),A_e=oe(),ay=(H(),D(W)),nFe=Q(),BP=require("fs"),kP=require("joi"),{string:cy}=kP.types(),{hdbErrors:b_e,handleHDBError:oy}=_e(),{HDB_ERROR_MSGS:sFe,HTTP_STATUS_CODES:FP}=b_e,{commonValidators:mf}=Hi(),cz=" is required",I_e=["insert","update","upsert"],HP={database:{presence:!1,format:mf.schema_format,length:mf.schema_length},schema:{presence:!1,format:mf.schema_format,length:mf.schema_length},table:{presence:!0,format:mf.schema_format,length:mf.schema_length},action:{inclusion:{within:I_e,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},w_e={schema:cy.required(),table:cy.required(),action:cy.valid("insert","update","upsert")},{AWS_ACCESS_KEY:N_e,AWS_SECRET:C_e,AWS_BUCKET:O_e,AWS_FILE_KEY:P_e,REGION:L_e}=ay.S3_BUCKET_AUTH_KEYS,D_e={s3:{presence:!0},[`s3.${N_e}`]:{presence:!0,type:"String"},[`s3.${C_e}`]:{presence:!0,type:"String"},[`s3.${O_e}`]:{presence:!0,type:"String"},[`s3.${P_e}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${L_e}`]:{presence:!0,type:"String"}},lz=ly(HP);lz.data.presence={message:cz};var uz=ly(HP);uz.file_path.presence={message:cz};var M_e=Object.assign(ly(HP),D_e),GP=ly(w_e);GP.csv_url=cy.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();GP.passthrough_headers=kP.object();function v_e(e){let t=uy.validateObject(e,lz);return dy(e,t)}o(v_e,"dataObject");function U_e(e){let t=uy.validateBySchema(e,kP.object(GP));return dy(e,t)}o(U_e,"urlObject");function x_e(e){let t=uy.validateObject(e,uz);return dy(e,t)}o(x_e,"fileObject");function B_e(e){let t=uy.validateObject(e,M_e);return dy(e,t)}o(B_e,"s3FileObject");function dy(e,t){if(!t){let r=A_e.checkGlobalSchemaTable(e.schema,e.table);if(r)return oy(new Error,r,FP.BAD_REQUEST);if(e.operation===ay.OPERATIONS_ENUM.CSV_FILE_LOAD)try{BP.accessSync(e.file_path,BP.constants.R_OK|BP.constants.F_OK)}catch(n){return n.code===ay.NODE_ERROR_CODES.ENOENT?oy(n,`No such file or directory ${n.path}`,FP.BAD_REQUEST):n.code===ay.NODE_ERROR_CODES.EACCES?oy(n,`Permission denied ${n.path}`,FP.BAD_REQUEST):oy(n)}}return t}o(dy,"postValidateChecks");dz.exports={dataObject:v_e,urlObject:U_e,fileObject:x_e,s3FileObject:B_e}});var $P=M((aFe,fz)=>{"use strict";var Zh=Q(),fy=(H(),D(W));async function F_e(e,t,r,n=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let s;try{return s=await e(t),r&&await r(t,s,n),t.operation===fy.OPERATIONS_ENUM.INSERT||t.operation===fy.OPERATIONS_ENUM.UPDATE||t.operation===fy.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===fy.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Zh.info(i.message),i):i.http_resp_msg?(Zh.error(`Error calling operation: ${e.name}`),Zh.error(i.http_resp_msg),i):(Zh.error(`Error calling operation: ${e.name}`),Zh.error(i),i)}}o(F_e,"callOperationFunctionAsAwait");fz.exports={callOperationFunctionAsAwait:F_e}});var VP=M((lFe,pz)=>{"use strict";var{S3:k_e,GetObjectCommand:H_e}=require("@aws-sdk/client-s3");pz.exports={getFileStreamFromS3:G_e,getS3AuthObj:mz};async function G_e(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await mz(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new H_e(r))).Body}o(G_e,"getFileStreamFromS3");function mz(e,t,r){return new k_e({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(mz,"getS3AuthObj")});var Ez=M((dFe,hz)=>{"use strict";var KP=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},YP=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};hz.exports={BulkLoadFileObject:KP,BulkLoadDataObject:YP}});var zP=M((mFe,_z)=>{"use strict";var WP=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};_z.exports=WP});var eL=M((SFe,vz)=>{"use strict";var my=Bn(),hy=qP(),q_e=require("needle"),bi=(H(),D(W)),hFe=wt(),pf=oe(),{handleHDBError:Jt,hdbErrors:wz}=_e(),{HTTP_STATUS_CODES:rn,HDB_ERROR_MSGS:Or,CHECK_LOGS_WRAPPER:Zl}=wz,hf=Q(),jP=require("papaparse");pf.promisifyPapaParse();var Ii=require("fs-extra"),$_e=require("path"),{chain:gz}=require("stream-chain"),Sz=require("stream-json/streamers/StreamArray"),Tz=require("stream-json/utils/Batch"),yz=require("stream-chain/utils/comp"),{finished:Rz}=require("stream"),V_e=ue(),Nz=$P(),K_e=VP(),{BulkLoadFileObject:JP,BulkLoadDataObject:Y_e}=Ez(),XP=wP(),{verifyBulkLoadAttributePerms:Cz}=ny(),EFe=zP(),_Fe=mr(),gFe=Wi(),{databases:W_e}=(Oe(),D(mt)),{coerceType:z_e}=(J_(),D(sG)),Az="No records parsed from csv file.",Xl=`${V_e.get("HDB_ROOT")}/tmp`,{schemaRegex:j_e}=Hi(),bz=1024*1024*2,Iz=5e3,Q_e={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vz.exports={csvDataLoad:J_e,csvURLLoad:X_e,csvFileLoad:Z_e,importFromS3:ege};async function J_e(e,t){let r=hy.dataObject(e);if(r)throw Jt(r,r.message,rn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=Lz(e.schema,e.table),i=jP.parse(e.data,{header:!0,skipEmptyLines:!0,transform:QP.bind(null,s),dynamicTyping:!1}),a=new XP;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&Cz(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Jt(new Error,c,rn.BAD_REQUEST,void 0,void 0,!0);let l=new Y_e(e.action,e.schema,e.table,i.data);return n=await Nz.callOperationFunctionAsAwait(Dz,l,null),n.message===Az?Az:Mz(n.records,n.number_written)}catch(s){throw eu(s)}}o(J_e,"csvDataLoad");async function X_e(e){let t=hy.urlObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Xl}/${r}`;try{await tge(e,r)}catch(s){throw hf.error(Or.DOWNLOAD_FILE_ERR(r)+" - "+s),Jt(s,Zl(Or.DOWNLOAD_FILE_ERR(r)))}try{let s=new JP(this.job_operation_function.name,e.action,e.schema,e.table,n,bi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await ZP(s);return await py(n),i}catch(s){throw await py(n),eu(s)}}o(X_e,"csvURLLoad");async function Z_e(e){let t=hy.fileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r=new JP(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,bi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await ZP(r)}catch(n){throw eu(n)}}o(Z_e,"csvFileLoad");async function ege(e){let t=hy.s3FileObject(e);if(t)throw Jt(t,t.message,rn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=$_e.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Xl}/${s}`;let i=new JP(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await rge(s,e);let a=await ZP(i);return await py(r),a}catch(n){throw await py(r),eu(n)}}o(ege,"importFromS3");async function tge(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await q_e("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw Jt(n,s,n.statusCode,bi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}sge(r,e.csv_url),await nge(t,r.raw)}o(tge,"downloadCSVFile");async function rge(e,t){try{let r=`${Xl}/${e}`;await Ii.mkdirp(Xl),await Ii.writeFile(`${Xl}/${e}`,"",{flag:"a+"});let n=await Ii.createWriteStream(r),s=await K_e.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){hf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw hf.error(Or.S3_DOWNLOAD_ERR+" - "+r),Jt(r,Zl(Or.S3_DOWNLOAD_ERR))}}o(rge,"downloadFileFromS3");async function nge(e,t){try{await Ii.mkdirp(Xl),await Ii.writeFile(`${Xl}/${e}`,t)}catch(r){throw hf.error(Or.WRITE_TEMP_FILE_ERR),Jt(r,Zl(Or.DEFAULT_BULK_LOAD_ERR))}}o(nge,"writeFileToTempFolder");async function py(e){if(e)try{await Ii.access(e),await Ii.unlink(e)}catch{hf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(py,"deleteTempFile");function sge(e,t){if(e.statusCode!==wz.HTTP_STATUS_CODES.OK)throw Jt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,rn.BAD_REQUEST);if(!Q_e[e.headers["content-type"]])throw Jt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,rn.BAD_REQUEST);if(!e.raw)throw Jt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,rn.BAD_REQUEST)}o(sge,"validateURLResponse");async function ZP(e){try{let t;switch(e.file_type){case bi.VALID_S3_FILE_TYPES.CSV:t=await ige(e);break;case bi.VALID_S3_FILE_TYPES.JSON:t=await oge(e);break;default:throw Jt(new Error,Or.DEFAULT_BULK_LOAD_ERR,rn.BAD_REQUEST,bi.LOG_LEVELS.ERROR,Or.INVALID_FILE_EXT_ERR(e))}return Mz(t.records,t.number_written)}catch(t){throw eu(t)}}o(ZP,"fileLoad");async function Oz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await my.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&Cz(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Jt(c);r(l)}}o(Oz,"validateChunk");async function Pz(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;pf.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!pf.isEmpty(c)&&!pf.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await Nz.callOperationFunctionAsAwait(Dz,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Jt(c,Zl(Or.INSERT_CSV_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.INSERT_CSV_ERR+" - "+c);r(l)}}o(Pz,"insertChunk");async function ige(e){let t={records:0,number_written:0},r=Lz(e.schema,e.table);try{let n=new XP,s=Ii.createReadStream(e.file_path,{highWaterMark:bz});s.setEncoding("utf8"),await jP.parsePromise(s,Oz.bind(null,e,n),QP.bind(null,r));let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);return s=Ii.createReadStream(e.file_path,{highWaterMark:bz}),s.setEncoding("utf8"),await jP.parsePromise(s,Pz.bind(null,e,t),QP.bind(null,r)),s.destroy(),t}catch(n){throw Jt(n,Zl(Or.PAPA_PARSE_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.PAPA_PARSE_ERR+n)}}o(ige,"callPapaParse");function Lz(e,t){let r=W_e[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>z_e(i,s));return n}o(Lz,"createTransformMap");function QP(e,t,r){let n=e.get(r);return n?n(t):pf.autoCast(t)}o(QP,"typeFunction");async function oge(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new XP,s=gz([Ii.createReadStream(e.file_path,{encoding:"utf-8"}),Sz.withParser(),c=>c.value,new Tz({batchSize:Iz}),yz(async c=>{await Oz(e,n,r,c)})]);await new Promise((c,l)=>{Rz(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Jt(new Error,i,rn.BAD_REQUEST);let a=gz([Ii.createReadStream(e.file_path,{encoding:"utf-8"}),Sz.withParser(),c=>c.value,new Tz({batchSize:Iz}),yz(async c=>{await Pz(e,t,r,c)})]);return await new Promise((c,l)=>{Rz(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw Jt(n,Zl(Or.INSERT_JSON_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.INSERT_JSON_ERR+n)}}o(oge,"insertJson");async function Dz(e){let t={};try{e.data&&e.data.length>0&&age(e.data[0])?t=await cge(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",hf.info(t.message))}catch(r){throw eu(r)}return t}o(Dz,"callBulkFileLoad");function age(e){let t=Object.keys(e);for(let r of t)if(!j_e.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(age,"validateColumnNames");async function cge(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=my.insert;break;case"update":i=my.update;break;case"upsert":i=my.upsert;break;default:throw Jt(new Error,Or.INVALID_ACTION_PARAM_ERR(n),rn.BAD_REQUEST,bi.LOG_LEVELS.ERROR,Or.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=pf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw eu(a)}}o(cge,"bulkFileLoad");function Mz(e,t){return`successfully loaded ${t} of ${e} records`}o(Mz,"buildResponseMsg");function eu(e){return Jt(e,Zl(Or.DEFAULT_BULK_LOAD_ERR),rn.INTERNAL_SERVER_ERROR,bi.LOG_LEVELS.ERROR,Or.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(eu,"buildTopLevelErrMsg")});var nL=M((yFe,qz)=>{"use strict";var rL=fn(),lge=VP(),{AsyncParser:uge}=require("json2csv"),Ey=require("stream"),hs=oe(),tL=require("fs-extra"),dge=require("path"),zs=Q(),{promisify:Bz}=require("util"),eE=oe(),{handleHDBError:_r,hdbErrors:fge}=_e(),{HDB_ERROR_MSGS:Vn,HTTP_STATUS_CODES:gr}=fge,{streamAsJSON:mge}=(kA(),D(yU)),{Upload:pge}=require("@aws-sdk/lib-storage"),{toCsvStream:hge}=(Po(),D(LU)),Uz=["search_by_value","search_by_hash","sql","search_by_conditions"],xz=["json","csv"],Fz="json",kz="csv",Ege="Successfully exported JSON locally.",_ge="Successfully exported CSV locally.",gge=1e3,Sge=rL.searchByHash,Tge=rL.searchByValue,yge=Bz(Ey.finished);qz.exports={export_to_s3:Ige,export_local:Rge};async function Rge(e){zs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Hz(e);if(!hs.isEmpty(t))throw zs.error(t),_r(new Error,t,gr.BAD_REQUEST,void 0,void 0,!0);if(hs.isEmpty(e.path))throw zs.error(Vn.MISSING_VALUE("path")),_r(new Error,Vn.MISSING_VALUE("path"),gr.BAD_REQUEST,void 0,void 0,!0);let r=(hs.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(dge.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=hs.buildFolderPath(e.path,r);await Age(e.path);let s=await Gz(e);return await bge(n,e.format,s)}o(Rge,"export_local");async function Age(e){if(zs.trace("in confirmPath"),hs.isEmptyOrZeroLength(e))throw _r(new Error,`Invalid path: ${e}`,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tL.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,zs.error(n),_r(new Error,n,gr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw zs.error(r),_r(new Error,r,gr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(Age,"confirmPath");async function bge(e,t,r){if(zs.trace("in saveToLocal"),eE.isEmptyOrZeroLength(e))throw _r(new Error,Vn.INVALID_VALUE("file_path"),gr.BAD_REQUEST,void 0,void 0,!0);if(eE.isEmptyOrZeroLength(t))throw _r(new Error,Vn.INVALID_VALUE("Source format"),gr.BAD_REQUEST,void 0,void 0,!0);if(eE.isEmpty(r))throw _r(new Error,Vn.NOT_FOUND("Data"),gr.BAD_REQUEST,void 0,void 0,!0);if(t===Fz){let n=tL.createWriteStream(e);return mge(r).pipe(n),await yge(n),{message:Ege,path:e}}else if(t===kz){let n=tL.createWriteStream(e),s=Ey.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new uge(i,c).fromInput(s).toOutput(n).promise(!1),{message:_ge,path:e}}throw _r(new Error,Vn.INVALID_VALUE("format"),gr.BAD_REQUEST)}o(bge,"saveToLocal");async function Ige(e){if(!e.s3||Object.keys(e.s3).length===0)throw _r(new Error,Vn.MISSING_VALUE("S3 object"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw _r(new Error,Vn.MISSING_VALUE("aws_access_key_id"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw _r(new Error,Vn.MISSING_VALUE("aws_secret_access_key"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.bucket))throw _r(new Error,Vn.MISSING_VALUE("bucket"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.key))throw _r(new Error,Vn.MISSING_VALUE("key"),gr.BAD_REQUEST);if(hs.isEmptyOrZeroLength(e.s3.region))throw _r(new Error,Vn.MISSING_VALUE("region"),gr.BAD_REQUEST);let t=Hz(e);if(!hs.isEmpty(t))throw _r(new Error,t,gr.BAD_REQUEST);zs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Gz(e)}catch(l){throw zs.error(l),l}let n,s=await lge.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Ey.PassThrough;if(e.format===kz){i=e.s3.key+".csv";let l=hge(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===Fz){i=e.s3.key+".json";let l=new Ey.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%gge===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw _r(new Error,Vn.INVALID_VALUE("format"),gr.BAD_REQUEST);return new pge({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Ige,"export_to_s3");function Hz(e){if(zs.trace("in exportCoreValidation"),hs.isEmpty(e.format))return"format missing";if(xz.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${xz.join(", ")}`;let t=e.search_operation.operation;if(hs.isEmpty(t))return"search_operation.operation missing";if(Uz.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${Uz.join(", ")}`}o(Hz,"exportCoreValidation");async function Gz(e){zs.trace("in getRecords");let t,r;if(eE.isEmpty(e.search_operation)||eE.isEmptyOrZeroLength(e.search_operation.operation))throw _r(new Error,Vn.INVALID_VALUE("Search operation"),gr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Tge;break;case"search_by_hash":t=Sge;break;case"search_by_conditions":t=rL.searchByConditions;break;case"sql":{let n=iy();t=Bz(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zs.error(r),_r(new Error,r,gr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(Gz,"getRecords")});var Vz=M((AFe,$z)=>{"use strict";var sL=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};$z.exports=sL});var Wz=M((IFe,Yz)=>{"use strict";var wge=(H(),D(W)),Kz=require("moment"),Nge=require("uuid").v4,iL=class{static{o(this,"JobObject")}constructor(){this.id=Nge(),this.type=void 0,this.start_datetime=Kz().valueOf(),this.created_datetime=Kz().valueOf(),this.end_datetime=void 0,this.status=wge.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};Yz.exports=iL});var oL=M((NFe,tj)=>{"use strict";var Cge=require("uuid").v4,Xz=Bn(),Zz=fn(),Oge=di(),Pge=Qu(),Lge=Vz(),Ct=(H(),D(W)),Dge=Wz(),Mge=uS(),wi=Q(),vge=fm(),Ef=oe(),{promisify:Uge}=require("util"),tu=require("moment"),xge=iy(),_y=qP(),zz=ZI(),{deleteTransactionLogsBeforeValidator:Bge}=QO(),{handleHDBError:jz,hdbErrors:Fge,ClientError:kge}=_e(),{HTTP_STATUS_CODES:Qz}=Fge,Jz=Zz.searchByValue,Hge=Zz.searchByHash,Gge=Xz.insert,qge=Uge(xge.evaluateSQL),$ge=Xz.update;tj.exports={addJob:Yge,updateJob:zge,handleGetJob:Vge,handleGetJobsByStartDate:Kge,getJobById:ej};async function Vge(e){if(e.id===void 0)throw new kge("'id' is required");let t=await ej(e.id);return Ef.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(Vge,"handleGetJob");async function Kge(e){try{let t=await Wge(e);if(wi.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=tu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=tu(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 wi.error(r),new Error(r)}}o(Kge,"handleGetJobsByStartDate");async function Yge(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ef.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return wi.info(d),t.error=d,t}if(!Ct.JOB_TYPE_ENUM[e.operation])return wi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ct.OPERATIONS_ENUM.CSV_FILE_LOAD:n=_y.fileObject(e);break;case Ct.OPERATIONS_ENUM.CSV_URL_LOAD:n=_y.urlObject(e);break;case Ct.OPERATIONS_ENUM.CSV_DATA_LOAD:n=_y.dataObject(e);break;case Ct.OPERATIONS_ENUM.IMPORT_FROM_S3:n=_y.s3FileObject(e);break;case Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=zz(e,"date");break;case Ct.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=zz(e,"timestamp");break;case Ct.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Bge(e);break;case Ct.OPERATIONS_ENUM.RESTART_SERVICE:if(Ct.HDB_PROCESS_SERVICES[e.service]===void 0)throw jz(new Error,"Invalid service",Qz.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw jz(n,n.message,Qz.BAD_REQUEST,void 0,void 0,!0);let s=new Dge;s.type=e.operation===Ct.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ct.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Oge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await Jz(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return wi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=Cge();try{a=await Jz(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return wi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return wi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new vge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Gge(l)}catch(d){return wi.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,wi.trace(d)}return t}o(Yge,"addJob");async function Wge(e){let t=tu(e.from_date,tu.ISO_8601),r=tu(e.to_date,tu.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 n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Lge(n,e.hdb_user);try{return await qge(s)}catch(i){throw wi.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.")}}o(Wge,"getJobsInDateRange");async function ej(e){if(Ef.isEmptyOrZeroLength(e))return Ef.errorizeMessage("Invalid job ID specified.");let t=new Pge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Hge(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return wi.error(n),Ef.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(ej,"getJobById");async function zge(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ef.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ct.JOB_STATUS_ENUM.COMPLETE||e.status===Ct.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=tu().valueOf());let t=new Mge(Ct.SYSTEM_SCHEMA_NAME,Ct.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await $ge(t),r}o(zge,"updateJob")});var lj=M((OFe,cj)=>{"use strict";var rj=oe(),Pr=(H(),D(W)),jge=require("moment"),gy=eL(),tE=Q(),nj=oL(),sj=nL(),ij=_l(),oj=nt(),Qge=KT(),Jge=of(),{parentPort:Xge,isMainThread:aj}=require("worker_threads"),{onMessageByType:Zge}=nt(),aL=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function eSe(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(rj.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(rj.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Pr.JOB_TYPE_ENUM.csv_file_load:await so(e,gy.csvFileLoad);break;case Pr.JOB_TYPE_ENUM.csv_url_load:await so(e,gy.csvURLLoad);break;case Pr.JOB_TYPE_ENUM.csv_data_load:await so(e,gy.csvDataLoad);break;case Pr.JOB_TYPE_ENUM.import_from_s3:await so(e,gy.importFromS3);break;case Pr.JOB_TYPE_ENUM.empty_trash:break;case Pr.JOB_TYPE_ENUM.export_local:await so(e,sj.export_local);break;case Pr.JOB_TYPE_ENUM.export_to_s3:await so(e,sj.export_to_s3);break;case Pr.JOB_TYPE_ENUM.delete_files_before:case Pr.JOB_TYPE_ENUM.delete_records_before:await so(e,ij.deleteFilesBefore);break;case Pr.JOB_TYPE_ENUM.delete_audit_logs_before:await so(e,ij.deleteAuditLogsBefore);break;case Pr.JOB_TYPE_ENUM.delete_transaction_logs_before:await so(e,Qge.deleteTransactionLogsBefore);break;case Pr.JOB_TYPE_ENUM.restart_service:return await so(e,Jge.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(eSe,"parseMessage");async function so(e,t){try{e.job.status=Pr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=jge().valueOf(),await nj.updateJob(e.job),await tSe(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):tE.error(`There was an error running ${t.name} job with id ${e.job.id}`),tE.error(n),e.job.message=n,e.job.status=Pr.JOB_STATUS_ENUM.ERROR;try{await nj.updateJob(e.job)}catch(s){throw tE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(so,"runJob");async function tSe(e){tE.trace("launching job thread:",e),aj?oj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Xge.postMessage({type:Pr.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(tSe,"launchJobThread");aj&&Zge(Pr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{oj.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Pr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){tE.error(r)}});cj.exports={parseMessage:eSe,RunnerMessage:aL}});var dj=M((LFe,uj)=>{"use strict";var rSe=oe(),cL=ue(),pc=(H(),D(W)),nSe=wt(),sSe=mr(),io=Q(),iSe=zP(),oSe=Wi();cL.initSync();uj.exports={postOperationHandler:cSe,sendOperationTransaction:rE};async function rE(e,t,r,n){if(e.schema===pc.SYSTEM_SCHEMA_NAME)return;let s=aSe(e,t,r);s&&(io.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await sSe.publishToStream(`${nSe.SUBJECT_PREFIXES.TXN}.${e.schema}`,oSe.createNatsTableStreamName(e.schema,e.table),n,s))}o(rE,"sendOperationTransaction");function aSe(e,t,r){if(rSe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===pc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(aSe,"convertCRUDOperationToTransaction");async function cSe(e,t,r){if(!cL.get(pc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;io.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=cL.get(pc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new iSe(t.txn_time,n,s);switch(e.operation){case pc.OPERATIONS_ENUM.INSERT:try{await rE(e,t.inserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for insert."),io.error(a)}break;case pc.OPERATIONS_ENUM.DELETE:try{await rE(e,t.deleted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for delete."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPDATE:try{await rE(e,t.update_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for update."),io.error(a)}break;case pc.OPERATIONS_ENUM.UPSERT:try{await rE(e,t.upserted_hashes,i,r)}catch(a){io.error("There was an error calling clustering postOperationHandler for upsert."),io.error(a)}break;default:break}return t}o(cSe,"postOperationHandler")});var Z,fj=ie(()=>{Z=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var zO={};Ie(zO,{chooseOperation:()=>Lj,executeJob:()=>js,getOperationFunction:()=>Dj,operation:()=>_L,processLocalTransaction:()=>Pj});async function Pj(e,t){try{if(e.body.operation!=="read_log"&&(oE.default.log_level===Jf.INFO||oE.default.log_level===Jf.DEBUG||oE.default.log_level===Jf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;yn.info(c)}}catch(n){yn.error(n)}let r=await Cj.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return fSe[e.body.operation]&&bj.default.setSchemaDataToGlobal(n=>{n&&yn.error(n)}),r}function Lj(e){let t;try{t=Dj(e)}catch(s){throw yn.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=Ty.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Ty.default.checkASTPermissions(e,i);if(a)throw yn.error(`${mj.FORBIDDEN} from operation ${e.operation}`),yn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=Aj.default.verifyPerms(i,s);if(a)throw yn.error(`${mj.FORBIDDEN} from operation ${e.operation}`),yn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Qs.handleHDBError)(new Error,a,Qs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Qs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function Dj(e){if(yn.trace(`getOperationFunction with operation: ${e.operation}`),pj.has(e.operation))return pj.get(e.operation);throw(0,Qs.handleHDBError)(new Error,Qs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Qs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function _L(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=Lj(e);return Pj({body:e},n)}async function mSe(e){yn.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[mA]=!0;let a;switch(i.operation){case V.INSERT:a=await nu.default.insert(i);break;case V.UPDATE:a=await nu.default.update(i);break;case V.UPSERT:a=await nu.default.upsert(i);break;case V.DELETE:a=await Sf.default.deleteRecord(i);break;default:yn.warn("invalid operation in catchup");break}await lSe.postOperationHandler(i,a,e)}catch(a){yn.info("Invalid operation in transaction"),yn.error(a)}}async function js(e){(0,Nj.transformReq)(e);let t,r;try{if(r=await yy.default.addJob(e),r){t=r.createdJob,yn.info("addJob result",r);let n=new fL.default.RunnerMessage(t,e);return{message:await fL.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw yn.error(i),(0,Qs.handleHDBError)(n,i)}}function pSe(){let e=new Map;return e.set(V.INSERT,new Z(nu.default.insert)),e.set(V.UPDATE,new Z(nu.default.update)),e.set(V.UPSERT,new Z(nu.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new Z(gf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new Z(gf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new Z(gf.default.searchByValue)),e.set(V.SEARCH,new Z(uSe)),e.set(V.SQL,new Z(dSe)),e.set(V.CSV_DATA_LOAD,new Z(js,nE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new Z(js,nE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new Z(js,nE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new Z(js,nE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new Z(oo.default.createSchema)),e.set(V.CREATE_DATABASE,new Z(oo.default.createSchema)),e.set(V.CREATE_TABLE,new Z(oo.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new Z(oo.default.createAttribute)),e.set(V.DROP_SCHEMA,new Z(oo.default.dropSchema)),e.set(V.DROP_DATABASE,new Z(oo.default.dropSchema)),e.set(V.DROP_TABLE,new Z(oo.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new Z(oo.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new Z(sE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new Z(sE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new Z(sE.default.describeTable)),e.set(V.DESCRIBE_ALL,new Z(sE.default.describeAll)),e.set(V.DELETE,new Z(Sf.default.deleteRecord)),e.set(V.ADD_USER,new Z(_f.default.addUser)),e.set(V.ALTER_USER,new Z(_f.default.alterUser)),e.set(V.DROP_USER,new Z(_f.default.dropUser)),e.set(V.LIST_USERS,new Z(_f.default.listUsersExternal)),e.set(V.LIST_ROLES,new Z(iE.default.listRoles)),e.set(V.ADD_ROLE,new Z(iE.default.addRole)),e.set(V.ALTER_ROLE,new Z(iE.default.alterRole)),e.set(V.DROP_ROLE,new Z(iE.default.dropRole)),e.set(V.USER_INFO,new Z(_f.default.userInfo)),e.set(V.READ_LOG,new Z(Ej.default)),e.set(V.ADD_NODE,new Z(_j.default)),e.set(V.UPDATE_NODE,new Z(lL.default)),e.set(V.SET_NODE_REPLICATION,new Z(lL.default)),e.set(V.REMOVE_NODE,new Z(gj.default)),e.set(V.CONFIGURE_CLUSTER,new Z(Sj.default)),e.set(V.PURGE_STREAM,new Z(Tj.default)),e.set(V.SET_CONFIGURATION,new Z(mL.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new Z(yj.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new Z(Rj.default)),e.set(V.CLUSTER_SET_ROUTES,new Z(Sy.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new Z(Sy.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new Z(Sy.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new Z(js,uL.default.export_to_s3)),e.set(V.CREATE_CSR,new Z(ru.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new Z(ru.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new Z(ru.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new Z(ru.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new Z(ru.default.removeCertificate)),e.set(V.GET_KEY,new Z(ru.default.getKey)),e.set(V.ADD_NODE_BACK,new Z(tO)),e.set(V.REMOVE_NODE_BACK,new Z(rO)),e.set(V.DELETE_FILES_BEFORE,new Z(js,Sf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new Z(js,Sf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new Z(js,uL.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new Z(yy.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new Z(yy.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new Z(TP)),e.set(V.RESTART,new Z(dL.default.restart)),e.set(V.RESTART_SERVICE,new Z(js,dL.default.restartService)),e.set(V.CATCHUP,new Z(mSe)),e.set(V.SYSTEM_INFORMATION,new Z(Ij.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new Z(js,Sf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new Z(hj.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new Z(IN)),e.set(V.REFRESH_OPERATION_TOKEN,new Z(wN)),e.set(V.LOGIN,new Z(HO)),e.set(V.LOGOUT,new Z(GO)),e.set(V.GET_CONFIGURATION,new Z(mL.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new Z(Ot.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new Z(Ot.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new Z(Ot.default.getComponentFile)),e.set(V.GET_COMPONENTS,new Z(Ot.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new Z(Ot.default.setComponentFile)),e.set(V.DROP_COMPONENT,new Z(Ot.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new Z(Ot.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new Z(Ot.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new Z(Ot.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.addComponent)),e.set(V.ADD_COMPONENT,new Z(Ot.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new Z(Ot.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Z(Ot.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new Z(Ot.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new Z(pL.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new Z(js,pL.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new Z(hL.default.installModules)),e.set(V.AUDIT_NODE_MODULES,new Z(hL.default.auditModules)),e.set(V.GET_BACKUP,new Z(oo.default.getBackup)),e.set(V.ADD_SSH_KEY,new Z(Ot.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new Z(Ot.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new Z(Ot.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new Z(Ot.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new Z(Ot.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new Z(Ot.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new Z(XO)),e.set(V.LIST_METRICS,new Z(ZO)),e.set(V.DESCRIBE_METRIC,new Z(eP)),e.set(V.GET_STATUS,new Z(cP)),e.set(V.SET_STATUS,new Z(lP)),e.set(V.CLEAR_STATUS,new Z(aP)),e.set(V.INSTALL_USAGE_LICENSE,new Z(hP)),e.set(V.GET_USAGE_LICENSES,new Z(SP)),e}var gf,Ty,nE,oo,sE,Sf,hj,_f,iE,Ot,oE,Ej,_j,lL,gj,Sj,Tj,yj,Rj,Sy,uL,Aj,yy,Qs,dL,EL,nu,bj,Ij,fL,mL,pL,hL,wj,Nj,ru,Cj,Oj,mj,yn,lSe,uSe,dSe,fSe,pj,jO=ie(()=>{gf=w(fn()),Ty=w(iy()),nE=w(eL()),oo=w(iT()),sE=w(Cl()),Sf=w(_l()),hj=w(OC()),_f=w(as()),iE=w(xp()),Ot=w(WO()),oE=w(Q()),Ej=w(vC()),_j=w(_T()),lL=w(aO()),gj=w(ST()),Sj=w(uO()),Tj=w(dO()),yj=w(pO()),Rj=w(EO()),Sy=w(bT()),uL=w(nL()),Aj=w(ny()),yy=w(oL());H();Qs=w(_e()),dL=w(of()),EL=w(require("util")),nu=w(Bn()),bj=w(Ki()),Ij=w(jd()),fL=w(lj());Id();xT();mL=w(yt()),pL=w(KT()),hL=w(Uh()),wj=w(ii()),Nj=w(oe());xr();ru=w(fs());Jd();rP();Cj=w($P()),Oj=w(dj());$h();Wh();RP();fj();({HTTP_STATUS_CODES:mj}=Qs.hdbErrors),yn=oE.default.loggerWithTag("operation"),{transactToClusteringUtils:lSe}=Oj.default,uSe=EL.promisify(gf.default.search),dSe=EL.promisify(Ty.default.evaluateSQL),fSe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};o(Pj,"processLocalTransaction");pj=pSe();Ue.operation=_L;o(Lj,"chooseOperation");o(Dj,"getOperationFunction");(0,wj._assignPackageExport)("operation",_L);o(_L,"operation");o(mSe,"catchup");o(js,"executeJob");o(pSe,"initializeOperationFunctionMap")});var by=M((FFe,Uj)=>{"use strict";var Ry=(H(),D(W)),hSe=oe(),aE=Q(),{handleHDBError:gL,hdbErrors:Ay}=_e(),{isMainThread:ESe}=require("worker_threads"),{Readable:_Se}=require("stream"),Mj=require("os"),gSe=require("util"),SSe=CN(),TSe=gSe.promisify(SSe.authorize),vj=(jO(),D(zO)),{createGzip:ySe,constants:RSe}=require("zlib"),ASe=[Ry.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,Ry.OPERATIONS_ENUM.LOGIN,Ry.OPERATIONS_ENUM.LOGOUT];function bSe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Mj.EOL}Stack: ${e.stack} ${Mj.EOL}Terminating ${ESe?"HDB":"thread"}.`;console.error(t),aE.fatal(t),process.exit(1)}o(bSe,"handleServerUncaughtException");function ISe(e,t,r){if(aE[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 n=e.statusCode?e.statusCode:Ay.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(ISe,"serverErrorHandler");function wSe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=gL(new Error,"Invalid JSON.",Ay.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(hSe.isEmpty(e.body.operation)){let n=gL(new Error,"Request body must include an 'operation' property.",Ay.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(wSe,"reqBodyValidationHandler");function NSe(e,t,r){let n;!ASe.includes(e.body.operation)||e.body.operation===Ry.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?TSe(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{aE.warn(i),aE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(gL(i,a,Ay.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(NSe,"authHandler");async function CSe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=vj.chooseOperation(e.body);let s=await vj.processLocalTransaction(e,n);if(s instanceof _Se&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(ySe({level:RSe.Z_BEST_SPEED})))}return s}catch(s){throw aE.error(s),s}}o(CSe,"handlePostRequest");Uj.exports={authHandler:NSe,handlePostRequest:CSe,handleServerUncaughtException:bSe,serverErrorHandler:ISe,reqBodyValidationHandler:wSe}});var kj=M((HFe,Fj)=>{"use strict";var OSe=require("fastify-plugin"),{handlePostRequest:xj,authHandler:PSe,reqBodyValidationHandler:LSe}=by();async function DSe(e){e.decorate("hdbCore",{preValidation:[LSe,PSe],request:o(t=>Bj(xj(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>Bj(xj(t,r,!0)),"requestWithoutAuthentication")})}o(DSe,"hdbCore");async function Bj(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}o(Bj,"convertAsyncIterators");Fj.exports=OSe(DSe)});var Gj=M(($Fe,Hj)=>{"use strict";var qFe=require("fs"),Iy=ue();Iy.initSync();var{CONFIG_PARAMS:SL}=(H(),D(W)),MSe=1024*1024*1024;function vSe(e){let t=Iy.get(SL.HTTP_TIMEOUT),r=Iy.get(SL.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:MSe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:Iy.get(SL.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(vSe,"getServerOptions");Hj.exports=vSe});var Vj=M((KFe,$j)=>{"use strict";var TL=ue();TL.initSync();var{CONFIG_PARAMS:qj}=(H(),D(W));function USe(){let e=TL.get(qj.HTTP_CORSACCESSLIST),t=TL.get(qj.HTTP_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=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(USe,"getCORSOptions");$j.exports=USe});var Wj=M((WFe,Yj)=>{"use strict";var Kj=ue();Kj.initSync();var xSe=(H(),D(W));function BSe(){return Kj.get(xSe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(BSe,"getHeaderTimeoutConfig");Yj.exports=BSe});var RL={};Ie(RL,{customFunctionsServer:()=>HSe,ready:()=>a2,start:()=>kSe});function kSe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){ia||(ia=o2(t),Ue.http((await ia).server));let a=await ia,c=(0,yL.dirname)(s),l=(0,yL.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!zj.has(c)){zj.add(c);try{a.register(qSe(c,l))}catch(u){if(u.message==="Root plugin has already booted")gt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:a2}}async function HSe(){try{gt.info("In Custom Functions Fastify server"+process.cwd()),gt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),gt.debug(`Custom Functions server process ${process.pid} starting up.`),await GSe();let e=e2.get(B.HTTP_SECUREPORT)>0,t;try{t=ia=await o2(e)}catch(r){throw gt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw gt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){gt.error(`Custom Functions ${process.pid} Error: ${e}`),gt.error(e),process.exit(1)}}async function GSe(){try{gt.info("Custom Functions starting configuration."),await t2.setUsersWithRolesCache(),gt.info("Custom Functions completed configuration.")}catch(e){gt.error(e)}}function qSe(e,t){return async function(r){try{gt.info("Custom Functions starting buildRoutes"),gt.trace("Loading fastify routes folder "+e),(0,jj.existsSync)(e)&&r.register(Zj.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:gt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?gt.error(s.message):s&&gt.error(s),a()})}catch(n){gt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function o2(e){gt.info("Custom Functions starting buildServer.");let t=(0,r2.default)(e),r=(0,Qj.default)(t);r.server.headersTimeout=(0,s2.default)(),r.setErrorHandler(i2.serverErrorHandler);let n=(0,n2.default)();return n&&r.register(Jj.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(Xj.default),await r.register(FSe),await r.after(),Tm(r),gt.info("Custom Functions completed buildServer."),r}function a2(){if(ia)return ia.then?ia.then(e=>e.ready()):ia.ready()}var yL,jj,Qj,Jj,Xj,Zj,e2,gt,FSe,t2,r2,n2,s2,i2,ia,zj,c2=ie(()=>{yL=require("path"),jj=require("fs"),Qj=w(require("fastify")),Jj=w(require("@fastify/cors")),Xj=w(yN()),Zj=w(require("@fastify/autoload")),e2=w(ue());H();gt=w(Q()),FSe=w(kj()),t2=w(as()),r2=w(Gj()),n2=w(Vj()),s2=w(Wj()),i2=w(by());Po();xr();zj=new Set;o(kSe,"start");o(HSe,"customFunctionsServer");o(GSe,"setUp");o(qSe,"buildRouteFolder");o(o2,"buildServer");o(a2,"ready")});var bL={};Ie(bL,{handleApplication:()=>$Se,suppressHandleApplicationWarning:()=>VSe});function $Se(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,yf.join)(n.absolutePath,"index.html");(0,Tf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,yf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,yf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let a=t.get(n.pathname);if(!a){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(a=r.get(n.pathname))}if(!a){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(a=t.get(`${n.pathname}.${f}`),a)break}if(a)return{handlesHeaders:!0,body:(0,AL.default)(n,(0,Tf.realpathSync)(a))};if(i)return s(n);let c=e.options.get(["notFound"]);if(KSe(c),!c)return{status:404,body:"File not found"};let l=(0,yf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Tf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,AL.default)(n,(0,Tf.realpathSync)(l))}},{runFirst:!0})}function KSe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Tf,yf,AL,VSe,l2=ie(()=>{Tf=require("node:fs"),yf=require("node:path"),AL=w(require("send"));o($Se,"handleApplication");VSe=!0;o(KSe,"validateNotFoundOption")});var IL={};Ie(IL,{start:()=>YSe});function YSe({override:e}){return{handleFile:o((t,r,n)=>{wy.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,u2.parse)(t))){if(process.env[s]!==void 0)if(wy.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)wy.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var u2,wy,d2=ie(()=>{u2=require("dotenv"),wy=w(Q());o(YSe,"start")});var wL={};Ie(wL,{DataLoaderError:()=>Es,DataLoaderResult:()=>Rf,EmptyFileError:()=>Oy,FileParseError:()=>Cy,InvalidPropertyTypeError:()=>Py,MissingRequiredPropertyError:()=>cE,RecordProcessingError:()=>lE,SystemDatabaseError:()=>Ly,UnsupportedFileExtensionError:()=>Ny,handleApplication:()=>zSe,loadDataFile:()=>E2,suppressHandleApplicationWarning:()=>WSe});function zSe(e){if((0,m2.getWorkerIndex)()!==0){ao.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||E2(t,pn,Me).then(r=>{ao.debug?.("Data loader processed file: %s: %s",(0,oa.basename)(t.absolutePath),r.message)})})}async function E2({contents:e,absolutePath:t,stats:r},n,s){let i=(0,oa.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,f2.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new Ny(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof Es?f:new Cy(t,f)}if(!a)throw new Oy(t);let{database:c,table:l,records:u}=a;if(!l)throw new cE(t,"table");if(!u)throw new cE(t,"records");if(!Array.isArray(u))throw new Py(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new Ly(c,l);try{let f;if(c&&s[c]&&s[c][l])ao.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])ao.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{ao.debug?.(`Table ${d} not found, creating new table`);let A=[];if(u.length>0){let S=u[0];Object.keys(S).map(R=>{let N={name:R,type:typeof S[R]};return R==="id"&&(N.isPrimaryKey=!0),N}).forEach(R=>{A.push(R)})}f=await Xe({database:c,table:l,attributes:A})}let m=u.length,p=0,h=0,E=0,g=100;for(let A=0;A<u.length;A+=g){let S=u.slice(A,A+g),R=[];for(let N of S)R.push(async()=>{try{let O=null,F=N.id;if(F!==void 0&&(O=await f.get(F)),!O)return p++,f.put(N);let te=O.getUpdatedTime();return a.mtime>te?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(O){if(O instanceof Es)ao.error?.(`Record processing error: ${O.message}`);else{let F=new lE(d,O);ao.error?.(`Record processing error: ${F.message}`)}return Promise.resolve({inserted:0,updated:0,error:O.message})}});await Promise.all(R.map(N=>N()))}if(p>0||h>0){let A=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(A+=` (${E} records skipped)`),ao.info?.(A),new Rf(t,c,l,"success",p+h,A)}else if(E>0){let A=`All ${E} records in ${d} already up-to-date`;return ao.info?.(A),new Rf(t,c,l,"skipped",m,A)}else{let A=`No records to process in ${d}`;return ao.info?.(A),new Rf(t,c,l,"success",0,A)}}catch(f){throw f instanceof Es?f:new lE(d,f)}}var oa,f2,m2,aa,p2,h2,ao,WSe,Es,Ny,Cy,Oy,cE,Py,Ly,lE,Rf,_2=ie(()=>{oa=require("node:path"),f2=require("yaml");Oe();m2=w(nt()),aa=w(Kr()),p2=w(_e()),h2=w(Q()),ao=h2.default.forComponent("dataLoader"),WSe=!0;o(zSe,"handleApplication");o(E2,"loadDataFile");Es=class extends p2.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=aa.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},Ny=class extends Es{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,oa.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},Cy=class extends Es{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,oa.basename)(t)}: ${r.message}`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},Oy=class extends Es{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,oa.basename)(t)} is empty or invalid`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},cE=class extends Es{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,oa.basename)(t)} is missing required "${r}" property`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},Py=class extends Es{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,oa.basename)(t)} has invalid "${r}" property, expected ${n}`,aa.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},Ly=class extends Es{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,aa.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},lE=class extends Es{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,aa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Rf=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var CL=M((ike,g2)=>{"use strict";var uE=ue();uE.initSync();var Af=require("fs-extra"),NL=require("path"),bf=(H(),D(W)),jSe=require("crypto"),QSe=require("uuid").v4;g2.exports=JSe;function JSe(){if(uE.getHdbBasePath()!==void 0){let e=NL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=NL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=NL.join(uE.getHdbBasePath(),bf.LICENSE_KEY_DIR_NAME,bf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Af.accessSync(r),Af.accessSync(e),Af.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=QSe(),i=jSe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Af.writeFileSync(r,s),Af.writeFileSync(e,i.privateKey),Af.writeFileSync(t,i.publicKey)}else throw n}}}o(JSe,"checkJWTTokenExist")});var T2=M((ake,S2)=>{"use strict";var OL=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};S2.exports={HdbInfoInsertObject:OL}});var A2=M((lke,R2)=>{"use strict";var y2=(H(),D(W)),PL=class{static{o(this,"UpgradeObject")}constructor(t,r){this[y2.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[y2.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};R2.exports={UpgradeObject:PL}});var Dy=M((dke,I2)=>{"use strict";var Js=require("prompt"),If=require("chalk"),b2=Q(),Ni=require("os"),LL=kc(),DL=["yes","y"];async function XSe(e){let t=`${Ni.EOL}`+If.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ni.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}${Ni.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ni.EOL}`;Js.override=LL(["CONFIRM_UPGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:If.magenta(`${Ni.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Js.get([r])}catch(s){return b2.error("There was an error when prompting user about an upgrade."),b2.error(s),!1}return DL.includes(n.CONFIRM_UPGRADE)}o(XSe,"forceUpdatePrompt");async function ZSe(e){let t=`${Ni.EOL}`+If.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ni.EOL}`);Js.override=LL(["CONFIRM_DOWNGRADE"]),Js.start(),Js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:If.magenta(`${Ni.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Js.get([r]);return DL.includes(n.CONFIRM_DOWNGRADE)}o(ZSe,"forceDowngradePrompt");async function eTe(){let e=`${Ni.EOL}`+If.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Js.override=LL(["GENERATE_CERTS"]),Js.start(),Js.message=e;let t={properties:{GENERATE_CERTS:{description:If.magenta(`${Ni.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Js.get([t]);return DL.includes(r.GENERATE_CERTS)}o(eTe,"upgradeCertsPrompt");I2.exports={forceUpdatePrompt:XSe,forceDowngradePrompt:ZSe,upgradeCertsPrompt:eTe}});var My=M((mke,w2)=>{"use strict";var ML=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};w2.exports=ML});var C2=M((Ske,N2)=>{"use strict";var tTe=oe(),rTe=yt(),hke=Q(),Eke=require("path"),_ke=require("fs"),gke=(H(),D(W));N2.exports={getOldPropsValue:nTe};function nTe(e,t,r=!1){let n=t.getRaw(e);return tTe.isNotEmptyAndHasValue(n)?n:r?rTe.getDefaultConfig(e):""}o(nTe,"getOldPropsValue")});var D2=M((yke,L2)=>{"use strict";var hc=require("path"),Ec=require("fs-extra"),sTe=require("properties-reader"),iTe=My(),Sr=Q(),{getOldPropsValue:St}=C2(),{HDB_SETTINGS_NAMES:Se,CONFIG_PARAMS:su}=(H(),D(W)),iu=yt(),vy=ue(),O2=oe(),co=(H(),D(W)),vL=new iTe("3.1.0"),P2=[];function oTe(){let e=sTe(vy.get(Se.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),Sr.info(t);let r=` ;Settings for the HarperDB process.
40
40
 
41
41
  ;The directory selected during install where the database files reside.
42
42
  ${Se.HDB_ROOT_KEY} = ${St(Se.HDB_ROOT_KEY,e)}
@@ -105,12 +105,12 @@ ${Se.CUSTOM_FUNCTIONS_PORT_KEY} = ${iu.getDefaultConfig(su.HTTP_PORT)}
105
105
  ${Se.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${hc.join(St(Se.HDB_ROOT_KEY,e),"custom_functions")}
106
106
  ;Set the max number of processes HarperDB will start for the Custom Functions server
107
107
  ${Se.MAX_CUSTOM_FUNCTION_PROCESSES} = ${iu.getDefaultConfig(su.HTTP_THREADS)}
108
- `,n=vy.get("settings_path"),s=hc.dirname(n),i=hc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Ec.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Ec.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Ec.copySync(i,n),c}vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(tTe,"updateSettingsFile310");function rTe(){let e=hc.join(I2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),t=hc.join(I2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.REG_KEY_FILE_NAME),r=hc.join(vy.getHdbBasePath(),co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),n=hc.join(r,co.LICENSE_FILE_NAME),s=hc.join(r,co.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Ec.mkdirpSync(r);try{Ec.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Ec.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Ec.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Ec.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(rTe,"moveLicenseFiles");LL.sync_functions.push(tTe);LL.sync_functions.push(rTe);w2.push(LL);N2.exports=w2});var M2=M((_ke,D2)=>{"use strict";var _s=_t(),{insertRecords:nTe}=ol(),sTe=Cn(),_c=$t(),iTe=oe(),ca=Q(),oTe=oe(),lo=require("fs-extra"),la=require("path"),aTe=require("cli-progress"),dE=require("assert"),cTe=require("pino"),lTe=ue();D2.exports=uTe;var Uy,O2,xy,DL,Rn,fE=!1;async function uTe(e=!0){return Uy=lTe.getHdbBasePath(),O2=la.join(Uy,"schema"),xy=la.join(Uy,"4_0_0_upgrade_tmp"),DL=la.join(Uy,"transactions"),console.info("Reindexing upgrade started for schemas"),ca.notify("Reindexing upgrade started for schemas"),await P2(O2,!1,e),await lo.pathExists(DL)&&(console.info(`
108
+ `,n=vy.get("settings_path"),s=hc.dirname(n),i=hc.join(s,"3_1_0_upgrade_settings.bak");try{Sr.info(`Backing up old settings file to: ${i}`),Ec.copySync(n,i)}catch(c){throw Sr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{Sr.info("New settings file values for 3.1.0 upgrade:",r),Sr.info(`Creating new/upgraded settings file at '${n}'`),Ec.writeFileSync(n,r),Sr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),Sr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),Sr.error(c),Ec.copySync(i,n),c}vy.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),Sr.info(a),a}o(oTe,"updateSettingsFile310");function aTe(){let e=hc.join(O2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),t=hc.join(O2.getHomeDir(),co.HDB_HOME_DIR_NAME,co.LICENSE_KEY_DIR_NAME,co.REG_KEY_FILE_NAME),r=hc.join(vy.getHdbBasePath(),co.LICENSE_KEY_DIR_NAME,co.LICENSE_FILE_NAME),n=hc.join(r,co.LICENSE_FILE_NAME),s=hc.join(r,co.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),Sr.info(i);let a="Creating .license directory";console.log(a),Sr.info(a),Ec.mkdirpSync(r);try{Ec.accessSync(e);try{let c="Moving licence file";console.log(c),Sr.info(c),Ec.moveSync(e,n);let l="License file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving license file failed";console.error(l),Sr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),Sr.warn(l)}try{Ec.accessSync(t);try{let c="Moving registration file";console.log(c),Sr.info(c),Ec.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),Sr.info(l)}catch{let l="moving registration file failed";console.error(l),Sr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),Sr.warn(l)}}o(aTe,"moveLicenseFiles");vL.sync_functions.push(oTe);vL.sync_functions.push(aTe);P2.push(vL);L2.exports=P2});var B2=M((Ake,x2)=>{"use strict";var _s=_t(),{insertRecords:cTe}=ol(),lTe=Cn(),_c=$t(),uTe=oe(),ca=Q(),dTe=oe(),lo=require("fs-extra"),la=require("path"),fTe=require("cli-progress"),dE=require("assert"),mTe=require("pino"),pTe=ue();x2.exports=hTe;var Uy,M2,xy,UL,Rn,fE=!1;async function hTe(e=!0){return Uy=pTe.getHdbBasePath(),M2=la.join(Uy,"schema"),xy=la.join(Uy,"4_0_0_upgrade_tmp"),UL=la.join(Uy,"transactions"),console.info("Reindexing upgrade started for schemas"),ca.notify("Reindexing upgrade started for schemas"),await v2(M2,!1,e),await lo.pathExists(UL)&&(console.info(`
109
109
 
110
- Reindexing upgrade started for transaction logs`),ca.notify("Reindexing upgrade started for transaction logs"),await P2(DL,!0,e)),ca.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(fE?", but errors occurred":"")}o(uTe,"reindexUpgrade");async function P2(e,t,r){let n=await lo.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=la.join(e,a.toString());if(a===".DS_Store")continue;let l=await lo.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&lo.statSync(la.join(c,f)).isDirectory())try{await dTe(a,f,t),Rn.info(`Reindexing started for ${a}.${f}`),ca.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await mTe(a,f,c,t,r),Rn.info(`Reindexing completed for ${a}.${f}`),ca.notify(`Reindexing completed for ${a}.${f}`)}catch(m){fE=!0,m.schema_path=c,m.table_name=f,ca.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ca.error(m),Rn.error(m),console.error(m)}}}if(!fE)try{await lo.rm(xy,{recursive:!0})}catch{}}o(P2,"processTables");async function dTe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=la.join(xy,s);await lo.ensureDir(xy),await lo.writeFile(i,""),Rn=cTe({level:"debug",formatters:{bindings(){}}},i)}o(dTe,"initPinoLogger");var fTe=20;async function mTe(e,t,r,n,s){let i;try{i=await _s.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ca.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Rn.error(S);return}throw S}let a=ETe(i.dbis),c=_s.openDBI(i,a),l=Object.keys(i.dbis),u=_s.statDBI(i,a);Rn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new aTe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await _s.createEnvironment(r,t,!1);_s.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>fTe&&await p();await p()}catch(S){throw fE=!0,Rn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>pTe(f,O))):S=await nTe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,F=m.length;O<F;O++){let{key:ee,value:q}=m[O];Rn.info(`Record hash value: ${ee} hash: ${a}`);let k;n?k=S[O]:k=S.written_hashes.indexOf(ee)>-1,dE(k,!0),hTe(f,a,q[a],n),Rn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ca.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Rn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=_s.statDBI(i,a),E=_s.statDBI(f,a);if(Rn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),dE.deepStrictEqual(h.entryCount,E.entryCount),await _s.closeEnvironment(i),await _s.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=la.join(r,t),R=la.join(S,"data.mdb"),N=la.join(S,"lock.mdb");await lo.unlink(R),await lo.unlink(N),await lo.rmdir(S),Rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await _s.openEnvironment(r,t),A=_s.statDBI(g,a);Rn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(A)}`),dE.deepStrictEqual(A.entryCount,E.entryCount),await _s.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(mTe,"processTable");async function pTe(e,t){_s.initializeDBIs(e,_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_c.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),oTe.isEmpty(t.user_name)||e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(pTe,"insertTransaction");function hTe(e,t,r,n){let i=e.dbis[t].get(r);dE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!iTe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];L2(e,c,f,r)}else L2(e,c,l,r)}o(hTe,"validateIndices");function L2(e,t,r,n){try{let s=!1,i=sTe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Rn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),dE.deepStrictEqual(s,!0)}catch(s){fE=!0,Rn.error(s),console.error(s)}}o(L2,"validateIndex");function ETe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(ETe,"getHashDBI")});var F2=M((Tke,B2)=>{"use strict";var By=require("path"),gc=require("fs-extra"),_Te=My(),ou=Q(),v2=Tt(),ML=ue(),Ci=(H(),D(W)),Fy=oe(),gTe=require("properties-reader"),STe=di(),TTe=uS(),yTe=fn(),Ske=require("util"),RTe=yTe.searchByValue,ATe=Bn(),bTe=bT(),ITe=wt(),wTe=M2(),U2=fs(),NTe=Dy(),hE=new _Te("4.0.0"),x2=[],mE,pE;async function CTe(){try{if(await NTe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),mE){let t=Fy.changeExtension(mE,".bak");await gc.move(mE,t)}if(pE){let t=Fy.changeExtension(pE,".bak");await gc.move(pE,t)}await U2.generateKeys()}else console.log("Using existing certificates."),U2.updateConfigCert(mE,pE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(CTe,"generateNewKeys");async function OTe(){console.log("Updating HarperDB nodes."),ou.info("Updating HarperDB nodes.");let e=[];try{let t=new STe(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await RTe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!ITe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ci.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Fy.isEmptyOrZeroLength(n))return;let s=new TTe(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await ATe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{bTe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(OTe,"updateNodes");async function PTe(){let e=ML.get(Ci.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(By.join("config","settings.js"))){ou.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ou.info(t);let r=By.dirname(e),n=ML.get(Ci.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=By.join(n,"backup","4_0_0_upgrade_settings.bak"),i=By.join(n,Ci.HDB_CONFIG_FILE);try{ou.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),gc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{ou.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),ou.info("Updating env variables with new settings values");let f=v2.initOldConfig(e);mE=f[Ci.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],pE=f[Ci.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],v2.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=Fy.getPropsFilePath();gc.accessSync(a,gc.constants.F_OK|gc.constants.R_OK);let l=gTe(a).get(Ci.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
111
- install_user = ${l}`;try{gc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{ML.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{gc.removeSync(r),console.log(d),ou.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(PTe,"updateSettingsFile400");hE.async_functions.push(PTe);hE.async_functions.push(CTe);hE.async_functions.push(wTe);hE.async_functions.push(OTe);x2.push(hE);B2.exports=x2});var G2=M((Rke,q2)=>{var LTe=My(),{databases:DTe,table:MTe}=(Oe(),D(mt)),vTe=Gi(),vL=Q(),k2=new LTe("4.7.0"),H2=[];async function UTe(){let e=DTe.system?.hdb_license;if(!e){vL.debug?.("system.hdb_license table not found; no migration necessary");return}return vL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),vL.debug?.("Creating new usage block system.hdb_license table"),MTe(vTe.hdb_license)}o(UTe,"convertToUsageBlockLicenses");k2.async_functions.push(UTe);H2.push(k2);q2.exports=H2});var UL=M((bke,W2)=>{"use strict";var au=oe(),xTe=(H(),D(W)),$2=Q(),{DATA_VERSION:BTe,UPGRADE_VERSION:FTe}=xTe.UPGRADE_JSON_FIELD_NAMES_ENUM,V2=C2(),ky=F2(),K2=G2(),Sc=new Map;V2&&V2.forEach(e=>{Sc.set(e.version,e)});ky&&ky.forEach(e=>{Sc.set(e.version,e)});ky&&ky.forEach(e=>{Sc.set(e.version,e)});K2&&K2.forEach(e=>{Sc.set(e.version,e)});function kTe(){return[...Sc.keys()].sort(au.compareVersions)}o(kTe,"getSortedVersions");function Y2(e){let t=e[BTe],r=e[FTe];return au.isEmptyOrZeroLength(t)||au.isEmptyOrZeroLength(r)?($2.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),$2.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Sc.keys()].sort(au.compareVersions).filter(function(n){return au.compareVersions(n,t)>0&&au.compareVersions(n,r)<=0})}o(Y2,"getVersionsForUpgrade");function HTe(e){return Y2(e).length>0}o(HTe,"hasUpgradesRequired");function qTe(e){return au.isEmptyOrZeroLength(e)?null:Sc.has(e)?Sc.get(e):null}o(qTe,"getDirectiveByVersion");W2.exports={getSortedVersions:kTe,getDirectiveByVersion:qTe,getVersionsForUpgrade:Y2,hasUpgradesRequired:HTe}});var qy=M((wke,X2)=>{"use strict";var GTe=require("util"),xL=require("chalk"),$Te=require("os"),j2=Bn(),VTe=fn(),gs=(H(),D(W)),Q2=E2(),FL=sw(),{UpgradeObject:z2}=S2(),{forceDowngradePrompt:KTe}=Dy(),{packageJson:YTe}=bt(),Hy=Q(),wf=oe(),kL=Ki(),WTe=(Oe(),D(mt)),zTe=UL(),jTe=GTe.promisify(kL.setSchemaDataToGlobal),QTe=VTe.searchByValue,JTe="info_id",XTe="2.9.9",ZTe="3.0.0";async function eye(e){let t=new Q2.HdbInfoInsertObject(1,e,e),r=new FL.InsertObject(gs.OPERATIONS_ENUM.INSERT,gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,gs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return kL.setSchemaDataToGlobal(),j2.insert(r)}o(eye,"insertHdbInstallInfo");async function BL(e){let t,r=await J2(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new Q2.HdbInfoInsertObject(i,e,e);let a=new FL.InsertObject(gs.OPERATIONS_ENUM.INSERT,gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,gs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await jTe(),j2.insert(a)}o(BL,"insertHdbUpgradeInfo");async function J2(){let e=new FL.NoSQLSeachObject(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,JTe,gs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await QTe(e))}catch(r){console.error(r)}return t}o(J2,"getAllHdbInfoRecords");async function tye(){let e=await J2();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(tye,"getLatestHdbInfoRecord");async function rye(){Hy.info("Checking if HDB software has been updated");try{let e=YTe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await tye(),r;if(wf.isEmpty(t))r=XTe;else if(r=t.data_version_num,wf.compareVersions(r.toString(),e.toString())>0){if(!wf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(xL.yellow(`This instance's data was last run on version ${r}`)),console.error(xL.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${$Te.EOL}${gs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");wf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(xL.yellow(`This instance's data was last run on version ${r}`)),await KTe(new z2(r,e))?await BL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(kL.setSchemaDataToGlobal(),nye(r),e.toString()===r.toString())return;let n=new z2(r,e);if(zTe.hasUpgradesRequired(n))return n;wf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await BL(n.upgrade_version),Hy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Hy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Hy.fatal(e),e}}o(rye,"getVersionUpdateInfo");function nye(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${gs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in WTe.databases.system))throw console.log(t),new Error(t);if(!wf.isEmpty(e)&&e<ZTe)throw console.log(t),new Error(t)}o(nye,"checkIfInstallIsSupported");X2.exports={insertHdbInstallInfo:eye,insertHdbUpgradeInfo:BL,getVersionUpdateInfo:rye}});var rQ=M((Cke,tQ)=>{"use strict";var Gy=require("joi"),{boolean:sye,string:HL,number:iye}=Gy.types(),Z2=require("fs-extra"),EE=(H(),D(W)),eQ=require("path"),oye=ft();tQ.exports=aye;function aye(e){let t=HL.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=Gy.object({[EE.INSTALL_PROMPTS.ROOTPATH]:Gy.custom(cye),[EE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Gy.alternatives([iye.min(0),HL]).allow("null",null),[EE.INSTALL_PROMPTS.TC_AGREEMENT]:HL.valid("yes","YES","Yes"),[EE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[EE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:sye});return oye.validateBySchema(e,r)}o(aye,"installValidator");function cye(e,t){if(Z2.existsSync(eQ.join(e,"system/hdb_user/data.mdb"))||Z2.existsSync(eQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(cye,"validateRootAvailable")});var sQ=M((Pke,nQ)=>{"use strict";var{mkdirpSync:lye,copySync:uye}=require("fs-extra"),Tc=require("path"),_E=(H(),D(W)),{PACKAGE_ROOT:dye}=bt(),GL=Q(),fye=is(),qL=Gi(),mye=yt();nQ.exports=pye;async function pye(e){GL.trace("Mounting HarperDB"),cu(e),cu(Tc.join(e,"backup")),cu(Tc.join(e,"keys")),cu(Tc.join(e,"keys",_E.LICENSE_FILE_NAME)),cu(Tc.join(e,"log")),cu(Tc.join(e,"database")),cu(Tc.join(e,"components")),uye(Tc.resolve(dye,"./utility/install/README.md"),Tc.join(e,"README.md")),await hye()}o(pye,"mountHdb");async function hye(){let e=rp(),t=Object.keys(qL);for(let r of t){let n=qL[r].hash_attribute;try{mye.initSystemSchemaPaths(_E.SYSTEM_SCHEMA_NAME,r);let s=new e(_E.SYSTEM_SCHEMA_NAME,r,n);s.attributes=qL[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await fye.createTable(r,s)}catch(s){throw GL.error(`issue creating environment for ${_E.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(hye,"createLMDBTables");function cu(e){lye(e,{mode:_E.HDB_FILE_PERMISSIONS}),GL.info(`Directory ${e} created`)}o(cu,"makeDirectory")});var gQ=M((vke,_Q)=>{"use strict";var KL=require("os"),lQ=require("inquirer"),Zs=require("fs-extra"),Eye=require("properties-reader"),uu=require("chalk"),fo=require("path"),_ye=require("human-readable-ids").hri,$L,gye=require("yaml"),Tr=Q(),yc=ue(),gE=oe(),Vy=kc(),uQ=qy(),{packageJson:dQ}=bt(),he=(H(),D(W)),{CONFIG_PARAM_MAP:Dke,CONFIG_PARAMS:kt}=he,Sye=rQ(),Tye=sQ(),YL=Tt(),yye=as(),Rye=xp(),Aye=IL(),bye=Ki(),Iye=require("util").promisify,wye=Iye(bye.setSchemaDataToGlobal),iQ=fs(),lu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>uu.magenta.bold(e),"HDB_PROMPT_MSG"),Nye="https://harperdb.io/legal/end-user-license-agreement",Rc=KL.EOL,ua="",Cye="yes",oQ="Starting HarperDB install...",aQ="HarperDB installation was successful.",cQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Oye="An out of date version of HarperDB is already installed.",VL="It appears that HarperDB is already installed. Exiting install...",Pye="Aborting install",Mke=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Lye=new RegExp(/^[^\s.,*>]+$/),Dye=KL.homedir(),Mye=fo.join(Dye,he.HDB_ROOT_DIR_NAME),vye="HDB_ADMIN",Uye="CLUSTER_USER",xye="dev",Bye="localhost",$y={[kt.HTTP_CORS]:!0,[kt.HTTP_CORSACCESSLIST]:["*"],[kt.HTTP_PORT]:9926,[kt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[kt.THREADS_COUNT]:1,[kt.THREADS_DEBUG]:!0,[kt.LOGGING_STDSTREAMS]:!0,[kt.LOGGING_LEVEL]:"info",[kt.OPERATIONSAPI_NETWORK_PORT]:9925,[kt.LOCALSTUDIO_ENABLED]:!0},nn={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Ac=Vy([he.INSTALL_PROMPTS.HDB_CONFIG]),uo,fQ=!1,WL=!1,mQ=!1;_Q.exports={install:pQ,updateConfigEnv:zye,setIgnoreExisting:jye};pQ.createSuperUser=EQ;async function pQ(){console.log(sn(Rc+oQ+Rc)),Tr.notify(oQ);let e;Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Fye());let t=Hye();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(mQ=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Sye(t);if(r)throw r.message;await qye(),await Gye(t);let n=await kye(t);uo=n[he.INSTALL_PROMPTS.ROOTPATH],Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&fo.dirname(Ac[he.INSTALL_PROMPTS.HDB_CONFIG])===uo&&(fQ=!0),!WL&&!Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Zs.pathExists(fo.join(uo,he.HDB_CONFIG_FILE))&&(console.error(VL),process.exit()),$L||($L=(await import("ora")).default);let s=$L({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),gE.isEmpty(uo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");yc.setHdbBasePath(uo),await Tye(uo),await $ye(),await Vye(n),Tr.initLogSettings(!0),await EQ(n),await Yye(n),await iQ.updateConfigCert(),await iQ.generateCertsKeys(),await Wye(),Aye(),s.stop(),console.log(sn(Rc+aQ+Rc)),Tr.notify(aQ)}o(pQ,"install");function Fye(){let e=gye.parseDocument(Zs.readFileSync(Ac[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=YL.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(Fye,"getConfigFromFile");async function kye(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:ua,default:Mye,validate:o(async s=>Xs(s)?Xs(s):await Zs.pathExists(fo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ua,default:vye,validate:o(s=>Xs(s)?Xs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:da(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ua,validate:o(s=>Xs(s)?Xs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ua,default:xye,validate:o(s=>Xs(s)?Xs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(mQ||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:lu,when:da(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:ua,default:Bye,message:sn(nn.REPLICATION_HOSTNAME)}),gE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ua,default:_ye.random(),validate:o(i=>Lye.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ua,default:Uye,validate:o(i=>Xs(i)?Xs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:da(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ua,validate:o(i=>Xs(i)?Xs(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await lQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(kye,"installPrompts");function da(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${uu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(da,"displayCmdEnvVar");function Xs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Xs,"checkForEmptyValue");function Hye(){let e=Object.keys(he.INSTALL_PROMPTS),t=Vy(e),r=Vy(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(Hye,"checkForPromptOverride");async function qye(){Tr.trace("Checking for existing install.");let e=gE.getPropsFilePath(),t=await Zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=Eye(e),s=YL.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Zs.pathExists(s)}if(!t&&gE.noBootFile()&&(r=!0),r&&!WL){if(Tr.trace(`Install found existing HDB config at:${e}`),await uQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${dQ.version}. Exiting install...`;console.log(Rc+uu.magenta.bold(Oye)),console.log(uu.magenta.bold(s)),Tr.error(s)}else console.log(Rc+uu.magenta.bold(VL)),Tr.error(VL);process.exit(0)}}o(qye,"checkForExistingInstall");async function Gye(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Nye}${Rc}and can be viewed by typing or copying and pasting the URL into your web browser.${Rc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ua,transformer:lu,when:da(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:uu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await lQ.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Cye&&(console.log(uu.yellow(cQ)),Tr.error(cQ),process.exit(0))}o(Gye,"termsAgreement");async function $ye(){let e=fo.join(uo,he.HDB_CONFIG_FILE),t;try{t=KL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
112
- install_user = ${t}`,n=gE.getHomeDir(),s=fo.join(n,he.HDB_HOME_DIR_NAME),i=fo.join(s,he.LICENSE_KEY_DIR_NAME);try{Zs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Zs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=fo.join(s,he.BOOT_PROPS_FILE_NAME);try{await Zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}yc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),yc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),yc.setProperty(yc.BOOT_PROPS_FILE_PATH,a)}}o($ye,"createBootPropertiesFile");async function Vye(e){Tr.trace("Creating HarperDB config file");let t=Vy(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in $y){if(r===kt.HTTP_PORT&&t[kt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$y[r],t[kt.HTTP_SECUREPORT]=null;continue}else if(r===kt.HTTP_PORT)continue;if(r===kt.OPERATIONSAPI_NETWORK_PORT&&t[kt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$y[r],t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===kt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=$y[r])}}else t[kt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[kt.HTTP_PORT.toLowerCase()]&&(t[kt.HTTP_SECUREPORT]=null);try{Ac[he.INSTALL_PROMPTS.HDB_CONFIG]||YL.createConfigFile(t),yc.initSync()}catch(r){Kye(r)}}o(Vye,"createConfigFile");function Kye(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Pye);let t=fo.resolve(yc.get(yc.BOOT_PROPS_FILE_PATH),"../");t&&Zs.removeSync(t),uo&&(fQ?Zs.readdirSync(uo,{withFileTypes:!0}).forEach(n=>{let s=fo.join(n.path,n.name);s!==Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&Zs.removeSync(s)}):Zs.removeSync(uo)),process.exit(1)}o(Kye,"rollbackInstall");async function hQ(e,t){Tr.trace("Creating admin user"),await wye();let r;try{r=await Rye.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await yye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(hQ,"createAdminUser");async function EQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await hQ(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(EQ,"createSuperUser");async function Yye(e){Tr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await hQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Yye,"createClusterUser");async function Wye(){let e=dQ.version;if(e)await uQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(Wye,"insertHdbVersionInfo");function zye(e){Ac[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(zye,"updateConfigEnv");function jye(e){WL=e}o(jye,"setIgnoreExisting")});var jL={};Ie(jL,{isHdbInstalled:()=>Qye});function Qye(e,t){try{zL.default.statSync((0,Ky.getPropsFilePath)()),zL.default.statSync(e.get(Zf.SETTINGS_PATH_KEY))}catch(r){if((0,Ky.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var zL,Ky,QL=ie(()=>{H();zL=w(require("node:fs")),Ky=w(oe());o(Qye,"isHdbInstalled")});var yQ=M((Bke,TQ)=>{"use strict";var JL=oe(),Ss=Q(),SQ=UL();TQ.exports={processDirectives:Jye};async function Jye(e){console.log("Starting upgrade process...");let t=SQ.getVersionsForUpgrade(e),r=eRe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Ss.notify(c),console.log(c);let l=[],u=[];try{l=Xye(a.sync_functions)}catch(d){throw Ss.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await Zye(a.async_functions)}catch(d){throw Ss.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(Jye,"processDirectives");function Xye(e){if(JL.isEmptyOrZeroLength(e))return Ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ss.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Ss.info(`Running function ${r.name}`),!(r instanceof Function)){Ss.info("Variable being processed is not a function");continue}let n=r();Ss.info(n),t.push(n)}return t}o(Xye,"runSyncFunctions");async function Zye(e){if(JL.isEmptyOrZeroLength(e))return Ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ss.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Ss.info(`Running function ${s.name}`),!(s instanceof Function)){Ss.info("Variable being processed is not a function");continue}let i=await s();Ss.info(i),t.push(i)}return t}o(Zye,"runAsyncFunctions");function eRe(e){if(JL.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=SQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(eRe,"getUpgradeDirectivesToInstall")});var XL=M((kke,RQ)=>{"use strict";var tRe=require("util"),rRe=require("path"),nRe=require("child_process"),sRe=tRe.promisify(nRe.execFile),iRe=1e3*1e3*10;RQ.exports={findPs:oRe};async function oRe(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await sRe("ps",["wwxo",`pid,${r}`],{maxBuffer:iRe});for(let s of n.trim().split(`
113
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:rRe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(oRe,"findPs")});var OQ=M((qke,CQ)=>{"use strict";var IQ=ue();IQ.initSync();var wQ=require("chalk"),mo=Q(),du=(H(),D(W)),aRe=yQ(),ZL=oe(),cRe=(QL(),D(jL)),NQ=qy(),lRe=Dy(),AQ=XL(),uRe=Ki(),{packageJson:bQ}=bt(),dRe=require("util").promisify,fRe=dRe(uRe.setSchemaDataToGlobal),eD,{UPGRADE_VERSION:tD}=du.UPGRADE_JSON_FIELD_NAMES_ENUM;CQ.exports={upgrade:mRe};async function mRe(e){await fRe(),eD===void 0&&(eD=af()),cRe.isHdbInstalled(IQ,mo)||(Yy("Harper is not installed. Harper must be installed before running an upgrade.",du.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await NQ.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),Yy(`This version of HarperDB is ${bQ.version}`,du.LOG_LEVELS.INFO);let n=r[tD]??bQ.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${du.HDB_SUPPORT_ADDRESS}`),mo.notify("Missing new version field from upgrade info object"),process.exit(1)),await pRe();let s,i=0;try{s=await lRe.forceUpdatePrompt(r)}catch(a){mo.error("There was an error when prompting user about upgrade."),mo.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),mo.info(`Starting upgrade to version ${n}`),await hRe(r),Yy(`HarperDB was successfully upgraded to version ${r[tD]}`,du.LOG_LEVELS.INFO)}o(mRe,"upgrade");async function pRe(){let e=!1,t=await AQ.findPs(du.HDB_PROC_NAME);if(ZL.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await AQ.findPs("hdb_express");ZL.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await eD.list();ZL.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(wQ.red(r)),mo.error(r),process.exit(1)}}o(pRe,"checkIfRunning");async function hRe(e){try{await aRe.processDirectives(e)}catch(t){throw Yy("There was an error during the data upgrade. Please check the logs.",du.LOG_LEVELS.ERROR),t}try{await NQ.insertHdbUpgradeInfo(e[tD])}catch(t){mo.error("Error updating the 'hdb_info' system table."),mo.error(t)}}o(hRe,"runUpgrade");function Yy(e,t=void 0){t||(t=mo.info),mo[t](e),console.log(wQ.magenta(e))}o(Yy,"printToLogAndConsole")});var UQ=M(zy=>{"use strict";var ye=ue();ye.initSync();of();var yr=(H(),D(W)),{CONFIG_PARAMS:Be}=yr,Kn=Q(),fu=require("fs-extra"),fa=require("path"),ERe=IL(),{install:_Re}=gQ(),rD=require("chalk"),{packageJson:gRe,PACKAGE_ROOT:SRe}=bt(),mu=oe(),TRe=(QL(),D(jL)),nD=Tt(),LQ=kc(),PQ=CT(),yRe=OQ(),{compactOnStart:RRe}=(PO(),D(OO)),ARe=require("minimist"),bRe=fs(),{startHTTPThreads:IRe}=(sD(),D(xQ)),wRe=qy(),{isMainThread:NRe}=require("worker_threads"),$ke=Gi(),Vke=Cl(),Kke=LI(),Yke=rp(),Wy=(H(),D(W)),po,Nf,DQ=!1,CRe="Upgrade complete. Starting HarperDB.",ORe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",PRe="HarperDB not found, starting install process.",LRe="There was an error during install, check install_log.log for more details. Exiting.",DRe="HarperDB successfully started.";function MRe(){process.on("unhandledRejection",(e,t)=>{Kn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(MRe,"addUnhandleRejectionListener");function vRe(){if(!DQ){let e=o(()=>{fu.removeSync(fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(vRe,"addExitListeners");async function MQ(e=!1,t=!1){if(console.log(rD.magenta("Starting HarperDB...")),MRe(),Kn.suppressLogging?.(()=>{console.log(rD.magenta(""+fu.readFileSync(fa.join(SRe,"utility/install/ascii_logo.txt"))))}),TRe.isHdbInstalled(ye,Kn)===!1){console.log(PRe);try{await _Re()}catch(l){console.error(LRe,l),Kn.error(l),process.exit(1)}}if(!e){let l=LQ(Object.keys(yr.CONFIG_PARAM_MAP),!0);!mu.isEmpty(l)&&!mu.isEmptyOrZeroLength(Object.keys(l))&&nD.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Nf?.service==="clustering";Nf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE),i=kRe(s);i&&i!==1&&HRe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),po===void 0&&(po=af()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await PQ.generateNatsConfig(),await po.startClusteringProcesses(!0),process.exit()),vRe(),await fu.writeFile(fa.join(ye.get(Wy.CONFIG_PARAMS.ROOTPATH),Wy.HDB_PID_FILE),`${process.pid}`),Kn.info("HarperDB PID",process.pid);let a;try{let l=await wRe.getVersionUpdateInfo();l!==void 0&&(a=l[yr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await yRe.upgrade(l),console.log(CRe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Kn.error(l)):(console.error(ORe,l),Kn.error(l)),process.exit(1)}ERe(),BRe(),await bRe.reviewSelfSignedCert(),mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&NRe&&await PQ.generateNatsConfig(t)}o(MQ,"initialize");async function URe(e=!1){try{Nf=ARe(process.argv),Nf.ROOTPATH&&nD.updateConfigObject("settings_path",fa.join(Nf.ROOTPATH,yr.HDB_CONFIG_FILE)),await MQ(e,!0),ye.get(yr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await RRe();let t=process.env.IS_SCRIPTED_SERVICE&&!Nf.service;mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await po.startClusteringProcesses(),await po.startClusteringThreads()),await IRe(process.env.DEV_MODE?1:ye.get(Wy.CONFIG_PARAMS.THREADS_COUNT)??ye.get(Wy.CONFIG_PARAMS.THREADS)),t||vQ()}catch(t){console.error(t),Kn.error(t),process.exit(1)}}o(URe,"main");function vQ(){Kn.suppressLogging(()=>{console.log(rD.magenta(`HarperDB ${gRe.version} successfully started`))}),Kn.notify(DRe)}o(vQ,"started");async function xRe(e=!0){DQ=!e;try{po===void 0&&(po=af()),po.enterPM2Mode(),await MQ(),mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await po.startClusteringProcesses(),await po.startService(yr.PROCESS_DESCRIPTORS.HDB),vQ(),e&&process.exit(0)}catch(t){console.error(t),Kn.error(t),process.exit(1)}}o(xRe,"launch");function BRe(){let e=fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.LICENSE_KEY_DIR_NAME,yr.LICENSE_FILE_NAME),t=fa.join(e,yr.LICENSE_FILE_NAME),r=fa.join(e,yr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=LQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(mu.isEmpty(n)||mu.isEmpty(s))return;fu.mkdirpSync(e),fu.writeFileSync(r,n),fu.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Kn.error(s)}}o(BRe,"writeLicenseFromVars");zy.launch=xRe;zy.main=URe;zy.startupLog=FRe;function FRe(e){let r=o(p=>p.padEnd(20),"pad"),n=`
110
+ Reindexing upgrade started for transaction logs`),ca.notify("Reindexing upgrade started for transaction logs"),await v2(UL,!0,e)),ca.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(fE?", but errors occurred":"")}o(hTe,"reindexUpgrade");async function v2(e,t,r){let n=await lo.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=la.join(e,a.toString());if(a===".DS_Store")continue;let l=await lo.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&lo.statSync(la.join(c,f)).isDirectory())try{await ETe(a,f,t),Rn.info(`Reindexing started for ${a}.${f}`),ca.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await gTe(a,f,c,t,r),Rn.info(`Reindexing completed for ${a}.${f}`),ca.notify(`Reindexing completed for ${a}.${f}`)}catch(m){fE=!0,m.schema_path=c,m.table_name=f,ca.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),ca.error(m),Rn.error(m),console.error(m)}}}if(!fE)try{await lo.rm(xy,{recursive:!0})}catch{}}o(v2,"processTables");async function ETe(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=la.join(xy,s);await lo.ensureDir(xy),await lo.writeFile(i,""),Rn=mTe({level:"debug",formatters:{bindings(){}}},i)}o(ETe,"initPinoLogger");var _Te=20;async function gTe(e,t,r,n,s){let i;try{i=await _s.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){ca.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Rn.error(S);return}throw S}let a=yTe(i.dbis),c=_s.openDBI(i,a),l=Object.keys(i.dbis),u=_s.statDBI(i,a);Rn.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new fTe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await _s.createEnvironment(r,t,!1);_s.createDBI(f,a,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>_Te&&await p();await p()}catch(S){throw fE=!0,Rn.error(S),S}async function p(){let S,R=m.map(({value:O})=>O);n?S=await Promise.all(R.map(O=>STe(f,O))):S=await cTe(f,a,l.filter(O=>O!=="__blob__"),R,!1);for(let O=0,F=m.length;O<F;O++){let{key:te,value:G}=m[O];Rn.info(`Record hash value: ${te} hash: ${a}`);let k;n?k=S[O]:k=S.written_hashes.indexOf(te)>-1,dE(k,!0),TTe(f,a,G[a],n),Rn.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&ca.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),Rn.info(`${d.value}/${d.total} records inserted`)}o(p,"finishOutstanding"),d.stop();let h=_s.statDBI(i,a),E=_s.statDBI(f,a);if(Rn.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),dE.deepStrictEqual(h.entryCount,E.entryCount),await _s.closeEnvironment(i),await _s.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=la.join(r,t),R=la.join(S,"data.mdb"),N=la.join(S,"lock.mdb");await lo.unlink(R),await lo.unlink(N),await lo.rmdir(S),Rn.info(`Deleted old environment files from schema folder: ${R}, ${N}`)}let g=await _s.openEnvironment(r,t),A=_s.statDBI(g,a);Rn.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(A)}`),dE.deepStrictEqual(A.entryCount,E.entryCount),await _s.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(gTe,"processTable");async function STe(e,t){_s.initializeDBIs(e,_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_c.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),dTe.isEmpty(t.user_name)||e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(STe,"insertTransaction");function TTe(e,t,r,n){let i=e.dbis[t].get(r);dE.deepStrictEqual(typeof i,"object");let a;if(n){let c={[_c.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[_c.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!uTe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];U2(e,c,f,r)}else U2(e,c,l,r)}o(TTe,"validateIndices");function U2(e,t,r,n){try{let s=!1,i=lTe.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||Rn.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),dE.deepStrictEqual(s,!0)}catch(s){fE=!0,Rn.error(s),console.error(s)}}o(U2,"validateIndex");function yTe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(yTe,"getHashDBI")});var q2=M((wke,G2)=>{"use strict";var By=require("path"),gc=require("fs-extra"),RTe=My(),ou=Q(),F2=yt(),xL=ue(),Ci=(H(),D(W)),Fy=oe(),ATe=require("properties-reader"),bTe=di(),ITe=uS(),wTe=fn(),Ike=require("util"),NTe=wTe.searchByValue,CTe=Bn(),OTe=bT(),PTe=wt(),LTe=B2(),k2=fs(),DTe=Dy(),hE=new RTe("4.0.0"),H2=[],mE,pE;async function MTe(){try{if(await DTe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),mE){let t=Fy.changeExtension(mE,".bak");await gc.move(mE,t)}if(pE){let t=Fy.changeExtension(pE,".bak");await gc.move(pE,t)}await k2.generateKeys()}else console.log("Using existing certificates."),k2.updateConfigCert(mE,pE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(MTe,"generateNewKeys");async function vTe(){console.log("Updating HarperDB nodes."),ou.info("Updating HarperDB nodes.");let e=[];try{let t=new bTe(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await NTe(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!PTe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ci.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Fy.isEmptyOrZeroLength(n))return;let s=new ITe(Ci.SYSTEM_SCHEMA_NAME,Ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await CTe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{OTe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(vTe,"updateNodes");async function UTe(){let e=xL.get(Ci.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(By.join("config","settings.js"))){ou.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ou.info(t);let r=By.dirname(e),n=xL.get(Ci.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=By.join(n,"backup","4_0_0_upgrade_settings.bak"),i=By.join(n,Ci.HDB_CONFIG_FILE);try{ou.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),gc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{ou.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),ou.info("Updating env variables with new settings values");let f=F2.initOldConfig(e);mE=f[Ci.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],pE=f[Ci.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],F2.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=Fy.getPropsFilePath();gc.accessSync(a,gc.constants.F_OK|gc.constants.R_OK);let l=ATe(a).get(Ci.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
111
+ install_user = ${l}`;try{gc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{xL.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{gc.removeSync(r),console.log(d),ou.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(UTe,"updateSettingsFile400");hE.async_functions.push(UTe);hE.async_functions.push(MTe);hE.async_functions.push(LTe);hE.async_functions.push(vTe);H2.push(hE);G2.exports=H2});var Y2=M((Cke,K2)=>{var xTe=My(),{databases:BTe,table:FTe}=(Oe(),D(mt)),kTe=qi(),BL=Q(),$2=new xTe("4.7.0"),V2=[];async function HTe(){let e=BTe.system?.hdb_license;if(!e){BL.debug?.("system.hdb_license table not found; no migration necessary");return}return BL.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),BL.debug?.("Creating new usage block system.hdb_license table"),FTe(kTe.hdb_license)}o(HTe,"convertToUsageBlockLicenses");$2.async_functions.push(HTe);V2.push($2);K2.exports=V2});var FL=M((Pke,J2)=>{"use strict";var au=oe(),GTe=(H(),D(W)),W2=Q(),{DATA_VERSION:qTe,UPGRADE_VERSION:$Te}=GTe.UPGRADE_JSON_FIELD_NAMES_ENUM,z2=D2(),ky=q2(),j2=Y2(),Sc=new Map;z2&&z2.forEach(e=>{Sc.set(e.version,e)});ky&&ky.forEach(e=>{Sc.set(e.version,e)});ky&&ky.forEach(e=>{Sc.set(e.version,e)});j2&&j2.forEach(e=>{Sc.set(e.version,e)});function VTe(){return[...Sc.keys()].sort(au.compareVersions)}o(VTe,"getSortedVersions");function Q2(e){let t=e[qTe],r=e[$Te];return au.isEmptyOrZeroLength(t)||au.isEmptyOrZeroLength(r)?(W2.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),W2.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...Sc.keys()].sort(au.compareVersions).filter(function(n){return au.compareVersions(n,t)>0&&au.compareVersions(n,r)<=0})}o(Q2,"getVersionsForUpgrade");function KTe(e){return Q2(e).length>0}o(KTe,"hasUpgradesRequired");function YTe(e){return au.isEmptyOrZeroLength(e)?null:Sc.has(e)?Sc.get(e):null}o(YTe,"getDirectiveByVersion");J2.exports={getSortedVersions:VTe,getDirectiveByVersion:YTe,getVersionsForUpgrade:Q2,hasUpgradesRequired:KTe}});var Gy=M((Dke,rQ)=>{"use strict";var WTe=require("util"),kL=require("chalk"),zTe=require("os"),Z2=Bn(),jTe=fn(),gs=(H(),D(W)),eQ=T2(),GL=sw(),{UpgradeObject:X2}=A2(),{forceDowngradePrompt:QTe}=Dy(),{packageJson:JTe}=Tt(),Hy=Q(),wf=oe(),qL=Ki(),XTe=(Oe(),D(mt)),ZTe=FL(),eye=WTe.promisify(qL.setSchemaDataToGlobal),tye=jTe.searchByValue,rye="info_id",nye="2.9.9",sye="3.0.0";async function iye(e){let t=new eQ.HdbInfoInsertObject(1,e,e),r=new GL.InsertObject(gs.OPERATIONS_ENUM.INSERT,gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,gs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return qL.setSchemaDataToGlobal(),Z2.insert(r)}o(iye,"insertHdbInstallInfo");async function HL(e){let t,r=await tQ(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new eQ.HdbInfoInsertObject(i,e,e);let a=new GL.InsertObject(gs.OPERATIONS_ENUM.INSERT,gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,gs.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await eye(),Z2.insert(a)}o(HL,"insertHdbUpgradeInfo");async function tQ(){let e=new GL.NoSQLSeachObject(gs.SYSTEM_SCHEMA_NAME,gs.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,rye,gs.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await tye(e))}catch(r){console.error(r)}return t}o(tQ,"getAllHdbInfoRecords");async function oye(){let e=await tQ();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(oye,"getLatestHdbInfoRecord");async function aye(){Hy.info("Checking if HDB software has been updated");try{let e=JTe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await oye(),r;if(wf.isEmpty(t))r=nye;else if(r=t.data_version_num,wf.compareVersions(r.toString(),e.toString())>0){if(!wf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kL.yellow(`This instance's data was last run on version ${r}`)),console.error(kL.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${zTe.EOL}${gs.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");wf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kL.yellow(`This instance's data was last run on version ${r}`)),await QTe(new X2(r,e))?await HL(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(qL.setSchemaDataToGlobal(),cye(r),e.toString()===r.toString())return;let n=new X2(r,e);if(ZTe.hasUpgradesRequired(n))return n;wf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await HL(n.upgrade_version),Hy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw Hy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Hy.fatal(e),e}}o(aye,"getVersionUpdateInfo");function cye(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${gs.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in XTe.databases.system))throw console.log(t),new Error(t);if(!wf.isEmpty(e)&&e<sye)throw console.log(t),new Error(t)}o(cye,"checkIfInstallIsSupported");rQ.exports={insertHdbInstallInfo:iye,insertHdbUpgradeInfo:HL,getVersionUpdateInfo:aye}});var oQ=M((vke,iQ)=>{"use strict";var qy=require("joi"),{boolean:lye,string:$L,number:uye}=qy.types(),nQ=require("fs-extra"),EE=(H(),D(W)),sQ=require("path"),dye=ft();iQ.exports=fye;function fye(e){let t=$L.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=qy.object({[EE.INSTALL_PROMPTS.ROOTPATH]:qy.custom(mye),[EE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:qy.alternatives([uye.min(0),$L]).allow("null",null),[EE.INSTALL_PROMPTS.TC_AGREEMENT]:$L.valid("yes","YES","Yes"),[EE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[EE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:lye});return dye.validateBySchema(e,r)}o(fye,"installValidator");function mye(e,t){if(nQ.existsSync(sQ.join(e,"system/hdb_user/data.mdb"))||nQ.existsSync(sQ.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(mye,"validateRootAvailable")});var cQ=M((xke,aQ)=>{"use strict";var{mkdirpSync:pye,copySync:hye}=require("fs-extra"),Tc=require("path"),_E=(H(),D(W)),{PACKAGE_ROOT:Eye}=Tt(),KL=Q(),_ye=is(),VL=qi(),gye=Rt();aQ.exports=Sye;async function Sye(e){KL.trace("Mounting HarperDB"),cu(e),cu(Tc.join(e,"backup")),cu(Tc.join(e,"keys")),cu(Tc.join(e,"keys",_E.LICENSE_FILE_NAME)),cu(Tc.join(e,"log")),cu(Tc.join(e,"database")),cu(Tc.join(e,"components")),hye(Tc.resolve(Eye,"./utility/install/README.md"),Tc.join(e,"README.md")),await Tye()}o(Sye,"mountHdb");async function Tye(){let e=rp(),t=Object.keys(VL);for(let r of t){let n=VL[r].hash_attribute;try{gye.initSystemSchemaPaths(_E.SYSTEM_SCHEMA_NAME,r);let s=new e(_E.SYSTEM_SCHEMA_NAME,r,n);s.attributes=VL[r].attributes;let i=s.attributes.find(({attribute:a})=>a===n);i.isPrimaryKey=!0,["hdb_user","hdb_role","hdb_nodes"].includes(r)&&(s.audit=!0),await _ye.createTable(r,s)}catch(s){throw KL.error(`issue creating environment for ${_E.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}o(Tye,"createLMDBTables");function cu(e){pye(e,{mode:_E.HDB_FILE_PERMISSIONS}),KL.info(`Directory ${e} created`)}o(cu,"makeDirectory")});var RQ=M((Hke,yQ)=>{"use strict";var zL=require("os"),mQ=require("inquirer"),Zs=require("fs-extra"),yye=require("properties-reader"),uu=require("chalk"),fo=require("path"),Rye=require("human-readable-ids").hri,YL,Aye=require("yaml"),Tr=Q(),yc=ue(),gE=oe(),Vy=kc(),pQ=Gy(),{packageJson:hQ}=Tt(),he=(H(),D(W)),{CONFIG_PARAM_MAP:Fke,CONFIG_PARAMS:kt}=he,bye=oQ(),Iye=cQ(),jL=yt(),wye=as(),Nye=xp(),Cye=CL(),Oye=Ki(),Pye=require("util").promisify,Lye=Pye(Oye.setSchemaDataToGlobal),lQ=fs(),lu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),sn=o(e=>uu.magenta.bold(e),"HDB_PROMPT_MSG"),Dye="https://harperdb.io/legal/end-user-license-agreement",Rc=zL.EOL,ua="",Mye="yes",uQ="Starting HarperDB install...",dQ="HarperDB installation was successful.",fQ="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",vye="An out of date version of HarperDB is already installed.",WL="It appears that HarperDB is already installed. Exiting install...",Uye="Aborting install",kke=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),xye=new RegExp(/^[^\s.,*>]+$/),Bye=zL.homedir(),Fye=fo.join(Bye,he.HDB_ROOT_DIR_NAME),kye="HDB_ADMIN",Hye="CLUSTER_USER",Gye="dev",qye="localhost",$y={[kt.HTTP_CORS]:!0,[kt.HTTP_CORSACCESSLIST]:["*"],[kt.HTTP_PORT]:9926,[kt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[kt.THREADS_COUNT]:1,[kt.THREADS_DEBUG]:!0,[kt.LOGGING_STDSTREAMS]:!0,[kt.LOGGING_LEVEL]:"info",[kt.OPERATIONSAPI_NETWORK_PORT]:9925,[kt.LOCALSTUDIO_ENABLED]:!0},nn={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},Ac=Vy([he.INSTALL_PROMPTS.HDB_CONFIG]),uo,EQ=!1,QL=!1,_Q=!1;yQ.exports={install:gQ,updateConfigEnv:Zye,setIgnoreExisting:eRe};gQ.createSuperUser=TQ;async function gQ(){console.log(sn(Rc+uQ+Rc)),Tr.notify(uQ);let e;Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=$ye());let t=Kye();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(_Q=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=bye(t);if(r)throw r.message;await Yye(),await Wye(t);let n=await Vye(t);uo=n[he.INSTALL_PROMPTS.ROOTPATH],Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&fo.dirname(Ac[he.INSTALL_PROMPTS.HDB_CONFIG])===uo&&(EQ=!0),!QL&&!Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Zs.pathExists(fo.join(uo,he.HDB_CONFIG_FILE))&&(console.error(WL),process.exit()),YL||(YL=(await import("ora")).default);let s=YL({prefixText:sn("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),gE.isEmpty(uo))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");yc.setHdbBasePath(uo),await Iye(uo),await zye(),await jye(n),Tr.initLogSettings(!0),await TQ(n),await Jye(n),await lQ.updateConfigCert(),await lQ.generateCertsKeys(),await Xye(),Cye(),s.stop(),console.log(sn(Rc+dQ+Rc)),Tr.notify(dQ)}o(gQ,"install");function $ye(){let e=Aye.parseDocument(Zs.readFileSync(Ac[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=jL.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o($ye,"getConfigFromFile");async function Vye(e){Tr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.ROOTPATH],nn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:ua,default:Fye,validate:o(async s=>Xs(s)?Xs(s):await Zs.pathExists(fo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:sn(nn.DESTINATION)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],nn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ua,default:kye,validate:o(s=>Xs(s)?Xs(s):(t=s,!0),"validate"),message:sn(nn.HDB_USERNAME)},{type:"password",when:da(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],nn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ua,validate:o(s=>Xs(s)?Xs(s):!0,"validate"),message:sn(nn.HDB_PASS)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],nn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:ua,default:Gye,validate:o(s=>Xs(s)?Xs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:sn(nn.DEFAULTS_MODE)}];if(_Q||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:lu,when:da(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],nn.REPLICATION_HOSTNAME),prefix:ua,default:qye,message:sn(nn.REPLICATION_HOSTNAME)}),gE.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],nn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ua,default:Rye.random(),validate:o(i=>xye.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:sn(nn.NODE_NAME)},{type:"input",transformer:lu,when:da(e[he.INSTALL_PROMPTS.CLUSTERING_USER],nn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ua,default:Hye,validate:o(i=>Xs(i)?Xs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:sn(nn.CLUSTER_USERNAME)},{type:"password",when:da(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],nn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ua,validate:o(i=>Xs(i)?Xs(i):!0,"validate"),message:sn(nn.CLUSTER_PASS)}];r.push(...s)}let n=await mQ.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(Vye,"installPrompts");function da(e,t){return e!==void 0?(t.includes("password")?(console.log(`${sn(t)} ${uu.gray("[hidden]")}`),Tr.trace(`${sn(t)} [hidden]`)):(console.log(`${sn(t)} ${e}`),Tr.trace(`${sn(t)} ${e}`)),!1):!0}o(da,"displayCmdEnvVar");function Xs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Xs,"checkForEmptyValue");function Kye(){let e=Object.keys(he.INSTALL_PROMPTS),t=Vy(e),r=Vy(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(Kye,"checkForPromptOverride");async function Yye(){Tr.trace("Checking for existing install.");let e=gE.getPropsFilePath(),t=await Zs.pathExists(e),r;if(t){Tr.trace(`Install found an existing boot prop file at:${e}`);let n=yye(e),s=jL.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Zs.pathExists(s)}if(!t&&gE.noBootFile()&&(r=!0),r&&!QL){if(Tr.trace(`Install found existing HDB config at:${e}`),await pQ.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${hQ.version}. Exiting install...`;console.log(Rc+uu.magenta.bold(vye)),console.log(uu.magenta.bold(s)),Tr.error(s)}else console.log(Rc+uu.magenta.bold(WL)),Tr.error(WL);process.exit(0)}}o(Yye,"checkForExistingInstall");async function Wye(e){Tr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Dye}${Rc}and can be viewed by typing or copying and pasting the URL into your web browser.${Rc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:ua,transformer:lu,when:da(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:sn(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:uu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await mQ.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Mye&&(console.log(uu.yellow(fQ)),Tr.error(fQ),process.exit(0))}o(Wye,"termsAgreement");async function zye(){let e=fo.join(uo,he.HDB_CONFIG_FILE),t;try{t=zL.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
112
+ install_user = ${t}`,n=gE.getHomeDir(),s=fo.join(n,he.HDB_HOME_DIR_NAME),i=fo.join(s,he.LICENSE_KEY_DIR_NAME);try{Zs.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Zs.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=fo.join(s,he.BOOT_PROPS_FILE_NAME);try{await Zs.writeFile(a,r)}catch(c){throw Tr.error(`There was an error creating the boot file at path: ${a}`),c}yc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),yc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),yc.setProperty(yc.BOOT_PROPS_FILE_PATH,a)}}o(zye,"createBootPropertiesFile");async function jye(e){Tr.trace("Creating HarperDB config file");let t=Vy(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in $y){if(r===kt.HTTP_PORT&&t[kt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$y[r],t[kt.HTTP_SECUREPORT]=null;continue}else if(r===kt.HTTP_PORT)continue;if(r===kt.OPERATIONSAPI_NETWORK_PORT&&t[kt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??$y[r],t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===kt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=$y[r])}}else t[kt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[kt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[kt.HTTP_PORT.toLowerCase()]&&(t[kt.HTTP_SECUREPORT]=null);try{Ac[he.INSTALL_PROMPTS.HDB_CONFIG]||jL.createConfigFile(t),yc.initSync()}catch(r){Qye(r)}}o(jye,"createConfigFile");function Qye(e){Tr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Uye);let t=fo.resolve(yc.get(yc.BOOT_PROPS_FILE_PATH),"../");t&&Zs.removeSync(t),uo&&(EQ?Zs.readdirSync(uo,{withFileTypes:!0}).forEach(n=>{let s=fo.join(n.path,n.name);s!==Ac[he.INSTALL_PROMPTS.HDB_CONFIG]&&Zs.removeSync(s)}):Zs.removeSync(uo)),process.exit(1)}o(Qye,"rollbackInstall");async function SQ(e,t){Tr.trace("Creating admin user"),await Lye();let r;try{r=await Nye.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await wye.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(SQ,"createAdminUser");async function TQ(e){Tr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await SQ(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(TQ,"createSuperUser");async function Jye(e){Tr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await SQ({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(Jye,"createClusterUser");async function Xye(){let e=hQ.version;if(e)await pQ.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(Xye,"insertHdbVersionInfo");function Zye(e){Ac[he.INSTALL_PROMPTS.HDB_CONFIG]=e}o(Zye,"updateConfigEnv");function eRe(e){QL=e}o(eRe,"setIgnoreExisting")});var XL={};Ie(XL,{isHdbInstalled:()=>tRe});function tRe(e,t){try{JL.default.statSync((0,Ky.getPropsFilePath)()),JL.default.statSync(e.get(Zf.SETTINGS_PATH_KEY))}catch(r){if((0,Ky.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var JL,Ky,ZL=ie(()=>{H();JL=w(require("node:fs")),Ky=w(oe());o(tRe,"isHdbInstalled")});var IQ=M(($ke,bQ)=>{"use strict";var eD=oe(),Ss=Q(),AQ=FL();bQ.exports={processDirectives:rRe};async function rRe(e){console.log("Starting upgrade process...");let t=AQ.getVersionsForUpgrade(e),r=iRe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;Ss.notify(c),console.log(c);let l=[],u=[];try{l=nRe(a.sync_functions)}catch(d){throw Ss.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await sRe(a.async_functions)}catch(d){throw Ss.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(rRe,"processDirectives");function nRe(e){if(eD.isEmptyOrZeroLength(e))return Ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ss.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Ss.info(`Running function ${r.name}`),!(r instanceof Function)){Ss.info("Variable being processed is not a function");continue}let n=r();Ss.info(n),t.push(n)}return t}o(nRe,"runSyncFunctions");async function sRe(e){if(eD.isEmptyOrZeroLength(e))return Ss.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Ss.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Ss.info(`Running function ${s.name}`),!(s instanceof Function)){Ss.info("Variable being processed is not a function");continue}let i=await s();Ss.info(i),t.push(i)}return t}o(sRe,"runAsyncFunctions");function iRe(e){if(eD.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=AQ.getDirectiveByVersion(r);n&&t.push(n)}return t}o(iRe,"getUpgradeDirectivesToInstall")});var tD=M((Kke,wQ)=>{"use strict";var oRe=require("util"),aRe=require("path"),cRe=require("child_process"),lRe=oRe.promisify(cRe.execFile),uRe=1e3*1e3*10;wQ.exports={findPs:dRe};async function dRe(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await lRe("ps",["wwxo",`pid,${r}`],{maxBuffer:uRe});for(let s of n.trim().split(`
113
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:aRe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(dRe,"findPs")});var MQ=M((Wke,DQ)=>{"use strict";var OQ=ue();OQ.initSync();var PQ=require("chalk"),mo=Q(),du=(H(),D(W)),fRe=IQ(),rD=oe(),mRe=(ZL(),D(XL)),LQ=Gy(),pRe=Dy(),NQ=tD(),hRe=Ki(),{packageJson:CQ}=Tt(),ERe=require("util").promisify,_Re=ERe(hRe.setSchemaDataToGlobal),nD,{UPGRADE_VERSION:sD}=du.UPGRADE_JSON_FIELD_NAMES_ENUM;DQ.exports={upgrade:gRe};async function gRe(e){await _Re(),nD===void 0&&(nD=af()),mRe.isHdbInstalled(OQ,mo)||(Yy("Harper is not installed. Harper must be installed before running an upgrade.",du.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await LQ.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),Yy(`This version of HarperDB is ${CQ.version}`,du.LOG_LEVELS.INFO);let n=r[sD]??CQ.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${du.HDB_SUPPORT_ADDRESS}`),mo.notify("Missing new version field from upgrade info object"),process.exit(1)),await SRe();let s,i=0;try{s=await pRe.forceUpdatePrompt(r)}catch(a){mo.error("There was an error when prompting user about upgrade."),mo.error(a),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),mo.info(`Starting upgrade to version ${n}`),await TRe(r),Yy(`HarperDB was successfully upgraded to version ${r[sD]}`,du.LOG_LEVELS.INFO)}o(gRe,"upgrade");async function SRe(){let e=!1,t=await NQ.findPs(du.HDB_PROC_NAME);if(rD.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await NQ.findPs("hdb_express");rD.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await nD.list();rD.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(PQ.red(r)),mo.error(r),process.exit(1)}}o(SRe,"checkIfRunning");async function TRe(e){try{await fRe.processDirectives(e)}catch(t){throw Yy("There was an error during the data upgrade. Please check the logs.",du.LOG_LEVELS.ERROR),t}try{await LQ.insertHdbUpgradeInfo(e[sD])}catch(t){mo.error("Error updating the 'hdb_info' system table."),mo.error(t)}}o(TRe,"runUpgrade");function Yy(e,t=void 0){t||(t=mo.info),mo[t](e),console.log(PQ.magenta(e))}o(Yy,"printToLogAndConsole")});var kQ=M(zy=>{"use strict";var ye=ue();ye.initSync();of();var yr=(H(),D(W)),{CONFIG_PARAMS:Be}=yr,Kn=Q(),fu=require("fs-extra"),fa=require("path"),yRe=CL(),{install:RRe}=RQ(),iD=require("chalk"),{packageJson:ARe,PACKAGE_ROOT:bRe}=Tt(),mu=oe(),IRe=(ZL(),D(XL)),oD=yt(),UQ=kc(),vQ=CT(),wRe=MQ(),{compactOnStart:NRe}=(PO(),D(OO)),CRe=require("minimist"),ORe=fs(),{startHTTPThreads:PRe}=(aD(),D(HQ)),LRe=Gy(),{isMainThread:DRe}=require("worker_threads"),jke=qi(),Qke=Cl(),Jke=LI(),Xke=rp(),Wy=(H(),D(W)),po,Nf,xQ=!1,MRe="Upgrade complete. Starting HarperDB.",vRe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",URe="HarperDB not found, starting install process.",xRe="There was an error during install, check install_log.log for more details. Exiting.",BRe="HarperDB successfully started.";function FRe(){process.on("unhandledRejection",(e,t)=>{Kn.error("Unhandled promise rejection: Promise",t,"reason:",e)})}o(FRe,"addUnhandleRejectionListener");function kRe(){if(!xQ){let e=o(()=>{fu.removeSync(fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(kRe,"addExitListeners");async function BQ(e=!1,t=!1){if(console.log(iD.magenta("Starting HarperDB...")),FRe(),Kn.suppressLogging?.(()=>{console.log(iD.magenta(""+fu.readFileSync(fa.join(bRe,"utility/install/ascii_logo.txt"))))}),IRe.isHdbInstalled(ye,Kn)===!1){console.log(URe);try{await RRe()}catch(l){console.error(xRe,l),Kn.error(l),process.exit(1)}}if(!e){let l=UQ(Object.keys(yr.CONFIG_PARAM_MAP),!0);!mu.isEmpty(l)&&!mu.isEmptyOrZeroLength(Object.keys(l))&&oD.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=Nf?.service==="clustering";Nf?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.HDB_PID_FILE),i=VRe(s);i&&i!==1&&KRe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),po===void 0&&(po=af()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await vQ.generateNatsConfig(),await po.startClusteringProcesses(!0),process.exit()),kRe(),await fu.writeFile(fa.join(ye.get(Wy.CONFIG_PARAMS.ROOTPATH),Wy.HDB_PID_FILE),`${process.pid}`),Kn.info("HarperDB PID",process.pid);let a;try{let l=await LRe.getVersionUpdateInfo();l!==void 0&&(a=l[yr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await wRe.upgrade(l),console.log(MRe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),Kn.error(l)):(console.error(vRe,l),Kn.error(l)),process.exit(1)}yRe(),qRe(),await ORe.reviewSelfSignedCert(),mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&DRe&&await vQ.generateNatsConfig(t)}o(BQ,"initialize");async function HRe(e=!1){try{Nf=CRe(process.argv),Nf.ROOTPATH&&oD.updateConfigObject("settings_path",fa.join(Nf.ROOTPATH,yr.HDB_CONFIG_FILE)),await BQ(e,!0),ye.get(yr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await NRe();let t=process.env.IS_SCRIPTED_SERVICE&&!Nf.service;mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await po.startClusteringProcesses(),await po.startClusteringThreads()),await PRe(process.env.DEV_MODE?1:ye.get(Wy.CONFIG_PARAMS.THREADS_COUNT)??ye.get(Wy.CONFIG_PARAMS.THREADS)),t||FQ()}catch(t){console.error(t),Kn.error(t),process.exit(1)}}o(HRe,"main");function FQ(){Kn.suppressLogging(()=>{console.log(iD.magenta(`HarperDB ${ARe.version} successfully started`))}),Kn.notify(BRe)}o(FQ,"started");async function GRe(e=!0){xQ=!e;try{po===void 0&&(po=af()),po.enterPM2Mode(),await BQ(),mu.autoCastBoolean(ye.get(yr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await po.startClusteringProcesses(),await po.startService(yr.PROCESS_DESCRIPTORS.HDB),FQ(),e&&process.exit(0)}catch(t){console.error(t),Kn.error(t),process.exit(1)}}o(GRe,"launch");function qRe(){let e=fa.join(ye.get(yr.CONFIG_PARAMS.ROOTPATH),yr.LICENSE_KEY_DIR_NAME,yr.LICENSE_FILE_NAME),t=fa.join(e,yr.LICENSE_FILE_NAME),r=fa.join(e,yr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=UQ(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(mu.isEmpty(n)||mu.isEmpty(s))return;fu.mkdirpSync(e),fu.writeFileSync(r,n),fu.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Kn.error(s)}}o(qRe,"writeLicenseFromVars");zy.launch=GRe;zy.main=HRe;zy.startupLog=$Re;function $Re(e){let r=o(p=>p.padEnd(20),"pad"),n=`
114
114
  `;ye.get(Be.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${ye.get(Be.REPLICATION_HOSTNAME)}
115
115
  `),ye.get(Be.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${ye.get(Be.REPLICATION_URL)}
116
116
  `),n+=`${r("Worker Threads:")}${ye.get(Be.THREADS_COUNT)}
@@ -123,16 +123,16 @@ Reindexing upgrade started for transaction logs`),ca.notify("Reindexing upgrade
123
123
  `,n+=r("MQTT:"),n+=ye.get(Be.MQTT_NETWORK_PORT)?`TCP: ${ye.get(Be.MQTT_NETWORK_PORT)}, `:"",n+=ye.get(Be.MQTT_NETWORK_SECUREPORT)?`TLS: ${ye.get(Be.MQTT_NETWORK_SECUREPORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_PORT)?`, WS: ${ye.get(Be.HTTP_PORT)}`:"",n+=ye.get(Be.MQTT_WEBSOCKET)&&ye.get(Be.HTTP_SECUREPORT)?`, WSS: ${ye.get(Be.HTTP_SECUREPORT)}
124
124
  `:`
125
125
  `;let i=ye.get(Be.REPLICATION_PORT)??ye.get(Be.OPERATIONSAPI_NETWORK_PORT),a=ye.get(Be.REPLICATION_SECUREPORT)??ye.get(Be.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
126
- `;let l=[],u=nD.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
126
+ `;let l=[],u=oD.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
127
127
  `);let m=ye.get(Be.HTTP_PORT)?`HTTP: ${ye.get(Be.HTTP_PORT)}, `:"";m+=ye.get(Be.HTTP_SECUREPORT)?`HTTPS: ${ye.get(Be.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
128
128
  `:n+=`${r(p+": ")}${m}
129
- `;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Kn.logsAtLevel("info")&&Kn.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(FRe,"startupLog");function kRe(e){try{return Number.parseInt(fu.readFileSync(e,"utf8"),10)}catch{return null}}o(kRe,"readPidFile");function HRe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(HRe,"isProcessRunning")});var BQ={};Ie(BQ,{SERVERS:()=>Cf,portServer:()=>iD,setPortServerMap:()=>jy});function jy(e,t){let r=iD.get(e)??[];iD.set(e,[...r,t])}var Cf,iD,oD=ie(()=>{Cf={},iD=new Map;o(jy,"setPortServerMap")});var tR={};Ie(tR,{deliverSocket:()=>jQ,getHttpOptions:()=>VRe,getRequestId:()=>ZQ,handleApplication:()=>$Re,httpServer:()=>pD,logRequest:()=>yE,proxyRequest:()=>KRe,registerServer:()=>fD,suppressHandleApplicationWarning:()=>GRe});function $Re(e){RE=e.options.getAll(),e.options.on("change",t=>{RE=e.options.getAll()})}function VRe(){return RE}function jQ(e,t,r){let n=e?.read?e:new GQ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Cf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=Cf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ma.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function KRe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=FQ.get(s),r){case"connection":i=jQ(void 0,t),FQ.set(s,i),i.write=(c,l,u)=>(Jy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Jy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),Jy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"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}}function fD(e,t,r=!0){t||(t=Lr.default.get(B.HTTP_PORT));let n=Cf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",qQ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else Cf[t]=e;e.on("unhandled",qQ)}function mD(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Lr.default.get(B.HTTP_PORT)!=null&&t.push({port:Lr.default.get(B.HTTP_PORT),secure:Lr.default.get(B.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(B.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(B.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,$Q.resolvePath)(Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function pD(e,t){let r=[];for(let{port:n,secure:s}of mD(t))r.push(QQ(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?uD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,fD(e,n,!1)),Xy[n]=Zy(uD,n);return r}function QQ(e,t,r,n){if(jy(e,{protocol_name:t?"HTTPS":"HTTP",name:rR()}),!Qy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),a=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(B.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,VQ.getTicketKeys)(),SNICallback:(0,KQ.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let A=performance.now(),S=0;try{let N=new ja(E,g);r&&(N.isOperationsServer=!0),RE.logging?.id&&(N.requestId=S=ZQ());let O=await Xy[e](N);if(!O){if(N._nodeResponse.statusCode){yE(E,N._nodeResponse.statusCode,S,performance.now()-A);return}O=JQ(N)}if(O.headers?.set||(O.headers=new Us(O.headers)),await gP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let re of O.headers||[])g.setHeader(re[0],re[1]);return E.baseRequest=N,g.baseResponse=O,Qy[e].emit("unhandled",E,g)}let F=O.status||200;g.statusCode=F;let ee=performance.now(),q=ee-A,k=O.body,J,Y=!1;if(!O.handlesHeaders){let re=O.headers||new Us;k?k.length>=0?(typeof k=="string"?re.set("Content-Length",Buffer.byteLength(k)):re.set("Content-Length",k.length),J=!0):k instanceof ws&&(k.size?re.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Te=>{g.headersSent||g.setHeader("Content-Length",Te)})),k=k.stream()):(re.set("Content-Length","0"),J=!0);let Re=`hdb;dur=${q.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),Ap(re,"Server-Timing",Re,!0),!g.headersSent)if(Y){if(re)if(re[Symbol.iterator])for(let[Te,Fe]of re)g.setHeader(Te,Fe);else for(let Te in re)g.setHeader(Te,re[Te])}else g.writeHead(F,re&&(re[Symbol.iterator]?Array.from(re):re));J&&g.end(k)}let le=N.handlerPath,ae=N.method;if(Je(q,"duration",le,ae,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(F<400,"success",le,ae),zr(1,"response_"+F,le,ae),yE(E,F,S,q),!J)if(k instanceof ReadableStream&&(k=lD.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=lD.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let re=0;k.on("data",Re=>{re+=Re.length}),k.on("end",()=>{Je(performance.now()-ee,"transfer",le,ae),Je(re,"bytes-sent",le,ae)})}else k?.then?k.then(re=>{g.end(re)},R):g.end(k)}catch(N){R(N)}function R(N){let O=N.headers,F=N.statusCode||500;g.writeHead(F,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(qRe(N)),yE(E,F,S,performance.now()-A),N.statusCode?N.statusCode===500?ma.default.warn(N):ma.default.info(N):ma.default.error(N)}o(R,"onError")},"requestHandler"),p=kg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Je(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Qy[e]=(t?f?YQ.createSecureServer:WQ.createServer:eR.createServer)(l,(E,g)=>{let A=E.method;A==="GET"||A==="OPTIONS"||A==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Je(performance.now()-E._parent.startTime,"tls-handshake",e),Je(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),fD(h,e)}return Qy[e]}function Zy(e,t){let r=JQ;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function JQ(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Us}}function YRe(e,t){pD(e,{requestOnly:!0,...t})}function XQ(e,t){for(let{port:r}of mD(t))kQ[t?.runFirst?"unshift":"push"]({listener:e,port:r}),dD[r]=Zy(kQ,r)}function WRe(e,t){let r=[];for(let{port:n,secure:s}of mD(t)){jy(n,{protocol_name:s?"WSS":"WS",name:rR()});let i=QQ(n,s,t?.isOperationsServer,t?.mtls);SE[n]||(SE[n]=new zQ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),SE[n].on("connection",(a,c)=>{try{let l=new ja(c);l.isWebSocket=!0;let u=Xy[n](l);ma.default.debug("Received WS connection, calling listeners",aD),HQ[n](a,l,u)}catch(l){ma.default.warn("Error in handling WS connection",l)}}),XQ((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):SE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),SE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{dD[n]&&dD[n](a,c,l)})),r.push(i),aD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),HQ[n]=Zy(aD,n),Xy[n]=Zy(uD,n)}return r}function qQ(e,t){t.writeHead(404),t.end(`Not found
130
- `),yE(e,404,0,e.requestId)}function yE(e,t,r,n){let s=RE.logging;if(s){cD||(cD=ma.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";cD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+zRe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function zRe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function ZQ(){return TE||(TE=new BigInt64Array([1n]),TE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",TE.buffer))),Number(Atomics.add(TE,0,1n))}var GQ,ma,Jy,Lr,$Q,VQ,KQ,YQ,WQ,eR,lD,zQ,qRe,SE,Qy,Xy,uD,RE,GRe,FQ,kQ,dD,aD,HQ,cD,TE,hD=ie(()=>{GQ=require("node:net"),ma=w(Q()),Jy=require("node:worker_threads"),Lr=w(ue());H();$Q=w(Tt()),VQ=w(nt()),KQ=w(fs()),YQ=require("node:http2"),WQ=require("node:https"),eR=require("node:http");Fp();bp();Ns();Ps();lD=require("node:stream");xr();oD();Fh();Kw();zQ=require("ws");Wh();({errorToString:qRe}=ma.default);Ue.http=pD;Ue.request=YRe;Ue.ws=WRe;Ue.upgrade=XQ;SE={},Qy={},Xy={},uD=[],RE={},GRe=!0;o($Re,"handleApplication");o(VRe,"getHttpOptions");o(jQ,"deliverSocket");FQ=new Map;o(KRe,"proxyRequest");o(fD,"registerServer");o(mD,"getPorts");o(pD,"httpServer");o(QQ,"getHTTPServer");o(Zy,"makeCallbackChain");o(JQ,"unhandled");o(YRe,"onRequest");Object.defineProperty(eR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});kQ=[],dD={};o(XQ,"onUpgrade");aD=[],HQ={};o(WRe,"onWebSocket");o(qQ,"defaultNotFound");o(yE,"logRequest");o(zRe,"headersToString");o(ZQ,"getRequestId")});var _D=M(bE=>{"use strict";NA();var{isMainThread:ED,parentPort:e4,threadId:nR,workerData:jRe}=require("node:worker_threads"),{createServer:QRe}=require("node:net"),{unlinkSync:r4,existsSync:JRe}=require("fs"),n4;bE.whenComponentsLoaded=new Promise(e=>{n4=e});var Oi=Q(),ei=ue(),Ts=(H(),D(W)),{server:XRe}=(xr(),D(rm)),{createServer:ZRe}=require("node:tls"),{restartNumber:eAe,getWorkerIndex:Of}=nt(),{createReuseportFd:AE}=(Fp(),D(nG)),{createTLSSelector:tAe}=fs(),{resolvePath:rAe}=Tt(),{startupLog:nAe}=UQ(),{SERVERS:Pf,setPortServerMap:t4,portServer:sAe}=(oD(),D(BQ)),iAe=(hD(),D(tR)),oAe=ii(),s4=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG),aAe=ei.get(Ts.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);XRe.socket=cAe;if(s4){let e;if(ED)e=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Oi.info("Could not close debugger",t)}});else{let t=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Of()>=0&&(e=t+Of())}if(e){let t=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Oi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&ED)try{require("inspector").open(9229)}catch(e){eAe<=1&&Oi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Oi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:oHe,CONFIG_PARAMS:aHe}=Ts;ei.initSync();bE.globals=oAe;bE.listenOnPorts=o4;bE.startServers=i4;function i4(){let e=ei.get(Ts.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=sR().loadRootComponents(!0).then(()=>{e4?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)iAe.proxyRequest(n);else if(n.type===Ts.ITC_EVENT_TYPES.SHUTDOWN){Oi.trace("received shutdown request",nR);for(let c in Pf){let l=Pf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?Oi.info(`Closing ${E.length} idle connections`):h&&Oi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,A=E.length;g<A;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
129
+ `;console.log(n),ye.get(Be.LOGGING_STDSTREAMS)&&Kn.logsAtLevel("info")&&Kn.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o($Re,"startupLog");function VRe(e){try{return Number.parseInt(fu.readFileSync(e,"utf8"),10)}catch{return null}}o(VRe,"readPidFile");function KRe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(KRe,"isProcessRunning")});var GQ={};Ie(GQ,{SERVERS:()=>Cf,portServer:()=>cD,setPortServerMap:()=>jy});function jy(e,t){let r=cD.get(e)??[];cD.set(e,[...r,t])}var Cf,cD,lD=ie(()=>{Cf={},cD=new Map;o(jy,"setPortServerMap")});var tR={};Ie(tR,{deliverSocket:()=>ZQ,getHttpOptions:()=>jRe,getRequestId:()=>n4,handleApplication:()=>zRe,httpServer:()=>_D,logRequest:()=>yE,proxyRequest:()=>QRe,registerServer:()=>hD,suppressHandleApplicationWarning:()=>WRe});function zRe(e){RE=e.options.getAll(),e.options.on("change",t=>{RE=e.options.getAll()})}function jRe(){return RE}function ZQ(e,t,r){let n=e?.read?e:new YQ.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Cf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=Cf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ma.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function QRe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=qQ.get(s),r){case"connection":i=ZQ(void 0,t),qQ.set(s,i),i.write=(c,l,u)=>(Jy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Jy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),Jy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"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}}function hD(e,t,r=!0){t||(t=Lr.default.get(B.HTTP_PORT));let n=Cf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",KQ),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else Cf[t]=e;e.on("unhandled",KQ)}function ED(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],Lr.default.get(B.HTTP_PORT)!=null&&t.push({port:Lr.default.get(B.HTTP_PORT),secure:Lr.default.get(B.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Lr.default.get(B.HTTP_SECUREPORT)!=null&&t.push({port:Lr.default.get(B.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,WQ.resolvePath)(Lr.default.get(B.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function _D(e,t){let r=[];for(let{port:n,secure:s}of ED(t))r.push(e4(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?mD[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,hD(e,n,!1)),Xy[n]=Zy(mD,n);return r}function e4(e,t,r,n){if(jy(e,{protocol_name:t?"HTTPS":"HTTP",name:rR()}),!Qy[e]){let s=r?"operationsApi_network":"http",i=Lr.default.get(s+"_keepAliveTimeout"),a=Lr.default.get(s+"_timeout"),c=Lr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Lr.default.get(B.HTTP_MAXHEADERSIZE)},u=Lr.default.get(s+"_mtls"),d=Lr.default.get(s+"_mtls_required"),f;if(t){let E=Lr.default.get("tls");f=Lr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,zQ.getTicketKeys)(),SNICallback:(0,jQ.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=o(async(E,g)=>{let A=performance.now(),S=0;try{let N=new ja(E,g);r&&(N.isOperationsServer=!0),RE.logging?.id&&(N.requestId=S=n4());let O=await Xy[e](N);if(!O){if(N._nodeResponse.statusCode){yE(E,N._nodeResponse.statusCode,S,performance.now()-A);return}O=t4(N)}if(O.headers?.set||(O.headers=new Us(O.headers)),await gP()?O.headers.set("Server","HarperDB"):O.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),O.status===-1){for(let re of O.headers||[])g.setHeader(re[0],re[1]);return E.baseRequest=N,g.baseResponse=O,Qy[e].emit("unhandled",E,g)}let F=O.status||200;g.statusCode=F;let te=performance.now(),G=te-A,k=O.body,J,Y=!1;if(!O.handlesHeaders){let re=O.headers||new Us;k?k.length>=0?(typeof k=="string"?re.set("Content-Length",Buffer.byteLength(k)):re.set("Content-Length",k.length),J=!0):k instanceof ws&&(k.size?re.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",Te=>{g.headersSent||g.setHeader("Content-Length",Te)})),k=k.stream()):(re.set("Content-Length","0"),J=!0);let Re=`hdb;dur=${G.toFixed(2)}`;if(O.wasCacheMiss&&(Re+=", miss"),Ap(re,"Server-Timing",Re,!0),!g.headersSent)if(Y){if(re)if(re[Symbol.iterator])for(let[Te,Fe]of re)g.setHeader(Te,Fe);else for(let Te in re)g.setHeader(Te,re[Te])}else g.writeHead(F,re&&(re[Symbol.iterator]?Array.from(re):re));J&&g.end(k)}let le=N.handlerPath,ae=N.method;if(Je(G,"duration",le,ae,O.wasCacheMiss==null?void 0:O.wasCacheMiss?"cache-miss":"cache-hit"),zr(F<400,"success",le,ae),zr(1,"response_"+F,le,ae),yE(E,F,S,G),!J)if(k instanceof ReadableStream&&(k=fD.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=fD.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let re=0;k.on("data",Re=>{re+=Re.length}),k.on("end",()=>{Je(performance.now()-te,"transfer",le,ae),Je(re,"bytes-sent",le,ae)})}else k?.then?k.then(re=>{g.end(re)},R):g.end(k)}catch(N){R(N)}function R(N){let O=N.headers,F=N.statusCode||500;g.writeHead(F,O&&(O[Symbol.iterator]?Array.from(O):O)),g.end(YRe(N)),yE(E,F,S,performance.now()-A),N.statusCode?N.statusCode===500?ma.default.warn(N):ma.default.info(N):ma.default.error(N)}o(R,"onError")},"requestHandler"),p=kg(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Je(!0,"service-unavailable",e)},Lr.default.get(s+"_requestQueueLimit")),h=Qy[e]=(t?f?QQ.createSecureServer:JQ.createServer:eR.createServer)(l,(E,g)=>{let A=E.method;A==="GET"||A==="OPTIONS"||A==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Je(performance.now()-E._parent.startTime,"tls-handshake",e),Je(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),hD(h,e)}return Qy[e]}function Zy(e,t){let r=t4;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function t4(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Us}}function JRe(e,t){_D(e,{requestOnly:!0,...t})}function r4(e,t){for(let{port:r}of ED(t))$Q[t?.runFirst?"unshift":"push"]({listener:e,port:r}),pD[r]=Zy($Q,r)}function XRe(e,t){let r=[];for(let{port:n,secure:s}of ED(t)){jy(n,{protocol_name:s?"WSS":"WS",name:rR()});let i=e4(n,s,t?.isOperationsServer,t?.mtls);SE[n]||(SE[n]=new XQ.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),SE[n].on("connection",(a,c)=>{try{let l=new ja(c);l.isWebSocket=!0;let u=Xy[n](l);ma.default.debug("Received WS connection, calling listeners",uD),VQ[n](a,l,u)}catch(l){ma.default.warn("Error in handling WS connection",l)}}),r4((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):SE[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),SE[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{pD[n]&&pD[n](a,c,l)})),r.push(i),uD[t?.runFirst?"unshift":"push"]({listener:e,port:n}),VQ[n]=Zy(uD,n),Xy[n]=Zy(mD,n)}return r}function KQ(e,t){t.writeHead(404),t.end(`Not found
130
+ `),yE(e,404,0,e.requestId)}function yE(e,t,r,n){let s=RE.logging;if(s){dD||(dD=ma.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";dD[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+ZRe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function ZRe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function n4(){return TE||(TE=new BigInt64Array([1n]),TE=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",TE.buffer))),Number(Atomics.add(TE,0,1n))}var YQ,ma,Jy,Lr,WQ,zQ,jQ,QQ,JQ,eR,fD,XQ,YRe,SE,Qy,Xy,mD,RE,WRe,qQ,$Q,pD,uD,VQ,dD,TE,gD=ie(()=>{YQ=require("node:net"),ma=w(Q()),Jy=require("node:worker_threads"),Lr=w(ue());H();WQ=w(yt()),zQ=w(nt()),jQ=w(fs()),QQ=require("node:http2"),JQ=require("node:https"),eR=require("node:http");Fp();bp();Ns();Ps();fD=require("node:stream");xr();lD();Fh();Kw();XQ=require("ws");Wh();({errorToString:YRe}=ma.default);Ue.http=_D;Ue.request=JRe;Ue.ws=XRe;Ue.upgrade=r4;SE={},Qy={},Xy={},mD=[],RE={},WRe=!0;o(zRe,"handleApplication");o(jRe,"getHttpOptions");o(ZQ,"deliverSocket");qQ=new Map;o(QRe,"proxyRequest");o(hD,"registerServer");o(ED,"getPorts");o(_D,"httpServer");o(e4,"getHTTPServer");o(Zy,"makeCallbackChain");o(t4,"unhandled");o(JRe,"onRequest");Object.defineProperty(eR.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});$Q=[],pD={};o(r4,"onUpgrade");uD=[],VQ={};o(XRe,"onWebSocket");o(KQ,"defaultNotFound");o(yE,"logRequest");o(ZRe,"headersToString");o(n4,"getRequestId")});var TD=M(bE=>{"use strict";NA();var{isMainThread:SD,parentPort:s4,threadId:nR,workerData:eAe}=require("node:worker_threads"),{createServer:tAe}=require("node:net"),{unlinkSync:o4,existsSync:rAe}=require("fs"),a4;bE.whenComponentsLoaded=new Promise(e=>{a4=e});var Oi=Q(),ei=ue(),Ts=(H(),D(W)),{server:nAe}=(xr(),D(rm)),{createServer:sAe}=require("node:tls"),{restartNumber:iAe,getWorkerIndex:Of}=nt(),{createReuseportFd:AE}=(Fp(),D(oq)),{createTLSSelector:oAe}=fs(),{resolvePath:aAe}=yt(),{startupLog:cAe}=kQ(),{SERVERS:Pf,setPortServerMap:i4,portServer:lAe}=(lD(),D(GQ)),uAe=(gD(),D(tR)),dAe=ii(),c4=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG),fAe=ei.get(Ts.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);nAe.socket=mAe;if(c4){let e;if(SD)e=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Oi.info("Could not close debugger",t)}});else{let t=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Of()>=0&&(e=t+Of())}if(e){let t=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=ei.get(Ts.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Oi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&SD)try{require("inspector").open(9229)}catch(e){iAe<=1&&Oi.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&Oi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:fHe,CONFIG_PARAMS:mHe}=Ts;ei.initSync();bE.globals=dAe;bE.listenOnPorts=u4;bE.startServers=l4;function l4(){let e=ei.get(Ts.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=sR().loadRootComponents(!0).then(()=>{s4?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)uAe.proxyRequest(n);else if(n.type===Ts.ITC_EVENT_TYPES.SHUTDOWN){Oi.trace("received shutdown request",nR);for(let c in Pf){let l=Pf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?Oi.info(`Closing ${E.length} idle connections`):h&&Oi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,A=E.length;g<A;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
131
131
  Connection: close\r
132
132
  \r
133
- `))}},25).unref()}l.close?.(()=>{if(ei.get(Ts.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Of()==0)try{r4(rAe(ei.get(Ts.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,nR),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",nR),process.exit(0)},5e3).unref()})}if(s4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;AE&&!aAe&&(r=o4()),Promise.resolve(r).then(()=>{if(Of()===0)try{nAe(sAe)}catch(n){console.error("Error displaying start-up log",n)}e4?.postMessage({type:Ts.ITC_EVENT_TYPES.CHILD_STARTED})})});return n4(t),t}o(i4,"startServers");function o4(){let e=[];for(let t in Pf){let r=Pf[t];if(t.includes?.("/")&&Of()==0){JRe(t)&&r4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ei.get(Ts.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Of();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?AE?n={fd:AE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:AE?n={fd:AE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,nR)}).on("error",c)}))}return Promise.all(e)}o(o4,"listenOnPorts");!ED&&!jRe?.noServerStart&&i4();function cAe(e,t){let r=(Fh(),D(GT)).getComponentName,n;if(t.securePort){t4(t.securePort,{protocol_name:"TLS",name:r()});let s=tAe("server",t.mtls),i=ei.get("tls");n=ZRe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Pf[t.securePort]=n}return t.port&&(t4(t.port,{protocol_name:"TCP",name:r()}),n=QRe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Pf[t.port]=n),n}o(cAe,"onSocket")});var xQ={};Ie(xQ,{startHTTPThreads:()=>lAe,startSocketServer:()=>yD,updateWorkerIdleness:()=>m4});async function lAe(e=2,t){_b().catch(r=>aR.error?.("Error recording hostname for analytics:",r));try{if(t)SD(0,1,!0);else{let{loadRootComponents:r}=sR();if(e===0)return(0,ho.setMainIsWorker)(!0),await _D().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)SD(r,e);return Promise.all(f4)}finally{(0,ho.threadsHaveStarted)()}}function SD(e,t=1,r){if(gD++,(0,ho.startWorker)("server/threads/threadServer.js",{name:hA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===fA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});f4.push(s),await s,Lf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=oR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Lf.indexOf(n);a>-1&&Lf.splice(a,1)}if(o(i,"removeWorker"),Df){let a=Df;Df=[];for(let c of a)d4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{TD?TD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,ho.shutdownWorkers)(),gD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function yD(e=0,t){if(typeof e=="string")try{(0,cR.existsSync)(e)&&(0,cR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=uAe:r=dAe(t):r=RD;let n=(0,Mf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=d4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),TD=!0,r(i,(a,c)=>{if(!a){if(a4){let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});a4.deliverSocket(u,e,c),u.resume()}else gD>0?(Df.length===0&&setTimeout(()=>{Df.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(),i.localPort=e,Df.push(i)):(console.log("start up a dynamic thread to handle request"),SD(0));Je(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});pAe(u,a,e)}Je(!0,"socket-routed")})},aR.info(`HarperDB ${u4.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function RD(e,t){let r,n=0;for(let s of Lf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=iR)return iR=i,t(r);n=i}iR=0,t(r)}function uAe(e,t){let r={};e.getpeername(r);let n=r.address,s=vf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);RD(e,a=>{vf.set(n,{worker:a,lastUsed:i}),t(a)})}function dAe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Mf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=vf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);RD(n,f=>{vf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function m4(){iR=0;for(let e of Lf)e.expectedIdle=e.recentELU.idle+fAe,e.requests=1;Lf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function pAe(e,t,r){let n=mAe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),oR.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),oR.delete(n)),s.event=="destroy"&&(e.destroy(),oR.delete(n))})}var ho,Mf,aR,cR,l4,u4,Lf,Df,d4,a4,gD,f4,TD,iR,c4,vf,fAe,oR,mAe,sD=ie(()=>{ho=w(nt()),Mf=require("net");H();aR=w(Q()),cR=require("fs");Ps();l4=require("worker_threads"),u4=w(bt()),Lf=[],Df=[],d4=[],gD=0,f4=[];l4.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(lAe,"startHTTPThreads");o(SD,"startHTTPWorker");o(yD,"startSocketServer");iR=0;o(RD,"findMostIdleWorker");c4=36e5,vf=new Map;o(uAe,"findByRemoteAddressAffinity");o(dAe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vf)r.lastUsed+c4<e&&vf.delete(t)},c4).unref();fAe=1e3;o(m4,"updateWorkerIdleness");(0,ho.setMonitorListener)(m4);oR=new Map,mAe=1;o(pAe,"proxySocket")});var AD={};Ie(AD,{hdbServer:()=>gAe,start:()=>gAe});async function gAe(e){try{Eo.default.debug("In Fastify server"+process.cwd()),Eo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Eo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=p4.default.isMaster,await SAe();let t=e.securePort>0;Uf=TAe(t),await Uf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(Uf.server,e),Uf.server.closeIdleConnections||await Uf.listen({port:0,host:"::"})}catch(r){throw Uf.close(),Eo.default.error(r),Eo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Eo.default.fatal(t),process.exit(1)}}async function SAe(){return Eo.default.trace("Configuring HarperDB process."),R4.default.setSchemaDataToGlobal(),b4.default.setUsersWithRolesCache()}function TAe(e){Eo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=yAe(e),r=(0,h4.default)(t);r.server.headersTimeout=AAe(),r.setErrorHandler(Ic.serverErrorHandler);let n=RAe();n&&r.register(E4.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(S4.default),r.register(_4.default),r.register(g4.default,{root:T4.default.join(y4.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=bc.default.get(Zf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!A4.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Ic.reqBodyValidationHandler,Ic.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Ic.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),Eo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function yAe(e){let t=bc.default.get(IE.OPERATIONSAPI_NETWORK_TIMEOUT),r=bc.default.get(IE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:EAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function RAe(){let e=bc.default.get(IE.OPERATIONSAPI_NETWORK_CORS),t=bc.default.get(IE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===_Ae)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function AAe(){return bc.default.get(IE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??hAe}var p4,bc,Eo,h4,E4,_4,g4,S4,T4,y4,R4,A4,b4,Ic,hAe,EAe,_Ae,IE,Uf,I4=ie(()=>{p4=w(require("cluster")),bc=w(ue());H();Eo=w(Q()),h4=w(require("fastify")),E4=w(require("@fastify/cors")),_4=w(require("@fastify/compress")),g4=w(require("@fastify/static")),S4=w(yN()),T4=w(require("path")),y4=w(bt()),R4=w(Ki()),A4=w(oe()),b4=w(as());xr();Ic=w(by());Po();bc.default.initSync();hAe=6e4,EAe=1024*1024*1024,_Ae="TRUE",{CONFIG_PARAMS:IE}=W;o(gAe,"operationsServer");o(SAe,"setUp");o(TAe,"buildServer");o(yAe,"getServerOptions");o(RAe,"getCORSOpts");o(AAe,"getHeaderTimeoutConfig")});var OD={};Ie(OD,{disableNATS:()=>IAe,publishToStream:()=>dR,setNATSReplicator:()=>bD,setPublishToStream:()=>wAe,setSubscription:()=>CD,start:()=>bAe});function bAe(){wE.default.get(B.CLUSTERING_ENABLED)&&CAe()}function IAe(e=!0){P4=e}function wAe(e,t){dR=e,CD=t}function CAe(){if(P4||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];bD(s,r,i)}}Il((r,n)=>{bD(r.tableName,r.databaseName,r),n&&D4(r)}),!w4&&(w4=!0)}function bD(e,t,r){if(t==="system"&&OAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){D4(i)}static subscribe(){let i=new Jn;return CD(t,e,i),i}static subscribeOnThisThread(i){return i<(wE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??NAe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new lR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=L4;return i}o(n,"getNATSTransaction")}function D4(e){let t=wE.default.get(B.CLUSTERING_NODENAME);dR(`${wD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ND.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 N4,wD,ND,C4,O4,wE,uR,P4,dR,CD,NAe,L4,w4,OAe,lR,ID,M4=ie(()=>{Oe();Ua();N4=w(mr()),wD=w(wt()),ND=w(Wi());wu();C4=w(kN()),O4=w(Cn()),wE=w(ue());H();uR=w(Q());o(bAe,"start");o(IAe,"disableNATS");dR=N4.publishToStream,CD=C4.setSubscription;o(wAe,"setPublishToStream");NAe=2;o(CAe,"assignReplicationSource");OAe=["hdb_job","hdb_raw_analytics","hdb_info"];o(bD,"setNATSReplicator");o(D4,"publishSchema");lR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=wE.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(uR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(dR(`${wD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,ND.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw uR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},ID=class extends lR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,O4.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};L4=new ID});async function F4({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await PD.get(e,{returnNonexistent:!0});i=new MD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await PD.get(e);a&&a.delete()}i=new mR(e,t)}return n&&(n.id=e,n.user={username:t?.username},NE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function LD(){return fR++,fR>65500&&(fR=1),fR}function DD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ds.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return Rt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var U4,wc,x4,B4,v4,PD,NE,fR,mR,MD,k4=ie(()=>{Oe();xa();U4=w(Cn()),wc=w(Q());Ca();x4=w(nt()),B4=w(_D());xr();X_();v4=100,PD=Xe({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"}]}}]}),NE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,x4.getWorkerIndex)()===0&&(async()=>{await B4.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of NE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await DD(r,t,r)}catch{(0,wc.warn)("Failed to publish will",t)}NE.delete(e.id)}})();o(F4,"getSession");fR=1;o(LD,"getNextMessageId");mR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,wc.trace)("Resuming subscription from",s,"from",a);let p=Ds.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),N;for(let ee=0;ee<R.length;ee++)if(R[ee].indexOf("+")>-1)if(R[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(ee=>{let q=ee.id;if(!Array.isArray(q))if(q?.indexOf?.("/")>-1)q=q.split("/");else return!1;if(O&&q.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==q[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await Rt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=LD());let ee=O.id;if(Array.isArray(ee)&&(ee=$u(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,O.value,F,t)===!1)break;this.awaitingAcks?.size>v4?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-v4)):await new Promise(setImmediate)}catch(F){(0,wc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=LD();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return DD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Rt(r,async()=>{try{if(!t){let n=await NE.get(this.sessionId);n?.doesExist()&&await DD(n,n.data,r)}}finally{await NE.delete(this.sessionId)}}).catch(n=>{(0,wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(DD,"publish");MD=class extends mR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=LD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,wc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,U4.getNextMonotonicTime)()),(0,wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),PD.put(this.sessionRecord)}}});var vD={};Ie(vD,{bypassAuth:()=>PAe,start:()=>DAe});function PAe(){Y4=!0}function DAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new K4.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Xt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=q4(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Xt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Xt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await qd(p,l);if(!E.valid)throw Xt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hR.notify?.({username:d?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hR.error?.({username:h,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Xt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Xt.error?.(p)}else if(l.required)return Xt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&LAe(u.remoteAddress)&&(d=await(0,G4.getSuperUser)(),Xt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=q4(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Xt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function q4(e,t,r,n,s){H4||(H4=!0,Bm(f=>{pR>0&&f.push({metric:"mqtt-connections",connections:pR,byThread:!0})}));let i;pR++;let a,c={protocolVersion:4},l=(0,ER.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){pR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Xt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Xt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Xt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Je(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hR.notify?.({username:n?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hR.error?.({username:f.username,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=F4({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Xt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,Y,le,ae)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:ae.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Xt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let Y;try{let le=await a.addSubscription(J,J.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,J,a),le.statusCode?le.statusCode===500?Xt.warn?.(le):Xt.info?.(le):Xt.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let Y of f.unsubscriptions)J.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),q=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,q)}catch(J){s.events.emit("error",J,e,f,a),Xt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Xt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Xt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,ER.generate)(R,c);t(O),Je(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,r)}o(S,"serialize")}),l.on("error",f=>{Xt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ER,G4,xf,$4,V4,K4,hR,Xt,Y4,LAe,H4,pR,W4=ie(()=>{ER=require("mqtt-packet");k4();G4=w(as());Po();Ps();xr();xf=w(ue());H();$4=w(Xn()),V4=w(Q()),K4=require("events");QS();hR=(0,$4.loggerWithTag)("auth-event"),Xt=(0,V4.forComponent)("mqtt"),Y4=(0,xf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(PAe,"bypassAuth");LAe=o(e=>Y4&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(DAe,"start");pR=0;o(q4,"onSocket")});function _R(e,t){if(t?.includes(".."))throw new UD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var UD,xD=ie(()=>{UD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(_R,"resolveBaseURLPath")});function z4(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var j4=ie(()=>{o(z4,"deriveCommonPatternBase")});function gR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var BD=ie(()=>{o(gR,"deriveGlobOptions")});var Q4,FD,CE,J4=ie(()=>{xD();j4();BD();Q4=require("micromatch"),FD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},CE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=_R(this.name,this.config.urlPath),this.globOptions=gR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new FD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,Q4.scan)(s).base),this.commonPatternBase=z4(this.patternBases)}}});function X4(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function pu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(X4(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(X4(n,t)){t=t.slice(n.length+1);break}}}return(0,Z4.join)(e.baseURLPath,t)}var Z4,kD=ie(()=>{Z4=require("node:path");o(X4,"pathStartsWithBase");o(pu,"deriveURLPath")});function eJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var TR,tJ,rJ,HD,nJ,sJ,SR,iJ=ie(()=>{TR=require("node:events");J4();tJ=w(Q()),rJ=w(require("chokidar")),HD=require("node:path"),nJ=require("node:fs/promises");kD();sJ=require("micromatch"),SR=class extends TR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new CE(t,r,eJ(n)),this.#r=s||tJ.default.loggerWithTag(t),this.ready=(0,TR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,sJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,HD.join)(this.directory,r);switch(t){case"add":case"change":{let i=pu(this.#e,r,"file");(0,nJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=pu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=pu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,HD.join)(this.#e.directory,r));return this.#t=rJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new CE(this.name,this.directory,eJ(t)),this.#a()}};o(eJ,"castConfig")});var yR,qD=ie(()=>{yR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var AR,oJ,aJ,cJ,lJ,uJ,GD,$D,VD,KD,YD,RR,dJ=ie(()=>{AR=require("events"),oJ=w(require("yaml")),aJ=w(require("chokidar")),cJ=require("node:fs/promises"),lJ=require("util"),uJ=w(Q());qD();GD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},$D=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},VD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},KD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},YD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},RR=class extends AR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||uJ.default.loggerWithTag(t),this.ready=(0,AR.once)(this,"ready"),this.#t=aJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,cJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=oJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new GD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=yR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,lJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new $D;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new VD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new KD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new YD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var wR,fJ,bR,IR,mJ=ie(()=>{wR=require("node:events");iJ();dJ();fJ=w(Q());iP();bR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},IR=class extends wR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,fJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,wR.once)(this,"ready"),this.options=new RR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new SR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new bR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new bR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),mW()}}});function hu(e){return typeof e=="string"&&e.trim()!==""}function WD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>hu(t))}function _J(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function MAe(e){e.config.root&&OE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new eM(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(_J(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,PE.join)(e.directory,i);NR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function gJ(e){let t=!1;if(t=await MAe(e),t)return t;let r=await(0,pJ.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,PE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=pu(e,n.path,"directory");NR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=pu(e,n.path,"file"),a=await(0,hJ.readFile)(s);NR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else OE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var NR,pJ,OE,PE,hJ,EJ,CR,Pi,zD,jD,QD,JD,XD,ZD,eM,tM,rM,SJ=ie(()=>{NR=require("node:worker_threads"),pJ=w(require("fast-glob")),OE=w(Q());xD();BD();PE=require("node:path"),hJ=require("node:fs/promises");kD();EJ=require("micromatch"),CR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!hu(this.config.files)&&!WD(this.config.files)&&!_J(this.config.files))throw new zD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!WD(this.config.files.source)&&!hu(this.config.files.source))throw new jD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new QD(this);if(this.config.files.ignore!==void 0&&!WD(this.config.files.ignore)&&!hu(this.config.files.ignore))throw new JD(this)}if(this.config.root!==void 0&&!hu(this.config.root))throw new ZD(this);if(this.config.path!==void 0&&!hu(this.config.path))throw new tM(this);if(this.config.path&&(OE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!hu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new rM(this);this.globOptions=gR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new XD(this,r);return r.startsWith("/")&&(OE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,EJ.scan)(r).base),this.baseURLPath=_R(this.name,this.config.urlPath)}},Pi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,PE.basename)(r.directory)}) ${t}`)}},zD=class extends Pi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},jD=class extends Pi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},QD=class extends Pi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},JD=class extends Pi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},XD=class extends Pi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},ZD=class extends Pi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},eM=class extends Pi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},tM=class extends Pi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},rM=class extends Pi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(hu,"isNonEmptyString");o(WD,"isArrayOfNonEmptyStrings");o(_J,"isObject");o(MAe,"handleRoots");o(gJ,"processResourceExtensionComponent")});var GT={};Ie(GT,{getComponentName:()=>rR,loadComponent:()=>DR,loadComponentDirectories:()=>RJ,setErrorReporter:()=>UAe});function RJ(e,t){t&&(sM=t),e&&(cM=e);let r=[];if((0,Pt.existsSync)(nM)){let s=(0,Pt.readdirSync)(nM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(nM,a);r.push(DR(c,sM,cA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(DR(n,sM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{yJ=!0})}function UAe(e){PR=e}function xAe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{na.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(na.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(uM.PACKAGE_ROOT,t,"dir"),r()}finally{na.primaryStore.unlock(e,0)}})}function AJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return na.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(AJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{na.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function DR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(OR.has(a))return OR.get(a);OR.set(a,!0),s&&(cM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,MR.getConfigObj)():(0,oM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,oM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=yR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,aM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(uM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await xAe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=LR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;LR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,aM.getHdbBasePath)().length){F=null;break}if(F)E=await DR(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=vAe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new IR(m,e,l,t,Ue);await AJ(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(iM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!TJ.includes(O)){let F=lM.get(B.HTTP_SESSIONAFFINITY);F&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!oS)&&(TJ.push(O),yD(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),cM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new CR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await gJ(O)}Vo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,PR?.(A),((0,LE.getWorkerIndex)()===0?console:pa.default).error(A),t.set(h.path||"/",new sl(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if(LR=u,iM.isMainThread&&!yJ&&i&&(0,LE.watchDir)(e,async()=>RJ()),c.extensionModule||c.pluginModule){let m=await nS((0,on.join)(e,c.extensionModule||c.pluginModule));return OR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;PR?.(new Error(m)),((0,LE.getWorkerIndex)()===0?console:pa.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||pa.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,PR?.(c),t.set("",new sl(c))}}var Pt,on,iM,oM,lM,uM,pa,LE,aM,MR,nM,cM,yJ,sM,vAe,TJ,OR,PR,LR,rR,Fh=ie(()=>{Pt=require("node:fs"),on=require("node:path"),iM=require("node:worker_threads"),oM=require("yaml"),lM=w(ue()),uM=w(bt());H();Eq();wq();Hq();Yq();Wq();cG();s2();i2();a2();pa=w(Q());m2();LE=w(nt());uN();xr();Oe();sD();aM=w(ue());I4();xT();M4();us();W4();MR=w(Tt());Fp();Mb();mJ();SJ();hD();$h();Sp();qD();nM=(0,MR.resolvePath)(lM.get(B.COMPONENTSROOT)),cM=new Map;o(RJ,"loadComponentDirectories");vAe={REST:cS,rest:cS,graphql:rN,graphqlSchema:eN,roles:lN,jsResource:dN,fastifyRoutes:SL,login:mN,static:yL,operationsApi:AD,customFunctions:{},http:tR,clustering:OD,replication:zo,authentication:Lh,mqtt:vD,loadEnv:RL,logging:pa.default,dataLoader:AL},TJ=[],OR=new Map;o(UAe,"setErrorReporter");rR=o(()=>LR,"getComponentName");o(xAe,"symlinkHarperModule");o(AJ,"sequentiallyHandleApplication");o(DR,"loadComponent")});var sR=M((xqe,bJ)=>{var{isMainThread:dM}=require("worker_threads"),{getTables:BAe,getDatabases:vqe,table:Uqe}=(Oe(),D(mt)),{loadComponentDirectories:FAe,loadComponent:kAe}=(Fh(),D(GT)),{resetResources:HAe}=(xa(),D(vb)),qAe=VO(),GAe=Tt(),{dirname:$Ae}=require("path"),{getConnection:VAe}=mr(),KAe=ue(),{CONFIG_PARAMS:YAe}=(H(),D(W)),{loadCertificates:WAe}=fs(),{loadAndWatchLicensesDir:zAe}=(Wh(),D(ZT)),fM=new Map;async function jAe(e=!1){!dM&&KAe.get(YAe.CLUSTERING_ENABLED)&&VAe();try{dM&&await qAe()}catch(n){console.error(n)}let t=HAe();BAe(),t.isWorker=e,dM&&zAe(),await WAe(),await kAe($Ae(GAe.getConfigFilePath()),t,"hdb",!0,fM),await FAe(fM,t);let r=[];for(let[n]of fM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(jAe,"loadRootComponents");bJ.exports.loadRootComponents=jAe});var nt=M((Fqe,Di)=>{"use strict";NA();var{Worker:QAe,MessageChannel:JAe,parentPort:_o,isMainThread:_M,threadId:XAe,workerData:go}=require("worker_threads"),{PACKAGE_ROOT:ZAe}=bt(),{join:CJ,isAbsolute:ebe,extname:tbe}=require("path"),{server:OJ}=(xr(),D(rm)),{watch:rbe,readdir:nbe}=require("fs/promises"),{totalmem:IJ}=require("os"),Bf=(H(),D(W)),PJ=ue(),Li=Q(),{randomBytes:sbe}=require("crypto"),{_assignPackageExport:ibe}=ii(),wJ=1024*1024,Nc=[],ti=[],obe=50,gM=1e4,abe="restart",LJ="request_thread_info",DJ="resource_report",MJ="thread_info",vJ="added-port",cbe="ack",mM;ibe("threads",ti);Di.exports={startWorker:pM,restartWorkers:TM,shutdownWorkers:mbe,workers:Nc,setMonitorListener:ybe,onMessageFromWorkers:pbe,onMessageByType:qJ,broadcast:Ebe,broadcastWithAcknowledgement:gbe,setChildListenerByType:fbe,getWorkerIndex:UJ,getWorkerCount:xJ,getTicketKeys:FJ,setMainIsWorker:ube,setTerminateTimeout:lbe,restartNumber:go?.restartNumber||1};ti.onMessageByType=qJ;ti.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ti.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Di.exports.whenThreadsStarted=new Promise(e=>{Di.exports.threadsHaveStarted=e});var SM;function lbe(e){gM=e}o(lbe,"setTerminateTimeout");function UJ(){return go?go.workerIndex:SM?0:void 0}o(UJ,"getWorkerIndex");function xJ(){return go?go.workerCount:SM?1:void 0}o(xJ,"getWorkerCount");function ube(e){SM=e,Di.exports.threadsHaveStarted()}o(ube,"setMainIsWorker");var BJ=1,vR;function FJ(){return vR||(vR=_M?sbe(48):go.ticketKeys,vR)}o(FJ,"getTicketKeys");Object.defineProperty(OJ,"workerIndex",{get(){return UJ()}});Object.defineProperty(OJ,"workerCount",{get(){return xJ()}});var kJ={[LJ](e,t){Sbe(t)},[DJ](e,t){Tbe(t,e)}};function pM(e,t={}){let r=process.constrainedMemory?.()||IJ();r=Math.min(r,IJ(),2e4*wJ);let n=PJ.get(Bf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/wJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ti){let u=new JAe;u.existingPort=l,i.push(u),a.push(u.port2)}tbe(e)||(e+=".js");let c=new QAe(ebe(e)?e:CJ(ZAe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:BJ=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:FJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:vJ,port:l,threadId:c.threadId},[l]);return xR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>pM(e,t),c.on("error",l=>{Li.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Nc.splice(Nc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<obe?(t.unexpectedRestarts=c.unexpectedRestarts+1,pM(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{kJ[l.type]?.(l,c)}),Nc.push(c),Abe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(pM,"startWorker");var dbe=[Bf.THREAD_TYPES.HTTP];async function TM(e=null,t=Math.max(BJ>3,1),r=!0){if(_M){try{process.chdir(process.cwd())}catch(a){Li.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=sR();await a()}Di.exports.restartNumber++,t<1&&(t=t*Nc.length);let n=[],s=[];for(let a of Nc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Li.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Di.exports.restartNumber,type:Bf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=dbe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Li.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},gM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Bf.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Li.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=of();r&&(e==="http"||!e)&&PJ.get(Bf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _o.postMessage({type:abe,workerType:e})}o(TM,"restartWorkers");function fbe(e,t){kJ[e]=t}o(fbe,"setChildListenerByType");function mbe(e){return TM(e,1/0,!1)}o(mbe,"shutdownWorkers");var HJ=[];function pbe(e){HJ.push(e)}o(pbe,"onMessageFromWorkers");var hM=new Map;function qJ(e,t){let r=hM.get(e);r||hM.set(e,r=[]),r.push(t)}o(qJ,"onMessageByType");var hbe=10;async function Ebe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>hbe&&(r=0,await new Promise(setImmediate))}catch(s){Li.error("Unable to send message to worker",s)}t&&$J(e,null)}o(Ebe,"broadcast");var UR=new Map,_be=1;function gbe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=_be++,i=o(()=>{UR.delete(s),--r===0&&t(),n!==_o&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,UR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of UR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}o(gbe,"broadcastWithAcknowledgement");function Sbe(e){e.postMessage({type:MJ,workers:GJ()})}o(Sbe,"sendThreadInfo");function GJ(){let e=Date.now();return Nc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(GJ,"getChildWorkerInfo");function Tbe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Tbe,"recordResourceReport");var EM;function ybe(e){EM=e}o(ybe,"setMonitorListener");var Rbe=1e3,NJ=!1;function Abe(){NJ||(NJ=!0,setInterval(()=>{for(let e of Nc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}EM&&EM()},Rbe).unref())}o(Abe,"startMonitoring");var bbe=1e3;if(_o&&go?.addPorts){xR(_o);for(let e=0,t=go.addPorts.length;e<t;e++){let r=go.addPorts[e];r.threadId=go.addThreadIds[e],xR(r)}setInterval(()=>{let e=process.memoryUsage();_o.postMessage({type:DJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},bbe).unref(),mM=o(()=>new Promise((e,t)=>{_o.on("message",r),_o.postMessage({type:LJ});function r(n){n.type===MJ&&(_o.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else mM=GJ;Di.exports.getThreadInfo=mM;function xR(e,t){ti.push(e),e.on("message",r=>{if(r.type===vJ)r.port.threadId=r.threadId,xR(r.port);else if(r.type===cbe){let n=UR.get(r.id);n&&n()}else $J(r,e)}).on("close",()=>{ti.splice(ti.indexOf(e),1)}).on("exit",()=>{ti.splice(ti.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(xR,"addPort");function $J(e,t){for(let n of HJ)n(e,t);let r=hM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Li.error(s)}}o($J,"notifyMessageListeners");if(_M){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await nbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(CJ(s,a.name));try{for await(let{filename:a}of rbe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await TM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Di.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else _o.on("message",async e=>{let{type:t}=e;t===Bf.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,_o.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",XAe),process.exit(0)},gM).unref())})});var jJ=M((Gqe,zJ)=>{"use strict";var{promises:Ff,createReadStream:Ibe,createWriteStream:wbe}=require("fs"),{createGzip:Nbe}=require("zlib"),{promisify:Cbe}=require("util"),{pipeline:Obe}=require("stream"),Pbe=Cbe(Obe),RM=require("path"),WJ=ue();WJ.initSync();var BR=Q(),{CONFIG_PARAMS:Lbe,ITC_EVENT_TYPES:Hqe}=(H(),D(W)),{onMessageFromWorkers:qqe}=nt(),{convertToMS:VJ}=oe(),{onStorageReclamation:Dbe}=(L_(),D($U)),Mbe=6e4,vbe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Ube="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",yM,KJ;zJ.exports=xbe;function xbe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Dbe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(vbe);if(!i)throw new Error(Ube);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=VJ(r));let d;return yM=Date.now(),BR.trace("Log rotate enabled, maxSize:",t,"interval:",r),KJ=setInterval(async()=>{if(l){let f;f=await Ff.stat(e.path),f.size>=l&&(d=await YJ(e.path,i))}if(u&&Date.now()-yM>=u&&(d=await YJ(e.path,i),yM=Date.now()),n||c){let f=VJ(n??"1M")/(1+c);c=0;let m=await Ff.readdir(i);for(let p of m)try{let h=await Ff.stat(RM.join(i,p));Date.now()-h.mtimeMs>f&&await Ff.unlink(RM.join(i,p))}catch(h){BR.error("Error trying to remove log",p,h)}}},a??Mbe).unref(),{end(){clearInterval(KJ)},getLastRotatedLogPath(){return d}}}o(xbe,"logRotator");async function YJ(e,t){let r=WJ.get(Lbe.LOGGING_ROTATION_COMPRESS),n=RM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Ff.rename(e,n),r&&(e=n,n+=".gz",await Pbe(Ibe(e),Nbe(),wbe(n)),await Ff.unlink(e)),BR.closeLogFile(),BR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(YJ,"moveLogFile")});var e3={};Ie(e3,{RootConfigWatcher:()=>AM});var QJ,JJ,XJ,FR,ZJ,AM,t3=ie(()=>{QJ=w(require("chokidar")),JJ=require("node:fs/promises"),XJ=w(Tt()),FR=require("node:stream"),ZJ=require("yaml"),AM=class extends FR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,XJ.getConfigFilePath)(),this.ready=(0,FR.once)(this,"ready"),this.#t=QJ.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,JJ.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,ZJ.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((Wqe,YR)=>{"use strict";var Ea=require("fs-extra"),{workerData:Bbe,threadId:Fbe,isMainThread:c3}=require("worker_threads"),vE=require("path"),l3=require("yaml"),u3=require("properties-reader"),$r=(H(),D(W)),r3=kc(),kbe=require("os"),{PACKAGE_ROOT:PM}=bt(),{_assignPackageExport:Hbe}=ii(),{Console:qbe}=require("console"),n3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),s3=new Map,{join:_a}=vE,i3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Gbe={STDOUT:"stdOut",STDERR:"stdErr"},Yqe=_a(PM,"logs"),$be=_a(PM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),Vbe=1e4,UE,xE,kR,ha,IM,bM,qR,Lt,ys,GR,$R,kf,ME,DE;function HR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=vE.dirname(n)):t.root?n=_a(t.root,IM):(n=Lt.path,t.root||(t.root=vE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Lt?.level??ar.info,d3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(HR,"updateLogger");function d3(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(d3,"updateConditional");async function wM(){DE||(DE=new cIe,await DE.ready,DE.on("change",wM));let e=DE.config,t=e.logging??{};HR(Lt,t),qR=Lt.path,UE=t.console??!1,t.external&&HR(ys,t.external);for(let r in e){let n=e[r];n.logging?HR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&HR(Lt.forComponent(r),t,r)}}o(wM,"updateLogSettings");var NM=class extends qbe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){An="trace",this.level<=ar.trace&&super.info(...t),An="info"}debug(...t){An="debug",this.level<=ar.debug&&super.info(...t),An="info"}info(...t){An="info",this.level<=ar.info&&super.info(...t),An="info"}warn(...t){An="warn",this.level<=ar.warn&&super.warn(...t),An="info"}error(...t){An="error",this.level<=ar.error&&super.error(...t),An="info"}fatal(...t){kf=!0;try{An="fatal",this.level<=ar.fatal&&super.error(...t),An="info"}finally{kf=!1}}notify(...t){kf=!0;try{An="notify",this.level<=ar.notify&&super.info(...t),An="info"}finally{kf=!1}}withTag(t){return m3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};ME===void 0&&f3();YR.exports={notify:Xbe,fatal:Zbe,error:OM,warn:eIe,info:jbe,debug:Jbe,trace:Qbe,logLevel:ha,loggerWithTag:m3,suppressLogging:Wbe,initLogSettings:f3,logCustomLevel:tIe,closeLogFile:p3,createLogger:KR,logsAtLevel:Kbe,getLogFilePath:o(()=>qR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:oIe,OUTPUTS:Gbe,AuthAuditLog:aIe,start:wM,startOnMainThread:wM,errorToString:iIe};YR.exports.externalLogger={notify(...e){ys.notify(...e)},fatal(...e){ys.fatal(...e)},error(...e){ys.error(...e)},warn(...e){ys.warn(...e)},info(...e){ys.info(...e)},debug(...e){ys.debug(...e)},trace(...e){ys.trace(...e)},withTag(e){return ys.withTag(e)}};Hbe("logger",YR.exports.externalLogger);function Kbe(e){return ar[ha]<=ar[e]}o(Kbe,"logsAtLevel");function f3(e=!1){try{if(ME===void 0||e){p3();let t=rIe(),r=r3(["ROOTPATH"]);try{ME=u3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ea.pathExistsSync(_a(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ha,configLogPath:bM,toFile:xE,logConsole:UE,rotation:n,toStream:kR}=nIe(r.ROOTPATH?_a(r.ROOTPATH,$r.HDB_CONFIG_FILE):ME.get("settings_path")),IM=$r.LOG_NAMES.HDB,qR=_a(bM,IM),Lt=KR({path:qR,level:ha,stdStreams:kR,rotation:n}),ys=Lt.forComponent("external"),ys.tag=null,c3)try{require("segfault-handler").registerHandler(_a(bM,"crash.log"))}catch{}}}catch(t){if(ME=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=r3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){ha=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(UE=i)}let{defaultLevel:n}=sIe();xE=!1,kR=!0,ha=ha===void 0?n:ha,Lt=KR({level:ha}),ys=Lt.forComponent("external"),ys.tag=null;return}throw OM("Error initializing log settings"),OM(t),t}process.env.DEV_MODE&&(kR=!0),Ybe()}o(f3,"initLogSettings");var Cc=!0;function Ybe(){xE&&(process.stdout.write=function(e){return typeof e=="string"&&Cc&&UE&&(e=e.toString(),e[e.length-1]===`
134
- `&&(e=e.slice(0,-1)),$R(e)),n3.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Cc&&UE&&(e[e.length-1]===`
135
- `&&(e=e.slice(0,-1)),$R(e)),n3.apply(process.stderr,arguments)})}o(Ybe,"stdioLogging");function m3(e,t,r=Lt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=ar[i]?function(...a){VR=e;try{return s.call(r,...a)}finally{VR=void 0}}:null}o(n,"logWithTag")}o(m3,"loggerWithTag");function Wbe(e){try{Cc=!1,e()}finally{Cc=!0}}o(Wbe,"suppressLogging");var zbe=Bbe?.name?.replace(/ /g,"-")||"main",An="info",CM,VR;function KR({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=ar[t],l;function u(p){if(xE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Cc=!1;try{process.stdout.write(p)}finally{Cc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(xE){if(f(p),r){Cc=!1;try{process.stderr.write(p)}finally{Cc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&a3(e,n,s);function m(p){return{write(h){let E=[An];E.unshift(CM||zbe+"/"+Fbe),VR&&E.push(VR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&($R=f),l=new NM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),d3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=a3(e,l.rotation,s),s&&($R=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=KR({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(KR,"createLogger");var o3=100;function a3(e,t,r){let n=s3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,s3.set(e,n)),c3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=jJ();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
133
+ `))}},25).unref()}l.close?.(()=>{if(ei.get(Ts.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Of()==0)try{o4(aAe(ei.get(Ts.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,nR),l.cantCleanupProperly||Oi.warn("Had to forcefully exit the thread",nR),process.exit(0)},5e3).unref()})}if(c4||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Oi.info("Could not close debugger",c)}}}).ref();let r;AE&&!fAe&&(r=u4()),Promise.resolve(r).then(()=>{if(Of()===0)try{cAe(lAe)}catch(n){console.error("Error displaying start-up log",n)}s4?.postMessage({type:Ts.ITC_EVENT_TYPES.CHILD_STARTED})})});return a4(t),t}o(l4,"startServers");function u4(){let e=[];for(let t in Pf){let r=Pf[t];if(t.includes?.("/")&&Of()==0){rAe(t)&&o4(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=ei.get(Ts.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=Of();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?AE?n={fd:AE(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:AE?n={fd:AE(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Oi.trace("Listening on port "+t,nR)}).on("error",c)}))}return Promise.all(e)}o(u4,"listenOnPorts");!SD&&!eAe?.noServerStart&&l4();function mAe(e,t){let r=(Fh(),D(qT)).getComponentName,n;if(t.securePort){i4(t.securePort,{protocol_name:"TLS",name:r()});let s=oAe("server",t.mtls),i=ei.get("tls");n=sAe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Pf[t.securePort]=n}return t.port&&(i4(t.port,{protocol_name:"TCP",name:r()}),n=tAe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Pf[t.port]=n),n}o(mAe,"onSocket")});var HQ={};Ie(HQ,{startHTTPThreads:()=>pAe,startSocketServer:()=>bD,updateWorkerIdleness:()=>_4});async function pAe(e=2,t){_b().catch(r=>aR.error?.("Error recording hostname for analytics:",r));try{if(t)RD(0,1,!0);else{let{loadRootComponents:r}=sR();if(e===0)return(0,ho.setMainIsWorker)(!0),await TD().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)RD(r,e);return Promise.all(E4)}finally{(0,ho.threadsHaveStarted)()}}function RD(e,t=1,r){if(yD++,(0,ho.startWorker)("server/threads/threadServer.js",{name:hA.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===fA.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});E4.push(s),await s,Lf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=oR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=Lf.indexOf(n);a>-1&&Lf.splice(a,1)}if(o(i,"removeWorker"),Df){let a=Df;Df=[];for(let c of a)h4[c.localPort](null,c)}}}),r){let n=setInterval(()=>{AD?AD=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,ho.shutdownWorkers)(),yD=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function bD(e=0,t){if(typeof e=="string")try{(0,cR.existsSync)(e)&&(0,cR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=hAe:r=EAe(t):r=ID;let n=(0,Mf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=h4[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),AD=!0,r(i,(a,c)=>{if(!a){if(d4){let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});d4.deliverSocket(u,e,c),u.resume()}else yD>0?(Df.length===0&&setTimeout(()=>{Df.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(),i.localPort=e,Df.push(i)):(console.log("start up a dynamic thread to handle request"),RD(0));Je(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});SAe(u,a,e)}Je(!0,"socket-routed")})},aR.info(`HarperDB ${p4.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function ID(e,t){let r,n=0;for(let s of Lf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=iR)return iR=i,t(r);n=i}iR=0,t(r)}function hAe(e,t){let r={};e.getpeername(r);let n=r.address,s=vf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);ID(e,a=>{vf.set(n,{worker:a,lastUsed:i}),t(a)})}function EAe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Mf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=vf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);ID(n,f=>{vf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function _4(){iR=0;for(let e of Lf)e.expectedIdle=e.recentELU.idle+_Ae,e.requests=1;Lf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function SAe(e,t,r){let n=gAe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),oR.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),oR.delete(n)),s.event=="destroy"&&(e.destroy(),oR.delete(n))})}var ho,Mf,aR,cR,m4,p4,Lf,Df,h4,d4,yD,E4,AD,iR,f4,vf,_Ae,oR,gAe,aD=ie(()=>{ho=w(nt()),Mf=require("net");H();aR=w(Q()),cR=require("fs");Ps();m4=require("worker_threads"),p4=w(Tt()),Lf=[],Df=[],h4=[],yD=0,E4=[];m4.isMainThread&&process.on("uncaughtException",e=>{e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});o(pAe,"startHTTPThreads");o(RD,"startHTTPWorker");o(bD,"startSocketServer");iR=0;o(ID,"findMostIdleWorker");f4=36e5,vf=new Map;o(hAe,"findByRemoteAddressAffinity");o(EAe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vf)r.lastUsed+f4<e&&vf.delete(t)},f4).unref();_Ae=1e3;o(_4,"updateWorkerIdleness");(0,ho.setMonitorListener)(_4);oR=new Map,gAe=1;o(SAe,"proxySocket")});var wD={};Ie(wD,{hdbServer:()=>AAe,start:()=>AAe});async function AAe(e){try{Eo.default.debug("In Fastify server"+process.cwd()),Eo.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Eo.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=g4.default.isMaster,await bAe();let t=e.securePort>0;Uf=IAe(t),await Uf.ready(),e||(e={}),e.isOperationsServer=!0;try{Ue.http(Uf.server,e),Uf.server.closeIdleConnections||await Uf.listen({port:0,host:"::"})}catch(r){throw Uf.close(),Eo.default.error(r),Eo.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Eo.default.fatal(t),process.exit(1)}}async function bAe(){return Eo.default.trace("Configuring HarperDB process."),w4.default.setSchemaDataToGlobal(),C4.default.setUsersWithRolesCache()}function IAe(e){Eo.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=wAe(e),r=(0,S4.default)(t);r.server.headersTimeout=CAe(),r.setErrorHandler(Ic.serverErrorHandler);let n=NAe();n&&r.register(T4.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(A4.default),r.register(y4.default),r.register(R4.default,{root:b4.default.join(I4.PACKAGE_ROOT,"studio/build-local")}),Tm(r);let s=bc.default.get(Zf.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!N4.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[Ic.reqBodyValidationHandler,Ic.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,Ic.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),Eo.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function wAe(e){let t=bc.default.get(IE.OPERATIONSAPI_NETWORK_TIMEOUT),r=bc.default.get(IE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:yAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function NAe(){let e=bc.default.get(IE.OPERATIONSAPI_NETWORK_CORS),t=bc.default.get(IE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===RAe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function CAe(){return bc.default.get(IE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??TAe}var g4,bc,Eo,S4,T4,y4,R4,A4,b4,I4,w4,N4,C4,Ic,TAe,yAe,RAe,IE,Uf,O4=ie(()=>{g4=w(require("cluster")),bc=w(ue());H();Eo=w(Q()),S4=w(require("fastify")),T4=w(require("@fastify/cors")),y4=w(require("@fastify/compress")),R4=w(require("@fastify/static")),A4=w(yN()),b4=w(require("path")),I4=w(Tt()),w4=w(Ki()),N4=w(oe()),C4=w(as());xr();Ic=w(by());Po();bc.default.initSync();TAe=6e4,yAe=1024*1024*1024,RAe="TRUE",{CONFIG_PARAMS:IE}=W;o(AAe,"operationsServer");o(bAe,"setUp");o(IAe,"buildServer");o(wAe,"getServerOptions");o(NAe,"getCORSOpts");o(CAe,"getHeaderTimeoutConfig")});var DD={};Ie(DD,{disableNATS:()=>PAe,publishToStream:()=>dR,setNATSReplicator:()=>ND,setPublishToStream:()=>LAe,setSubscription:()=>LD,start:()=>OAe});function OAe(){wE.default.get(B.CLUSTERING_ENABLED)&&MAe()}function PAe(e=!0){v4=e}function LAe(e,t){dR=e,LD=t}function MAe(){if(v4||process.env._DISABLE_NATS)return;let e=at(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];ND(s,r,i)}}Il((r,n)=>{ND(r.tableName,r.databaseName,r),n&&x4(r)}),!P4&&(P4=!0)}function ND(e,t,r){if(t==="system"&&vAe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Fr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){x4(i)}static subscribe(){let i=new Jn;return LD(t,e,i),i}static subscribeOnThisThread(i){return i<(wE.default.get(B.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??DAe)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new lR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=U4;return i}o(n,"getNATSTransaction")}function x4(e){let t=wE.default.get(B.CLUSTERING_NODENAME);dR(`${OD.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,PD.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 L4,OD,PD,D4,M4,wE,uR,v4,dR,LD,DAe,U4,P4,vAe,lR,CD,B4=ie(()=>{Oe();Ua();L4=w(mr()),OD=w(wt()),PD=w(Wi());wu();D4=w(kN()),M4=w(Cn()),wE=w(ue());H();uR=w(Q());o(OAe,"start");o(PAe,"disableNATS");dR=L4.publishToStream,LD=D4.setSubscription;o(LAe,"setPublishToStream");DAe=2;o(MAe,"assignReplicationSource");vAe=["hdb_job","hdb_raw_analytics","hdb_info"];o(ND,"setNATSReplicator");o(x4,"publishSchema");lR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=wE.default.get(B.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(uR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(dR(`${OD.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,PD.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw uR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},CD=class extends lR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,M4.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};U4=new CD});async function q4({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await MD.get(e,{returnNonexistent:!0});i=new xD(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await MD.get(e);a&&a.delete()}i=new mR(e,t)}return n&&(n.id=e,n.user={username:t?.username},NE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function vD(){return fR++,fR>65500&&(fR=1),fR}function UD(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Ds.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new ci(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return At(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var k4,wc,H4,G4,F4,MD,NE,fR,mR,xD,$4=ie(()=>{Oe();xa();k4=w(Cn()),wc=w(Q());Ca();H4=w(nt()),G4=w(TD());xr();X_();F4=100,MD=Xe({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"}]}}]}),NE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,H4.getWorkerIndex)()===0&&(async()=>{await G4.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of NE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Ue.getUser(r.user.username));try{await UD(r,t,r)}catch{(0,wc.warn)("Failed to publish will",t)}NE.delete(e.id)}})();o(q4,"getSession");fR=1;o(vD,"getNextMessageId");mR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,wc.trace)("Resuming subscription from",s,"from",a);let p=Ds.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let R=S.split("/"),N;for(let te=0;te<R.length;te++)if(R[te].indexOf("+")>-1)if(R[te]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let O=!0;R[R.length-1]==="#"&&(R.length--,O=!1),N&&(n=o(te=>{let G=te.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(O&&G.length!==R.length)return!1;for(let k=0;k<R.length;k++)if(R[k]!=="+"&&R[k]!==G[k])return!1;return!0},"filter"));let F=R.indexOf("+");m.url="/"+(F>-1?R.slice(0,F):R).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,A=await At(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let R=await g.subscribe(m,S);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let O of R)try{let F;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"&&O.type!=="patch"||n&&!n(O))continue;r?(O.topic=s,F=this.needsAcknowledge(O)):(O.acknowledge?.(),F=vD());let te=O.id;if(Array.isArray(te)&&(te=$u(te)),te==null&&(te=""),await this.listener(E+"/"+te,O.value,F,t)===!1)break;this.awaitingAcks?.size>F4?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-F4)):await new Promise(setImmediate)}catch(F){(0,wc.warn)(F)}})();return R});if(A)return A.topic=s,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=vD();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return UD(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();At(r,async()=>{try{if(!t){let n=await NE.get(this.sessionId);n?.doesExist()&&await UD(n,n.data,r)}}finally{await NE.delete(this.sessionId)}}).catch(n=>{(0,wc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(UD,"publish");xD=class extends mR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{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.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=vD(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,wc.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,k4.getNextMonotonicTime)()),(0,wc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),MD.put(this.sessionRecord)}}});var BD={};Ie(BD,{bypassAuth:()=>UAe,start:()=>BAe});function UAe(){Q4=!0}function BAe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new j4.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),Xt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=K4(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",p),u.on("close",h),u.on("error",E=>{Xt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),Xt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await Gd(p,l);if(!E.valid)throw Xt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hR.notify?.({username:d?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hR.error?.({username:h,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Xt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){a.events.emit("error",p,u),Xt.error?.(p)}else if(l.required)return Xt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&xAe(u.remoteAddress)&&(d=await(0,Y4.getSuperUser)(),Xt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=K4(u,p=>u.write(p),null,d,a);u.on("data",f),u.on("close",m),u.on("error",p=>{Xt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function K4(e,t,r,n,s){V4||(V4=!0,Bm(f=>{pR>0&&f.push({metric:"mqtt-connections",connections:pR,byThread:!0})}));let i;pR++;let a,c={protocolVersion:4},l=(0,ER.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){pR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!1,"connection","mqtt","disconnect"),Xt.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),Xt.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){Xt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Je(f.length,"bytes-received",E,A(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Ue.getUser(f.username,f.password.toString(),r),(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&hR.notify?.({username:n?.username,status:si.SUCCESS,type:ba.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(J){return(0,xf.get)(B.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&hR.error?.({username:f.username,status:si.FAILURE,type:ba.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let J=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?J(f.will.payload):void 0,delete f.will.payload}a=q4({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(J){return Xt.error?.(J),s.events.emit("auth-failed",f,e,J),zr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:J.code||5,returnCode:J.code||128})}s.events.emit("connected",a,e),zr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(J,Y,le,ae)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",J);let re=J.indexOf("/",1),Re=re>0?J.slice(0,re):J;g({cmd:"publish",topic:J,payload:await S(Y),messageId:le||Math.floor(Math.random()*1e8),qos:ae.qos},Re);let Te=e._socket??e;return Te.writableNeedDrain?new Promise(Fe=>Te.once("drain",Fe)):!Te.closed}catch(re){return Xt.error?.(re),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let N=[];for(let J of f.subscriptions){let Y;try{let le=await a.addSubscription(J,J.qos>=1);Y=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,J,a),le.statusCode?le.statusCode===500?Xt.warn?.(le):Xt.info?.(le):Xt.error?.(le),Y=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}N.push(Y)}await a.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let J=[];for(let Y of f.unsubscriptions)J.push(a.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:J,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let O=f.qos===2?"pubrec":"puback",F=e.deserialize||(e.deserialize=Oo(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?F(f.payload):void 0,k;try{k=await a.publish(f,G)}catch(J){s.events.emit("error",J,e,f,a),Xt.warn?.(J),f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:O,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),zr(!0,"connection","mqtt","disconnect"),Xt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),Xt.error?.(R),g({cmd:"disconnect"})}function g(R,N){let O=(0,ER.generate)(R,c);t(O),Je(O.length,"bytes-sent",N,A(R),"mqtt")}o(g,"sendPacket");function A(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(A,"packetMethodName");function S(R){return Co(R,r)}o(S,"serialize")}),l.on("error",f=>{Xt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var ER,Y4,xf,W4,z4,j4,hR,Xt,Q4,xAe,V4,pR,J4=ie(()=>{ER=require("mqtt-packet");$4();Y4=w(as());Po();Ps();xr();xf=w(ue());H();W4=w(Xn()),z4=w(Q()),j4=require("events");QS();hR=(0,W4.loggerWithTag)("auth-event"),Xt=(0,z4.forComponent)("mqtt"),Q4=(0,xf.get)(B.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(UAe,"bypassAuth");xAe=o(e=>Q4&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(BAe,"start");pR=0;o(K4,"onSocket")});function _R(e,t){if(t?.includes(".."))throw new FD(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var FD,kD=ie(()=>{FD=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(_R,"resolveBaseURLPath")});function X4(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var Z4=ie(()=>{o(X4,"deriveCommonPatternBase")});function gR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var HD=ie(()=>{o(gR,"deriveGlobOptions")});var eJ,GD,CE,tJ=ie(()=>{kD();Z4();HD();eJ=require("micromatch"),GD=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},CE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=_R(this.name,this.config.urlPath),this.globOptions=gR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new GD(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,eJ.scan)(s).base),this.commonPatternBase=X4(this.patternBases)}}});function rJ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function pu(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(rJ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(rJ(n,t)){t=t.slice(n.length+1);break}}}return(0,nJ.join)(e.baseURLPath,t)}var nJ,qD=ie(()=>{nJ=require("node:path");o(rJ,"pathStartsWithBase");o(pu,"deriveURLPath")});function sJ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var TR,iJ,oJ,$D,aJ,cJ,SR,lJ=ie(()=>{TR=require("node:events");tJ();iJ=w(Q()),oJ=w(require("chokidar")),$D=require("node:path"),aJ=require("node:fs/promises");qD();cJ=require("micromatch"),SR=class extends TR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new CE(t,r,sJ(n)),this.#r=s||iJ.default.loggerWithTag(t),this.ready=(0,TR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,cJ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,$D.join)(this.directory,r);switch(t){case"add":case"change":{let i=pu(this.#e,r,"file");(0,aJ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=pu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=pu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,$D.join)(this.#e.directory,r));return this.#t=oJ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new CE(this.name,this.directory,sJ(t)),this.#a()}};o(sJ,"castConfig")});var yR,VD=ie(()=>{yR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var AR,uJ,dJ,fJ,mJ,pJ,KD,YD,WD,zD,jD,RR,hJ=ie(()=>{AR=require("events"),uJ=w(require("yaml")),dJ=w(require("chokidar")),fJ=require("node:fs/promises"),mJ=require("util"),pJ=w(Q());VD();KD=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},YD=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},WD=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},zD=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},jD=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},RR=class extends AR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||pJ.default.loggerWithTag(t),this.ready=(0,AR.once)(this,"ready"),this.#t=dJ.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,fJ.readFile)(this.#e,"utf-8").then(t=>{this.#n=uJ.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new KD(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=yR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,mJ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new YD;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new WD(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new zD(t,s);n=n[s]}if(n==null||typeof n!="object")throw new jD(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var wR,EJ,bR,IR,_J=ie(()=>{wR=require("node:events");lJ();hJ();EJ=w(Q());iP();bR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},IR=class extends wR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,EJ.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,wR.once)(this,"ready"),this.options=new RR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new SR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new bR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new bR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),EW()}}});function hu(e){return typeof e=="string"&&e.trim()!==""}function QD(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>hu(t))}function yJ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function FAe(e){e.config.root&&OE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new nM(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(yJ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,PE.join)(e.directory,i);NR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function RJ(e){let t=!1;if(t=await FAe(e),t)return t;let r=await(0,gJ.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,PE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=pu(e,n.path,"directory");NR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=pu(e,n.path,"file"),a=await(0,SJ.readFile)(s);NR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else OE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var NR,gJ,OE,PE,SJ,TJ,CR,Pi,JD,XD,ZD,eM,tM,rM,nM,sM,iM,AJ=ie(()=>{NR=require("node:worker_threads"),gJ=w(require("fast-glob")),OE=w(Q());kD();HD();PE=require("node:path"),SJ=require("node:fs/promises");qD();TJ=require("micromatch"),CR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!hu(this.config.files)&&!QD(this.config.files)&&!yJ(this.config.files))throw new JD(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!QD(this.config.files.source)&&!hu(this.config.files.source))throw new XD(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new ZD(this);if(this.config.files.ignore!==void 0&&!QD(this.config.files.ignore)&&!hu(this.config.files.ignore))throw new eM(this)}if(this.config.root!==void 0&&!hu(this.config.root))throw new rM(this);if(this.config.path!==void 0&&!hu(this.config.path))throw new sM(this);if(this.config.path&&(OE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!hu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new iM(this);this.globOptions=gR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new tM(this,r);return r.startsWith("/")&&(OE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,TJ.scan)(r).base),this.baseURLPath=_R(this.name,this.config.urlPath)}},Pi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,PE.basename)(r.directory)}) ${t}`)}},JD=class extends Pi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},XD=class extends Pi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},ZD=class extends Pi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},eM=class extends Pi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},tM=class extends Pi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},rM=class extends Pi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},nM=class extends Pi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},sM=class extends Pi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},iM=class extends Pi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(hu,"isNonEmptyString");o(QD,"isArrayOfNonEmptyStrings");o(yJ,"isObject");o(FAe,"handleRoots");o(RJ,"processResourceExtensionComponent")});var qT={};Ie(qT,{getComponentName:()=>rR,loadComponent:()=>DR,loadComponentDirectories:()=>wJ,setErrorReporter:()=>HAe});function wJ(e,t){t&&(aM=t),e&&(dM=e);let r=[];if((0,Pt.existsSync)(oM)){let s=(0,Pt.readdirSync)(oM,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,on.join)(oM,a);r.push(DR(c,aM,cA,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(DR(n,aM,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{IJ=!0})}function HAe(e){PR=e}function GAe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{na.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(na.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,on.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,on.join)(e,"node_modules")),(0,Pt.symlinkSync)(mM.PACKAGE_ROOT,t,"dir"),r()}finally{na.primaryStore.unlock(e,0)}})}function NJ(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return na.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(NJ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{na.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function DR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(OR.has(a))return OR.get(a);OR.set(a,!0),s&&(dM=s);try{let c,l=(0,on.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,MR.getConfigObj)():(0,lM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,on.join)(e,"config.yaml"))?c=(0,lM.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=yR;try{let m=(0,on.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,uM.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(mM.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await GAe(e,m)}catch(m){pa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&pa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=LR,d={};for(let m in c){let p=`${(0,on.basename)(e)}.${m}`;LR=m;let h=c[m];if(!h)continue;let E,g=h.package;try{if(g){let O=e,F;for(;!(0,Pt.existsSync)(F=(0,on.join)(O,"node_modules",m));)if(O=(0,on.dirname)(O),O.length<(0,uM.getHdbBasePath)().length){F=null;break}if(F)E=await DR(F,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=kAe[m];if(!E)continue;Vo.loading(p);let A=o(O=>(O.origin=r,Xe(O)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,R=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let O=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw Vo.failed(p,O,`Component '${p}' failed to load`),O}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&pa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let O=new IR(m,e,l,t,Ue);await NJ(O,E),Vo.loaded(p,`Component '${p}' loaded successfully`);continue}if(cM.isMainThread&&(E=await E.startOnMainThread?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E,n&&S))for(let O of[N,R])try{if(+O&&!bJ.includes(O)){let F=fM.get(B.HTTP_SESSIONAFFINITY);F&&pa.default.warn("Session affinity is not recommended and may cause memory leaks"),(F||!oS)&&(bJ.push(O),bD(O,F))}}catch(F){console.error("Error listening on socket",O,F,m)}if(t.isWorker&&(E=await E.start?.({server:Ue,ensureTable:A,port:N,securePort:R,resources:t,...h})||E),dM.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let O=new CR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await RJ(O)}Vo.loaded(p,`Component '${p}' loaded successfully`)}catch(A){A.message=`Could not load component '${m}' for application '${(0,on.basename)(e)}' due to: ${A.message}`,PR?.(A),((0,LE.getWorkerIndex)()===0?console:pa.default).error(A),t.set(h.path||"/",new sl(A),null,!0),Vo.failed(p,A,`Could not load component '${p}'`)}}if(LR=u,cM.isMainThread&&!IJ&&i&&(0,LE.watchDir)(e,async()=>wJ()),c.extensionModule||c.pluginModule){let m=await nS((0,on.join)(e,c.extensionModule||c.pluginModule));return OR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;PR?.(new Error(m)),((0,LE.getWorkerIndex)()===0?console:pa.default).error(m),Vo.failed((0,on.basename)(e),m)}for(let[m,p]of Object.entries(d))p||pa.default.warn(`Component ${m} from (${(0,on.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,PR?.(c),t.set("",new sl(c))}}var Pt,on,cM,lM,fM,mM,pa,LE,uM,MR,oM,dM,IJ,aM,kAe,bJ,OR,PR,LR,rR,Fh=ie(()=>{Pt=require("node:fs"),on=require("node:path"),cM=require("node:worker_threads"),lM=require("yaml"),fM=w(ue()),mM=w(Tt());H();SG();OG();$G();jG();QG();dq();c2();l2();d2();pa=w(Q());_2();LE=w(nt());uN();xr();Oe();aD();uM=w(ue());O4();xT();B4();us();J4();MR=w(yt());Fp();Mb();_J();AJ();gD();$h();Sp();VD();oM=(0,MR.resolvePath)(fM.get(B.COMPONENTSROOT)),dM=new Map;o(wJ,"loadComponentDirectories");kAe={REST:cS,rest:cS,graphql:rN,graphqlSchema:eN,roles:lN,jsResource:dN,fastifyRoutes:RL,login:mN,static:bL,operationsApi:wD,customFunctions:{},http:tR,clustering:DD,replication:zo,authentication:Lh,mqtt:BD,loadEnv:IL,logging:pa.default,dataLoader:wL},bJ=[],OR=new Map;o(HAe,"setErrorReporter");rR=o(()=>LR,"getComponentName");o(GAe,"symlinkHarperModule");o(NJ,"sequentiallyHandleApplication");o(DR,"loadComponent")});var sR=M((qGe,CJ)=>{var{isMainThread:pM}=require("worker_threads"),{getTables:qAe,getDatabases:HGe,table:GGe}=(Oe(),D(mt)),{loadComponentDirectories:$Ae,loadComponent:VAe}=(Fh(),D(qT)),{resetResources:KAe}=(xa(),D(vb)),YAe=VO(),WAe=yt(),{dirname:zAe}=require("path"),{getConnection:jAe}=mr(),QAe=ue(),{CONFIG_PARAMS:JAe}=(H(),D(W)),{loadCertificates:XAe}=fs(),{loadAndWatchLicensesDir:ZAe}=(Wh(),D(ZT)),hM=new Map;async function ebe(e=!1){!pM&&QAe.get(JAe.CLUSTERING_ENABLED)&&jAe();try{pM&&await YAe()}catch(n){console.error(n)}let t=KAe();qAe(),t.isWorker=e,pM&&ZAe(),await XAe(),await VAe(zAe(WAe.getConfigFilePath()),t,"hdb",!0,hM),await $Ae(hM,t);let r=[];for(let[n]of hM)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(ebe,"loadRootComponents");CJ.exports.loadRootComponents=ebe});var nt=M((VGe,Di)=>{"use strict";NA();var{Worker:tbe,MessageChannel:rbe,parentPort:_o,isMainThread:TM,threadId:nbe,workerData:go}=require("worker_threads"),{PACKAGE_ROOT:sbe}=Tt(),{join:DJ,isAbsolute:ibe,extname:obe}=require("path"),{server:MJ}=(xr(),D(rm)),{watch:abe,readdir:cbe}=require("fs/promises"),{totalmem:OJ}=require("os"),Bf=(H(),D(W)),vJ=ue(),Li=Q(),{randomBytes:lbe}=require("crypto"),{_assignPackageExport:ube}=ii(),PJ=1024*1024,Nc=[],ti=[],dbe=50,yM=1e4,fbe="restart",UJ="request_thread_info",xJ="resource_report",BJ="thread_info",FJ="added-port",mbe="ack",EM;ube("threads",ti);Di.exports={startWorker:_M,restartWorkers:AM,shutdownWorkers:gbe,workers:Nc,setMonitorListener:wbe,onMessageFromWorkers:Sbe,onMessageByType:KJ,broadcast:ybe,broadcastWithAcknowledgement:Abe,setChildListenerByType:_be,getWorkerIndex:kJ,getWorkerCount:HJ,getTicketKeys:qJ,setMainIsWorker:hbe,setTerminateTimeout:pbe,restartNumber:go?.restartNumber||1};ti.onMessageByType=KJ;ti.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ti.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Di.exports.whenThreadsStarted=new Promise(e=>{Di.exports.threadsHaveStarted=e});var RM;function pbe(e){yM=e}o(pbe,"setTerminateTimeout");function kJ(){return go?go.workerIndex:RM?0:void 0}o(kJ,"getWorkerIndex");function HJ(){return go?go.workerCount:RM?1:void 0}o(HJ,"getWorkerCount");function hbe(e){RM=e,Di.exports.threadsHaveStarted()}o(hbe,"setMainIsWorker");var GJ=1,vR;function qJ(){return vR||(vR=TM?lbe(48):go.ticketKeys,vR)}o(qJ,"getTicketKeys");Object.defineProperty(MJ,"workerIndex",{get(){return kJ()}});Object.defineProperty(MJ,"workerCount",{get(){return HJ()}});var $J={[UJ](e,t){bbe(t)},[xJ](e,t){Ibe(t,e)}};function _M(e,t={}){let r=process.constrainedMemory?.()||OJ();r=Math.min(r,OJ(),2e4*PJ);let n=vJ.get(Bf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/PJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of ti){let u=new rbe;u.existingPort=l,i.push(u),a.push(u.port2)}obe(e)||(e+=".js");let c=new tbe(ibe(e)?e:DJ(sbe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:GJ=t.threadCount,name:t.name,restartNumber:Di.exports.restartNumber,ticketKeys:qJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:FJ,port:l,threadId:c.threadId},[l]);return xR(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>_M(e,t),c.on("error",l=>{Li.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Nc.splice(Nc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<dbe?(t.unexpectedRestarts=c.unexpectedRestarts+1,_M(e,t)):Li.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{$J[l.type]?.(l,c)}),Nc.push(c),Cbe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(_M,"startWorker");var Ebe=[Bf.THREAD_TYPES.HTTP];async function AM(e=null,t=Math.max(GJ>3,1),r=!0){if(TM){try{process.chdir(process.cwd())}catch(a){Li.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=sR();await a()}Di.exports.restartNumber++,t<1&&(t=t*Nc.length);let n=[],s=[];for(let a of Nc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Li.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:Di.exports.restartNumber,type:Bf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Ebe.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Li.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},yM*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(p=>{p.type===Bf.ITC_EVENT_TYPES.CHILD_STARTED&&(Li.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Li.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=of();r&&(e==="http"||!e)&&vJ.get(Bf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else _o.postMessage({type:fbe,workerType:e})}o(AM,"restartWorkers");function _be(e,t){$J[e]=t}o(_be,"setChildListenerByType");function gbe(e){return AM(e,1/0,!1)}o(gbe,"shutdownWorkers");var VJ=[];function Sbe(e){VJ.push(e)}o(Sbe,"onMessageFromWorkers");var gM=new Map;function KJ(e,t){let r=gM.get(e);r||gM.set(e,r=[]),r.push(t)}o(KJ,"onMessageByType");var Tbe=10;async function ybe(e,t){let r=0;for(let n of ti)try{n.postMessage(e),r++>Tbe&&(r=0,await new Promise(setImmediate))}catch(s){Li.error("Unable to send message to worker",s)}t&&WJ(e,null)}o(ybe,"broadcast");var UR=new Map,Rbe=1;function Abe(e){return new Promise(t=>{let r=0;for(let n of ti)try{let s=Rbe++,i=o(()=>{UR.delete(s),--r===0&&t(),n!==_o&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,UR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of UR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Li.error("Unable to send message to worker",s)}r===0&&t()})}o(Abe,"broadcastWithAcknowledgement");function bbe(e){e.postMessage({type:BJ,workers:YJ()})}o(bbe,"sendThreadInfo");function YJ(){let e=Date.now();return Nc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(YJ,"getChildWorkerInfo");function Ibe(e,t){e.resources=t,e.resources.updated=Date.now()}o(Ibe,"recordResourceReport");var SM;function wbe(e){SM=e}o(wbe,"setMonitorListener");var Nbe=1e3,LJ=!1;function Cbe(){LJ||(LJ=!0,setInterval(()=>{for(let e of Nc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}SM&&SM()},Nbe).unref())}o(Cbe,"startMonitoring");var Obe=1e3;if(_o&&go?.addPorts){xR(_o);for(let e=0,t=go.addPorts.length;e<t;e++){let r=go.addPorts[e];r.threadId=go.addThreadIds[e],xR(r)}setInterval(()=>{let e=process.memoryUsage();_o.postMessage({type:xJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Obe).unref(),EM=o(()=>new Promise((e,t)=>{_o.on("message",r),_o.postMessage({type:UJ});function r(n){n.type===BJ&&(_o.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else EM=YJ;Di.exports.getThreadInfo=EM;function xR(e,t){ti.push(e),e.on("message",r=>{if(r.type===FJ)r.port.threadId=r.threadId,xR(r.port);else if(r.type===mbe){let n=UR.get(r.id);n&&n()}else WJ(r,e)}).on("close",()=>{ti.splice(ti.indexOf(e),1)}).on("exit",()=>{ti.splice(ti.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(xR,"addPort");function WJ(e,t){for(let n of VJ)n(e,t);let r=gM.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Li.error(s)}}o(WJ,"notifyMessageListeners");if(TM){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await cbe(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(DJ(s,a.name));try{for await(let{filename:a}of abe(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await AM(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");Di.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else _o.on("message",async e=>{let{type:t}=e;t===Bf.ITC_EVENT_TYPES.SHUTDOWN&&(Di.exports.restartNumber=e.restartNumber,_o.unref(),setTimeout(()=>{Li.warn("Thread did not voluntarily terminate",nbe),process.exit(0)},yM).unref())})});var ZJ=M((zGe,XJ)=>{"use strict";var{promises:Ff,createReadStream:Pbe,createWriteStream:Lbe}=require("fs"),{createGzip:Dbe}=require("zlib"),{promisify:Mbe}=require("util"),{pipeline:vbe}=require("stream"),Ube=Mbe(vbe),IM=require("path"),JJ=ue();JJ.initSync();var BR=Q(),{CONFIG_PARAMS:xbe,ITC_EVENT_TYPES:YGe}=(H(),D(W)),{onMessageFromWorkers:WGe}=nt(),{convertToMS:zJ}=oe(),{onStorageReclamation:Bbe}=(L_(),D(YU)),Fbe=6e4,kbe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Hbe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",bM,jJ;XJ.exports=Gbe;function Gbe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Bbe(e.path,f=>{c=f},!0),!t&&!r)throw new Error(kbe);if(!i)throw new Error(Hbe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=zJ(r));let d;return bM=Date.now(),BR.trace("Log rotate enabled, maxSize:",t,"interval:",r),jJ=setInterval(async()=>{if(l){let f;f=await Ff.stat(e.path),f.size>=l&&(d=await QJ(e.path,i))}if(u&&Date.now()-bM>=u&&(d=await QJ(e.path,i),bM=Date.now()),n||c){let f=zJ(n??"1M")/(1+c);c=0;let m=await Ff.readdir(i);for(let p of m)try{let h=await Ff.stat(IM.join(i,p));Date.now()-h.mtimeMs>f&&await Ff.unlink(IM.join(i,p))}catch(h){BR.error("Error trying to remove log",p,h)}}},a??Fbe).unref(),{end(){clearInterval(jJ)},getLastRotatedLogPath(){return d}}}o(Gbe,"logRotator");async function QJ(e,t){let r=JJ.get(xbe.LOGGING_ROTATION_COMPRESS),n=IM.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Ff.rename(e,n),r&&(e=n,n+=".gz",await Ube(Pbe(e),Dbe(),Lbe(n)),await Ff.unlink(e)),BR.closeLogFile(),BR.notify(`hdb.log rotated, old log moved to ${n}`),n}o(QJ,"moveLogFile")});var s3={};Ie(s3,{RootConfigWatcher:()=>wM});var e3,t3,r3,FR,n3,wM,i3=ie(()=>{e3=w(require("chokidar")),t3=require("node:fs/promises"),r3=w(yt()),FR=require("node:stream"),n3=require("yaml"),wM=class extends FR.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,r3.getConfigFilePath)(),this.ready=(0,FR.once)(this,"ready"),this.#t=e3.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,t3.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,n3.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var Q=M((ZGe,YR)=>{"use strict";var Ea=require("fs-extra"),{workerData:qbe,threadId:$be,isMainThread:f3}=require("worker_threads"),vE=require("path"),m3=require("yaml"),p3=require("properties-reader"),$r=(H(),D(W)),o3=kc(),Vbe=require("os"),{PACKAGE_ROOT:MM}=Tt(),{_assignPackageExport:Kbe}=ii(),{Console:Ybe}=require("console"),a3=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),c3=new Map,{join:_a}=vE,l3=1e4,ar={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Wbe={STDOUT:"stdOut",STDERR:"stdErr"},XGe=_a(MM,"logs"),zbe=_a(MM,"config/yaml/",$r.HDB_DEFAULT_CONFIG_FILE),jbe=1e4,UE,xE,kR,ha,CM,NM,GR,Lt,ys,qR,$R,kf,ME,DE;function HR(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=vE.dirname(n)):t.root?n=_a(t.root,CM):(n=Lt.path,t.root||(t.root=vE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=ar[t.level]??Lt?.level??ar.info,h3(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(HR,"updateLogger");function h3(e){let t=e.conditional??(e.conditional={});t.notify=ar.notify>=e.level?e.notify.bind(e):void 0,t.fatal=ar.fatal>=e.level?e.fatal.bind(e):void 0,t.error=ar.error>=e.level?e.error.bind(e):void 0,t.warn=ar.warn>=e.level?e.warn.bind(e):void 0,t.info=ar.info>=e.level?e.info.bind(e):void 0,t.debug=ar.debug>=e.level?e.debug.bind(e):void 0,t.trace=ar.trace>=e.level?e.trace.bind(e):void 0}o(h3,"updateConditional");async function OM(){DE||(DE=new mIe,await DE.ready,DE.on("change",OM));let e=DE.config,t=e.logging??{};HR(Lt,t),GR=Lt.path,UE=t.console??!1,t.external&&HR(ys,t.external);for(let r in e){let n=e[r];n.logging?HR(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&HR(Lt.forComponent(r),t,r)}}o(OM,"updateLogSettings");var PM=class extends Ybe{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){An="trace",this.level<=ar.trace&&super.info(...t),An="info"}debug(...t){An="debug",this.level<=ar.debug&&super.info(...t),An="info"}info(...t){An="info",this.level<=ar.info&&super.info(...t),An="info"}warn(...t){An="warn",this.level<=ar.warn&&super.warn(...t),An="info"}error(...t){An="error",this.level<=ar.error&&super.error(...t),An="info"}fatal(...t){kf=!0;try{An="fatal",this.level<=ar.fatal&&super.error(...t),An="info"}finally{kf=!1}}notify(...t){kf=!0;try{An="notify",this.level<=ar.notify&&super.info(...t),An="info"}finally{kf=!1}}withTag(t){return _3(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};ME===void 0&&E3();YR.exports={notify:nIe,fatal:sIe,error:DM,warn:iIe,info:eIe,debug:rIe,trace:tIe,logLevel:ha,loggerWithTag:_3,suppressLogging:Xbe,initLogSettings:E3,logCustomLevel:oIe,closeLogFile:g3,createLogger:KR,logsAtLevel:Qbe,getLogFilePath:o(()=>GR,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:dIe,OUTPUTS:Wbe,AuthAuditLog:fIe,start:OM,startOnMainThread:OM,errorToString:uIe};YR.exports.externalLogger={notify(...e){ys.notify(...e)},fatal(...e){ys.fatal(...e)},error(...e){ys.error(...e)},warn(...e){ys.warn(...e)},info(...e){ys.info(...e)},debug(...e){ys.debug(...e)},trace(...e){ys.trace(...e)},withTag(e){return ys.withTag(e)}};Kbe("logger",YR.exports.externalLogger);function Qbe(e){return ar[ha]<=ar[e]}o(Qbe,"logsAtLevel");function E3(e=!1){try{if(ME===void 0||e){g3();let t=aIe(),r=o3(["ROOTPATH"]);try{ME=p3(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Ea.pathExistsSync(_a(r.ROOTPATH,$r.HDB_CONFIG_FILE)))throw s}let n;if({level:ha,configLogPath:NM,toFile:xE,logConsole:UE,rotation:n,toStream:kR}=cIe(r.ROOTPATH?_a(r.ROOTPATH,$r.HDB_CONFIG_FILE):ME.get("settings_path")),CM=$r.LOG_NAMES.HDB,GR=_a(NM,CM),Lt=KR({path:GR,level:ha,stdStreams:kR,rotation:n}),ys=Lt.forComponent("external"),ys.tag=null,f3)try{require("segfault-handler").registerHandler(_a(NM,"crash.log"))}catch{}}}catch(t){if(ME=void 0,t.code===$r.NODE_ERROR_CODES.ENOENT||t.code===$r.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=o3(Object.keys($r.CONFIG_PARAM_MAP),!0);for(let s in r){let i=$r.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===$r.CONFIG_PARAMS.LOGGING_LEVEL){ha=a;continue}i===$r.CONFIG_PARAMS.LOGGING_CONSOLE&&(UE=i)}let{defaultLevel:n}=lIe();xE=!1,kR=!0,ha=ha===void 0?n:ha,Lt=KR({level:ha}),ys=Lt.forComponent("external"),ys.tag=null;return}throw DM("Error initializing log settings"),DM(t),t}process.env.DEV_MODE&&(kR=!0),Jbe()}o(E3,"initLogSettings");var Cc=!0;function Jbe(){xE&&(process.stdout.write=function(e){return typeof e=="string"&&Cc&&UE&&(e=e.toString(),e[e.length-1]===`
134
+ `&&(e=e.slice(0,-1)),$R(e)),a3.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Cc&&UE&&(e[e.length-1]===`
135
+ `&&(e=e.slice(0,-1)),$R(e)),a3.apply(process.stderr,arguments)})}o(Jbe,"stdioLogging");function _3(e,t,r=Lt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=ar[i]?function(...a){VR=e;try{return s.call(r,...a)}finally{VR=void 0}}:null}o(n,"logWithTag")}o(_3,"loggerWithTag");function Xbe(e){try{Cc=!1,e()}finally{Cc=!0}}o(Xbe,"suppressLogging");var Zbe=qbe?.name?.replace(/ /g,"-")||"main",An="info",LM,VR;function KR({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=ar[t],l;function u(p){if(xE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Cc=!1;try{process.stdout.write(p)}finally{Cc=!0}}else f(p);else r&&process.stdout.write(p)}o(u,"logStdOut");function d(p){if(xE){if(f(p),r){Cc=!1;try{process.stderr.write(p)}finally{Cc=!0}}}else r&&process.stderr.write(p)}o(d,"logStdErr");let f=e&&d3(e,n,s);function m(p){return{write(h){let E=[An];E.unshift(LM||Zbe+"/"+$be),VR&&E.push(VR),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(o(m,"logPrepend"),s&&($R=f),l=new PM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),h3(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=d3(e,l.rotation,s),s&&($R=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=KR({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}o(KR,"createLogger");var u3=100;function d3(e,t,r){let n=c3.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,c3.set(e,n)),f3&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=ZJ();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
136
136
  `)?"":`
137
- `}`;c?(c.length<i3?c.push(E):c.length===i3&&c.push(`Maximum log buffer rate reached, logs will be throttled
138
- `),kf&&(clearTimeout(a),f())):kf||l<performance.now()+o3?f(E):(l=Math.min(l,performance.now()+o3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ea.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ea.closeSync(s)}catch{}s=null,r&&(GR=null)}function p(h){if(!s){try{s=Ea.openSync(e,"a"),r&&(GR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ea.mkdirpSync(vE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},Vbe).unref()}}}o(a3,"getFileLogger");function jbe(...e){Lt.info(...e)}o(jbe,"info");function Qbe(...e){Lt.trace(...e)}o(Qbe,"trace");function OM(...e){Lt.error(...e)}o(OM,"error");function Jbe(...e){Lt.debug(...e)}o(Jbe,"debug");function Xbe(...e){Lt.notify(...e)}o(Xbe,"notify");function Zbe(...e){Lt.fatal(...e)}o(Zbe,"fatal");function eIe(...e){Lt.warn(...e)}o(eIe,"warn");function tIe(e,t,r,...n){CM=r.service_name;try{Lt[e](...n)}finally{CM=void 0}}o(tIe,"logCustomLevel");function rIe(){let e;try{e=kbe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_a(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Ea.existsSync(t)||(t=_a(PM,"utility/hdb_boot_properties.file")),t}o(rIe,"getPropsFilePath");function nIe(e){try{if(e.includes("config/settings.js")){let l=u3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:vE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=l3.parseDocument(Ea.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(nIe,"getLogConfig");function sIe(){try{let e=l3.parseDocument(Ea.readFileSync($be,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(sIe,"getDefaultConfig");function iIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(iIe,"errorToString");function oIe(e){Lt=e}o(oIe,"setMainLogger");function p3(){try{Ea.closeSync(GR)}catch{}GR=null}o(p3,"closeLogFile");function aIe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(aIe,"AuthAuditLog");var{RootConfigWatcher:cIe}=(t3(),D(e3))});var oe=M(Ae=>{"use strict";var Oc=require("path"),S3=require("fs-extra"),Yn=Q(),h3=require("fs-extra"),WR=require("os"),lIe=require("net"),uIe=require("recursive-iterator"),Dr=(H(),D(W)),{PACKAGE_ROOT:dIe}=bt(),fIe=XL(),E3=require("papaparse"),zR=require("moment"),{inspect:mIe}=require("util"),_3=require("is-number"),pIe=require("minimist"),hIe=require("https"),EIe=require("http"),_Ie=/^((\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)))$/,T3=require("util").promisify(setTimeout),gIe=100,SIe=5,TIe="",yIe=4,g3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=Rs;Ae.isEmptyOrZeroLength=So;Ae.arrayHasEmptyValues=bIe;Ae.arrayHasEmptyOrZeroLengthValues=IIe;Ae.buildFolderPath=wIe;Ae.isBoolean=y3;Ae.errorizeMessage=RIe;Ae.stripFileExtension=CIe;Ae.autoCast=OIe;Ae.autoCastJSON=R3;Ae.autoCastJSONDeep=DM;Ae.removeDir=PIe;Ae.compareVersions=LIe;Ae.isCompatibleDataVersion=DIe;Ae.escapeRawValue=MIe;Ae.unescapeValue=vIe;Ae.stringifyProps=UIe;Ae.timeoutPromise=BIe;Ae.isClusterOperation=kIe;Ae.getClusterUser=qIe;Ae.checkGlobalSchemaTable=HIe;Ae.getHomeDir=b3;Ae.getPropsFilePath=xIe;Ae.promisifyPapaParse=GIe;Ae.removeBOM=I3;Ae.createEventPromise=$Ie;Ae.checkProcessRunning=VIe;Ae.checkSchemaTableExist=KIe;Ae.checkSchemaExists=w3;Ae.checkTableExists=N3;Ae.getStartOfTomorrowInSeconds=YIe;Ae.getLimitKey=WIe;Ae.isObject=NIe;Ae.isNotEmptyAndHasValue=AIe;Ae.autoCasterIsNumberCheck=A3;Ae.backtickASTSchemaItems=zIe;Ae.isPortTaken=FIe;Ae.createForkArgs=jIe;Ae.autoCastBoolean=QIe;Ae.asyncSetTimeout=T3;Ae.getTableHashAttribute=JIe;Ae.doesSchemaExist=XIe;Ae.doesTableExist=ZIe;Ae.stringifyObj=ewe;Ae.ms_to_time=twe;Ae.changeExtension=rwe;Ae.getEnvCliRootPath=MM;Ae.noBootFile=nwe;Ae.httpRequest=swe;Ae.transformReq=iwe;Ae.convertToMS=owe;Ae.PACKAGE_ROOT=dIe;function RIe(e){return e instanceof Error?e:new Error(e)}o(RIe,"errorizeMessage");function Rs(e){return e==null}o(Rs,"isEmpty");function AIe(e){return!Rs(e)&&(e||e===0||e===""||y3(e))}o(AIe,"isNotEmptyAndHasValue");function So(e){return Rs(e)||e.length===0||e.size===0}o(So,"isEmptyOrZeroLength");function bIe(e){if(Rs(e))return!0;for(let t=0;t<e.length;t++)if(Rs(e[t]))return!0;return!1}o(bIe,"arrayHasEmptyValues");function IIe(e){if(So(e))return!0;for(let t=0;t<e.length;t++)if(So(e[t]))return!0;return!1}o(IIe,"arrayHasEmptyOrZeroLengthValues");function wIe(...e){try{return e.join(Oc.sep)}catch{console.error(e)}}o(wIe,"buildFolderPath");function y3(e){return Rs(e)?!1:e===!0||e===!1}o(y3,"isBoolean");function NIe(e){return Rs(e)?!1:typeof e=="object"}o(NIe,"isObject");function CIe(e){return So(e)?TIe:e.slice(0,-yIe)}o(CIe,"stripFileExtension");function OIe(e){return Rs(e)||e===""||typeof e!="string"?e:g3[e]!==void 0?g3[e]:A3(e)===!0?Number(e):_Ie.test(e)?new Date(e):e}o(OIe,"autoCast");function R3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(R3,"autoCastJSON");function DM(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=DM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=DM(r);n!==r&&(e[t]=n)}return e}else return R3(e)}o(DM,"autoCastJSONDeep");function A3(e){if(e.startsWith("0.")&&_3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&_3(e))}o(A3,"autoCasterIsNumberCheck");async function PIe(e){if(So(e))throw new Error(`Directory path: ${e} does not exist`);try{await h3.emptyDir(e),await h3.remove(e)}catch(t){throw Yn.error(`Error removing files in ${e} -- ${t}`),t}}o(PIe,"removeDir");function LIe(e,t){if(So(e)){Yn.info("Invalid current version sent as parameter.");return}if(So(t)){Yn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(LIe,"compareVersions");function DIe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(DIe,"isCompatibleDataVersion");function MIe(e){if(Rs(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(MIe,"escapeRawValue");function vIe(e){if(Rs(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(vIe,"unescapeValue");function UIe(e,t){if(Rs(e))return Yn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+WR.EOL}!So(n)&&n[0]===";"?r+=" "+n+s+WR.EOL:So(n)||(r+=n+"="+s+WR.EOL)}catch{Yn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(UIe,"stringifyProps");function b3(){let e;try{e=WR.homedir()}catch{e=process.env.HOME}return e}o(b3,"getHomeDir");function xIe(){let e=Oc.join(b3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return S3.existsSync(e)||(e=Oc.join(__dirname,"../","hdb_boot_properties.file")),e}o(xIe,"getPropsFilePath");function BIe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(BIe,"timeoutPromise");async function FIe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=lIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(FIe,"isPortTaken");function kIe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Yn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(kIe,"isClusterOperation");function HIe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return jR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return jR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(HIe,"checkGlobalSchemaTable");function qIe(e,t){if(Rs(t)){Yn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Rs(e)||So(e)){Yn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Yn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Yn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(qIe,"getClusterUser");function GIe(){E3.parsePromise=function(e,t,r){return new Promise(function(n,s){E3.parse(e,{header:!0,transformHeader:I3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(GIe,"promisifyPapaParse");function I3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(I3,"removeBOM");function $Ie(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Yn.info(`Got cluster status event response: ${mIe(s)}`);try{i.cancel()}catch{Yn.error("Error trying to cancel timeout.")}n(s)})})}o($Ie,"createEventPromise");async function VIe(e){let t=!0,r=0;do await T3(gIe*r++),(await fIe.findPs(e)).length>0&&(t=!1);while(t&&r<SIe);if(t)throw new Error(`process ${e} was not started`)}o(VIe,"checkProcessRunning");function KIe(e,t){let r=w3(e);if(r)return r;let n=N3(e,t);if(n)return n}o(KIe,"checkSchemaTableExist");function w3(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return jR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(w3,"checkSchemaExists");function N3(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return jR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(N3,"checkTableExists");function YIe(){let e=zR().utc().add(1,"d").startOf("d").unix(),t=zR().utc().unix();return e-t}o(YIe,"getStartOfTomorrowInSeconds");function WIe(){return zR().utc().format("DD-MM-YYYY")}o(WIe,"getLimitKey");function zIe(e){try{let t=new uIe(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){Yn.error("Got an error back ticking items."),Yn.error(t)}}o(zIe,"backtickASTSchemaItems");function jIe(e){return[e]}o(jIe,"createForkArgs");function QIe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(QIe,"autoCastBoolean");function JIe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(JIe,"getTableHashAttribute");function XIe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}o(XIe,"doesSchemaExist");function ZIe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}o(ZIe,"doesTableExist");function ewe(e){try{return JSON.stringify(e)}catch{return e}}o(ewe,"stringifyObj");function twe(e){let t=zR.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(twe,"ms_to_time");function rwe(e,t){let r=Oc.basename(e,Oc.extname(e));return Oc.join(Oc.dirname(e),r+t)}o(rwe,"changeExtension");function MM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=pIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(MM,"getEnvCliRootPath");var LM;function nwe(){if(LM)return LM;let e=MM();if(MM()&&S3.pathExistsSync(Oc.join(e,Dr.HDB_CONFIG_FILE)))return LM=!0,!0}o(nwe,"noBootFile");function swe(e,t){let r;return e.protocol==="http:"?r=EIe:r=hIe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(swe,"httpRequest");function iwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(iwe,"transformReq");function owe(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}o(owe,"convertToMS");var jR=Kr()});var M3=M((Jqe,D3)=>{"use strict";var As=ue(),Qe=(H(),D(W)),BE=wt(),ga=require("path"),{PACKAGE_ROOT:JR}=bt(),C3=ue(),QR=oe(),Hf="/dev/null",awe=ga.join(JR,"launchServiceScripts"),O3=ga.join(JR,"utility/scripts"),cwe=ga.join(O3,Qe.HDB_RESTART_SCRIPT),P3=ga.resolve(JR,"dependencies",`${process.platform}-${process.arch}`,BE.NATS_BINARY_NAME);function L3(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return QR.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=QR.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:JR}}o(L3,"generateMainServerConfig");var lwe=9930;function uwe(){As.initSync(!0);let e=As.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ga.join(e,"clustering",BE.NATS_CONFIG_FILES.HUB_SERVER),r=ga.join(As.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=C3.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=BE.LOG_LEVEL_FLAGS[As.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==lwe?"-"+n:""),script:P3,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hf,i.error_file=Hf),i}o(uwe,"generateNatsHubServerConfig");var dwe=9940;function fwe(){As.initSync(!0);let e=As.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ga.join(e,"clustering",BE.NATS_CONFIG_FILES.LEAF_SERVER),r=ga.join(As.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=C3.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=BE.LOG_LEVEL_FLAGS[As.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==dwe?"-"+n:""),script:P3,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hf,i.error_file=Hf),i}o(fwe,"generateNatsLeafServerConfig");function mwe(){As.initSync();let e=ga.join(As.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:awe,autorestart:!1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Hf,t.error_file=Hf),t}o(mwe,"generateClusteringUpgradeV4ServiceConfig");function pwe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return QR.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=QR.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:O3},script:cwe}}o(pwe,"generateRestart");function hwe(){return{apps:[L3()]}}o(hwe,"generateAllServiceConfigs");D3.exports={generateAllServiceConfigs:hwe,generateMainServerConfig:L3,generateRestart:pwe,generateNatsHubServerConfig:uwe,generateNatsLeafServerConfig:fwe,generateClusteringUpgradeV4ServiceConfig:mwe}});var af=M((eGe,W3)=>{"use strict";var dt=(H(),D(W)),Ewe=oe(),Ta=CT(),XR=mr(),Sa=wt(),Pc=M3(),ZR=ue(),Eu=Q(),_we=Xo(),{startWorker:v3,onMessageFromWorkers:gwe}=nt(),Swe=jd(),Zqe=require("util"),Twe=require("child_process"),ywe=require("fs"),{execFile:Rwe}=Twe,tt;W3.exports={enterPM2Mode:Awe,start:Lc,stop:vM,reload:x3,restart:B3,list:UM,describe:H3,connect:ya,kill:Cwe,startAllServices:Owe,startService:xM,getUniqueServicesList:q3,restartAllServices:Pwe,isServiceRegistered:G3,reloadStopStart:$3,restartHdb:k3,deleteProcess:wwe,startClusteringProcesses:K3,startClusteringThreads:Y3,isHdbRestartRunning:Nwe,isClusteringRunning:Dwe,stopClustering:Lwe,reloadClustering:Mwe,expectedRestartOfChildren:F3};var FE=!1;gwe(e=>{e.type==="restart"&&ZR.initSync(!0)});function Awe(){FE=!0}o(Awe,"enterPM2Mode");function ya(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(ya,"connect");var bn,bwe=10,U3;function Lc(e,t=!1){if(FE)return Iwe(e);let r=Rwe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=bn.indexOf(r);a>-1&&bn.splice(a,1),!U3&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<bwe&&(ywe.existsSync(Ta.getHubConfigPath())?Lc(e):(await Ta.generateNatsConfig(!0),Lc(e),await new Promise(c=>setTimeout(c,3e3)),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=ZR.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&Sa.LOG_LEVEL_HIERARCHY[a]>=Sa.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===Sa.LOG_LEVELS.ERR||d===Sa.LOG_LEVELS.WRN?Eu.OUTPUTS.STDERR:Eu.OUTPUTS.STDOUT;Eu.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=Sa.LOG_LEVELS[m]}if(Sa.LOG_LEVEL_HIERARCHY[a]>=Sa.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===Sa.LOG_LEVELS.ERR||d===Sa.LOG_LEVELS.WRN?Eu.OUTPUTS.STDERR:Eu.OUTPUTS.STDOUT;Eu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!bn&&(bn=[],!t)){let i=o(()=>{U3=!0,bn&&(bn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}bn.push(r)}o(Lc,"start");function Iwe(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Iwe,"startWithPM2");function vM(e){if(!FE){for(let t of bn||[])t.name===e&&(bn.splice(bn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(vM,"stop");function x3(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(x3,"reload");function B3(e){if(!FE){F3();for(let t of bn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(B3,"restart");function F3(){for(let e of bn||[])e.config&&(e.config.restarts=0)}o(F3,"expectedRestartOfChildren");function wwe(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(wwe,"deleteProcess");async function k3(){await Lc(Pc.generateRestart())}o(k3,"restartHdb");async function Nwe(){let e=await UM();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Nwe,"isHdbRestartRunning");function UM(){return new Promise(async(e,t)=>{try{await ya()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(UM,"list");function H3(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(H3,"describe");function Cwe(){if(!FE){for(let e of bn||[])e.kill();bn=[];return}return new Promise(async(e,t)=>{try{await ya()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(Cwe,"kill");async function Owe(){try{await K3(),await Y3(),await Lc(Pc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(Owe,"startAllServices");async function xM(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Lc(r,t),await Ta.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Lc(r,t),await Ta.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Lc(r)}catch(r){throw tt?.disconnect(),r}}o(xM,"startService");async function q3(){try{let e=await UM(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw tt?.disconnect(),e}}o(q3,"getUniqueServicesList");async function Pwe(e=[]){try{let t=!1,r=await q3();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await B3(a))}t&&await $3(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(Pwe,"restartAllServices");async function G3(e){if(bn?.find(r=>r.name===e))return!0;let t=await Swe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(G3,"isServiceRegistered");async function $3(e){let t=ZR.get(dt.CONFIG_PARAMS.THREADS_COUNT)??ZR.get(dt.CONFIG_PARAMS.THREADS),r=await H3(e),n=Ewe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await vM(e),await xM(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await k3():await x3(e)}o($3,"reloadStopStart");var V3;async function K3(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await xM(r,e)}}o(K3,"startClusteringProcesses");async function Y3(){V3=v3(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await XR.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await XR.updateLocalStreams();let e=await _we.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){Eu.info("Starting clustering upgrade 4.0.0 process"),v3(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(Y3,"startClusteringThreads");async function Lwe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await V3.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await vM(t)}}o(Lwe,"stopClustering");async function Dwe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await G3(t)===!1)return!1}return!0}o(Dwe,"isClusteringRunning");async function Mwe(){await Ta.generateNatsConfig(!0),await XR.reloadNATSHub(),await XR.reloadNATSLeaf(),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Mwe,"reloadClustering")});var BM=af(),z3=(H(),D(W));o((async function(){try{let t=await BM.describe(z3.PROCESS_DESCRIPTORS.HDB);for(let r of t)await BM.reload(r.pm_id);await BM.deleteProcess(z3.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}}),"restartHdb")();
137
+ `}`;c?(c.length<l3?c.push(E):c.length===l3&&c.push(`Maximum log buffer rate reached, logs will be throttled
138
+ `),kf&&(clearTimeout(a),f())):kf||l<performance.now()+u3?f(E):(l=Math.min(l,performance.now()+u3),c=[E],a=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Ea.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{Ea.closeSync(s)}catch{}s=null,r&&(qR=null)}function p(h){if(!s){try{s=Ea.openSync(e,"a"),r&&(qR=s)}catch(E){if(E.code==="ENOENT"&&!h)return Ea.mkdirpSync(vE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},jbe).unref()}}}o(d3,"getFileLogger");function eIe(...e){Lt.info(...e)}o(eIe,"info");function tIe(...e){Lt.trace(...e)}o(tIe,"trace");function DM(...e){Lt.error(...e)}o(DM,"error");function rIe(...e){Lt.debug(...e)}o(rIe,"debug");function nIe(...e){Lt.notify(...e)}o(nIe,"notify");function sIe(...e){Lt.fatal(...e)}o(sIe,"fatal");function iIe(...e){Lt.warn(...e)}o(iIe,"warn");function oIe(e,t,r,...n){LM=r.service_name;try{Lt[e](...n)}finally{LM=void 0}}o(oIe,"logCustomLevel");function aIe(){let e;try{e=Vbe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=_a(e,$r.HDB_HOME_DIR_NAME,$r.BOOT_PROPS_FILE_NAME);return Ea.existsSync(t)||(t=_a(MM,"utility/hdb_boot_properties.file")),t}o(aIe,"getPropsFilePath");function cIe(e){try{if(e.includes("config/settings.js")){let l=p3(e);return{level:l.get($r.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:vE.dirname(l.get($r.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get($r.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=m3.parseDocument(Ea.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===$r.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(cIe,"getLogConfig");function lIe(){try{let e=m3.parseDocument(Ea.readFileSync(zbe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(lIe,"getDefaultConfig");function uIe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(uIe,"errorToString");function dIe(e){Lt=e}o(dIe,"setMainLogger");function g3(){try{Ea.closeSync(qR)}catch{}qR=null}o(g3,"closeLogFile");function fIe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(fIe,"AuthAuditLog");var{RootConfigWatcher:mIe}=(i3(),D(s3))});var oe=M(Ae=>{"use strict";var Oc=require("path"),A3=require("fs-extra"),Yn=Q(),S3=require("fs-extra"),WR=require("os"),pIe=require("net"),hIe=require("recursive-iterator"),Dr=(H(),D(W)),{PACKAGE_ROOT:EIe}=Tt(),_Ie=tD(),T3=require("papaparse"),zR=require("moment"),{inspect:gIe}=require("util"),y3=require("is-number"),SIe=require("minimist"),TIe=require("https"),yIe=require("http"),RIe=/^((\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)))$/,b3=require("util").promisify(setTimeout),AIe=100,bIe=5,IIe="",wIe=4,R3={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=Rs;Ae.isEmptyOrZeroLength=So;Ae.arrayHasEmptyValues=OIe;Ae.arrayHasEmptyOrZeroLengthValues=PIe;Ae.buildFolderPath=LIe;Ae.isBoolean=I3;Ae.errorizeMessage=NIe;Ae.stripFileExtension=MIe;Ae.autoCast=vIe;Ae.autoCastJSON=w3;Ae.autoCastJSONDeep=UM;Ae.removeDir=UIe;Ae.compareVersions=xIe;Ae.isCompatibleDataVersion=BIe;Ae.escapeRawValue=FIe;Ae.unescapeValue=kIe;Ae.stringifyProps=HIe;Ae.timeoutPromise=qIe;Ae.isClusterOperation=VIe;Ae.getClusterUser=YIe;Ae.checkGlobalSchemaTable=KIe;Ae.getHomeDir=C3;Ae.getPropsFilePath=GIe;Ae.promisifyPapaParse=WIe;Ae.removeBOM=O3;Ae.createEventPromise=zIe;Ae.checkProcessRunning=jIe;Ae.checkSchemaTableExist=QIe;Ae.checkSchemaExists=P3;Ae.checkTableExists=L3;Ae.getStartOfTomorrowInSeconds=JIe;Ae.getLimitKey=XIe;Ae.isObject=DIe;Ae.isNotEmptyAndHasValue=CIe;Ae.autoCasterIsNumberCheck=N3;Ae.backtickASTSchemaItems=ZIe;Ae.isPortTaken=$Ie;Ae.createForkArgs=ewe;Ae.autoCastBoolean=twe;Ae.asyncSetTimeout=b3;Ae.getTableHashAttribute=rwe;Ae.doesSchemaExist=nwe;Ae.doesTableExist=swe;Ae.stringifyObj=iwe;Ae.ms_to_time=owe;Ae.changeExtension=awe;Ae.getEnvCliRootPath=xM;Ae.noBootFile=cwe;Ae.httpRequest=lwe;Ae.transformReq=uwe;Ae.convertToMS=dwe;Ae.PACKAGE_ROOT=EIe;function NIe(e){return e instanceof Error?e:new Error(e)}o(NIe,"errorizeMessage");function Rs(e){return e==null}o(Rs,"isEmpty");function CIe(e){return!Rs(e)&&(e||e===0||e===""||I3(e))}o(CIe,"isNotEmptyAndHasValue");function So(e){return Rs(e)||e.length===0||e.size===0}o(So,"isEmptyOrZeroLength");function OIe(e){if(Rs(e))return!0;for(let t=0;t<e.length;t++)if(Rs(e[t]))return!0;return!1}o(OIe,"arrayHasEmptyValues");function PIe(e){if(So(e))return!0;for(let t=0;t<e.length;t++)if(So(e[t]))return!0;return!1}o(PIe,"arrayHasEmptyOrZeroLengthValues");function LIe(...e){try{return e.join(Oc.sep)}catch{console.error(e)}}o(LIe,"buildFolderPath");function I3(e){return Rs(e)?!1:e===!0||e===!1}o(I3,"isBoolean");function DIe(e){return Rs(e)?!1:typeof e=="object"}o(DIe,"isObject");function MIe(e){return So(e)?IIe:e.slice(0,-wIe)}o(MIe,"stripFileExtension");function vIe(e){return Rs(e)||e===""||typeof e!="string"?e:R3[e]!==void 0?R3[e]:N3(e)===!0?Number(e):RIe.test(e)?new Date(e):e}o(vIe,"autoCast");function w3(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(w3,"autoCastJSON");function UM(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=UM(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=UM(r);n!==r&&(e[t]=n)}return e}else return w3(e)}o(UM,"autoCastJSONDeep");function N3(e){if(e.startsWith("0.")&&y3(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&y3(e))}o(N3,"autoCasterIsNumberCheck");async function UIe(e){if(So(e))throw new Error(`Directory path: ${e} does not exist`);try{await S3.emptyDir(e),await S3.remove(e)}catch(t){throw Yn.error(`Error removing files in ${e} -- ${t}`),t}}o(UIe,"removeDir");function xIe(e,t){if(So(e)){Yn.info("Invalid current version sent as parameter.");return}if(So(t)){Yn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(xIe,"compareVersions");function BIe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(BIe,"isCompatibleDataVersion");function FIe(e){if(Rs(e))return e;let t=String(e);return t==="."?Dr.UNICODE_PERIOD:t===".."?Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD:t.replace(Dr.FORWARD_SLASH_REGEX,Dr.UNICODE_FORWARD_SLASH)}o(FIe,"escapeRawValue");function kIe(e){if(Rs(e))return e;let t=String(e);return t===Dr.UNICODE_PERIOD?".":t===Dr.UNICODE_PERIOD+Dr.UNICODE_PERIOD?"..":String(e).replace(Dr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(kIe,"unescapeValue");function HIe(e,t){if(Rs(e))return Yn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+WR.EOL}!So(n)&&n[0]===";"?r+=" "+n+s+WR.EOL:So(n)||(r+=n+"="+s+WR.EOL)}catch{Yn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(HIe,"stringifyProps");function C3(){let e;try{e=WR.homedir()}catch{e=process.env.HOME}return e}o(C3,"getHomeDir");function GIe(){let e=Oc.join(C3(),Dr.HDB_HOME_DIR_NAME,Dr.BOOT_PROPS_FILE_NAME);return A3.existsSync(e)||(e=Oc.join(__dirname,"../","hdb_boot_properties.file")),e}o(GIe,"getPropsFilePath");function qIe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(qIe,"timeoutPromise");async function $Ie(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=pIe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o($Ie,"isPortTaken");function VIe(e){try{return Dr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Yn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(VIe,"isClusterOperation");function KIe(e,t){let r=(Oe(),D(mt)).getDatabases();if(!r[e])return jR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return jR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(KIe,"checkGlobalSchemaTable");function YIe(e,t){if(Rs(t)){Yn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Rs(e)||So(e)){Yn.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){Yn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Yn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(YIe,"getClusterUser");function WIe(){T3.parsePromise=function(e,t,r){return new Promise(function(n,s){T3.parse(e,{header:!0,transformHeader:O3,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(WIe,"promisifyPapaParse");function O3(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(O3,"removeBOM");function zIe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Yn.info(`Got cluster status event response: ${gIe(s)}`);try{i.cancel()}catch{Yn.error("Error trying to cancel timeout.")}n(s)})})}o(zIe,"createEventPromise");async function jIe(e){let t=!0,r=0;do await b3(AIe*r++),(await _Ie.findPs(e)).length>0&&(t=!1);while(t&&r<bIe);if(t)throw new Error(`process ${e} was not started`)}o(jIe,"checkProcessRunning");function QIe(e,t){let r=P3(e);if(r)return r;let n=L3(e,t);if(n)return n}o(QIe,"checkSchemaTableExist");function P3(e){let{getDatabases:t}=(Oe(),D(mt));if(!t()[e])return jR.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(P3,"checkSchemaExists");function L3(e,t){let{getDatabases:r}=(Oe(),D(mt));if(!r()[e][t])return jR.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(L3,"checkTableExists");function JIe(){let e=zR().utc().add(1,"d").startOf("d").unix(),t=zR().utc().unix();return e-t}o(JIe,"getStartOfTomorrowInSeconds");function XIe(){return zR().utc().format("DD-MM-YYYY")}o(XIe,"getLimitKey");function ZIe(e){try{let t=new hIe(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){Yn.error("Got an error back ticking items."),Yn.error(t)}}o(ZIe,"backtickASTSchemaItems");function ewe(e){return[e]}o(ewe,"createForkArgs");function twe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(twe,"autoCastBoolean");function rwe(e,t){let{getDatabases:r}=(Oe(),D(mt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(rwe,"getTableHashAttribute");function nwe(e){let{getDatabases:t}=(Oe(),D(mt));return t()[e]!==void 0}o(nwe,"doesSchemaExist");function swe(e,t){let{getDatabases:r}=(Oe(),D(mt));return r()[e]?.[t]!==void 0}o(swe,"doesTableExist");function iwe(e){try{return JSON.stringify(e)}catch{return e}}o(iwe,"stringifyObj");function owe(e){let t=zR.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(owe,"ms_to_time");function awe(e,t){let r=Oc.basename(e,Oc.extname(e));return Oc.join(Oc.dirname(e),r+t)}o(awe,"changeExtension");function xM(){if(process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SIe(process.argv);if(e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Dr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(xM,"getEnvCliRootPath");var vM;function cwe(){if(vM)return vM;let e=xM();if(xM()&&A3.pathExistsSync(Oc.join(e,Dr.HDB_CONFIG_FILE)))return vM=!0,!0}o(cwe,"noBootFile");function lwe(e,t){let r;return e.protocol==="http:"?r=yIe:r=TIe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(lwe,"httpRequest");function uwe(e){if(!e.schema&&!e.database){e.schema=Dr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(uwe,"transformReq");function dwe(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}o(dwe,"convertToMS");var jR=Kr()});var B3=M((nqe,x3)=>{"use strict";var As=ue(),Qe=(H(),D(W)),BE=wt(),ga=require("path"),{PACKAGE_ROOT:JR}=Tt(),D3=ue(),QR=oe(),Hf="/dev/null",fwe=ga.join(JR,"launchServiceScripts"),M3=ga.join(JR,"utility/scripts"),mwe=ga.join(M3,Qe.HDB_RESTART_SCRIPT),v3=ga.resolve(JR,"dependencies",`${process.platform}-${process.arch}`,BE.NATS_BINARY_NAME);function U3(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return QR.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=QR.getEnvCliRootPath()),{name:Qe.PROCESS_DESCRIPTORS.HDB,script:Qe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,cwd:JR}}o(U3,"generateMainServerConfig");var pwe=9930;function hwe(){As.initSync(!0);let e=As.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ga.join(e,"clustering",BE.NATS_CONFIG_FILES.HUB_SERVER),r=ga.join(As.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=D3.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=BE.LOG_LEVEL_FLAGS[As.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==pwe?"-"+n:""),script:v3,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hf,i.error_file=Hf),i}o(hwe,"generateNatsHubServerConfig");var Ewe=9940;function _we(){As.initSync(!0);let e=As.get(Qe.CONFIG_PARAMS.ROOTPATH),t=ga.join(e,"clustering",BE.NATS_CONFIG_FILES.LEAF_SERVER),r=ga.join(As.get(Qe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Qe.LOG_NAMES.HDB),n=D3.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=BE.LOG_LEVEL_FLAGS[As.get(Qe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Ewe?"-"+n:""),script:v3,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Hf,i.error_file=Hf),i}o(_we,"generateNatsLeafServerConfig");function gwe(){As.initSync();let e=ga.join(As.get(Qe.CONFIG_PARAMS.LOGGING_ROOT),Qe.LOG_NAMES.HDB),t={name:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Qe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:fwe,autorestart:!1};return As.get(Qe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Hf,t.error_file=Hf),t}o(gwe,"generateClusteringUpgradeV4ServiceConfig");function Swe(){let e={[Qe.PROCESS_NAME_ENV_PROP]:Qe.PROCESS_DESCRIPTORS.RESTART_HDB};return QR.noBootFile()&&(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=QR.getEnvCliRootPath()),{...{name:Qe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:M3},script:mwe}}o(Swe,"generateRestart");function Twe(){return{apps:[U3()]}}o(Twe,"generateAllServiceConfigs");x3.exports={generateAllServiceConfigs:Twe,generateMainServerConfig:U3,generateRestart:Swe,generateNatsHubServerConfig:hwe,generateNatsLeafServerConfig:_we,generateClusteringUpgradeV4ServiceConfig:gwe}});var af=M((oqe,J3)=>{"use strict";var dt=(H(),D(W)),ywe=oe(),Ta=CT(),XR=mr(),Sa=wt(),Pc=B3(),ZR=ue(),Eu=Q(),Rwe=Xo(),{startWorker:F3,onMessageFromWorkers:Awe}=nt(),bwe=jd(),iqe=require("util"),Iwe=require("child_process"),wwe=require("fs"),{execFile:Nwe}=Iwe,tt;J3.exports={enterPM2Mode:Cwe,start:Lc,stop:BM,reload:H3,restart:G3,list:FM,describe:V3,connect:ya,kill:Mwe,startAllServices:vwe,startService:kM,getUniqueServicesList:K3,restartAllServices:Uwe,isServiceRegistered:Y3,reloadStopStart:W3,restartHdb:$3,deleteProcess:Lwe,startClusteringProcesses:j3,startClusteringThreads:Q3,isHdbRestartRunning:Dwe,isClusteringRunning:Bwe,stopClustering:xwe,reloadClustering:Fwe,expectedRestartOfChildren:q3};var FE=!1;Awe(e=>{e.type==="restart"&&ZR.initSync(!0)});function Cwe(){FE=!0}o(Cwe,"enterPM2Mode");function ya(){return tt||(tt=require("pm2")),new Promise((e,t)=>{tt.connect((r,n)=>{r&&t(r),e(n)})})}o(ya,"connect");var bn,Owe=10,k3;function Lc(e,t=!1){if(FE)return Pwe(e);let r=Nwe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=bn.indexOf(r);a>-1&&bn.splice(a,1),!k3&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Owe&&(wwe.existsSync(Ta.getHubConfigPath())?Lc(e):(await Ta.generateNatsConfig(!0),Lc(e),await new Promise(c=>setTimeout(c,3e3)),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=ZR.get(dt.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&Sa.LOG_LEVEL_HIERARCHY[a]>=Sa.LOG_LEVEL_HIERARCHY[d||"info"]){let p=d===Sa.LOG_LEVELS.ERR||d===Sa.LOG_LEVELS.WRN?Eu.OUTPUTS.STDERR:Eu.OUTPUTS.STDOUT;Eu.logCustomLevel(d||"info",p,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=Sa.LOG_LEVELS[m]}if(Sa.LOG_LEVEL_HIERARCHY[a]>=Sa.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===Sa.LOG_LEVELS.ERR||d===Sa.LOG_LEVELS.WRN?Eu.OUTPUTS.STDERR:Eu.OUTPUTS.STDOUT;Eu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!bn&&(bn=[],!t)){let i=o(()=>{k3=!0,bn&&(bn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}bn.push(r)}o(Lc,"start");function Pwe(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.start(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Pwe,"startWithPM2");function BM(e){if(!FE){for(let t of bn||[])t.name===e&&(bn.splice(bn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.stop(e,async(n,s)=>{n&&(tt.disconnect(),r(n)),tt.delete(e,(i,a)=>{i&&(tt.disconnect(),r(n)),tt.disconnect(),t(a)})})})}o(BM,"stop");function H3(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.reload(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(H3,"reload");function G3(e){if(!FE){q3();for(let t of bn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.restart(e,(n,s)=>{tt.disconnect(),t(s)})})}o(G3,"restart");function q3(){for(let e of bn||[])e.config&&(e.config.restarts=0)}o(q3,"expectedRestartOfChildren");function Lwe(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.delete(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(Lwe,"deleteProcess");async function $3(){await Lc(Pc.generateRestart())}o($3,"restartHdb");async function Dwe(){let e=await FM();for(let t in e)if(e[t].name===dt.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Dwe,"isHdbRestartRunning");function FM(){return new Promise(async(e,t)=>{try{await ya()}catch(r){t(r)}tt.list((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(FM,"list");function V3(e){return new Promise(async(t,r)=>{try{await ya()}catch(n){r(n)}tt.describe(e,(n,s)=>{n&&(tt.disconnect(),r(n)),tt.disconnect(),t(s)})})}o(V3,"describe");function Mwe(){if(!FE){for(let e of bn||[])e.kill();bn=[];return}return new Promise(async(e,t)=>{try{await ya()}catch(r){t(r)}tt.killDaemon((r,n)=>{r&&(tt.disconnect(),t(r)),tt.disconnect(),e(n)})})}o(Mwe,"kill");async function vwe(){try{await j3(),await Q3(),await Lc(Pc.generateAllServiceConfigs())}catch(e){throw tt?.disconnect(),e}}o(vwe,"startAllServices");async function kM(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case dt.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Pc.generateMainServerConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Pc.generateNatsIngestServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Pc.generateNatsReplyServiceConfig();break;case dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Pc.generateNatsHubServerConfig(),await Lc(r,t),await Ta.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Pc.generateNatsLeafServerConfig(),await Lc(r,t),await Ta.removeNatsConfig(e);return;case dt.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Pc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Lc(r)}catch(r){throw tt?.disconnect(),r}}o(kM,"startService");async function K3(){try{let e=await FM(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw tt?.disconnect(),e}}o(K3,"getUniqueServicesList");async function Uwe(e=[]){try{let t=!1,r=await K3();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===dt.PROCESS_DESCRIPTORS.HDB?t=!0:await G3(a))}t&&await W3(dt.PROCESS_DESCRIPTORS.HDB)}catch(t){throw tt?.disconnect(),t}}o(Uwe,"restartAllServices");async function Y3(e){if(bn?.find(r=>r.name===e))return!0;let t=await bwe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(Y3,"isServiceRegistered");async function W3(e){let t=ZR.get(dt.CONFIG_PARAMS.THREADS_COUNT)??ZR.get(dt.CONFIG_PARAMS.THREADS),r=await V3(e),n=ywe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await BM(e),await kM(e)):e===dt.PROCESS_DESCRIPTORS.HDB?await $3():await H3(e)}o(W3,"reloadStopStart");var z3;async function j3(e=!1){for(let t in dt.CLUSTERING_PROCESSES){let r=dt.CLUSTERING_PROCESSES[t];await kM(r,e)}}o(j3,"startClusteringProcesses");async function Q3(){z3=F3(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:dt.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await XR.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await XR.updateLocalStreams();let e=await Rwe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===dt.PRE_4_0_0_VERSION){Eu.info("Starting clustering upgrade 4.0.0 process"),F3(dt.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(Q3,"startClusteringThreads");async function xwe(){for(let e in dt.CLUSTERING_PROCESSES)if(e!==dt.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===dt.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await z3.terminate();else{let t=dt.CLUSTERING_PROCESSES[e];await BM(t)}}o(xwe,"stopClustering");async function Bwe(){for(let e in dt.CLUSTERING_PROCESSES){let t=dt.CLUSTERING_PROCESSES[e];if(await Y3(t)===!1)return!1}return!0}o(Bwe,"isClusteringRunning");async function Fwe(){await Ta.generateNatsConfig(!0),await XR.reloadNATSHub(),await XR.reloadNATSLeaf(),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ta.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Fwe,"reloadClustering")});var HM=af(),X3=(H(),D(W));o((async function(){try{let t=await HM.describe(X3.PROCESS_DESCRIPTORS.HDB);for(let r of t)await HM.reload(r.pm_id);await HM.deleteProcess(X3.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}}),"restartHdb")();